sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #04906
[Merge] ~cgrabowski/maas:ensure_reverse_dns_updates_are_always_included into maas:master
Christian Grabowski has proposed merging ~cgrabowski/maas:ensure_reverse_dns_updates_are_always_included into maas:master.
Commit message:
better handle modified subnet values in update ownership comparison
Requested reviews:
MAAS Maintainers (maas-maintainers)
For more details, see:
https://code.launchpad.net/~cgrabowski/maas/+git/maas/+merge/436473
--
Your team MAAS Maintainers is requested to review the proposed merge of ~cgrabowski/maas:ensure_reverse_dns_updates_are_always_included into maas:master.
diff --git a/src/maasserver/dns/zonegenerator.py b/src/maasserver/dns/zonegenerator.py
index 3088ac9..d6630ce 100644
--- a/src/maasserver/dns/zonegenerator.py
+++ b/src/maasserver/dns/zonegenerator.py
@@ -465,7 +465,7 @@ class ZoneGenerator:
default_ttl=default_ttl,
ns_host_name=ns_host_name,
mapping=mapping,
- network=IPNetwork(subnet.cidr),
+ network=network,
dynamic_ranges=dynamic_ranges,
rfc2317_ranges=glue,
exclude={
diff --git a/src/provisioningserver/dns/tests/test_zoneconfig.py b/src/provisioningserver/dns/tests/test_zoneconfig.py
index 5e17b38..e9f6dc1 100644
--- a/src/provisioningserver/dns/tests/test_zoneconfig.py
+++ b/src/provisioningserver/dns/tests/test_zoneconfig.py
@@ -1136,6 +1136,63 @@ class TestDNSReverseZoneConfig(MAASTestCase):
],
)
+ def test_dynamic_updates_included_when_large_cidr_has_been_split(self):
+ patch_zone_file_config_path(self)
+ domain = factory.make_string()
+ network = IPNetwork("10.0.0.0/21")
+ ip1 = factory.pick_ip_in_network(network)
+ ip2 = factory.pick_ip_in_network(network)
+ hostname1 = f"{factory.make_string()}.{domain}"
+ hostname2 = f"{factory.make_string()}.{domain}"
+ fwd_updates = [
+ DynamicDNSUpdate(
+ operation="INSERT",
+ zone=domain,
+ name=hostname1,
+ rectype="A",
+ answer=ip1,
+ ),
+ DynamicDNSUpdate(
+ operation="INSERT",
+ zone=domain,
+ name=hostname2,
+ rectype="A",
+ answer=ip2,
+ ),
+ ]
+ rev_updates = [
+ DynamicDNSUpdate.as_reverse_record_update(update, network)
+ for update in fwd_updates
+ ]
+ # gets changed to a /24 and any other space in the original
+ # subnet is split into a separate zone for a given /24
+ zone = DNSReverseZoneConfig(
+ domain,
+ serial=random.randint(1, 100),
+ network=IPNetwork("10.0.0.0/24"),
+ dynamic_updates=rev_updates,
+ )
+ run_command = self.patch(actions, "run_command")
+ zone.write_config()
+ zone.write_config()
+ expected_stdin = "\n".join(
+ [
+ "server localhost",
+ "zone 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 0.0.10.in-addr.arpa {zone.default_ttl} SOA 0.0.10.in-addr.arpa. nobody.example.com. {zone.serial} 600 1800 604800 {zone.default_ttl}",
+ "send\n",
+ ]
+ )
+ run_command.assert_called_once_with(
+ "nsupdate",
+ "-k",
+ get_nsupdate_key_path(),
+ "-v",
+ stdin=expected_stdin.encode("ascii"),
+ )
+
class TestDNSReverseZoneConfig_GetGenerateDirectives(MAASTestCase):
"""Tests for `DNSReverseZoneConfig.get_GENERATE_directives()`."""
diff --git a/src/provisioningserver/dns/zoneconfig.py b/src/provisioningserver/dns/zoneconfig.py
index ee6c15e..1eaa602 100644
--- a/src/provisioningserver/dns/zoneconfig.py
+++ b/src/provisioningserver/dns/zoneconfig.py
@@ -172,14 +172,18 @@ class DomainConfigBase:
else:
return True
- def dynamic_update(self, zone_info):
+ def dynamic_update(self, zone_info, network=None):
nsupdate = NSUpdateCommand(
zone_info.zone_name,
[
update
for update in self._dynamic_updates
if update.zone == zone_info.zone_name
- or IPNetwork(update.subnet) == zone_info.subnetwork
+ or (
+ (IPNetwork(update.subnet) in network or network in IPNetwork(update.subnet))
+ if network
+ else (IPNetwork(update.subnet) in zone_info.subnetwork or zone_info.subnetwork in IPNetwork(update.subnet))
+ )
],
serial=self.serial,
ttl=self.default_ttl,
Follow ups