77948ef56c
The per-agent companion container (the egress/git-gate/supervise data plane run once per bottle) is the pre-consolidation architecture. Remove it and disable the backends that still depend on it, per the #385 thread. - Delete `backend/docker/sidecar_bundle.py`; docker's live path uses the consolidated shared gateway, not a per-bottle bundle. - Disable the firecracker and macos-container backends: their `launch()` fails closed (they launched a per-bottle companion; firecracker's consolidated relaunch is #354, macos follows). Their `enumerate` return empty and `cleanup` drop the companion-container discovery (firecracker keeps VMM/run-dir cleanup). - Fail-close both backends' `egress_apply` reload (it signalled the per-bottle container); consolidated egress policy resolves per-request against the orchestrator, so gateway-side apply is a follow-up. - Rename `egress_sidecar_env_entries` → `egress_gateway_env_entries`, `SIDECAR_PORTS` → `GATEWAY_PORTS`. - Move the shared DockerBottlePlan fixture to `tests/unit/_docker_bottle_plan.py`; delete tests for the removed launch paths; update cleanup/egress-apply tests. Docker consolidated launch verified end-to-end (multitenant isolation integration test passes). macos/firecracker are intentionally disabled. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WBMWTEtQdJ4W5UrWuLHCck
30 lines
841 B
Python
30 lines
841 B
Python
"""Cleanup plan for the Firecracker backend."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
from ...log import info
|
|
from .. import BottleCleanupPlan
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class FirecrackerBottleCleanupPlan(BottleCleanupPlan):
|
|
# PIDs of orphaned firecracker VMM processes and the per-bottle run
|
|
# dirs left behind by previous bottles.
|
|
vm_pids: tuple[int, ...] = ()
|
|
run_dirs: tuple[str, ...] = ()
|
|
|
|
def print(self) -> None:
|
|
if self.empty:
|
|
info("firecracker cleanup: nothing to remove")
|
|
return
|
|
for pid in self.vm_pids:
|
|
info(f"firecracker VM process: pid {pid}")
|
|
for path in self.run_dirs:
|
|
info(f"firecracker run dir: {path}")
|
|
|
|
@property
|
|
def empty(self) -> bool:
|
|
return not (self.vm_pids or self.run_dirs)
|