diff options
Diffstat (limited to 'lib/powerdnsex/managers/records_manager.ex')
-rw-r--r-- | lib/powerdnsex/managers/records_manager.ex | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/lib/powerdnsex/managers/records_manager.ex b/lib/powerdnsex/managers/records_manager.ex index a0ec317..e59a153 100644 --- a/lib/powerdnsex/managers/records_manager.ex +++ b/lib/powerdnsex/managers/records_manager.ex @@ -19,9 +19,18 @@ defmodule PowerDNSex.Managers.RecordsManager do end end - def update(%Zone{} = zone, %{} = rrset_attrs) do - rrset_attrs = Map.merge(rrset_attrs, %{changetype: "REPLACE"}) - patch(zone, rrset_attrs) + def update(%Zone{} = zone, %{name: rrset_name, type: rrset_type} = rrset_attrs) do + rrset_find_params = %{name: "#{rrset_name}.#{zone.name}", type: rrset_type} + rrset = RRSet.find(zone.rrsets, rrset_find_params) + + if rrset do + updated_rrset = RRSet.update(rrset, rrset_attrs) + updated_rrset = Map.merge(updated_rrset, %{changetype: "REPLACE"}) + patch(zone, updated_rrset) + else + error_msg = "Record #{rrset_name}, type #{rrset_type}, not found!" + {:error, %Error{error: error_msg, http_status_code: 404}} + end end def delete(%Zone{} = zone, %{} = rrset_attrs) do |