← Back to team overview

sts-sponsors team mailing list archive

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

 

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

Commit message:
ensure zone file cleanup only deletes files

ensure settings for zone file config dir are correctly encoded



Requested reviews:
  MAAS Maintainers (maas-maintainers)

For more details, see:
https://code.launchpad.net/~cgrabowski/maas/+git/maas/+merge/433482
-- 
Your team MAAS Maintainers is requested to review the proposed merge of ~cgrabowski/maas:fix_dns_initialization_in_snap into maas:master.
diff --git a/src/provisioningserver/dns/config.py b/src/provisioningserver/dns/config.py
index abb059c..ef5a166 100644
--- a/src/provisioningserver/dns/config.py
+++ b/src/provisioningserver/dns/config.py
@@ -109,6 +109,9 @@ def get_zone_file_config_dir():
     so that bind can write to the location as well
     """
     setting = os.getenv("MAAS_ZONE_FILE_CONFIG_DIR", MAAS_ZONE_FILE_DIR)
+    if isinstance(setting, bytes):
+        fsenc = sys.getfilesystemencoding()
+        setting = setting.decode(fsenc)
     return Path(setting)
 
 
@@ -238,7 +241,8 @@ def set_up_nsupdate_key():
 
 def clean_old_zone_files():
     for path in get_zone_file_config_dir().glob("zone.*"):
-        path.unlink()
+        if path.is_file():
+            path.unlink()
 
 
 def set_up_zone_file_dir():
diff --git a/src/provisioningserver/dns/tests/test_config.py b/src/provisioningserver/dns/tests/test_config.py
index 954411c..25fa855 100644
--- a/src/provisioningserver/dns/tests/test_config.py
+++ b/src/provisioningserver/dns/tests/test_config.py
@@ -170,6 +170,15 @@ class TestHelpers(MAASTestCase):
         self.useFixture(EnvironmentVariable("MAAS_DNS_DEFAULT_CONTROLS", "0"))
         self.assertFalse(config.get_dns_default_controls())
 
+    def test_get_zone_file_config_dir_defaults_to_var_lib_bind_maas(self):
+        self.useFixture(EnvironmentVariable("MAAS_ZONE_FILE_CONFIG_DIR"))
+        self.assertEqual(str(config.get_zone_file_config_dir()), "/var/lib/bind/maas")
+
+    def test_get_zone_file_config_dir_check_environ_first(self):
+        directory = self.make_dir()
+        self.useFixture(EnvironmentVariable("MAAS_ZONE_FILE_CONFIG_DIR", directory))
+        self.assertEqual(str(config.get_zone_file_config_dir()), directory)
+
 
 class TestRNDCUtilities(MAASTestCase):
     def test_generate_rndc_returns_configurations(self):
@@ -307,6 +316,24 @@ class TestRNDCUtilities(MAASTestCase):
         for zonefile in zonefiles:
             self.assertRaises(FileNotFoundError, os.stat, zonefile)
 
+    def test_clean_old_zone_files_only_deletes_files(self):
+        zone_file_dir = patch_zone_file_config_path(self)
+
+        zonefiles = [
+            os.path.join(zone_file_dir, f"zone.{i}")
+            for i, _ in enumerate(range(2))
+        ]
+        for zonefile in zonefiles:
+            with open(zonefile, "w+"):
+                pass
+
+        child_dir = os.path.join(zone_file_dir, "test_dir")
+        os.mkdir(child_dir)
+
+        clean_old_zone_files()
+        self.assertIsNotNone(os.stat(child_dir))
+
+
     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