from subprocess import SubprocessError
from typing import Callable, List, Optional
-import knot_resolver_manager.kresd_controller
from knot_resolver_manager.compat.asyncio import create_task
from knot_resolver_manager.config_store import ConfigStore
from knot_resolver_manager.constants import (
@staticmethod
async def create(
- selected_controller: Optional[SubprocessController],
+ subprocess_controller: SubprocessController,
config_store: ConfigStore,
shutdown_trigger: Callable[[int], None],
) -> "KresManager":
"""
inst = KresManager(shutdown_trigger, _i_know_what_i_am_doing=True)
- await inst._async_init(selected_controller, config_store) # pylint: disable=protected-access
+ await inst._async_init(subprocess_controller, config_store) # pylint: disable=protected-access
return inst
- async def _async_init(self, selected_controller: Optional[SubprocessController], config_store: ConfigStore) -> None:
- if selected_controller is None:
- self._controller = await knot_resolver_manager.kresd_controller.get_best_controller_implementation(
- config_store.get()
- )
- else:
- self._controller = selected_controller
+ async def _async_init(self, subprocess_controller: SubprocessController, config_store: ConfigStore) -> None:
+ self._controller = subprocess_controller
self._config_store = config_store
+
+ # initialize subprocess controller
logger.debug("Starting controller")
await self._controller.initialize_controller(config_store.get())
self._watchdog_task = create_task(self._watchdog())
from knot_resolver_manager.datamodel.config_schema import KresConfig
from knot_resolver_manager.datamodel.management_schema import ManagementSchema
from knot_resolver_manager.exceptions import DataException, KresManagerException, SchemaException
+from knot_resolver_manager.kresd_controller import get_best_controller_implementation
from knot_resolver_manager.utils.async_utils import readfile
from knot_resolver_manager.utils.functional import Result
from knot_resolver_manager.utils.parsing import ParsedTree, parse, parse_yaml
Called asynchronously when the application initializes.
"""
+ # Instantiate subprocess controller (if we wanted to, we could switch it at this point)
+ controller = await get_best_controller_implementation(config_store.get())
+
# Create KresManager. This will perform autodetection of available service managers and
# select the most appropriate to use (or use the one configured directly)
- manager = await KresManager.create(None, config_store, server.trigger_shutdown)
+ manager = await KresManager.create(controller, config_store, server.trigger_shutdown)
logger.info("Initial configuration applied. Process manager initialized...")
return manager