]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
manager: datamodel: id, hostname, rundir moved to top level node
authorAleš Mrázek <ales.mrazek@nic.cz>
Mon, 2 May 2022 15:27:50 +0000 (17:27 +0200)
committerAleš Mrázek <ales.mrazek@nic.cz>
Tue, 3 May 2022 11:34:17 +0000 (13:34 +0200)
manager/etc/knot-resolver/config.dev.yml
manager/knot_resolver_manager/constants.py
manager/knot_resolver_manager/datamodel/config_schema.py
manager/knot_resolver_manager/datamodel/server_schema.py
manager/knot_resolver_manager/datamodel/templates/config.lua.j2
manager/knot_resolver_manager/datamodel/templates/server.lua.j2
manager/knot_resolver_manager/server.py
manager/tests/unit/datamodel/test_config_schema.py
manager/tests/unit/utils.py

index 2adfd962949515f1553cfa462e4ab2f5dde1329e..e51dada996a1c1ab38c627dacb84cb3aad83d70f 100644 (file)
@@ -1,3 +1,9 @@
+id: dev
+rundir: etc/knot-resolver/runtime
+server:
+  workers: 1
+  management:
+    interface: 127.0.0.1@5000
 cache:
   storage: ../cache
 logging:
@@ -7,9 +13,3 @@ logging:
 network:
   listen:
     - interface: 127.0.0.1@5353
-server:
-  id: dev
-  workers: 1
-  rundir: etc/knot-resolver/runtime
-  management:
-    interface: 127.0.0.1@5000
\ No newline at end of file
index b85cf5b9abfcb487cd1425c4a9b94a821d7cf312..4ba851799634a3fb0653ccd9ea5ab485884c1f8e 100644 (file)
@@ -73,14 +73,14 @@ class _UserConstants:
 
     @property
     def ID(self) -> str:
-        return str(self._config_store.get().server.id)
+        return str(self._config_store.get().id)
 
 
 _user_constants: Optional[_UserConstants] = None
 
 
 async def _deny_id_changes(config_old: KresConfig, config_new: KresConfig) -> Result[None, str]:
