]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
datamodel: views: section created
authorAleš <ales.mrazek@nic.cz>
Thu, 18 Nov 2021 16:21:22 +0000 (17:21 +0100)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 8 Apr 2022 14:17:53 +0000 (16:17 +0200)
manager/knot_resolver_manager/datamodel/config_schema.py
manager/knot_resolver_manager/datamodel/view_schema.py [new file with mode: 0644]

index f73fb867b7aa75c631f32fdf83e688ba5e297807..5edb56d02f1abfd058d6926fa1b52722d258c543 100644 (file)
@@ -1,5 +1,5 @@
 import pkgutil
-from typing import Text, Union
+from typing import List, Text, Union, Optional
 
 from jinja2 import Environment, Template
 from typing_extensions import Literal
@@ -13,6 +13,7 @@ from knot_resolver_manager.datamodel.network_schema import NetworkSchema
 from knot_resolver_manager.datamodel.options_schema import OptionsSchema
 from knot_resolver_manager.datamodel.server_schema import ServerSchema
 from knot_resolver_manager.datamodel.static_hints_schema import StaticHintsSchema
+from knot_resolver_manager.datamodel.view_schema import ViewSchema
 from knot_resolver_manager.utils import SchemaNode
 
 
@@ -33,6 +34,7 @@ class KresConfig(SchemaNode):
         options: OptionsSchema = OptionsSchema()
         network: NetworkSchema = NetworkSchema()
         static_hints: StaticHintsSchema = StaticHintsSchema()
+        views: Optional[List[ViewSchema]] = None
         cache: CacheSchema = CacheSchema()
         dnssec: Union[bool, DnssecSchema] = True
         dns64: Union[bool, Dns64Schema] = False
@@ -45,6 +47,7 @@ class KresConfig(SchemaNode):
     options: OptionsSchema
     network: NetworkSchema
     static_hints: StaticHintsSchema
+    views: Optional[List[ViewSchema]]
     cache: CacheSchema
     dnssec: Union[Literal[False], DnssecSchema]
     dns64: Union[Literal[False], Dns64Schema]
diff --git a/manager/knot_resolver_manager/datamodel/view_schema.py b/manager/knot_resolver_manager/datamodel/view_schema.py
new file mode 100644 (file)
index 0000000..95ae423
--- /dev/null
@@ -0,0 +1,19 @@
+from typing import List, Optional
+
+from knot_resolver_manager.datamodel.types import IPNetwork
+from knot_resolver_manager.utils import SchemaNode
+from knot_resolver_manager.utils.types import LiteralEnum
+
+# TODO: FLAGS from https://knot-resolver.readthedocs.io/en/stable/lib.html?highlight=options#c.kr_qflags
+FlagsEnum = LiteralEnum["no-cache", "no-edns"]
+
+
+class ViewSchema(SchemaNode):
+    id: str
+    addresses: Optional[List[IPNetwork]] = None
+    tsig: Optional[List[str]] = None
+    options: Optional[List[FlagsEnum]] = None
+
+    def _validate(self) -> None:
+        if self.tsig is None and self.addresses is None:
+            raise ValueError("one of 'address' or 'rsig' must be configured")