]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
datamodel: server: added watchdog config
authorAleš <ales.mrazek@nic.cz>
Wed, 8 Dec 2021 18:39:18 +0000 (19:39 +0100)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 8 Apr 2022 14:17:53 +0000 (16:17 +0200)
manager/knot_resolver_manager/datamodel/config_schema.py
manager/knot_resolver_manager/datamodel/rpz_schema.py
manager/knot_resolver_manager/datamodel/server_schema.py
manager/knot_resolver_manager/datamodel/templates/server.lua.j2
manager/tests/unit/datamodel/test_server_schema.py [new file with mode: 0644]

index a490ba075e96c05f07c988632c13c0851ab19bd3..5488c0cf2204ee80f6223adb0307197d9e70607a 100644 (file)
@@ -90,6 +90,4 @@ class KresConfig(SchemaNode):
         return obj.dns64
 
     def render_lua(self) -> Text:
-        lua = _MAIN_TEMPLATE.render(cfg=self)
-        print(lua)
-        return lua
+        return _MAIN_TEMPLATE.render(cfg=self)
index 2f577d70a486adcace0553fd8a902f2f4bd80181..3372d5379222277feb09b054557241042645a70c 100644 (file)
@@ -1,14 +1,14 @@
 from typing import List, Optional
 
 from knot_resolver_manager.datamodel.policy_schema import ActionEnum
-from knot_resolver_manager.datamodel.types import AnyPath
+from knot_resolver_manager.datamodel.types import CheckedPath
 from knot_resolver_manager.datamodel.view_schema import FlagsEnum
 from knot_resolver_manager.utils import SchemaNode
 
 
 class RPZSchema(SchemaNode):
     action: ActionEnum
-    file: AnyPath
+    file: CheckedPath
     watch: bool = True
     views: Optional[List[str]] = None
     options: Optional[List[FlagsEnum]] = None
index fc9985caaf46b6504250bf3d747147641b34f650..0762977cb50a68b5d5f6660860cba6b9d7fca390 100644 (file)
@@ -5,7 +5,7 @@ from typing import Any, Optional, Union
 
 from typing_extensions import Literal
 
-from knot_resolver_manager.datamodel.types import CheckedPath, Listen, UncheckedPath
+from knot_resolver_manager.datamodel.types import CheckedPath, DomainName, Listen, UncheckedPath
 from knot_resolver_manager.exceptions import DataException
 from knot_resolver_manager.utils import SchemaNode
 from knot_resolver_manager.utils.types import LiteralEnum
@@ -34,6 +34,11 @@ def _cpu_count() -> int:
 BackendEnum = LiteralEnum["auto", "systemd", "supervisord"]
 
 
+class WatchDogSchema(SchemaNode):
+    qname: DomainName
+    qtype: str
+
+
 class ManagementSchema(SchemaNode):
     """
     Configuration of the Manager itself.
@@ -42,12 +47,19 @@ class ManagementSchema(SchemaNode):
     listen: Specifies where does the manager listen with its API. Can't be changed in runtime!
     backend: Forces manager to use a specific service manager. Defaults to autodetection.
     rundir: Directory where the manager can create files and which will be manager's cwd
+    watchdog: Systemd watchdog configuration. Can only be used with systemd backend.
     """
 
     # the default listen path here MUST use the default rundir
     listen: Listen = Listen({"unix-socket": "./manager.sock"})
     backend: BackendEnum = "auto"
     rundir: UncheckedPath = UncheckedPath(".")
+    backend: BackendEnum = "auto"
+    watchdog: Union[Literal[False], WatchDogSchema] = False
+
+    def _validate(self) -> None:
+        if self.watchdog and self.backend not in ["auto", "systemd"]:
+            raise ValueError("'watchdog' can only be configured for 'systemd' backend")
 
 
 class WebmgmtSchema(SchemaNode):
index 49d89cfd34b2a1c40e92c25ad19f1f0cb28e01a1..ee3f51aff4042965bd2ab6b79728ff8b69ce06c8 100644 (file)
@@ -7,6 +7,13 @@ modules.load('nsid')
 nsid.name('{{ cfg.server.nsid }}_' .. worker.id)
 {% endif %}
 
+{% if cfg.server.management.watchdog -%}
+modules.load('watchdog')
+watchdog.config({ qname = '{{ cfg.server.management.watchdog.qname }}', qtype = kres.type.{{ cfg.server.management.watchdog.qtype }} })
+{% else %}
+modules.unload('watchdog')
+{%- endif %}
+
 {% if cfg.server.webmgmt %}
 -- server.webmgmt
 modules.load('http')
diff --git a/manager/tests/unit/datamodel/test_server_schema.py b/manager/tests/unit/datamodel/test_server_schema.py
new file mode 100644 (file)
index 0000000..c40699f
--- /dev/null
@@ -0,0 +1,11 @@
+from pytest import raises
+
+from knot_resolver_manager.datamodel.server_schema import ManagementSchema
+from knot_resolver_manager.exceptions import KresdManagerException
+
+
+def test_management_watchdog():
+    assert ManagementSchema({"watchdog": {"qname": "nic.cz.", "qtype": "A"}})
+
+    with raises(KresdManagerException):
+        ManagementSchema({"backend": "supervisord", "watchdog": {"qname": "nic.cz.", "qtype": "A"}})