-    if config_old.server.id != config_new.server.id:
+    if config_old.id != config_new.id:
         return Result.err(
             "/id: Based on the ID, the manager recognizes subprocesses,"
             " so it is not possible to change it while services are running."
index ae3050859715428b78e427c58f397ff5430efe5f..3f798827a21f4de3dab4fab08b0d1179ccb120ad 100644 (file)
@@ -1,4 +1,5 @@
 import os
+import socket
 import sys
 from typing import Dict, Optional, Union
 
@@ -20,6 +21,7 @@ from knot_resolver_manager.datamodel.server_schema import ServerSchema
 from knot_resolver_manager.datamodel.static_hints_schema import StaticHintsSchema
 from knot_resolver_manager.datamodel.stub_zone_schema import StubZoneSchema
 from knot_resolver_manager.datamodel.types import DomainName
+from knot_resolver_manager.datamodel.types.types import IDPattern, UncheckedPath
 from knot_resolver_manager.datamodel.view_schema import ViewSchema
 from knot_resolver_manager.utils import SchemaNode
 
@@ -59,6 +61,9 @@ class KresConfig(SchemaNode):
         Knot Resolver declarative configuration.
 
         ---
+        id: System-wide unique identifier of this instance. Used for grouping logs and tagging workers.
+        hostname: Internal DNS resolver hostname. Default is machine hostname.
+        rundir: Directory where the resolver can create files and which will be it's cwd.
         server: DNS server control and management configuration.
         options: Fine-tuning global parameters of DNS resolver operation.
         network: Network connections and protocols configuration.
@@ -76,7 +81,10 @@ class KresConfig(SchemaNode):
         lua: Custom Lua configuration.
         """
 
-        server: ServerSchema
+        id: IDPattern
+        hostname: Optional[str] = None
+        rundir: UncheckedPath = UncheckedPath(".")
+        server: ServerSchema = ServerSchema()
         options: OptionsSchema = OptionsSchema()
         network: NetworkSchema = NetworkSchema()
         static_hints: StaticHintsSchema = StaticHintsSchema()
@@ -94,6 +102,9 @@ class KresConfig(SchemaNode):
 
     _PREVIOUS_SCHEMA = Raw
 
+    id: IDPattern
+    hostname: str
+    rundir: UncheckedPath
     server: ServerSchema
     options: OptionsSchema
     network: NetworkSchema
@@ -110,6 +121,11 @@ class KresConfig(SchemaNode):
     monitoring: MonitoringSchema
     lua: LuaSchema
 
+    def _hostname(self, obj: Raw) -> str:
+        if obj.hostname is None:
+            return socket.gethostname()
+        return obj.hostname
+
     def _dnssec(self, obj: Raw) -> Union[Literal[False], DnssecSchema]:
         if obj.dnssec is True:
             return DnssecSchema()
index 2e70da336e779727a1cda2b0ee4129c18e7cefc7..f723605b2ee9060f92a50284e79b7c067fe82d8a 100644 (file)
@@ -1,6 +1,5 @@
 import logging
 import os
-import socket
 from typing import Any, Optional, Union
 
 from typing_extensions import Literal
@@ -12,9 +11,7 @@ from knot_resolver_manager.datamodel.types import (
     InterfacePort,
     IntPositive,
     IPAddressPort,
-    UncheckedPath,
 )
-from knot_resolver_manager.datamodel.types.types import IDPattern
 from knot_resolver_manager.exceptions import DataException
 from knot_resolver_manager.utils import SchemaNode
 
@@ -101,41 +98,27 @@ class ServerSchema(SchemaNode):
         DNS server control and management configuration.
 
         ---
-        id: System-wide unique identifier of this manager instance. Used for grouping logs and tagging kresd processes.
-        hostname: Internal DNS resolver hostname. Default is machine hostname.
         workers: The number of running kresd (Knot Resolver daemon) workers. If set to 'auto', it is equal to number of CPUs available.
         backend: Forces the manager to use a specific service supervisor.
         watchdog: Disable systemd watchdog, enable with defaults or set new configuration. Can only be used with 'systemd' backend.
-        rundir: Directory where the resolver can create files and which will be it's cwd.
         management: Configuration of management HTTP API.
         webmgmt: Configuration of legacy web management endpoint.
         """
 
-        id: IDPattern
-        hostname: Optional[str] = None
         workers: Union[Literal["auto"], IntPositive] = IntPositive(1)
         backend: BackendEnum = "auto"
         watchdog: Union[bool, WatchDogSchema] = True
-        rundir: UncheckedPath = UncheckedPath(".")
         management: ManagementSchema = ManagementSchema({"unix-socket": "./manager.sock"})
         webmgmt: Optional[WebmgmtSchema] = None
 
     _PREVIOUS_SCHEMA = Raw
 
-    id: IDPattern
-    hostname: str
     workers: IntPositive
     backend: BackendEnum = "auto"
     watchdog: Union[bool, WatchDogSchema]
-    rundir: UncheckedPath = UncheckedPath(".")
     management: ManagementSchema
     webmgmt: Optional[WebmgmtSchema]
 
-    def _hostname(self, obj: Raw) -> Any:
-        if obj.hostname is None:
-            return socket.gethostname()
-        return obj.hostname
-
     def _workers(self, obj: Raw) -> Any:
         if obj.workers == "auto":
             return IntPositive(_cpu_count())
index 08a85ab055c6fb7c6e8255e020019f277d22ec5c..77316e6fb2656a706ece27be752ef78a46a5d077 100644 (file)
@@ -1,5 +1,8 @@
 {% if not cfg.lua.script_only %}
 
+-- hostname
+hostname('{{ cfg.hostname }}')
+
 -- LOGGING section
 {% include "logging.lua.j2" %}
 
index c2f6b7258c95d53259de7f493642de11e5460954..743c616bd89bc612ba14344a7015c52a064b7a2a 100644 (file)
@@ -1,6 +1,3 @@
--- server.hostname
-hostname('{{ cfg.server.hostname }}')
-
 {% if cfg.server.watchdog -%}
 -- server.watchdog
 modules.load('watchdog')
index 9b2a08e8d78ef8052e2fcd8ac61197dc0cf21ea2..122ee0dc25fa1fa1d8b6a0bf0ee23950dfc21b1f 100644 (file)
@@ -327,7 +327,7 @@ async def _init_manager(config_store: ConfigStore, server: Server) -> KresManage
 
 
 async def _deny_working_directory_changes(config_old: KresConfig, config_new: KresConfig) -> Result[None, str]:
-    if config_old.server.rundir != config_new.server.rundir:
+    if config_old.rundir != config_new.rundir:
         return Result.err("Changing manager's `rundir` during runtime is not allowed.")
 
     return Result.ok(None)
@@ -336,10 +336,10 @@ async def _deny_working_directory_changes(config_old: KresConfig, config_new: Kr
 def _set_working_directory(config_raw: ParsedTree) -> None:
     config = KresConfig(config_raw)
 
-    if not config.server.rundir.to_path().exists():
-        raise KresManagerException(f"`rundir` directory ({config.server.rundir}) does not exist!")
+    if not config.rundir.to_path().exists():
+        raise KresManagerException(f"`rundir` directory ({config.rundir}) does not exist!")
 
-    os.chdir(config.server.rundir.to_path())
+    os.chdir(config.rundir.to_path())
 
 
 def _lock_working_directory(attempt: int = 0) -> None:
index d8ad83a1e24dff0718754b3449e9eed70a1075d1..4b18843c3cab431f6d28204721df9ee5cfdec694 100644 (file)
@@ -17,7 +17,7 @@ def test_config_defaults():
 
 
 def test_dnssec_false():
-    config = KresConfig({"server": {"id": "test"}, "dnssec": False})
+    config = KresConfig({"id": "test", "dnssec": False})
 
     assert config.dnssec == False
 
@@ -38,7 +38,7 @@ def test_dnssec_default_true():
 
 
 def test_dns64_prefix_default():
-    assert str(KresConfig({"server": {"id": "test"}, "dns64": True}).dns64.prefix) == "64:ff9b::/96"
+    assert str(KresConfig({"id": "test", "dns64": True}).dns64.prefix) == "64:ff9b::/96"
 
 
 def test_config_json_schema():
index 7b07f26a1243a06f7edd7d3c2e546a0615453d28..66f5afc580a7a8a945c792d65b54bbdba87973ae 100644 (file)
@@ -5,4 +5,4 @@ def test_instance_of_kres_config() -> KresConfig:
     """
     Creates an instance of KresConfig without requiring any arguments.
     """
-    return KresConfig({"server": {"id": "test"}})
+    return KresConfig({"id": "test"})