Merge ~cgrabowski/maas:properly_format_records_for_glue_zones into maas:master

Proposed by Christian Grabowski
Status: Merged
Approved by: Christian Grabowski
Approved revision: 84e37f6ee335ffc9af78f5f36cace469e9299f14
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~cgrabowski/maas:properly_format_records_for_glue_zones
Merge into: maas:master
Diff against target: 165 lines (+52/-17)
5 files modified
src/maasserver/dns/tests/test_zonegenerator.py (+2/-2)
src/maasserver/dns/zonegenerator.py (+3/-5)
src/provisioningserver/dns/config.py (+15/-2)
src/provisioningserver/dns/tests/test_config.py (+27/-1)
src/provisioningserver/dns/tests/test_zoneconfig.py (+5/-7)
Reviewer Review Type Date Requested Status
Alexsander de Souza Approve
MAAS Lander Approve
Review via email: mp+436411@code.launchpad.net

Commit message

format glue zone dynamic updates to specify shorter prefix len

Description of the change

It appears when sending a dynamic update PTR for a glue zone, the original zone (i.e the one with 0-<prefix len> in its name) requires the record to be named within that zone rather than generated from the original update.

To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b properly_format_records_for_glue_zones lp:~cgrabowski/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 84e37f6ee335ffc9af78f5f36cace469e9299f14

review: Approve
Revision history for this message
Alexsander de Souza (alexsander-souza) wrote :

