in libcloud/dns/drivers/rcodezero.py [0:0]
def _to_patchrequest(self, zone, record, name, type, data, extra, action):
rrset = {}
cur_records = self.list_records(
Zone(id=zone, domain=None, type=None, ttl=None, driver=self)
)
if name != "":
rrset["name"] = name + "." + zone + "."
else:
rrset["name"] = zone + "."
rrset["type"] = type
rrset["changetype"] = action
rrset["records"] = []
if not (extra is None or extra.get("ttl", None) is None):
rrset["ttl"] = extra["ttl"]
content = {}
if not action == "delete":
content["content"] = data
if not (extra is None or extra.get("disabled", None) is None):
content["disabled"] = extra["disabled"]
rrset["records"].append(content)
id = hashlib.md5(str(name + " " + data).encode("utf-8")).hexdigest() # nosec
# check if rrset contains more than one record. if yes we need to create an
# update request
for r in cur_records:
if action == "update" and r.id == record.id:
# do not include records which should be updated in the update
# request
continue
if name == r.name and r.id != id:
# we have other records with the same name so make an update
# request
rrset["changetype"] = "update"
content = {}
content["content"] = r.data
if not (r.extra is None or r.extra.get("disabled", None) is None):
content["disabled"] = r.extra["disabled"]
rrset["records"].append(content)
request = list()
request.append(rrset)
return request