From: Martin Mares Date: Sun, 21 Apr 2024 16:09:24 +0000 (+0200) Subject: Custom daemon options per zone X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=9e847289ad3312b46c70e7eba0b6f7d25b185817;p=pynsc.git Custom daemon options per zone --- diff --git a/TODO b/TODO index 5a8e101..664dcd3 100644 --- a/TODO +++ b/TODO @@ -4,5 +4,4 @@ - Blackhole zones - DNSSEC - Automated generation of Null MX -- Bind: custom config - Logging diff --git a/example/example_org.py b/example/example_org.py index fa264e5..f3b49a4 100644 --- a/example/example_org.py +++ b/example/example_org.py @@ -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') diff --git a/nsconfig/core.py b/nsconfig/core.py index 1ea7055..53739ef 100644 --- a/nsconfig/core.py +++ b/nsconfig/core.py @@ -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=[], ) diff --git a/nsconfig/daemon/bind.py b/nsconfig/daemon/bind.py index e6a59b8..e639565 100644 --- a/nsconfig/daemon/bind.py +++ b/nsconfig/daemon/bind.py @@ -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: