cb2d778a8f
Sweep for vestiges of the old combined-plane model and the pre-split shared rootfs. Two are load-bearing, the rest are stale docs/comments: - Bug: macOS `enumerate_active` only excluded the gateway container from the agent list, so after the split the orchestrator container (`bot-bottle-mac-orchestrator`, also `bot-bottle-`-prefixed) was enumerated as a phantom agent. Exclude both infra containers; test covers it. - Dead code: the gateway `bootstrap.py` still carried an `orchestrator` daemon spec + `_OPT_IN_DAEMONS` + a signing-key/JWT env branch, all for the old combined container where the gateway process could also run the control plane. No backend ever requests it now — removed; the key-stripping stays as defense-in-depth. Stale-comment reframes: "the/single infra container" -> the orchestrator + gateway pair (or the specific plane); "shared rootfs / bb_role init / one published rootfs" -> the per-plane rootfs + `role_init`; the deleted Dockerfile.infra references in Dockerfile.orchestrator/.gateway; and the macOS "one infra container ... same address" docstring + its now-false share-one-address test (the planes are distinct containers with distinct addresses). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
"""Docker bottle backend.
|
|
|
|
The bulk of the implementation lives in sibling modules:
|
|
|
|
- util: thin Docker subprocess wrappers
|
|
- network: Docker network plumbing
|
|
- bottle_plan: DockerBottlePlan
|
|
- bottle_cleanup_plan: DockerBottleCleanupPlan
|
|
- bottle: DockerBottle handle
|
|
- prepare: host-side resolution into a DockerBottlePlan
|
|
- launch: bring-up + teardown context manager
|
|
- cleanup: orphan enumeration, removal, active listing
|
|
- backend: DockerBottleBackend façade wiring the above
|
|
- infra: DockerInfraService (the per-host orchestrator + gateway pair)
|
|
|
|
Thin by design: the public names are re-exported lazily via `__getattr__`, so
|
|
importing a leaf like `backend.docker.util` doesn't drag `DockerBottleBackend`
|
|
(and the whole framework it pulls) into memory.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING, Any
|
|
|
|
if TYPE_CHECKING:
|
|
from .backend import DockerBottleBackend
|
|
from .bottle import DockerBottle
|
|
from .bottle_cleanup_plan import DockerBottleCleanupPlan
|
|
from .bottle_plan import DockerBottlePlan
|
|
|
|
|
|
_LAZY_MODULES: dict[str, str] = {
|
|
"DockerBottleBackend": "backend",
|
|
"DockerBottle": "bottle",
|
|
"DockerBottleCleanupPlan": "bottle_cleanup_plan",
|
|
"DockerBottlePlan": "bottle_plan",
|
|
}
|
|
|
|
|
|
def __getattr__(name: str) -> Any:
|
|
mod = _LAZY_MODULES.get(name)
|
|
if mod is None:
|
|
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
from importlib import import_module
|
|
|
|
value = getattr(import_module(f"{__name__}.{mod}"), name)
|
|
globals()[name] = value
|
|
return value
|
|
|
|
|
|
__all__ = [
|
|
"DockerBottle",
|
|
"DockerBottleBackend",
|
|
"DockerBottleCleanupPlan",
|
|
"DockerBottlePlan",
|
|
]
|