]> mj.ucw.cz Git - pynsc.git/commitdiff
Custom daemon options per zone
authorMartin Mares <mj@ucw.cz>
Sun, 21 Apr 2024 16:09:24 +0000 (18:09 +0200)
committerMartin Mares <mj@ucw.cz>
Sun, 21 Apr 2024 16:09:24 +0000 (18:09 +0200)
TODO
example/example_org.py
nsconfig/core.py
nsconfig/daemon/bind.py

diff --git a/TODO b/TODO
index 5a8e10178a6f2803b8c401a2328b1fe8d349eac9..664dcd3d88295179cb53996b3966c4926641ee22 100644 (file)
--- a/TODO
+++ b/TODO
@@ -4,5 +4,4 @@
 - Blackhole zones
 - DNSSEC
 - Automated generation of Null MX
-- Bind: custom config
 - Logging
index fa264e56d1857a0fc46121c4a86d0521504f9ff2..f3b49a4e2eeb7fc9e6c5358b35d9ec2b006de6ee 100644 (file)
@@ -1,6 +1,6 @@
 from example import nsc
 
-z = nsc.add_zone('example.org')
+z = nsc.add_zone('example.org', daemon_options=['check-integrity yes;'])
 
 (z[""]
     .NS('ns1', 'ns2')
index 1ea70551019e7c71fc718022a667a15cefdad363..53739ef304afb03744c24c24b125aa70971835a4 100644 (file)
@@ -21,7 +21,7 @@ import json
 from pathlib import Path
 import socket
 import sys
-from typing import Optional, Dict, List, Self, Tuple, DefaultDict, TextIO, TYPE_CHECKING
+from typing import Optional, Dict, List, Self, DefaultDict, TextIO, TYPE_CHECKING
 
 from nsconfig.util import flatten_list
 
@@ -115,6 +115,7 @@ class NscZoneConfig:
     expire: timedelta
     min_ttl: timedelta
     origin_server: str
+    daemon_options: List[str]
 
     default_config: Optional['NscZoneConfig'] = None
 
@@ -125,6 +126,8 @@ class NscZoneConfig:
                  expire: Optional[timedelta] = None,
                  min_ttl: Optional[timedelta] = None,
                  origin_server: Optional[str] = None,
+                 daemon_options: Optional[List[str]] = None,
+                 add_daemon_options: Optional[List[str]] = None,
                  inherit_config: Optional['NscZoneConfig'] = None,
                  ) -> None:
         if inherit_config is None:
@@ -135,6 +138,9 @@ class NscZoneConfig:
         self.expire = expire if expire is not None else inherit_config.expire
         self.min_ttl = min_ttl if min_ttl is not None else inherit_config.min_ttl
         self.origin_server = origin_server if origin_server is not None else inherit_config.origin_server
+        self.daemon_options = daemon_options if daemon_options is not None else inherit_config.daemon_options
+        if add_daemon_options is not None:
+            self.daemon_options += add_daemon_options
 
     def finalize(self) -> Self:
         if not self.origin_server:
@@ -151,6 +157,7 @@ NscZoneConfig.default_config = NscZoneConfig(
     expire=timedelta(days=14),
     min_ttl=timedelta(days=1),
     origin_server="",
+    daemon_options=[],
 )
 
 
index e6a59b8a70aa334c5e16b8d57fdb577054e8c39c..e639565ec9f7696e9877419d075d9bd1eba1f5ba 100644 (file)
@@ -33,6 +33,8 @@ class NscDaemonBind(NscDaemon):
                 file.write(f'\tmasters {{ {z.primary_server}; }};\n')
             else:
                 raise NotImplementedError()
+            for opt in z.config.daemon_options:
+                file.write(f'\t{opt}\n')
             file.write('}\n\n')
 
     def write_config(self) -> None: