]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
manager: datamodel: fields types changes
authorAleš Mrázek <ales.mrazek@nic.cz>
Thu, 15 Jun 2023 14:37:07 +0000 (16:37 +0200)
committerAleš Mrázek <ales.mrazek@nic.cz>
Mon, 19 Jun 2023 11:37:08 +0000 (13:37 +0200)
manager/knot_resolver_manager/datamodel/cache_schema.py
manager/knot_resolver_manager/datamodel/config_schema.py
manager/knot_resolver_manager/datamodel/forward_schema.py
manager/knot_resolver_manager/datamodel/local_data_schema.py
manager/knot_resolver_manager/server.py
manager/tests/unit/__init__.py

index e40f1e23375e99c185d98fdf3d736f342cad395f..61341fc3bb41e5415f0a4abe0600b9ed55f11907 100644 (file)
@@ -4,6 +4,7 @@ from typing_extensions import Literal
 
 from knot_resolver_manager.datamodel.types import Dir, DomainName, File, IntNonNegative, Percent, SizeUnit, TimeUnit
 from knot_resolver_manager.utils.modeling import ConfigSchema
+from knot_resolver_manager.utils.modeling.base_schema import lazy_default
 
 
 class PrefillSchema(ConfigSchema):
@@ -68,7 +69,7 @@ class CacheSchema(ConfigSchema):
     prefill: Prefill the cache periodically by importing zone data obtained over HTTP.
     """
 
-    storage: Dir = Dir("/var/cache/knot-resolver")
+    storage: Dir = lazy_default(Dir, "/var/cache/knot-resolver")
     size_max: SizeUnit = SizeUnit("100M")
     garbage_collector: Union[GarbageCollectorSchema, Literal[False]] = GarbageCollectorSchema()
     ttl_min: TimeUnit = TimeUnit("5s")
index 5df263c6bf0ff2ab26d37a140f177cce85181d25..c57a183f2f421cf8a5d019a017b3dfb6b7750912 100644 (file)
@@ -21,8 +21,7 @@ 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.slice_schema import SliceSchema
-from knot_resolver_manager.datamodel.types import IntPositive
-from knot_resolver_manager.datamodel.types.files import UncheckedPath
+from knot_resolver_manager.datamodel.types import Dir, IntPositive
 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
@@ -110,7 +109,7 @@ class KresConfig(ConfigSchema):
         version: int = 1
         nsid: Optional[str] = None
         hostname: Optional[str] = None
-        rundir: UncheckedPath = UncheckedPath("/var/run/knot-resolver")
+        rundir: Dir = lazy_default(Dir, "/var/run/knot-resolver")
         workers: Union[Literal["auto"], IntPositive] = IntPositive(1)
         max_workers: IntPositive = IntPositive(_default_max_worker_count())
         management: ManagementSchema = lazy_default(ManagementSchema, {"unix-socket": "./manager.sock"})
@@ -122,7 +121,7 @@ class KresConfig(ConfigSchema):
         slices: Optional[List[SliceSchema]] = None
         policy: Optional[List[PolicySchema]] = None
         forward: Optional[List[ForwardSchema]] = None
-        cache: CacheSchema = CacheSchema()
+        cache: CacheSchema = lazy_default(CacheSchema, {})
         dnssec: Union[bool, DnssecSchema] = True
         dns64: Union[bool, Dns64Schema] = False
         logging: LoggingSchema = LoggingSchema()
@@ -133,7 +132,7 @@ class KresConfig(ConfigSchema):
 
     nsid: Optional[str]
     hostname: str
-    rundir: UncheckedPath
+    rundir: Dir
     workers: IntPositive
     max_workers: IntPositive
     management: ManagementSchema
@@ -197,7 +196,7 @@ class KresConfig(ConfigSchema):
         return _MAIN_TEMPLATE.render(cfg=self, cwd=os.getcwd())  # pyright: reportUnknownMemberType=false
 
 
-def get_rundir_without_validation(data: Dict[str, Any]) -> UncheckedPath:
+def get_rundir_without_validation(data: Dict[str, Any]) -> Dir:
     """
     Without fully parsing, try to get a rundir from a raw config data. When it fails,
     attempts a full validation to produce a good error message.
@@ -211,4 +210,4 @@ def get_rundir_without_validation(data: Dict[str, Any]) -> UncheckedPath:
         _ = KresConfig(data)  # this should throw a descriptive error
         assert False
 
-    return UncheckedPath(rundir, object_path="/rundir")
+    return Dir(rundir, object_path="/rundir")
index df30229d78961be7263f97bd843692bed23c7e8b..4a003d6a75ce5a624c31d2a8444800ae3459292f 100644 (file)
@@ -2,8 +2,7 @@ from typing import List, Optional, Union
 
 from typing_extensions import Literal
 
