From eed55619cb69e23b161b59cbdc17ab5206ca7c1e Mon Sep 17 00:00:00 2001 From: anti Date: Wed, 29 Apr 2026 00:14:44 -0400 Subject: [PATCH] feat(mutator): live teardown for apply_remove_decky Captures the decky's name and services list before delete_topology_decky runs (the helper needs both as compose targets even though the DB row is gone), then calls _materialise_decky_remove which stops + rm -f's the base + per-service containers via 'docker compose stop / rm -f'. Re-renders the per-topology compose AFTER the stop/rm so a future 'compose up -d' on the file doesn't try to bring the decky back. --- decnet/mutator/ops.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/decnet/mutator/ops.py b/decnet/mutator/ops.py index 742cb9bb..6d469950 100644 --- a/decnet/mutator/ops.py +++ b/decnet/mutator/ops.py @@ -758,7 +758,15 @@ async def apply_remove_decky( decky = _decky_by_name(hydrated, payload["decky"]) if decky is None: raise MutationError(f"decky {payload['decky']!r} not found") + decky_name = decky["decky_config"]["name"] + services_list = list(decky.get("services") or []) await repo.delete_topology_decky(decky["uuid"]) + # Live materialisation: stop + rm -f the decky's containers. We + # capture decky_name + services BEFORE the delete so the helper + # has the targets even though the row is gone. + await _materialise_decky_remove( + repo, topology_id, decky_name, services_list, + ) await _assert_valid_after(repo, topology_id)