From: Aleš Date: Wed, 2 Jun 2021 16:32:53 +0000 (+0200) Subject: config: import jinja template from file X-Git-Tag: v6.0.0a1~151 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=780ea6ea3d7d730ddf7c256afd4c7ca0271e93a9;p=thirdparty%2Fknot-resolver.git config: import jinja template from file --- diff --git a/manager/knot_resolver_manager/configuration.py b/manager/knot_resolver_manager/configuration.py deleted file mode 100644 index a13a38bb0..000000000 --- a/manager/knot_resolver_manager/configuration.py +++ /dev/null @@ -1,66 +0,0 @@ -from typing import Text - -from jinja2 import Environment, Template - -from .datamodel import KresConfig - -_LUA_TEMPLATE_STR = """ -{% if cfg.server.hostname %} --- server.hostname -hostname('{{ cfg.server.hostname }}') -{% endif %} - --- network.interfaces -{% for item in cfg.network.interfaces %} -net.listen('{{ item.get_address() }}', {{ item.get_port() if item.get_port() else 'nil' }}, { - kind = '{{ item.kind if item.kind != 'dot' else 'tls' }}', - freebind = {{ 'true' if item.freebind else 'false'}} -}) -{% endfor %} - --- network.edns-buffer-size -net.bufsize({{ cfg.network.edns_buffer_size.get_downstream() }}, {{ cfg.network.edns_buffer_size.get_upstream() }}) - --- modules -modules = { - 'hints > iterate', -- Load /etc/hosts and allow custom root hints", - 'stats', -- Track internal statistics", -{% if cfg.options.prediction %} - predict = { -- Prefetch expiring/frequent records" - window = {{ cfg.options.prediction.get_window() }}, - period = {{ cfg.options.prediction.period }} - }, -{% endif %} -{% if cfg.dns64 %} - dns64 = '{{ cfg.dns64.prefix }}', -- dns64 -{% endif %} -} - --- cache -cache.open({{ cfg.cache.get_size_max() }}, 'lmdb://{{ cfg.cache.storage }}') - --- logging level -verbose({{ 'true' if cfg.logging.level > 3 else 'false'}}) - -{% if cfg.lua.script %} --- lua -{{ cfg.lua.script }} -{% endif %} -""" - -_ENV = Environment(enable_async=True, trim_blocks=True, lstrip_blocks=True) -_LUA_TEMPLATE: Template = _ENV.from_string(_LUA_TEMPLATE_STR) - - -async def render_lua(config: KresConfig) -> Text: - return await _LUA_TEMPLATE.render_async(cfg=config) - - -async def load_file(path: str) -> KresConfig: - try: - with open(path, "r") as file: - yaml_str = file.read() - except FileNotFoundError: - # return defaults - return KresConfig() - return KresConfig.from_yaml(yaml_str) diff --git a/manager/knot_resolver_manager/datamodel/config.py b/manager/knot_resolver_manager/datamodel/config.py index 9f16bb862..c606d8694 100644 --- a/manager/knot_resolver_manager/datamodel/config.py +++ b/manager/knot_resolver_manager/datamodel/config.py @@ -1,4 +1,7 @@ -from typing import Optional, Union +import pkgutil +from typing import Optional, Text, Union + +from jinja2 import Environment, Template from knot_resolver_manager.compat.dataclasses import dataclass from knot_resolver_manager.utils.dataclasses_parservalidator import DataclassParserValidatorMixin @@ -12,6 +15,17 @@ from .options_config import OptionsConfig from .server_config import ServerConfig +def _import_lua_template() -> Template: + env = Environment(trim_blocks=True, lstrip_blocks=True) + template = pkgutil.get_data("knot_resolver_manager.datamodel", "lua_template.j2") + if template is None: + raise OSError("package cannot be located or loaded") + return env.from_string(template.decode("utf-8")) + + +_LUA_TEMPLATE = _import_lua_template() + + @dataclass class KresConfig(DataclassParserValidatorMixin): # pylint: disable=too-many-instance-attributes @@ -31,3 +45,6 @@ class KresConfig(DataclassParserValidatorMixin): def _validate(self): pass + + def render_lua(self) -> Text: + return _LUA_TEMPLATE.render(cfg=self) diff --git a/manager/config/kresd-template.j2 b/manager/knot_resolver_manager/datamodel/lua_template.j2 similarity index 100% rename from manager/config/kresd-template.j2 rename to manager/knot_resolver_manager/datamodel/lua_template.j2 diff --git a/manager/knot_resolver_manager/kres_manager.py b/manager/knot_resolver_manager/kres_manager.py index 67e4a469d..29ae78782 100644 --- a/manager/knot_resolver_manager/kres_manager.py +++ b/manager/knot_resolver_manager/kres_manager.py @@ -5,7 +5,6 @@ from knot_resolver_manager.constants import KRESD_CONFIG_FILE from knot_resolver_manager.kresd_controller import BaseKresdController, get_best_controller_implementation from knot_resolver_manager.utils.async_utils import writefile -from . import configuration from .datamodel import KresConfig @@ -67,7 +66,7 @@ class KresManager: await self._spawn_new_child() async def _write_config(self, config: KresConfig): - lua_config = await configuration.render_lua(config) + lua_config = config.render_lua() await writefile(KRESD_CONFIG_FILE, lua_config) async def apply_config(self, config: KresConfig):