]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
datamodel: server: several management options moved to ServerSchema
authorAleš <ales.mrazek@nic.cz>
Thu, 6 Jan 2022 01:51:45 +0000 (02:51 +0100)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 8 Apr 2022 14:17:53 +0000 (16:17 +0200)
manager/etc/knot-resolver/config.dev.yml
manager/knot_resolver_manager/datamodel/server_schema.py
manager/knot_resolver_manager/datamodel/templates/server.lua.j2
manager/knot_resolver_manager/server.py
manager/tests/integration/config.yml
manager/tests/unit/datamodel/test_server_schema.py

index 074097e822d965ab6b2a5de7f8bcd6341895911a..2deeec790f03759a57edf529aeb8cafe4d4c1e90 100644 (file)
@@ -11,8 +11,8 @@ network:
         port: 5353
 server:
   workers: 1
+  rundir: etc/knot-resolver/runtime
   management:
     listen:
       ip: 127.0.0.1
       port: 5000
-    rundir: etc/knot-resolver/runtime
index 18c567b3eaa406a1413be22b4889b92039ca2db1..8b0916f51081c42d472ca07cc19e2036eb3b4d69 100644 (file)
@@ -41,25 +41,13 @@ class WatchDogSchema(SchemaNode):
 
 class ManagementSchema(SchemaNode):
     """
-    Configuration of the Manager itself.
+    Management API configuration.
 
     ---
     listen: Specifies where does the manager listen with its API. Can't be changed in runtime!
-    backend: Forces manager to use a specific service manager. Defaults to autodetection.
-    rundir: Directory where the manager can create files and which will be manager's cwd
-    watchdog: Systemd watchdog configuration. Can only be used with systemd backend.
     """
 
-    # the default listen path here MUST use the default rundir
     listen: Listen = Listen({"unix-socket": "./manager.sock"})
-    backend: BackendEnum = "auto"
-    rundir: UncheckedPath = UncheckedPath(".")
-    backend: BackendEnum = "auto"
-    watchdog: Union[Literal[False], WatchDogSchema] = False
-
-    def _validate(self) -> None:
-        if self.watchdog and self.backend not in ["auto", "systemd"]:
-            raise ValueError("'watchdog' can only be configured for 'systemd' backend")
 
 
 class WebmgmtSchema(SchemaNode):
@@ -70,12 +58,31 @@ class WebmgmtSchema(SchemaNode):
 
 
 class ServerSchema(SchemaNode):
+    """
+    DNS resolver server control and management configuration.
+
+    ---
+    hostname: Internal Knot Resolver hostname. Default is hostname of machine.
+    groupid: Additional identifier in case more managers are running on single machine.
+    nsid: Name Server Identifier (RFC 5001) which allows DNS clients to request resolver to send back its NSID along with the reply to a DNS request.
+    workers: The number of running 'Knot Resolver daemon' (kresd) workers. Based on number of CPUs if set to 'auto'.
+    use-cache-gc: Use cache garbage collector (kres-cache-gc) automatically.
+    backend: Forces manager to use a specific service manager. Defaults to autodetection.
+    watchdog: Systemd watchdog configuration. Can only be used with 'systemd' backend.
+    rundir: Directory where the manager can create files and which will be manager's cwd
+    management: Management API configuration.
+    webmgmt: Legacy built-in web management API configuration.
+    """
+
     class Raw(SchemaNode):
         hostname: Optional[str] = None
         groupid: Optional[str] = None
         nsid: Optional[str] = None
         workers: Union[Literal["auto"], int] = 1
         use_cache_gc: bool = True
+        backend: BackendEnum = "auto"
+        watchdog: Union[Literal[False], WatchDogSchema] = False
+        rundir: UncheckedPath = UncheckedPath(".")
         management: ManagementSchema = ManagementSchema()
         webmgmt: Optional[WebmgmtSchema] = None
 
@@ -86,6 +93,9 @@ class ServerSchema(SchemaNode):
     nsid: Optional[str]
     workers: int
     use_cache_gc: bool
+    backend: BackendEnum = "auto"
+    watchdog: Union[Literal[False], WatchDogSchema]
+    rundir: UncheckedPath = UncheckedPath(".")
     management: ManagementSchema
     webmgmt: Optional[WebmgmtSchema]
 
@@ -102,3 +112,5 @@ class ServerSchema(SchemaNode):
     def _validate(self) -> None:
         if self.workers < 0:
             raise ValueError("Number of workers must be non-negative")
