from knot_resolver_manager.datamodel.lua_schema import LuaSchema
from knot_resolver_manager.datamodel.network_schema import NetworkSchema
from knot_resolver_manager.datamodel.options_schema import OptionsSchema
+from knot_resolver_manager.datamodel.policy_schema import PolicySchema
from knot_resolver_manager.datamodel.server_schema import ServerSchema
from knot_resolver_manager.datamodel.static_hints_schema import StaticHintsSchema
from knot_resolver_manager.datamodel.stub_zone_schema import StubZoneSchema
network: NetworkSchema = NetworkSchema()
static_hints: StaticHintsSchema = StaticHintsSchema()
views: Optional[List[ViewSchema]] = None
+ policy: Optional[List[PolicySchema]] = None
stub_zones: Optional[List[StubZoneSchema]] = None
forward_zones: Optional[List[ForwardZoneSchema]] = None
cache: CacheSchema = CacheSchema()
network: NetworkSchema
static_hints: StaticHintsSchema
views: Optional[List[ViewSchema]]
+ policy: Optional[List[PolicySchema]]
stub_zones: Optional[List[StubZoneSchema]]
forward_zones: Optional[List[ForwardZoneSchema]]
cache: CacheSchema
--- /dev/null
+from typing import List, Optional
+from knot_resolver_manager.datamodel.types import IPAddressPort
+
+from knot_resolver_manager.datamodel.view_schema import FlagsEnum
+from knot_resolver_manager.utils import SchemaNode
+from knot_resolver_manager.utils.types import LiteralEnum
+
+# TODO: add all other options
+ActionEnum = LiteralEnum["deny", "pass", "mirror"]
+
+
+class FilterSchema(SchemaNode):
+ suffix: Optional[str] = None
+ pattern: Optional[str] = None
+ query_type: Optional[str] = None
+
+
+class AnswerSchema(SchemaNode):
+ pass
+
+
+class PolicySchema(SchemaNode):
+ id: str
+ action: ActionEnum
+ mirror: Optional[List[IPAddressPort]] = None
+ filters: Optional[List[FilterSchema]] = None
+ message: Optional[str] = None
+ answer: Optional[AnswerSchema] = None
+ views: Optional[List[str]] = None
+ options: Optional[List[FlagsEnum]] = None
+
+ def _validate(self) -> None:
+ pass