← Back to team overview

sts-sponsors team mailing list archive

[Merge] ~cgrabowski/maas:clean_old_zonefiles_on_dns_setup into maas:master

 

Christian Grabowski has proposed merging ~cgrabowski/maas:clean_old_zonefiles_on_dns_setup into maas:master.

Commit message:
clean old zonefiles when setting up the zonefile dir



Requested reviews:
  MAAS Maintainers (maas-maintainers)

For more details, see:
https://code.launchpad.net/~cgrabowski/maas/+git/maas/+merge/433218
-- 
Your team MAAS Maintainers is requested to review the proposed merge of ~cgrabowski/maas:clean_old_zonefiles_on_dns_setup into maas:master.
diff --git a/src/provisioningserver/dns/config.py b/src/provisioningserver/dns/config.py
index 5673b4a..199fb76 100644
--- a/src/provisioningserver/dns/config.py
+++ b/src/provisioningserver/dns/config.py
@@ -239,6 +239,13 @@ def set_up_nsupdate_key():
     atomic_write(tsig, get_nsupdate_key_path(), overwrite=True, mode=0o644)
 
 
+def clean_old_zone_files():
+    p = get_zone_file_config_dir()
+    files = os.listdir(p)
+    for f in files:
+        os.remove(os.path.join(p, f))
+
+
 def set_up_zone_file_dir():
     p = get_zone_file_config_dir()
     if not os.path.exists(p):
@@ -252,6 +259,8 @@ def set_up_zone_file_dir():
 
         os.chown(p, uid, gid)
         os.chmod(p, 0o775)
+    else:
+        clean_old_zone_files()
 
 
 def set_up_rndc():
diff --git a/src/provisioningserver/dns/tests/test_config.py b/src/provisioningserver/dns/tests/test_config.py
index 1e02498..646e18f 100644
--- a/src/provisioningserver/dns/tests/test_config.py
+++ b/src/provisioningserver/dns/tests/test_config.py
@@ -35,6 +35,7 @@ from maastesting.fakemethod import FakeMethod
 from maastesting.testcase import MAASTestCase
 from provisioningserver.dns import config
 from provisioningserver.dns.config import (
+    clean_old_zone_files,
     compose_config_path,
     DEFAULT_CONTROLS,
     DNSConfig,
@@ -58,6 +59,7 @@ from provisioningserver.dns.config import (
 from provisioningserver.dns.testing import (
     patch_dns_config_path,
     patch_dns_default_controls,
+    patch_zone_file_config_path,
 )
 from provisioningserver.dns.zoneconfig import (
     DNSForwardZoneConfig,
@@ -290,6 +292,21 @@ class TestRNDCUtilities(MAASTestCase):
         )
         self.assertThat(target_file, FileExists())
 
+    def test_clean_old_zone_files(self):
+        zone_file_dir = patch_zone_file_config_path(self)
+
+        zonefiles = [
+            os.path.join(zone_file_dir, f"zonefile{i}")
+            for i, _ in enumerate(range(2))
+        ]
+        for zonefile in zonefiles:
+            with open(zonefile, "w+") as f:
+                pass
+
+        clean_old_zone_files()
+        for zonefile in zonefiles:
+            self.assertRaises(FileNotFoundError, os.stat, zonefile)
+
     def test_rndc_config_includes_default_controls(self):
         dns_conf_dir = patch_dns_config_path(self)
         patch_dns_default_controls(self, enable=True)

Follow ups