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")
+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
from . import compat
from . import systemd
+from . import configuration
from .datamodel import ConfData
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: