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
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)
--- /dev/null
+from knot_resolver_manager.utils import DataParser, DataValidator
+
+
+class Dns64(DataParser):
+ prefix: str = "64:ff9b::"
+
+
+class Dns64Strict(DataValidator):
+ prefix: str
+
+ def _validate(self):
+ pass
--- /dev/null
+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::"
--- /dev/null
+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"