diff options
Diffstat (limited to 'lib/powerdnsex/managers/records_manager.ex')
-rw-r--r-- | lib/powerdnsex/managers/records_manager.ex | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/lib/powerdnsex/managers/records_manager.ex b/lib/powerdnsex/managers/records_manager.ex index c7c586d..1e85ebe 100644 --- a/lib/powerdnsex/managers/records_manager.ex +++ b/lib/powerdnsex/managers/records_manager.ex @@ -8,8 +8,8 @@ defmodule PowerDNSex.Managers.RecordsManager do def create(%Zone{} = zone, %{} = rrset_attrs) do - rrset_attrs = Map.merge(rrset_attrs, %{"changetype" => "REPLACE"}) - IO.puts "RRSet create: #{inspect rrset_attrs}" + changetype = %{changetype_key(rrset_attrs) => "REPLACE"} + rrset_attrs = Map.merge(rrset_attrs, changetype) patch(zone, rrset_attrs) end @@ -21,12 +21,14 @@ defmodule PowerDNSex.Managers.RecordsManager do end def update(%Zone{} = zone, %{} = rrset_attrs) do - rrset_attrs = Map.merge(rrset_attrs, %{"changetype" => "REPLACE"}) + changetype = %{changetype_key(rrset_attrs) => "REPLACE"} + rrset_attrs = Map.merge(rrset_attrs, changetype) patch(zone, rrset_attrs) end def delete(%Zone{} = zone, %{} = rrset_attrs) do - rrset_attrs = Map.merge(rrset_attrs, %{"changetype" => "DELETE"}) + changetype = %{changetype_key(rrset_attrs) => "DELETE"} + rrset_attrs = Map.merge(rrset_attrs, changetype) patch(zone, rrset_attrs) end @@ -34,6 +36,11 @@ defmodule PowerDNSex.Managers.RecordsManager do # Private ## + defp changetype_key(attrs) do + key = "changetype" + if Map.has_key?(attrs, key), do: key, else: String.to_atom(key) + end + defp process_request_response(%Response{body: body, status_code: status}) do case status do s when s == 204 -> :ok @@ -50,17 +57,16 @@ defmodule PowerDNSex.Managers.RecordsManager do raise "[Records Manager] Zone URL attribute is empty!" end - defp patch(%Zone{} = zone, %{} = rrset_attrs) do - IO.puts "Patch rrset_attrs: #{inspect rrset_attrs}" - rrset_struct = RRSet.build(rrset_attrs) - IO.puts "[Patch] Struct: #{inspect rrset_struct}" - IO.puts "[Patch] Body: #{inspect RRSet.as_body(rrset_struct)}" - + defp patch(%Zone{} = zone, %RRSet{} = rrset) do zone.url - |> HttpClient.patch!(RRSet.as_body(RRSet.build(rrset_attrs))) + |> HttpClient.patch!(RRSet.as_body(rrset)) |> process_request_response end + defp patch(%Zone{} = zone, %{} = rrset_attrs) do + patch(zone, RRSet.build(rrset_attrs)) + end + defp has_attrs?(rrset, attrs) do Map.keys(attrs) |> Enum.all?(&(equal_attr?(&1, attrs[&1], rrsets))) |