Merge lp:~lamont/maas/bug-1615686 into lp:~maas-committers/maas/trunk

Proposed by LaMont Jones
Status: Merged
Approved by: LaMont Jones
Approved revision: no longer in the source branch.
Merged at revision: 5287
Proposed branch: lp:~lamont/maas/bug-1615686
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 73 lines (+51/-1)
2 files modified
src/provisioningserver/dns/tests/test_zoneconfig.py (+47/-0)
src/provisioningserver/dns/zoneconfig.py (+4/-1)
To merge this branch: bzr merge lp:~lamont/maas/bug-1615686
Reviewer Review Type Date Requested Status
Mike Pontillo (community) Approve
Review via email: mp+303582@code.launchpad.net

Commit message

Update get_GENERATE_directives to deal with spanning_cidr not liking single-IP ranges.

Description of the change

Update get_GENERATE_directives to deal with spanning_cidr not liking single-IP ranges.

To post a comment you must log in.
Revision history for this message
Mike Pontillo (mpontillo) wrote :

Looks good to me.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/provisioningserver/dns/tests/test_zoneconfig.py'
2--- src/provisioningserver/dns/tests/test_zoneconfig.py 2016-03-28 13:54:47 +0000
3+++ src/provisioningserver/dns/tests/test_zoneconfig.py 2016-08-22 15:30:50 +0000
4@@ -157,6 +157,53 @@
5 DNSForwardZoneConfig.get_AAAA_mapping(
6 combined_mapping, ns_ttl, dns_ip))
7
8+ def test_handles_slash_32_dynamic_range(self):
9+ target_dir = patch_dns_config_path(self)
10+ domain = factory.make_string()
11+ network = factory.make_ipv4_network()
12+ dns_ip = factory.pick_ip_in_network(network)
13+ ipv4_hostname = factory.make_name('host')
14+ ipv4_ip = factory.pick_ip_in_network(network)
15+ range_ip = factory.pick_ip_in_network(network, but_not={ipv4_ip})
16+ ipv6_hostname = factory.make_name('host')
17+ ipv6_ip = factory.make_ipv6_address()
18+ ttl = random.randint(10, 300)
19+ mapping = {
20+ ipv4_hostname: HostnameIPMapping(None, ttl, {ipv4_ip}),
21+ ipv6_hostname: HostnameIPMapping(None, ttl, {ipv6_ip}),
22+ }
23+ dynamic_range = IPRange(IPAddress(range_ip), IPAddress(range_ip))
24+ expected_generate_directives = (
25+ DNSForwardZoneConfig.get_GENERATE_directives(
26+ dynamic_range))
27+ other_mapping = {ipv4_hostname: HostnameRRsetMapping(
28+ None, {(ttl, 'MX', '10 bar')})}
29+ dns_zone_config = DNSForwardZoneConfig(
30+ domain, serial=random.randint(1, 100),
31+ other_mapping=other_mapping, default_ttl=ttl,
32+ mapping=mapping, dns_ip=dns_ip,
33+ dynamic_ranges=[dynamic_range])
34+ dns_zone_config.write_config()
35+ self.assertThat(
36+ os.path.join(target_dir, 'zone.%s' % domain),
37+ FileContains(
38+ matcher=ContainsAll(
39+ [
40+ '$TTL %d' % ttl,
41+ '%s %d IN A %s' % (ipv4_hostname, ttl, ipv4_ip),
42+ '%s %d IN AAAA %s' % (ipv6_hostname, ttl, ipv6_ip),
43+ '%s %d IN MX 10 bar' % (ipv4_hostname, ttl),
44+ ] +
45+ [
46+ '$GENERATE %s %s IN A %s' % (
47+ iterator_values, reverse_dns, hostname)
48+ for iterator_values, reverse_dns, hostname in
49+ expected_generate_directives
50+ ]
51+ )
52+ )
53+ )
54+
55 def test_writes_dns_zone_config(self):
56 target_dir = patch_dns_config_path(self)
57 domain = factory.make_string()
58
59=== modified file 'src/provisioningserver/dns/zoneconfig.py'
60--- src/provisioningserver/dns/zoneconfig.py 2016-03-28 13:54:47 +0000
61+++ src/provisioningserver/dns/zoneconfig.py 2016-08-22 15:30:50 +0000
62@@ -75,7 +75,10 @@
63 # 256 /24 networks in a /16, so that's the most /24s we're going
64 # to have to deal with; this matters later on when we iterate
65 # through the /24s within this network.
66- cidr = spanning_cidr(ip_range)
67+ if ip_range.size == 1:
68+ cidr = IPNetwork(IPAddress(ip_range.first))
69+ else:
70+ cidr = spanning_cidr(ip_range)
71 subnets = cidr.subnet(max(24, cidr.prefixlen))
72
73 # Split the spanning network into /24 subnets, then see if they fall