from knot_resolver_manager.datamodel.templates import template_from_str
from knot_resolver_manager.datamodel.types import (
- Dir,
DNSRecordTypeEnum,
DomainName,
EscapedStr,
- File,
IntNonNegative,
IntPositive,
Percent,
+ ReadableFile,
SizeUnit,
TimeUnit,
+ WritableDir,
)
from knot_resolver_manager.utils.modeling import ConfigSchema
from knot_resolver_manager.utils.modeling.base_schema import lazy_default
origin: DomainName
url: EscapedStr
refresh_interval: TimeUnit = TimeUnit("1d")
- ca_file: Optional[File] = None
+ ca_file: Optional[ReadableFile] = None
def _validate(self) -> None:
if str(self.origin) != ".":
prefetch: These options help keep the cache hot by prefetching expiring records or learning usage patterns and repetitive queries.
"""
- storage: Dir = lazy_default(Dir, "/var/cache/knot-resolver")
+ storage: WritableDir = lazy_default(WritableDir, "/var/cache/knot-resolver")
size_max: SizeUnit = SizeUnit("100M")
garbage_collector: Union[GarbageCollectorSchema, Literal[False]] = GarbageCollectorSchema()
ttl_min: TimeUnit = TimeUnit("5s")
from knot_resolver_manager.datamodel.network_schema import NetworkSchema
from knot_resolver_manager.datamodel.options_schema import OptionsSchema
from knot_resolver_manager.datamodel.templates import POLICY_CONFIG_TEMPLATE, WORKER_CONFIG_TEMPLATE
-from knot_resolver_manager.datamodel.types import Dir, EscapedStr, IntPositive
+from knot_resolver_manager.datamodel.types import EscapedStr, IntPositive, WritableDir
from knot_resolver_manager.datamodel.view_schema import ViewSchema
from knot_resolver_manager.datamodel.webmgmt_schema import WebmgmtSchema
from knot_resolver_manager.utils.modeling import ConfigSchema
version: int = 1
nsid: Optional[EscapedStr] = None
hostname: Optional[EscapedStr] = None
- rundir: Dir = lazy_default(Dir, _DEFAULT_RUNDIR)
+ rundir: WritableDir = lazy_default(WritableDir, _DEFAULT_RUNDIR)
workers: Union[Literal["auto"], IntPositive] = IntPositive(1)
max_workers: IntPositive = IntPositive(_default_max_worker_count())
management: ManagementSchema = lazy_default(ManagementSchema, {"unix-socket": DEFAULT_MANAGER_API_SOCK})
nsid: Optional[EscapedStr]
hostname: EscapedStr
- rundir: Dir
+ rundir: WritableDir
workers: IntPositive
max_workers: IntPositive
management: ManagementSchema
return POLICY_CONFIG_TEMPLATE.render(cfg=self, cwd=os.getcwd())
-def get_rundir_without_validation(data: Dict[str, Any]) -> Dir:
+def get_rundir_without_validation(data: Dict[str, Any]) -> WritableDir:
"""
Without fully parsing, try to get a rundir from a raw config data, otherwise use default.
Attempts a dir validation to produce a good error message.
Used for initial manager startup.
"""
- return Dir(data["rundir"] if "rundir" in data else _DEFAULT_RUNDIR, object_path="/rundir")
+ return WritableDir(data["rundir"] if "rundir" in data else _DEFAULT_RUNDIR, object_path="/rundir")
from typing import List, Optional
-from knot_resolver_manager.datamodel.types import DomainName, EscapedStr, File, IntNonNegative, TimeUnit
+from knot_resolver_manager.datamodel.types import DomainName, EscapedStr, IntNonNegative, ReadableFile, TimeUnit
from knot_resolver_manager.utils.modeling import ConfigSchema
"""
- file: File
+ file: ReadableFile
read_only: bool = False
from typing_extensions import Literal
-from knot_resolver_manager.datamodel.types import DomainName, File, IPAddressOptionalPort, ListOrItem, PinSha256
+from knot_resolver_manager.datamodel.types import DomainName, IPAddressOptionalPort, ListOrItem, PinSha256, ReadableFile
from knot_resolver_manager.utils.modeling import ConfigSchema
transport: Optional[Literal["tls"]] = None
pin_sha256: Optional[ListOrItem[PinSha256]] = None
hostname: Optional[DomainName] = None
- ca_file: Optional[File] = None
+ ca_file: Optional[ReadableFile] = None
def _validate(self) -> None:
if self.pin_sha256 and (self.hostname or self.ca_file):
from knot_resolver_manager.datamodel.types import (
DomainName,
EscapedStr,
- File,
IDPattern,
IPAddress,
ListOrItem,
+ ReadableFile,
TimeUnit,
)
from knot_resolver_manager.utils.modeling import ConfigSchema
name: Optional[ListOrItem[DomainName]] = None
subtree: Optional[Literal["empty", "nxdomain", "redirect"]] = None
address: Optional[ListOrItem[IPAddress]] = None
- file: Optional[ListOrItem[File]] = None
+ file: Optional[ListOrItem[ReadableFile]] = None
records: Optional[EscapedStr] = None
tags: Optional[List[IDPattern]] = None
ttl: Optional[TimeUnit] = None
tags: Tags to link with other policy rules.
"""
- file: File
+ file: ReadableFile
tags: Optional[List[IDPattern]] = None
ttl: Optional[TimeUnit] = None
nodata: bool = True
root_fallback_addresses: Optional[Dict[DomainName, ListOrItem[IPAddress]]] = None
- root_fallback_addresses_files: Optional[List[File]] = None
+ root_fallback_addresses_files: Optional[List[ReadableFile]] = None
addresses: Optional[Dict[DomainName, ListOrItem[IPAddress]]] = None
- addresses_files: Optional[List[File]] = None
+ addresses_files: Optional[List[ReadableFile]] = None
records: Optional[EscapedStr] = None
rules: Optional[List[RuleSchema]] = None
rpz: Optional[List[RPZSchema]] = None
from typing_extensions import Literal
-from knot_resolver_manager.datamodel.types import FilePath, TimeUnit
+from knot_resolver_manager.datamodel.types import TimeUnit, WritableFilePath
from knot_resolver_manager.utils.modeling import ConfigSchema
from knot_resolver_manager.utils.modeling.base_schema import is_obj_type_valid
log_tcp_rtt: Log TCP RTT (Round-trip time).
"""
- unix_socket: FilePath
+ unix_socket: WritableFilePath
log_queries: bool = True
log_responses: bool = True
log_tcp_rtt: bool = True
from typing import Optional
-from knot_resolver_manager.datamodel.types import File
+from knot_resolver_manager.datamodel.types import ReadableFile
from knot_resolver_manager.utils.modeling import ConfigSchema
script_only: bool = False
script: Optional[str] = None
- script_file: Optional[File] = None
+ script_file: Optional[ReadableFile] = None
def _validate(self) -> None:
if self.script and self.script_file:
from typing import Optional
-from knot_resolver_manager.datamodel.types import FilePath, IPAddressPort
+from knot_resolver_manager.datamodel.types import WritableFilePath, IPAddressPort
from knot_resolver_manager.utils.modeling import ConfigSchema
interface: IP address and port number to listen to.
"""
- unix_socket: Optional[FilePath] = None
+ unix_socket: Optional[WritableFilePath] = None
interface: Optional[IPAddressPort] = None
def _validate(self) -> None:
from knot_resolver_manager.datamodel.types import (
EscapedStr32B,
- File,
- FilePath,
+ WritableFilePath,
Int0_512,
Int0_65535,
InterfaceOptionalPort,
IPv6Address,
ListOrItem,
PortNumber,
+ ReadableFile,
SizeUnit,
)
from knot_resolver_manager.utils.modeling import ConfigSchema
padding: EDNS(0) padding of queries and answers sent over an encrypted channel.
"""
- cert_file: Optional[File] = None
- key_file: Optional[File] = None
+ cert_file: Optional[ReadableFile] = None
+ key_file: Optional[ReadableFile] = None
sticket_secret: Optional[EscapedStr32B] = None
- sticket_secret_file: Optional[File] = None
+ sticket_secret_file: Optional[ReadableFile] = None
auto_discovery: bool = False
padding: Union[bool, Int0_512] = True
"""
interface: Optional[ListOrItem[InterfaceOptionalPort]] = None
- unix_socket: Optional[ListOrItem[FilePath]] = None
+ unix_socket: Optional[ListOrItem[WritableFilePath]] = None
port: Optional[PortNumber] = None
kind: KindEnum = "dns"
freebind: bool = False
_LAYER = Raw
interface: Optional[ListOrItem[InterfaceOptionalPort]]
- unix_socket: Optional[ListOrItem[FilePath]]
+ unix_socket: Optional[ListOrItem[WritableFilePath]]
port: Optional[PortNumber]
kind: KindEnum
freebind: bool
from typing import List, Optional
-from knot_resolver_manager.datamodel.types import File, PolicyActionEnum, PolicyFlagEnum
+from knot_resolver_manager.datamodel.types import PolicyActionEnum, PolicyFlagEnum, ReadableFile
from knot_resolver_manager.utils.modeling import ConfigSchema
"""
action: PolicyActionEnum
- file: File
+ file: ReadableFile
watch: bool = True
views: Optional[List[str]] = None
options: Optional[List[PolicyFlagEnum]] = None
from typing import Dict, List, Optional
-from knot_resolver_manager.datamodel.types import DomainName, File, IPAddress, TimeUnit
+from knot_resolver_manager.datamodel.types import DomainName, IPAddress, ReadableFile, TimeUnit
from knot_resolver_manager.utils.modeling import ConfigSchema
nodata: bool = True
etc_hosts: bool = False
root_hints: Optional[Dict[DomainName, List[IPAddress]]] = None
- root_hints_file: Optional[File] = None
+ root_hints_file: Optional[ReadableFile] = None
hints: Optional[Dict[DomainName, List[IPAddress]]] = None
- hints_files: Optional[List[File]] = None
+ hints_files: Optional[List[ReadableFile]] = None
from typing import Optional
-from knot_resolver_manager.datamodel.types import File, FilePath, InterfacePort
+from knot_resolver_manager.datamodel.types import WritableFilePath, InterfacePort, ReadableFile
from knot_resolver_manager.utils.modeling import ConfigSchema
key_file: Path to certificate key.
"""
- unix_socket: Optional[FilePath] = None
+ unix_socket: Optional[WritableFilePath] = None
interface: Optional[InterfacePort] = None
tls: bool = False
- cert_file: Optional[File] = None
- key_file: Optional[File] = None
+ cert_file: Optional[ReadableFile] = None
+ key_file: Optional[ReadableFile] = None
def _validate(self) -> None:
if bool(self.unix_socket) == bool(self.interface):