+1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
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):
550 zones[1]._dynamic_updates,550 zones[1]._dynamic_updates,
551 [551 [
552 DynamicDNSUpdate.as_reverse_record_update(552 DynamicDNSUpdate.as_reverse_record_update(
553 updates[0], str(IPNetwork("10/29"))553 updates[0], IPNetwork("10/29")
554 )554 )
555 ],555 ],
556 )556 )
@@ -558,7 +558,7 @@ class TestZoneGenerator(MAASServerTestCase):
558 zones[2]._dynamic_updates,558 zones[2]._dynamic_updates,
559 [559 [
560 DynamicDNSUpdate.as_reverse_record_update(560 DynamicDNSUpdate.as_reverse_record_update(
561 updates[0], str(IPNetwork("10/24"))561 updates[0], IPNetwork("10/24")
562 )562 )
563 ],563 ],
564 )564 )
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:
452 glue = set()452 glue = set()
453453
454 domain_updates = [454 domain_updates = [
455 DynamicDNSUpdate.as_reverse_record_update(455 DynamicDNSUpdate.as_reverse_record_update(update, network)
456 update, str(subnet.cidr)
457 )
458 for update in dynamic_updates456 for update in dynamic_updates
459 if update.answer457 if update.answer
460 and update.answer_is_ip458 and update.answer_is_ip
461 and (update.answer_as_ip in IPNetwork(subnet.cidr))459 and (update.answer_as_ip in network)
462 ]460 ]
463461
464 yield DNSReverseZoneConfig(462 yield DNSReverseZoneConfig(
@@ -502,7 +500,7 @@ class ZoneGenerator:
502 ):500 ):
503 domain_updates.append(501 domain_updates.append(
504 DynamicDNSUpdate.as_reverse_record_update(502 DynamicDNSUpdate.as_reverse_record_update(
505 update, str(network)503 update, network
506 )504 )
507 )505 )
508 yield DNSReverseZoneConfig(506 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:
71 if not fwd_update.answer_is_ip:71 if not fwd_update.answer_is_ip:
72 return None72 return None
73 ip = IPAddress(fwd_update.answer)73 ip = IPAddress(fwd_update.answer)
74 name = ip.reverse_dns
75 if (
76 ip.version == 4 and subnet.prefixlen > 24
77 ) or subnet.prefixlen > 64:
78 name = "in-addr.arpa."
79 addr_split = fwd_update.answer.split(".")
80 idx = len(addr_split) - 1
81 for i, octet in enumerate(addr_split):
82 if i == idx:
83 name = f"{octet}.0-{subnet.prefixlen}.{name}"
84 else:
85 name = f"{octet}.{name}"
86
74 return cls(87 return cls(
75 operation=fwd_update.operation,88 operation=fwd_update.operation,
76 name=ip.reverse_dns,89 name=name,
77 zone=fwd_update.zone,90 zone=fwd_update.zone,
78 subnet=subnet,91 subnet=str(subnet.cidr),
79 ttl=fwd_update.ttl,92 ttl=fwd_update.ttl,
80 answer=fwd_update.name,93 answer=fwd_update.name,
81 rectype="PTR",94 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):
730 answer=fwd_update.name,730 answer=fwd_update.name,
731 )731 )
732 rev_update = DynamicDNSUpdate.as_reverse_record_update(732 rev_update = DynamicDNSUpdate.as_reverse_record_update(
733 fwd_update, str(subnet)733 fwd_update, subnet
734 )
735 self.assertEqual(expected_rev_update.name, rev_update.name)
736 self.assertEqual(expected_rev_update.rectype, rev_update.rectype)
737 self.assertEqual(expected_rev_update.answer, rev_update.answer)
738
739 def test_as_reverse_record_update_for_glue_zone(self):
740 domain = factory.make_name()
741 subnet = IPNetwork("10.1.1.0/25")
742 fwd_update = DynamicDNSUpdate(
743 operation="INSERT",
744 zone=domain,
745 name=f"{factory.make_name()}.{domain}",
746 rectype="A",
747 answer=str("10.1.1.5"),
748 )
749 expected_rev_update = DynamicDNSUpdate(
750 operation="INSERT",
751 zone=domain,
752 name="5.0-25.1.1.10.in-addr.arpa.",
753 rectype="PTR",
754 ttl=fwd_update.ttl,
755 subnet=str(subnet),
756 answer=fwd_update.name,
757 )
758 rev_update = DynamicDNSUpdate.as_reverse_record_update(
759 fwd_update, subnet
734 )760 )
735 self.assertEqual(expected_rev_update.name, rev_update.name)761 self.assertEqual(expected_rev_update.name, rev_update.name)
736 self.assertEqual(expected_rev_update.rectype, rev_update.rectype)762 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):
968 ),968 ),
969 ]969 ]
970 rev_updates = [970 rev_updates = [
971 DynamicDNSUpdate.as_reverse_record_update(update, str(network))971 DynamicDNSUpdate.as_reverse_record_update(update, network)
972 for update in fwd_updates972 for update in fwd_updates
973 ]973 ]
974 zone = DNSReverseZoneConfig(974 zone = DNSReverseZoneConfig(
@@ -1053,7 +1053,7 @@ class TestDNSReverseZoneConfig(MAASTestCase):
1053 ),1053 ),
1054 ]1054 ]
1055 rev_updates = [1055 rev_updates = [
1056 DynamicDNSUpdate.as_reverse_record_update(update, str(network))1056 DynamicDNSUpdate.as_reverse_record_update(update, network)
1057 for update in fwd_updates1057 for update in fwd_updates
1058 ]1058 ]
1059 zone = DNSReverseZoneConfig(1059 zone = DNSReverseZoneConfig(
@@ -1063,9 +1063,7 @@ class TestDNSReverseZoneConfig(MAASTestCase):
1063 dynamic_updates=rev_updates,1063 dynamic_updates=rev_updates,
1064 )1064 )
1065 glue_rev_updates = [1065 glue_rev_updates = [
1066 DynamicDNSUpdate.as_reverse_record_update(1066 DynamicDNSUpdate.as_reverse_record_update(update, glue_network)
1067 update, str(glue_network)
1068 )
1069 for update in fwd_updates1067 for update in fwd_updates
1070 ]1068 ]
1071 glue_zone = DNSReverseZoneConfig(1069 glue_zone = DNSReverseZoneConfig(
@@ -1078,8 +1076,8 @@ class TestDNSReverseZoneConfig(MAASTestCase):
1078 [1076 [
1079 "server localhost",1077 "server localhost",
1080 "zone 0-26.0.0.10.in-addr.arpa",1078 "zone 0-26.0.0.10.in-addr.arpa",
1081 f"update add {IPAddress(ip1).reverse_dns} {zone.default_ttl} PTR {hostname1}",1079 f"update add {IPAddress(ip1).reverse_dns.replace('0.0.10', '0-26.0.0.10')} {zone.default_ttl} PTR {hostname1}",
1082 f"update add {IPAddress(ip2).reverse_dns} {zone.default_ttl} PTR {hostname2}",1080 f"update add {IPAddress(ip2).reverse_dns.replace('0.0.10', '0-26.0.0.10')} {zone.default_ttl} PTR {hostname2}",
1083 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}",1081 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}",
1084 "send\n",1082 "send\n",
1085 ]1083 ]

Subscribers

People subscribed via source and target branches