+        if self.watchdog and self.backend not in ["auto", "systemd"]:
+            raise ValueError("'watchdog' can only be configured for 'systemd' backend")
index ee3f51aff4042965bd2ab6b79728ff8b69ce06c8..308442f9f5141ab202f09eef4b2bff247741edc9 100644 (file)
@@ -7,9 +7,9 @@ modules.load('nsid')
 nsid.name('{{ cfg.server.nsid }}_' .. worker.id)
 {% endif %}
 
-{% if cfg.server.management.watchdog -%}
+{% if cfg.server.watchdog -%}
 modules.load('watchdog')
-watchdog.config({ qname = '{{ cfg.server.management.watchdog.qname }}', qtype = kres.type.{{ cfg.server.management.watchdog.qtype }} })
+watchdog.config({ qname = '{{ cfg.server.watchdog.qname }}', qtype = kres.type.{{ cfg.server.watchdog.qtype }} })
 {% else %}
 modules.unload('watchdog')
 {%- endif %}
index 2b86719b0648d56b6510c8e37b33a726b8f79a88..0d2fc57880e7ab0c9d3863fc7d5d2bb481c69249 100644 (file)
@@ -259,8 +259,8 @@ async def _init_manager(config_store: ConfigStore) -> KresManager:
     """
     # if configured, create a subprocess controller manually
     controller: Optional[SubprocessController] = None
-    if config_store.get().server.management.backend != "auto":
-        controller = await get_controller_by_name(config_store.get(), config_store.get().server.management.backend)
+    if config_store.get().server.backend != "auto":
+        controller = await get_controller_by_name(config_store.get(), config_store.get().server.backend)
 
     # Create KresManager. This will perform autodetection of available service managers and
     # select the most appropriate to use (or use the one configured directly)
@@ -271,7 +271,7 @@ async def _init_manager(config_store: ConfigStore) -> KresManager:
 
 
 async def _deny_working_directory_changes(config_old: KresConfig, config_new: KresConfig) -> Result[None, str]:
-    if config_old.server.management.rundir != config_new.server.management.rundir:
+    if config_old.server.rundir != config_new.server.rundir:
         return Result.err("Changing manager's `rundir` during runtime is not allowed.")
 
     return Result.ok(None)
@@ -280,10 +280,10 @@ async def _deny_working_directory_changes(config_old: KresConfig, config_new: Kr
 def _set_working_directory(config_raw: ParsedTree):
     config = KresConfig(config_raw)
 
-    if not config.server.management.rundir.to_path().exists():
-        raise KresdManagerException(f"`rundir` directory ({config.server.management.rundir}) does not exist!")
+    if not config.server.rundir.to_path().exists():
+        raise KresdManagerException(f"`rundir` directory ({config.server.rundir}) does not exist!")
 
-    os.chdir(config.server.management.rundir.to_path())
+    os.chdir(config.server.rundir.to_path())
 
 
 async def start_server(config: Union[Path, ParsedTree, _DefaultSentinel] = _DEFAULT_SENTINEL):
index 5fe8f8a2499ce524a4911a35e13f4298967eeb71..f2cf2feff97d026241cfd604b14c9c2a6c6cab4c 100644 (file)
@@ -5,11 +5,11 @@ network:
         port: 5353
 server:
   workers: 1
+  rundir: tests/integration/run
   management:
     listen:
       ip: 127.0.0.1
       port: 5001
-    rundir: tests/integration/run
 cache:
   storage: cache
 logging:
index c40699f45aac1bf1bf4ccaa9b32a3a7bc8ffc6db..636ebba1ce1f9a9b0f1f7eb1c54bd752ab24f9a8 100644 (file)
@@ -1,11 +1,11 @@
 from pytest import raises
 
-from knot_resolver_manager.datamodel.server_schema import ManagementSchema
+from knot_resolver_manager.datamodel.server_schema import ServerSchema
 from knot_resolver_manager.exceptions import KresdManagerException
 
 
-def test_management_watchdog():
-    assert ManagementSchema({"watchdog": {"qname": "nic.cz.", "qtype": "A"}})
+def test_watchdog():
+    assert ServerSchema({"watchdog": {"qname": "nic.cz.", "qtype": "A"}})
 
     with raises(KresdManagerException):
-        ManagementSchema({"backend": "supervisord", "watchdog": {"qname": "nic.cz.", "qtype": "A"}})
+        ServerSchema({"backend": "supervisord", "watchdog": {"qname": "nic.cz.", "qtype": "A"}})