Merge ~cgrabowski/maas:fix_overflowing_subnet_overlap into maas:master

Proposed by Christian Grabowski
Status: Merged
Approved by: Christian Grabowski
Approved revision: 0159486fc34991adb070790391362241115ecae8
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~cgrabowski/maas:fix_overflowing_subnet_overlap
Merge into: maas:master
Diff against target: 118 lines (+48/-29)
3 files modified
src/maasserver/dns/tests/test_zonegenerator.py (+43/-26)
src/maasserver/dns/zonegenerator.py (+1/-3)
src/provisioningserver/dns/zoneconfig.py (+4/-0)
Reviewer Review Type Date Requested Status
MAAS Lander Approve
Björn Tillenius Approve
Review via email: mp+403342@code.launchpad.net

Commit message

pass correct excludable subnets into rfc2317 glue config

add overlap test for overflowing IP

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

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

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/10145/console
COMMIT: 02b050a7c57d1d0b644bf8472ca846a0842e83c1

review: Needs Fixing
Revision history for this message
MAAS Lander (maas-lander) wrote :

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

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/10146/console
COMMIT: 5459402edae112d1993881a61691e32e186d49ea

review: Needs Fixing
Revision history for this message
MAAS Lander (maas-lander) wrote :

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

STATUS: SUCCESS
COMMIT: 428b7caf56aa117a5b0d3c7b787a4d2ca3758c02

review: Approve
Revision history for this message
Alberto Donato (ack) :
Revision history for this message
Christian Grabowski (cgrabowski) :
Revision history for this message
MAAS Lander (maas-lander) wrote :

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

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/10155/console
COMMIT: 1b039c7d52f68a678a0c497f6781056ba93d07dc

review: Needs Fixing
Revision history for this message
MAAS Lander (maas-lander) wrote :

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

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/10156/console
COMMIT: 6d17aac2dced9d8322cff86459855edd903e7347

review: Needs Fixing
Revision history for this message
MAAS Lander (maas-lander) wrote :

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

STATUS: SUCCESS
COMMIT: 2efaf1b09f93a3d99be7b39b3f714ad2df8d5e27

review: Approve
Revision history for this message
Björn Tillenius (bjornt) wrote :

Thanks for the fix! I added some comments, but feel free to merge after you've addressed them.

review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

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

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/10158/console
COMMIT: c4aaa3de8e50dffa6c0aa3a76a22d71acdeb8cb7

review: Needs Fixing
Revision history for this message
MAAS Lander (maas-lander) wrote :

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

STATUS: SUCCESS
COMMIT: 0159486fc34991adb070790391362241115ecae8

review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