-from knot_resolver_manager.datamodel.types import DomainName, IPAddressOptionalPort, ListOrItem
-from knot_resolver_manager.datamodel.types.files import FilePath
+from knot_resolver_manager.datamodel.types import DomainName, File, IPAddressOptionalPort, ListOrItem
 from knot_resolver_manager.utils.modeling import ConfigSchema
 
 
@@ -23,7 +22,7 @@ class ForwardServerSchema(ConfigSchema):
     transport: Optional[Literal["tls"]] = None
     pin_sha256: Optional[ListOrItem[str]] = None
     hostname: Optional[DomainName] = None
-    ca_file: Optional[FilePath] = None
+    ca_file: Optional[File] = None
 
     def _validate(self) -> None:
         if self.pin_sha256 and (self.hostname or self.ca_file):
index 69810aea3e6006df1be63e880db19aae03230825..65fa76880929515c74a8ad8a81bfb9cbdd9ee724 100644 (file)
@@ -2,8 +2,7 @@ from typing import Dict, List, Optional
 
 from typing_extensions import Literal
 
-from knot_resolver_manager.datamodel.types import DomainName, IDPattern, IPAddress, ListOrItem, TimeUnit
-from knot_resolver_manager.datamodel.types.files import FilePath
+from knot_resolver_manager.datamodel.types import DomainName, File, IDPattern, IPAddress, ListOrItem, TimeUnit
 from knot_resolver_manager.utils.modeling import ConfigSchema
 
 
@@ -29,7 +28,7 @@ class SubtreeSchema(ConfigSchema):
     nodata: bool = True
     addresses: Optional[List[IPAddress]] = None
     roots: Optional[List[DomainName]] = None
-    roots_file: Optional[FilePath] = None
+    roots_file: Optional[File] = None
     roots_url: Optional[str] = None
     refresh: Optional[TimeUnit] = None
 
@@ -52,7 +51,7 @@ class RPZSchema(ConfigSchema):
     tags: Tags to link with other policy rules.
     """
 
-    file: FilePath
+    file: File
     tags: Optional[List[IDPattern]] = None
 
 
@@ -75,9 +74,9 @@ class LocalDataSchema(ConfigSchema):
     ttl: Optional[TimeUnit] = None
     nodata: bool = True
     root_fallback_addresses: Optional[Dict[DomainName, ListOrItem[IPAddress]]] = None
-    root_fallback_addresses_files: Optional[ListOrItem[FilePath]] = None
+    root_fallback_addresses_files: Optional[ListOrItem[File]] = None
     addresses: Optional[Dict[DomainName, IPAddress]] = None
-    addresses_files: Optional[ListOrItem[FilePath]] = None
+    addresses_files: Optional[ListOrItem[File]] = None
     records: Optional[str] = None
     subtrees: Optional[List[SubtreeSchema]] = None
     rpz: Optional[List[RPZSchema]] = None
index a36fcc955b23518916c6f1e08917a5f85392119a..88fb09902dab166730c896425e63ef2f6bed1f52 100644 (file)
@@ -405,9 +405,6 @@ async def _deny_working_directory_changes(config_old: KresConfig, config_new: Kr
 def _set_working_directory(config_raw: Dict[str, Any]) -> None:
     rundir = get_rundir_without_validation(config_raw)
 
-    if not rundir.to_path().exists():
-        raise KresManagerException(f"`rundir` directory ({rundir}) does not exist!")
-
     logger.info("changing working directory to rundir at '%s'", rundir.to_path().absolute())
     os.chdir(rundir.to_path())
 
@@ -481,7 +478,7 @@ async def start_server(config: Path = DEFAULT_MANAGER_CONFIG_FILE) -> int:
 
         # before processing any configuration, set validation context
         #  - resolve_root = root against which all relative paths will be resolved
-        set_global_validation_context(Context(resolve_directory=config.parent))
+        set_global_validation_context(Context(config.parent))
 
         # Preprocess config - load from file or in general take it to the last step before validation.
         config_raw = await _load_raw_config(config)
index 80c75ae1ced2c899032dcf495e995193b5d3e2a9..d3c6280d44960dd95a09ff87d42ff22399d668e3 100644 (file)
@@ -2,4 +2,4 @@ from pathlib import Path
 
 from knot_resolver_manager.datamodel.globals import Context, set_global_validation_context
 
-set_global_validation_context(Context(Path(".")))
+set_global_validation_context(Context(Path("."), False))