From: Aleš Date: Wed, 8 Sep 2021 10:56:51 +0000 (+0200) Subject: datamodel: dns64 section added X-Git-Tag: v6.0.0a1~125^2~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0d74c4a072d4d7f7e4207b89e344d02edbe0e210;p=thirdparty%2Fknot-resolver.git datamodel: dns64 section added --- diff --git a/manager/knot_resolver_manager/datamodel/config.py b/manager/knot_resolver_manager/datamodel/config.py index e73e2f5a8..fc8e9d3bd 100644 --- a/manager/knot_resolver_manager/datamodel/config.py +++ b/manager/knot_resolver_manager/datamodel/config.py @@ -1,8 +1,9 @@ import pkgutil -from typing import Optional, Text +from typing import Optional, Text, Union from jinja2 import Environment, Template +from knot_resolver_manager.datamodel.dns64_config import Dns64, Dns64Strict from knot_resolver_manager.datamodel.lua_config import Lua, LuaStrict from knot_resolver_manager.datamodel.network_config import Network, NetworkStrict from knot_resolver_manager.datamodel.server_config import Server, ServerStrict @@ -23,14 +24,21 @@ _LUA_TEMPLATE = _import_lua_template() class KresConfig(DataParser): server: Server = Server() network: Network = Network() + dns64: Union[bool, Dns64] = False lua: Optional[Lua] = None class KresConfigStrict(DataValidator): server: ServerStrict network: NetworkStrict + dns64: Union[bool, Dns64Strict] = False lua: Optional[LuaStrict] + def _dns64(self, obj: KresConfig) -> Union[bool, Dns64]: + if obj.dns64 is True: + return Dns64() + return obj.dns64 + def render_lua(self) -> Text: return _LUA_TEMPLATE.render(cfg=self) diff --git a/manager/knot_resolver_manager/datamodel/dns64_config.py b/manager/knot_resolver_manager/datamodel/dns64_config.py new file mode 100644 index 000000000..0cd1fe276 --- /dev/null +++ b/manager/knot_resolver_manager/datamodel/dns64_config.py @@ -0,0 +1,12 @@ +from knot_resolver_manager.utils import DataParser, DataValidator + + +class Dns64(DataParser): + prefix: str = "64:ff9b::" + + +class Dns64Strict(DataValidator): + prefix: str + + def _validate(self): + pass diff --git a/manager/knot_resolver_manager/datamodel/lua_template.j2 b/manager/knot_resolver_manager/datamodel/lua_template.j2 index 889202e6c..4c24fde45 100644 --- a/manager/knot_resolver_manager/datamodel/lua_template.j2 +++ b/manager/knot_resolver_manager/datamodel/lua_template.j2 @@ -17,6 +17,13 @@ net.listen('{{ item.address }}', {{ item.port }}, { }) {% endfor %} +-- MODULES +modules = { +{% if cfg.dns64 %} + dns64 = '{{ cfg.dns64.prefix }}', -- DNS64 +{% endif %} +} + {% if cfg.lua %} -- LUA section {% if cfg.lua.script_file %} diff --git a/manager/tests/datamodel/test_config.py b/manager/tests/datamodel/test_config.py new file mode 100644 index 000000000..9b21633f5 --- /dev/null +++ b/manager/tests/datamodel/test_config.py @@ -0,0 +1,9 @@ +from knot_resolver_manager.datamodel import KresConfig, KresConfigStrict + + +def test_dns64_true_default(): + config = KresConfig({"dns64": True}) + strict = KresConfigStrict(config) + + assert strict.dns64 + assert strict.dns64.prefix == "64:ff9b::" diff --git a/manager/tests/datamodel/test_dns64_config.py b/manager/tests/datamodel/test_dns64_config.py new file mode 100644 index 000000000..d594a2ea3 --- /dev/null +++ b/manager/tests/datamodel/test_dns64_config.py @@ -0,0 +1,16 @@ +from knot_resolver_manager.datamodel.dns64_config import Dns64, Dns64Strict + +yaml = """ +prefix: fe80::21b:77ff:0:0 +""" + +config = Dns64.from_yaml(yaml) +strict = Dns64Strict(config) + + +def test_parsing(): + assert config.prefix == "fe80::21b:77ff:0:0" + + +def test_validating(): + assert strict.prefix == "fe80::21b:77ff:0:0"