--- /dev/null
+import argparse
+from typing import Dict, List, Optional, Tuple, Type
+
+from knot_resolver_manager.cli.command import Command, CommandArgs, register_command
+from knot_resolver_manager.utils.requests import request
+
+
+@register_command
+class ReloadCommand(Command):
+ def __init__(self, namespace: argparse.Namespace, unknown_args: List[str]) -> None:
+ super().__init__(namespace, unknown_args)
+
+ @staticmethod
+ def register_args_subparser(
+ subparser: "argparse._SubParsersAction[argparse.ArgumentParser]",
+ ) -> Tuple[argparse.ArgumentParser, "Type[Command]"]:
+ reload = subparser.add_parser("reload", help="reload configuration file")
+
+ return reload, ReloadCommand
+
+ @staticmethod
+ def completion(args: List[str], parser: argparse.ArgumentParser) -> Dict[str, Optional[str]]:
+ return {}
+
+ def run(self, args: CommandArgs) -> None:
+ url = f"{args.socket}/reload"
+ response = request("POST", url)
+ print(response)
)
return Result.ok(None)
- async def sigint_handler(self) -> None:
- logger.info("Received SIGINT, triggering graceful shutdown")
- self.trigger_shutdown(0)
-
- async def sigterm_handler(self) -> None:
- logger.info("Received SIGTERM, triggering graceful shutdown")
- self.trigger_shutdown(0)
-
- async def sighup_handler(self) -> None:
- logger.info("Received SIGHUP, reloading configuration file")
- systemd_notify(RELOADING="1")
+ async def _reload_config(self) -> None:
if self._config_path is None:
logger.warning("The manager was started with inlined configuration - can't reload")
logger.error(f"Reloading of the configuration file failed: {e}")
logger.error("Configuration have NOT been changed.")
+ async def sigint_handler(self) -> None:
+ logger.info("Received SIGINT, triggering graceful shutdown")
+ self.trigger_shutdown(0)
+
+ async def sigterm_handler(self) -> None:
+ logger.info("Received SIGTERM, triggering graceful shutdown")
+ self.trigger_shutdown(0)
+
+ async def sighup_handler(self) -> None:
+ logger.info("Received SIGHUP, reloading configuration file")
+ systemd_notify(RELOADING="1")
+ await self._reload_config()
systemd_notify(READY="1")
@staticmethod
logger.info("Shutdown event triggered...")
return web.Response(text="Shutting down...")
+ async def _handler_reload(self, _request: web.Request) -> web.Response:
+ """
+ Route handler for reloading the server
+ """
+
+ logger.info("Reloading event triggered...")
+ await self._reload_config()
+ return web.Response(text="Reloading...")
+
def _setup_routes(self) -> None:
self.app.add_routes(
[
web.delete(r"/v1/config{path:.*}", self._handler_config_query),
web.patch(r"/v1/config{path:.*}", self._handler_config_query),
web.post("/stop", self._handler_stop),
+ web.post("/reload", self._handler_reload),
web.get("/schema", self._handler_schema),
web.get("/schema/ui", self._handle_view_schema),
web.get("/metrics", self._handler_metrics),