From: Aleš Date: Mon, 22 Mar 2021 15:12:47 +0000 (+0100) Subject: datamodel: simple configuration X-Git-Tag: v6.0.0a1~208 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b9b3fd0341d2fb9f0f14bdd3b69232d1f70aebae;p=thirdparty%2Fknot-resolver.git datamodel: simple configuration --- diff --git a/manager/knot_resolver_manager/__main__.py b/manager/knot_resolver_manager/__main__.py index c2f05a223..48de505b8 100644 --- a/manager/knot_resolver_manager/__main__.py +++ b/manager/knot_resolver_manager/__main__.py @@ -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") diff --git a/manager/knot_resolver_manager/confmodel.py b/manager/knot_resolver_manager/configuration.py similarity index 87% rename from manager/knot_resolver_manager/confmodel.py rename to manager/knot_resolver_manager/configuration.py index 411a51127..995bc30e8 100644 --- a/manager/knot_resolver_manager/confmodel.py +++ b/manager/knot_resolver_manager/configuration.py @@ -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 index 000000000..6012b8db6 --- /dev/null +++ b/manager/knot_resolver_manager/datamodel.py @@ -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") diff --git a/manager/knot_resolver_manager/kresd_manager.py b/manager/knot_resolver_manager/kresd_manager.py index 88d2c68db..6ac26430f 100644 --- a/manager/knot_resolver_manager/kresd_manager.py +++ b/manager/knot_resolver_manager/kresd_manager.py @@ -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()