LANDING
-b fix_overflowing_subnet_overlap lp:~cgrabowski/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED BUILD
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/10160/consoleText

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/dns/tests/test_zonegenerator.py b/src/maasserver/dns/tests/test_zonegenerator.py
2index 780e3d1..0d96159 100644
3--- a/src/maasserver/dns/tests/test_zonegenerator.py
4+++ b/src/maasserver/dns/tests/test_zonegenerator.py
5@@ -366,6 +366,31 @@ class TestZoneGenerator(MAASServerTestCase):
6 ),
7 )
8
9+ def test_yields_forward_and_reverse_zone_no_overlap_bug(self):
10+ domain = factory.make_Domain(name="overlap")
11+ subnet1 = factory.make_Subnet(cidr="192.168.33.0/25")
12+ subnet2 = factory.make_Subnet(cidr="192.168.35.0/26")
13+ subnet3 = factory.make_Subnet(cidr="192.168.36.0/26")
14+ zones = ZoneGenerator(
15+ domain,
16+ [
17+ subnet2,
18+ subnet1,
19+ subnet3,
20+ ], # purposely out of order to assert subnets are being sorted
21+ serial=random.randint(0, 65535),
22+ ).as_list()
23+ expected_domains = [
24+ "0-25.33.168.192.in-addr.arpa",
25+ "0-26.35.168.192.in-addr.arpa",
26+ "0-26.36.168.192.in-addr.arpa",
27+ "overlap",
28+ ]
29+ zone_names = [
30+ info.zone_name for zone in zones for info in zone.zone_info
31+ ]
32+ self.assertCountEqual(zone_names, expected_domains)
33+
34 def test_yields_forward_and_reverse_zone_no_overlap(self):
35 domain = factory.make_Domain(name="overlap")
36 vlan1 = factory.make_VLAN(vid=1, dhcp_on=True)
37@@ -389,33 +414,25 @@ class TestZoneGenerator(MAASServerTestCase):
38 serial=random.randint(0, 65535),
39 ).as_list()
40 self.assertEqual(len(zones), 7)
41- expected_domains = set(
42- [
43- "overlap",
44- "36.232.10.in-addr.arpa",
45- "32.232.10.in-addr.arpa",
46- "6.232.10.in-addr.arpa",
47- "36.2.10.in-addr.arpa",
48- "36.231.10.in-addr.arpa",
49- "40.232.10.in-addr.arpa",
50- "38.232.10.in-addr.arpa",
51- "34.232.10.in-addr.arpa",
52- "35.232.10.in-addr.arpa",
53- "39.232.10.in-addr.arpa",
54- "37.232.10.in-addr.arpa",
55- "33.232.10.in-addr.arpa",
56- ]
57- )
58- zone_names = set(
59+ expected_domains = [
60+ "overlap",
61+ "36.232.10.in-addr.arpa",
62+ "32.232.10.in-addr.arpa",
63+ "6.232.10.in-addr.arpa",
64+ "36.2.10.in-addr.arpa",
65+ "36.231.10.in-addr.arpa",
66+ "40.232.10.in-addr.arpa",
67+ "38.232.10.in-addr.arpa",
68+ "34.232.10.in-addr.arpa",
69+ "35.232.10.in-addr.arpa",
70+ "39.232.10.in-addr.arpa",
71+ "37.232.10.in-addr.arpa",
72+ "33.232.10.in-addr.arpa",
73+ ]
74+ zone_names = [
75 info.zone_name for zone in zones for info in zone.zone_info
76- )
77- self.assertEqual(zone_names, expected_domains)
78- for expected_domain in expected_domains:
79- self.assertIn(
80- expected_domain,
81- zone_names,
82- f"{expected_domain} is not in domains",
83- )
84+ ]
85+ self.assertCountEqual(zone_names, expected_domains)
86
87 def test_with_node_yields_fwd_and_rev_zone(self):
88 default_domain = Domain.objects.get_default_domain().name
89diff --git a/src/maasserver/dns/zonegenerator.py b/src/maasserver/dns/zonegenerator.py
90index 0d798ac..bd6401a 100644
91--- a/src/maasserver/dns/zonegenerator.py
92+++ b/src/maasserver/dns/zonegenerator.py
93@@ -441,9 +441,7 @@ class ZoneGenerator:
94 network=network,
95 ns_host_name=ns_host_name,
96 rfc2317_ranges=ranges,
97- exclude=set(
98- [IPNetwork(s.cidr) for s in subnets if s is not subnet]
99- ),
100+ exclude=set([IPNetwork(s.cidr) for s in subnets]),
101 )
102
103 def __iter__(self):
104diff --git a/src/provisioningserver/dns/zoneconfig.py b/src/provisioningserver/dns/zoneconfig.py
105index 50ef9dc..c88a9ba 100644
106--- a/src/provisioningserver/dns/zoneconfig.py
107+++ b/src/provisioningserver/dns/zoneconfig.py
108@@ -408,6 +408,10 @@ class DNSReverseZoneConfig(DomainConfigBase):
109 try:
110 base += 1
111 first += step
112+ if (
113+ first > last
114+ ): # if the excluding subnet pushes the base IP beyond the bounds of the generating subnet, we've reached the end and return early
115+ return info
116 continue
117 except IndexError:
118 # IndexError occurs when we go from 255.255.255.255 to

Subscribers

People subscribed via source and target branches