]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
config: import jinja template from file
authorAleš <ales.mrazek@nic.cz>
Wed, 2 Jun 2021 16:32:53 +0000 (18:32 +0200)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 8 Apr 2022 14:17:52 +0000 (16:17 +0200)
manager/knot_resolver_manager/configuration.py [deleted file]
manager/knot_resolver_manager/datamodel/config.py
manager/knot_resolver_manager/datamodel/lua_template.j2 [moved from manager/config/kresd-template.j2 with 100% similarity]
manager/knot_resolver_manager/kres_manager.py

diff --git a/manager/knot_resolver_manager/configuration.py b/manager/knot_resolver_manager/configuration.py
deleted file mode 100644 (file)
index a13a38b..0000000
+++ /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)
index 9f16bb862328b2dccc2ed5ada55992155e690122..c606d86948289da7ae058339cebe3caa65677de0 100644 (file)
@@ -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)
index 67e4a469dce90ff419638547872fb813494980c7..29ae78782c811304a68f86ca71a5f4bc4a36ec24 100644 (file)
@@ -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):