Phase A1: bootstrap Python ci_orchestrator package
- pyproject.toml (hatchling) with ruff/mypy/pytest dev deps - src/ci_orchestrator/: config, credentials, backends (Protocol + WorkstationVmrunBackend), transport (WinRM via pypsrp, SSH via paramiko) - CLI entry point with PoC 'wait-ready' subcommand (Windows + Linux guests) - tests/python/: 35 unit tests, 83% coverage, all backends/transport mocked - gitea/workflows/lint.yml: new 'python' job (ruff + mypy --strict + pytest --cov-fail-under=70) - config.example.toml + README setup section + .gitignore Python entries Neutral VmBackend Protocol prepared for Phase C ESXi extension. See plans/implementation-plan-A-B.md step A1.
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
"""VM backend implementations.
|
||||
|
||||
The :class:`~ci_orchestrator.backends.protocol.VmBackend` Protocol defines
|
||||
the neutral interface every backend must satisfy. Phase A ships only the
|
||||
:class:`~ci_orchestrator.backends.workstation.WorkstationVmrunBackend`;
|
||||
Phase C will add an ESXi backend behind the same interface.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from ci_orchestrator.backends.protocol import VmBackend, VmHandle, VmState
|
||||
from ci_orchestrator.backends.workstation import WorkstationVmrunBackend
|
||||
|
||||
__all__ = ["VmBackend", "VmHandle", "VmState", "WorkstationVmrunBackend", "load_backend"]
|
||||
|
||||
|
||||
def load_backend(config: object) -> VmBackend:
|
||||
"""Factory: pick a backend implementation from ``config.backend.type``.
|
||||
|
||||
Phase C hook: when the ESXi backend lands, this function will dispatch
|
||||
on ``config.backend.type``. For now only ``workstation`` is supported.
|
||||
"""
|
||||
backend_type = getattr(getattr(config, "backend", None), "type", "workstation")
|
||||
if backend_type != "workstation":
|
||||
raise NotImplementedError(
|
||||
f"Backend type '{backend_type}' is not implemented. "
|
||||
"Only 'workstation' is available in Phase A."
|
||||
)
|
||||
vmrun_path = getattr(config, "vmrun_path", None)
|
||||
return WorkstationVmrunBackend(vmrun_path=vmrun_path)
|
||||
Reference in New Issue
Block a user