Merge ~cgrabowski/maas:backport_outside_zone_update_fix_3.3 into maas:3.3

Proposed by Christian Grabowski
Status: Merged
Approved by: Christian Grabowski
Approved revision: addac0edcd8733e20fdd2fbb16b71cf99bc54361
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~cgrabowski/maas:backport_outside_zone_update_fix_3.3
Merge into: maas:3.3
Diff against target: 63 lines (+35/-2)
2 files modified
src/provisioningserver/dns/config.py (+7/-1)
src/provisioningserver/dns/tests/test_config.py (+28/-1)
Reviewer Review Type Date Requested Status
Christian Grabowski Approve
Review via email: mp+454817@code.launchpad.net

Commit message

use network ip and prefixlen of subnet when reverse zone is not given
(cherry picked from commit 6febd214b36cd3db4ff70540f7a25e01705fa5b2)

To post a comment you must log in.
Revision history for this message
Christian Grabowski (cgrabowski) wrote :

self-approving backport

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/provisioningserver/dns/config.py b/src/provisioningserver/dns/config.py
2index 264139e..7ee7b50 100644
3--- a/src/provisioningserver/dns/config.py
4+++ b/src/provisioningserver/dns/config.py
5@@ -80,7 +80,13 @@ class DynamicDNSUpdate:
6 name_split = ip.reverse_dns.split(".")
7 suffix = [zone]
8 if not zone:
9- suffix = [f"0-{subnet.prefixlen}"] + name_split[1:]
10+ if ip.version == 4:
11+ first_octet = str(subnet.network).split(".")[-1]
12+ else:
13+ first_octet = str(subnet.network).split(":")[-1]
14+
15+ suffix = [f"{first_octet}-{subnet.prefixlen}"] + name_split[1:]
16+ zone = ".".join(suffix)
17
18 name_split = name_split[:1] + suffix
19 name = ".".join(name_split)
20diff --git a/src/provisioningserver/dns/tests/test_config.py b/src/provisioningserver/dns/tests/test_config.py
21index 5345f76..8c57ce4 100644
22--- a/src/provisioningserver/dns/tests/test_config.py
23+++ b/src/provisioningserver/dns/tests/test_config.py
24@@ -783,7 +783,7 @@ class TestDynamicDNSUpdate(MAASTestCase):
25 expected_rev_update = DynamicDNSUpdate(
26 operation="INSERT",
27 zone=domain,
28- name="1.0-126.0.0.8.4.4.8.a.6.7.0.a.d.a.c.7.0.b.7.5.a.e.5.a.c.7.c.4.5.5.c.f.ip6.arpa.",
29+ name="1.8000-126.0.0.8.4.4.8.a.6.7.0.a.d.a.c.7.0.b.7.5.a.e.5.a.c.7.c.4.5.5.c.f.ip6.arpa.",
30 rectype="PTR",
31 ttl=fwd_update.ttl,
32 subnet=str(subnet),
33@@ -795,3 +795,30 @@ class TestDynamicDNSUpdate(MAASTestCase):
34 self.assertEqual(expected_rev_update.name, rev_update.name)
35 self.assertEqual(expected_rev_update.rectype, rev_update.rectype)
36 self.assertEqual(expected_rev_update.answer, rev_update.answer)
37+
38+ def test_as_reverse_record_update_no_zone_set(self):
39+ domain = factory.make_name()
40+ subnet = IPNetwork("10.1.1.128/25")
41+ fwd_update = DynamicDNSUpdate(
42+ operation="INSERT",
43+ zone=domain,
44+ name=f"{factory.make_name()}.{domain}",
45+ rectype="A",
46+ answer=str("10.1.1.161"),
47+ )
48+ expected_rev_update = DynamicDNSUpdate(
49+ operation="INSERT",
50+ zone="128-25.1.1.10.in-addr.arpa.",
51+ name="161.128-25.1.1.10.in-addr.arpa.",
52+ rectype="PTR",
53+ ttl=fwd_update.ttl,
54+ subnet=str(subnet),
55+ answer=fwd_update.name,
56+ )
57+ rev_update = DynamicDNSUpdate.as_reverse_record_update(
58+ fwd_update, subnet
59+ )
60+ self.assertEqual(expected_rev_update.name, rev_update.name)
61+ self.assertEqual(expected_rev_update.rectype, rev_update.rectype)
62+ self.assertEqual(expected_rev_update.answer, rev_update.answer)
63+ self.assertEqual(expected_rev_update.zone, rev_update.zone)

Subscribers

People subscribed via source and target branches