import pkgutil
-from typing import Text, Union
+from typing import List, Text, Union, Optional
from jinja2 import Environment, Template
from typing_extensions import Literal
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
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
options: OptionsSchema
network: NetworkSchema
static_hints: StaticHintsSchema
+ views: Optional[List[ViewSchema]]
cache: CacheSchema
dnssec: Union[Literal[False], DnssecSchema]
dns64: Union[Literal[False], Dns64Schema]
--- /dev/null
+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")