sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #04866
[Merge] ~cgrabowski/maas:backport_properly_format_records_for_glue_zones_to_3.3 into maas:3.3
Christian Grabowski has proposed merging ~cgrabowski/maas:backport_properly_format_records_for_glue_zones_to_3.3 into maas:3.3.
Commit message:
format glue zone dynamic updates to specify shorter prefix len
(cherry picked from commit c2b4038e602409028850b738afac7f32b03170d5)
Requested reviews:
Christian Grabowski (cgrabowski)
For more details, see:
https://code.launchpad.net/~cgrabowski/maas/+git/maas/+merge/436418
--
Your team MAAS Committers is subscribed to branch maas:3.3.
diff --git a/src/maasserver/dns/tests/test_zonegenerator.py b/src/maasserver/dns/tests/test_zonegenerator.py
index ee649a4..d213c1a 100644
--- a/src/maasserver/dns/tests/test_zonegenerator.py
+++ b/src/maasserver/dns/tests/test_zonegenerator.py
@@ -550,7 +550,7 @@ class TestZoneGenerator(MAASServerTestCase):
zones[1]._dynamic_updates,
[
DynamicDNSUpdate.as_reverse_record_update(
- updates[0], str(IPNetwork("10/29"))
+ updates[0], IPNetwork("10/29")
)
],
)
@@ -558,7 +558,7 @@ class TestZoneGenerator(MAASServerTestCase):
zones[2]._dynamic_updates,
[
DynamicDNSUpdate.as_reverse_record_update(
- updates[0], str(IPNetwork("10/24"))
+ updates[0], IPNetwork("10/24")
)
],
)
diff --git a/src/maasserver/dns/zonegenerator.py b/src/maasserver/dns/zonegenerator.py
index 2a87990..3088ac9 100644
--- a/src/maasserver/dns/zonegenerator.py
+++ b/src/maasserver/dns/zonegenerator.py
@@ -452,13 +452,11 @@ class ZoneGenerator:
glue = set()
domain_updates = [
- DynamicDNSUpdate.as_reverse_record_update(
- update, str(subnet.cidr)
- )
+ DynamicDNSUpdate.as_reverse_record_update(update, network)
for update in dynamic_updates
if update.answer
and update.answer_is_ip
- and (update.answer_as_ip in IPNetwork(subnet.cidr))
+ and (update.answer_as_ip in network)
]
yield DNSReverseZoneConfig(
@@ -502,7 +500,7 @@ class ZoneGenerator:
):
domain_updates.append(
DynamicDNSUpdate.as_reverse_record_update(
- update, str(network)
+ update, network
)
)
yield DNSReverseZoneConfig(
diff --git a/src/provisioningserver/dns/config.py b/src/provisioningserver/dns/config.py
index 6e11f73..73b8d48 100644
--- a/src/provisioningserver/dns/config.py
+++ b/src/provisioningserver/dns/config.py
@@ -71,11 +71,24 @@ class DynamicDNSUpdate:
if not fwd_update.answer_is_ip:
return None
ip = IPAddress(fwd_update.answer)
+ name = ip.reverse_dns
+ if (
+ ip.version == 4 and subnet.prefixlen > 24
+ ) or subnet.prefixlen > 64:
+ name = "in-addr.arpa."
+ addr_split = fwd_update.answer.split(".")
+ idx = len(addr_split) - 1
+ for i, octet in enumerate(addr_split):
+ if i == idx:
+ name = f"{octet}.0-{subnet.prefixlen}.{name}"
+ else:
+ name = f"{octet}.{name}"
+
return cls(
operation=fwd_update.operation,
- name=ip.reverse_dns,
+ name=name,
zone=fwd_update.zone,
- subnet=subnet,
+ subnet=str(subnet.cidr),
ttl=fwd_update.ttl,
answer=fwd_update.name,
rectype="PTR",
diff --git a/src/provisioningserver/dns/tests/test_config.py b/src/provisioningserver/dns/tests/test_config.py
index 41a1bc5..ddb9db4 100644
--- a/src/provisioningserver/dns/tests/test_config.py
+++ b/src/provisioningserver/dns/tests/test_config.py
@@ -730,7 +730,33 @@ class TestDynamicDNSUpdate(MAASTestCase):
answer=fwd_update.name,
)
rev_update = DynamicDNSUpdate.as_reverse_record_update(
- fwd_update, str(subnet)
+ fwd_update, subnet
+ )
+ self.assertEqual(expected_rev_update.name, rev_update.name)
+ self.assertEqual(expected_rev_update.rectype, rev_update.rectype)
+ self.assertEqual(expected_rev_update.answer, rev_update.answer)
+
+ def test_as_reverse_record_update_for_glue_zone(self):
+ domain = factory.make_name()
+ subnet = IPNetwork("10.1.1.0/25")
+ fwd_update = DynamicDNSUpdate(
+ operation="INSERT",
+ zone=domain,
+ name=f"{factory.make_name()}.{domain}",
+ rectype="A",
+ answer=str("10.1.1.5"),
+ )
+ expected_rev_update = DynamicDNSUpdate(
+ operation="INSERT",
+ zone=domain,
+ name="5.0-25.1.1.10.in-addr.arpa.",
+ rectype="PTR",
+ ttl=fwd_update.ttl,
+ subnet=str(subnet),
+ answer=fwd_update.name,
+ )
+ rev_update = DynamicDNSUpdate.as_reverse_record_update(
+ fwd_update, subnet
)
self.assertEqual(expected_rev_update.name, rev_update.name)
self.assertEqual(expected_rev_update.rectype, rev_update.rectype)
diff --git a/src/provisioningserver/dns/tests/test_zoneconfig.py b/src/provisioningserver/dns/tests/test_zoneconfig.py
index f747a53..5e17b38 100644
--- a/src/provisioningserver/dns/tests/test_zoneconfig.py
+++ b/src/provisioningserver/dns/tests/test_zoneconfig.py
@@ -968,7 +968,7 @@ class TestDNSReverseZoneConfig(MAASTestCase):
),
]
rev_updates = [
- DynamicDNSUpdate.as_reverse_record_update(update, str(network))
+ DynamicDNSUpdate.as_reverse_record_update(update, network)
for update in fwd_updates
]
zone = DNSReverseZoneConfig(
@@ -1053,7 +1053,7 @@ class TestDNSReverseZoneConfig(MAASTestCase):
),
]
rev_updates = [
- DynamicDNSUpdate.as_reverse_record_update(update, str(network))
+ DynamicDNSUpdate.as_reverse_record_update(update, network)
for update in fwd_updates
]
zone = DNSReverseZoneConfig(
@@ -1063,9 +1063,7 @@ class TestDNSReverseZoneConfig(MAASTestCase):
dynamic_updates=rev_updates,
)
glue_rev_updates = [
- DynamicDNSUpdate.as_reverse_record_update(
- update, str(glue_network)
- )
+ DynamicDNSUpdate.as_reverse_record_update(update, glue_network)
for update in fwd_updates
]
glue_zone = DNSReverseZoneConfig(
@@ -1078,8 +1076,8 @@ class TestDNSReverseZoneConfig(MAASTestCase):
[
"server localhost",
"zone 0-26.0.0.10.in-addr.arpa",
- f"update add {IPAddress(ip1).reverse_dns} {zone.default_ttl} PTR {hostname1}",
- f"update add {IPAddress(ip2).reverse_dns} {zone.default_ttl} PTR {hostname2}",
+ f"update add {IPAddress(ip1).reverse_dns.replace('0.0.10', '0-26.0.0.10')} {zone.default_ttl} PTR {hostname1}",
+ f"update add {IPAddress(ip2).reverse_dns.replace('0.0.10', '0-26.0.0.10')} {zone.default_ttl} PTR {hostname2}",
f"update add 0-26.0.0.10.in-addr.arpa {zone.default_ttl} SOA 0-26.0.0.10.in-addr.arpa. nobody.example.com. {zone.serial} 600 1800 604800 {zone.default_ttl}",
"send\n",
]
References