add @ support and make cname records absolute

This commit is contained in:
Ivan Schaller 2023-11-10 16:32:07 +01:00
parent d4c095540f
commit 9d79906f96
1 changed files with 15 additions and 11 deletions

View File

@ -121,24 +121,28 @@ class NetBoxDNSSource(octodns.provider.base.BaseProvider):
nb_records = self._api.plugins.netbox_dns.records.filter(zone_id=nb_zone.id) nb_records = self._api.plugins.netbox_dns.records.filter(zone_id=nb_zone.id)
for nb_record in nb_records: for nb_record in nb_records:
self.log.debug(f"{nb_record.name!r} {nb_record.type!r} {nb_record.value!r}") self.log.debug(f"{nb_record.name!r} {nb_record.type!r} {nb_record.value!r}")
name = nb_record.name
if name == "@":
name = ""
nb_zone_default_ttl = nb_zone.default_ttl rcd_name: str = nb_record.name if nb_record.name != "@" else ""
rcd_value: str = nb_record.value if nb_record.value != "@" else nb_record.zone.name
# make CNAME record absolute
if nb_record.type == "CNAME" and rcd_value[-1] != ".":
rcd_value = rcd_value + "."
if nb_record.ttl: if nb_record.ttl:
nb_ttl = nb_record.ttl nb_ttl = nb_record.ttl
elif nb_record.type == "NS": elif nb_record.type == "NS":
nb_ttl = nb_zone.soa_refresh nb_ttl = nb_zone.soa_refresh
else: else:
nb_ttl = nb_zone_default_ttl nb_ttl = nb_zone.default_ttl
data = { data = {
"name": name, "name": rcd_name,
"type": nb_record.type, "type": nb_record.type,
"ttl": nb_ttl, "ttl": nb_ttl,
"values": [], "values": [],
} }
rdata = dns.rdata.from_text("IN", nb_record.type, nb_record.value) rdata = dns.rdata.from_text("IN", nb_record.type, rcd_value)
match rdata.rdtype.name: match rdata.rdtype.name:
case "A" | "AAAA": case "A" | "AAAA":
value = rdata.address value = rdata.address
@ -197,7 +201,7 @@ class NetBoxDNSSource(octodns.provider.base.BaseProvider):
continue continue
case "SPF" | "TXT": case "SPF" | "TXT":
value = nb_record.value value = rcd_value
case "SRV": case "SRV":
value = { value = {
@ -210,9 +214,9 @@ class NetBoxDNSSource(octodns.provider.base.BaseProvider):
case _: case _:
raise ValueError raise ValueError
if (name, nb_record.type) not in records: if (rcd_name, nb_record.type) not in records:
records[(name, nb_record.type)] = data records[(rcd_name, nb_record.type)] = data
records[(name, nb_record.type)]["values"].append(value) records[(rcd_name, nb_record.type)]["values"].append(value)
for data in records.values(): for data in records.values():
if len(data["values"]) == 1: if len(data["values"]) == 1: