From 336e022a77c9a81755fc5093c79d5e35a3060f05 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= Date: Mon, 1 Dec 2025 20:36:20 +0100 Subject: [PATCH] datamodel: add /lua/policy-script* --- python/knot_resolver/datamodel/lua_schema.py | 10 ++++++++-- .../datamodel/templates/policy-loader.lua.j2 | 13 +++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/python/knot_resolver/datamodel/lua_schema.py b/python/knot_resolver/datamodel/lua_schema.py index 56e8ee095..b32a8c2c1 100644 --- a/python/knot_resolver/datamodel/lua_schema.py +++ b/python/knot_resolver/datamodel/lua_schema.py @@ -10,14 +10,20 @@ class LuaSchema(ConfigSchema): --- script_only: Ignore declarative configuration and use only Lua script or file defined in this section. - script: Custom Lua configuration script. - script_file: Path to file that contains Lua configuration script. + script: Custom Lua configuration script (for workers). + script_file: Path to file that contains Lua configuration script (for workers). + policy_script: Custom Lua configuration script for policy-loader. + policy_script_file: Path to file that contains Lua configuration script for policy-loader. """ script_only: bool = False script: Optional[str] = None script_file: Optional[ReadableFile] = None + policy_script: Optional[str] = None + policy_script_file: Optional[ReadableFile] = None def _validate(self) -> None: if self.script and self.script_file: raise ValueError("'lua.script' and 'lua.script-file' are both defined, only one can be used") + if self.policy_script and self.policy_script_file: + raise ValueError("'lua.policy-script' and 'lua.policy-script-file' are both defined, only one can be used") diff --git a/python/knot_resolver/datamodel/templates/policy-loader.lua.j2 b/python/knot_resolver/datamodel/templates/policy-loader.lua.j2 index 0b9997033..10d599af0 100644 --- a/python/knot_resolver/datamodel/templates/policy-loader.lua.j2 +++ b/python/knot_resolver/datamodel/templates/policy-loader.lua.j2 @@ -42,5 +42,18 @@ cache.open({{ cfg.cache.size_max.bytes() }}, 'lmdb://{{ cfg.cache.storage }}') {% endif %} +-- LUA section -------------------------------------- +-- Custom Lua code cannot be validated + +{% if cfg.lua.policy_script_file %} +{% import cfg.lua.policy_script_file as policy_script_file %} +{{ policy_script_file }} +{% endif %} + +{% if cfg.lua.policy_script %} +{{ cfg.lua.policy_script }} +{% endif %} + + -- exit policy-loader properly quit() -- 2.47.3