e43f364d94
Drops `egress-block` from the supervise sidecar, removes `_merge_single_route`, `add_route`, and `apply_routes_change` from egress_apply.py, and strips the proposal/approve/reject flow for egress from the supervise CLI. The list-egress-routes and capability-block tools are unaffected. Tests updated throughout. Closes #198
50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
"""Host-side helper for egress sidecar inspection (issue #198).
|
|
|
|
`_merge_single_route`, `add_route`, and `apply_routes_change` were
|
|
removed when the egress-block MCP tool was dropped. The remaining
|
|
helpers support runtime inspection and validation of the routes file
|
|
without modifying it at runtime.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import subprocess
|
|
|
|
from ...egress import EGRESS_ROUTES_IN_CONTAINER
|
|
from ...egress_addon_core import load_routes
|
|
from .sidecar_bundle import sidecar_bundle_container_name
|
|
|
|
|
|
class EgressApplyError(RuntimeError):
|
|
pass
|
|
|
|
|
|
def fetch_current_routes(slug: str) -> str:
|
|
container = sidecar_bundle_container_name(slug)
|
|
r = subprocess.run(
|
|
["docker", "exec", container, "cat", EGRESS_ROUTES_IN_CONTAINER],
|
|
capture_output=True, text=True, check=False,
|
|
)
|
|
if r.returncode != 0:
|
|
raise EgressApplyError(
|
|
f"could not read routes.yaml from {container}: "
|
|
f"{(r.stderr or '').strip() or 'container not running?'}"
|
|
)
|
|
return r.stdout
|
|
|
|
|
|
def validate_routes_content(content: str) -> None:
|
|
try:
|
|
load_routes(content)
|
|
except ValueError as e:
|
|
raise EgressApplyError(
|
|
f"proposed routes.yaml is not valid: {e}"
|
|
) from e
|
|
|
|
|
|
__all__ = [
|
|
"EgressApplyError",
|
|
"fetch_current_routes",
|
|
"validate_routes_content",
|
|
]
|