sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #03626
[Merge] ~cgrabowski/maas:fix_dns_restart_when_adding_vault into maas:master
Christian Grabowski has proposed merging ~cgrabowski/maas:fix_dns_restart_when_adding_vault into maas:master.
Commit message:
always set serial if using nsupdate
Requested reviews:
MAAS Maintainers (maas-maintainers)
For more details, see:
https://code.launchpad.net/~cgrabowski/maas/+git/maas/+merge/433738
--
Your team MAAS Committers is subscribed to branch maas:master.
diff --git a/src/provisioningserver/dns/tests/test_zoneconfig.py b/src/provisioningserver/dns/tests/test_zoneconfig.py
index f97adfd..cc16d1e 100644
--- a/src/provisioningserver/dns/tests/test_zoneconfig.py
+++ b/src/provisioningserver/dns/tests/test_zoneconfig.py
@@ -415,6 +415,56 @@ class TestDNSForwardZoneConfig(MAASTestCase):
stdin=expected_stdin.encode("ascii"),
)
+ def test_dynamic_update_sets_serial_when_no_other_updates_are_present(
+ self,
+ ):
+ patch_zone_file_config_path(self)
+ domain = factory.make_string()
+ network = factory.make_ipv4_network()
+ ipv4_hostname = factory.make_name("host")
+ ipv4_ip = factory.pick_ip_in_network(network)
+ ipv6_hostname = factory.make_name("host")
+ ipv6_ip = factory.make_ipv6_address()
+ ipv6_network = factory.make_ipv6_network()
+ dynamic_range = IPRange(ipv6_network.first, ipv6_network.last)
+ ttl = random.randint(10, 300)
+ mapping = {
+ ipv4_hostname: HostnameIPMapping(None, ttl, {ipv4_ip}),
+ ipv6_hostname: HostnameIPMapping(None, ttl, {ipv6_ip}),
+ }
+ dns_zone_config = DNSForwardZoneConfig(
+ domain,
+ serial=random.randint(1, 100),
+ mapping=mapping,
+ default_ttl=ttl,
+ dynamic_ranges=[dynamic_range],
+ )
+ self.patch(dns_zone_config, "get_GENERATE_directives")
+ run_command = self.patch(actions, "run_command")
+ dns_zone_config.write_config()
+ new_dns_zone_config = DNSForwardZoneConfig(
+ domain,
+ serial=random.randint(1, 100),
+ mapping=mapping,
+ default_ttl=ttl,
+ dynamic_ranges=[dynamic_range],
+ )
+ new_dns_zone_config.write_config()
+ expected_stdin = "\n".join(
+ [
+ "server localhost",
+ f"zone {domain}",
+ f"update add {domain} {new_dns_zone_config.default_ttl} SOA {domain}. nobody.example.com. {new_dns_zone_config.serial} 600 1800 604800 {new_dns_zone_config.default_ttl}",
+ "send\n",
+ ]
+ )
+ run_command.assert_called_once_with(
+ "nsupdate",
+ "-k",
+ get_nsupdate_key_path(),
+ stdin=expected_stdin.encode("ascii"),
+ )
+
class TestDNSReverseZoneConfig(MAASTestCase):
"""Tests for DNSReverseZoneConfig."""
@@ -888,6 +938,40 @@ class TestDNSReverseZoneConfig(MAASTestCase):
stdin=expected_stdin.encode("ascii"),
)
+ def test_dynamic_update_sets_serial_when_no_other_updates_are_present(
+ self,
+ ):
+ patch_zone_file_config_path(self)
+ domain = factory.make_string()
+ network = ipnetwork("10.0.0.0/24")
+ 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}"
+ zone = dnsreversezoneconfig(
+ domain,
+ serial=random.randint(1, 100),
+ network=network,
+ )
+ 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 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 eb28986..a1ce516 100644
--- a/src/provisioningserver/dns/zoneconfig.py
+++ b/src/provisioningserver/dns/zoneconfig.py
@@ -321,8 +321,7 @@ class DNSForwardZoneConfig(DomainConfigBase):
)
)
if not self.force_config_write and self.zone_file_exists(zi):
- if len(self._dynamic_updates) > 0:
- self.dynamic_update(zi)
+ self.dynamic_update(zi)
else:
self.requires_reload = True
self.write_zone_file(
Follow ups