import pkgutil
-from typing import Dict, List, Optional, Text, Union
+from typing import Dict, Optional, Text, Union
from jinja2 import Environment, Template
from typing_extensions import Literal
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
+from knot_resolver_manager.datamodel.types import DomainName
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
+ views: Optional[Dict[str, ViewSchema]] = None
policy: Optional[Dict[str, PolicySchema]] = None
- stub_zones: Optional[List[StubZoneSchema]] = None
- forward_zones: Optional[List[ForwardZoneSchema]] = None
+ stub_zones: Optional[Dict[DomainName, StubZoneSchema]] = None
+ forward_zones: Optional[Dict[DomainName, ForwardZoneSchema]] = 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]]
+ views: Optional[Dict[str, ViewSchema]]
policy: Optional[Dict[str, PolicySchema]]
- stub_zones: Optional[List[StubZoneSchema]]
- forward_zones: Optional[List[ForwardZoneSchema]]
+ stub_zones: Optional[Dict[DomainName, StubZoneSchema]]
+ forward_zones: Optional[Dict[DomainName, ForwardZoneSchema]]
cache: CacheSchema
dnssec: Union[Literal[False], DnssecSchema]
dns64: Union[Literal[False], Dns64Schema]
from typing import List, Optional, Union
-from knot_resolver_manager.datamodel.types import AnyPath, DomainName, IPAddressPort
+from knot_resolver_manager.datamodel.types import CheckedPath, DomainName, IPAddressPort
from knot_resolver_manager.datamodel.view_schema import FlagsEnum
from knot_resolver_manager.utils import SchemaNode
address: IPAddressPort
pin_sha256: Optional[Union[str, List[str]]] = None
hostname: Optional[DomainName] = None
- ca_file: Optional[AnyPath] = None
+ ca_file: Optional[CheckedPath] = None
class ForwardZoneSchema(SchemaNode):
- name: DomainName
tls: bool = False
servers: Union[List[IPAddressPort], List[ForwardServerSchema]]
views: Optional[List[str]] = None
-- static-hints.root-hints
{% if cfg.static_hints.root_hints %}
hints.root({
-{% for item in cfg.static_hints.root_hints %}
- ['{{ item.name }}'] = {
-{% for addr in item.addresses %}
+{% for name, addrs in cfg.static_hints.root_hints.items() %}
+['{{ name }}'] = {
+{% for addr in addrs %}
'{{ addr }}',
{% endfor %}
},
-- static-hints.hints
{% if cfg.static_hints.hints %}
-{% for item in cfg.static_hints.hints %}
-{% for addr in item.addresses %}
-hints.set('{{ item.name }} {{ addr }}')
+{% for name, addrs in cfg.static_hints.hints.items() %}
+{% for addr in addrs %}
+hints.set('{{ name }} {{ addr }}')
{% endfor %}
{% endfor %}
{% endif %}
-from typing import List, Optional
+from typing import Dict, List, Optional
-from knot_resolver_manager.datamodel.types import CheckedPath, TimeUnit
+from knot_resolver_manager.datamodel.types import CheckedPath, DomainName, IPAddress, TimeUnit
from knot_resolver_manager.utils import SchemaNode
-class Hint(SchemaNode):
- name: str
- addresses: List[str]
-
-
class StaticHintsSchema(SchemaNode):
ttl: Optional[TimeUnit] = None
no_data: bool = True
etc_hosts: bool = False
root_hints_file: Optional[CheckedPath] = None
hints_files: Optional[List[CheckedPath]] = None
- root_hints: Optional[List[Hint]] = None
- hints: Optional[List[Hint]] = None
+ root_hints: Optional[Dict[DomainName, List[IPAddress]]] = None
+ hints: Optional[Dict[DomainName, List[IPAddress]]] = None
class StubZoneSchema(SchemaNode):
- name: str
servers: List[IPAddressPort]
views: Optional[List[str]] = None
options: Optional[List[FlagsEnum]] = None
def to_std(self) -> str:
return self._value
+ def __hash__(self) -> int:
+ return hash(self._value)
+
def __str__(self) -> str:
return self._value
class ViewSchema(SchemaNode):
- id: str
addresses: Optional[List[IPNetwork]] = None
tsig: Optional[List[str]] = None
options: Optional[List[FlagsEnum]] = None