43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
"""Application composition root for the uvm command-line executable."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from collections.abc import Callable
|
|
from dataclasses import dataclass
|
|
|
|
from .config import Settings
|
|
from .firecracker.process import FirecrackerProcessManager
|
|
from .images import ImageStore
|
|
from .install import Installer
|
|
from .lifecycle import LifecycleService
|
|
from .network import NetworkManager
|
|
from .state import StateStore
|
|
from .system import CommandRunner
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class Application:
|
|
"""Concrete host services used by the CLI; this is not a public SDK."""
|
|
|
|
settings: Settings
|
|
state_store: StateStore
|
|
installer: Installer
|
|
lifecycle: LifecycleService
|
|
|
|
|
|
def build_application(emit: Callable[[str], None] | None = print) -> Application:
|
|
settings = Settings.from_environment()
|
|
runner = CommandRunner(emit=emit)
|
|
state_store = StateStore(settings)
|
|
images = ImageStore(settings, runner)
|
|
network = NetworkManager(settings, runner)
|
|
process = FirecrackerProcessManager(settings)
|
|
lifecycle = LifecycleService(settings, state_store, images, network, process)
|
|
installer = Installer(settings, runner, state_store, emit=emit)
|
|
return Application(
|
|
settings=settings,
|
|
state_store=state_store,
|
|
installer=installer,
|
|
lifecycle=lifecycle,
|
|
)
|