]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
conf: render Lua config using jinja2
authorAleš <ales.mrazek@nic.cz>
Tue, 23 Mar 2021 20:11:05 +0000 (21:11 +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
manager/knot_resolver_manager/kresd_manager.py

index 48de505b8970911ba2cf18ab7ee60f6de8ad29e1..50bd9285c022c3bcb19b1afac6b2c046f779dbc0 100644 (file)
@@ -11,7 +11,7 @@ async def hello(_request: web.Request) -> web.Response:
 
 
 async def apply_config(request: web.Request) -> web.Response:
-    config = await configuration.parse(await request.text())
+    config = await configuration.parse_yaml(await request.text())
     manager: KresdManager = request.app["kresd_manager"]
     await manager.apply_config(config)
     return web.Response(text="OK")
index 563fc3942c18b7954e8e9ed26310963af4e5d2ce..897859d7f94652adf61bd1130775971c50bb2dd8 100644 (file)
@@ -1,11 +1,23 @@
+from typing import Text
+from jinja2 import Environment
+
 from .datamodel import ConfData
 
+_LUA_TEMPLATE_STR = """
+{% if lua_config -%}
+{{ config.lua_config }}
+{% endif -%}
+"""
+
+_ENV = Environment(enable_async=True)
+_LUA_TEMPLATE = _ENV.from_string(_LUA_TEMPLATE_STR)
+
 
-class ConfigValidationException(Exception):
-    pass
+async def render_lua(config: ConfData) -> Text:
+    return await _LUA_TEMPLATE.render_async(config=config)
 
 
-async def parse(yaml: str) -> ConfData:
-    conf = ConfData.from_yaml(yaml)
-    await conf.validate()
-    return conf
+async def parse_yaml(yaml: str) -> ConfData:
+    config = ConfData.from_yaml(yaml)
+    await config.validate()
+    return config
index dfcc8b7dcc75fed8225c540c8e47b419a36be276..a84108588fe1b3ab10f34c89609051524f9dc92f 100644 (file)
@@ -4,6 +4,7 @@ from typing import List, Optional
 
 from . import compat
 from . import systemd
+from . import configuration
 from .datamodel import ConfData
 
 
@@ -78,9 +79,9 @@ class KresdManager:
 
     async def _write_config(self, config: ConfData):
         # FIXME: this code is blocking!!!
-        if config.lua_config is not None:
-            with open("/etc/knot-resolver/kresd.conf", "w") as f:
-                f.write(config.lua_config)
+        lua_config = await configuration.render_lua(config)
+        with open("/etc/knot-resolver/kresd.conf", "w") as f:
+            f.write(lua_config)
 
     async def apply_config(self, config: ConfData):
         async with self._children_lock: