]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
datamodel: simple configuration
authorAleš <ales.mrazek@nic.cz>
Mon, 22 Mar 2021 15:12:47 +0000 (16:12 +0100)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 8 Apr 2022 14:17:51 +0000 (16:17 +0200)
manager/knot_resolver_manager/__main__.py
manager/knot_resolver_manager/configuration.py [moved from manager/knot_resolver_manager/confmodel.py with 87% similarity]
manager/knot_resolver_manager/datamodel.py [new file with mode: 0644]
manager/knot_resolver_manager/kresd_manager.py

index c2f05a22303c3941f38fc6b0ed3180bf3d59103a..48de505b8970911ba2cf18ab7ee60f6de8ad29e1 100644 (file)
@@ -1,7 +1,7 @@
 from aiohttp import web
 from knot_resolver_manager.kresd_manager import KresdManager
 
-from . import confmodel
+from . import configuration
 
 _SOCKET_PATH = "/tmp/manager.sock"
 
@@ -11,7 +11,7 @@ async def hello(_request: web.Request) -> web.Response:
 
 
 async def apply_config(request: web.Request) -> web.Response:
-    config = await confmodel.parse(await request.text())
+    config = await configuration.parse(await request.text())
     manager: KresdManager = request.app["kresd_manager"]
     await manager.apply_config(config)
     return web.Response(text="OK")
similarity index 87%
rename from manager/knot_resolver_manager/confmodel.py
rename to manager/knot_resolver_manager/configuration.py
index 411a511273e9e8636148411f0905d5edd9cc0726..995bc30e89a4cd6ffe7dc1d670d1e4186726cdb8 100644 (file)
@@ -2,6 +2,8 @@ from strictyaml import Map, Str, Int
 from strictyaml.parser import load
 from strictyaml.representation import YAML
 
+from .datamodel import ConfData
+
 
 _CONFIG_SCHEMA = Map({"lua_config": Str(), "num_workers": Int()})
 
@@ -37,8 +39,7 @@ async def _validate_config(config):
         raise ConfigValidationException("Number of workers must be non-negative")
 
 
-async def parse(textual_config: str) -> YAML:
-    schema = _get_config_schema()
-    conf = load(textual_config, schema)
-    await _validate_config(conf)
-    return conf
+async def parse(yaml: str) -> ConfData:
+    conf = ConfData.from_yaml(yaml)
+    await conf.validate()
+    return conf
\ No newline at end of file
diff --git a/manager/knot_resolver_manager/datamodel.py b/manager/knot_resolver_manager/datamodel.py
new file mode 100644 (file)
index 0000000..6012b8d
--- /dev/null
@@ -0,0 +1,18 @@
+from dataclasses import dataclass
+
+from .utils import dataclass_strictyaml
+
+
+class ConfDataValidationException(Exception):
+    pass
+
+
+@dataclass
+@dataclass_strictyaml
+class ConfData:
+    num_workers: int = 1
+    lua_config: str = None
+
+    async def validate(self) -> bool:
+        if self.num_workers < 0:
+            raise ConfDataValidationException("Number of workers must be non-negative")
index 88d2c68db7d06dafce04f9d858fbb3b040ab8b95..6ac26430fbb5c1e094d6e267bcb351f563e60567 100644 (file)
@@ -5,6 +5,7 @@ from strictyaml.representation import YAML
 
 from . import compat
 from . import systemd
+from .datamodel import ConfData
 
 
 class Kresd:
@@ -76,13 +77,13 @@ class KresdManager:
         while len(self._children) < n:
             await self._spawn_new_child()
 
-    async def _write_config(self, config: YAML):
+    async def _write_config(self, config: ConfData):
         # FIXME: this code is blocking!!!
         with open("/etc/knot-resolver/kresd.conf", "w") as f:
-            f.write(config["lua_config"].text)
+            f.write(config.lua_config)
 
-    async def apply_config(self, config: YAML):
+    async def apply_config(self, config: ConfData):
         async with self._children_lock:
             await self._write_config(config)
-            await self._ensure_number_of_children(config["num_workers"])
+            await self._ensure_number_of_children(config.num_workers)
             await self._rolling_restart()