feat(mutator): live network.connect for apply_attach_decky
After the DB writes that record the multi-home edge, calls the docker SDK directly to add an interface to the base container's netns: client.networks.get(<topology bridge>).connect(<base>, ipv4_address=ip) Non-destructive — the base keeps running, no recreate. Service containers automatically see the new interface because they share the base's netns via network_mode: service:<base>. Idempotency: docker APIError with 'already' / 'endpoint exists' is logged at info and treated as success. Other errors log + leave the DB row in place; an operator retry will hit the same path.
This commit is contained in:
@@ -704,6 +704,16 @@ async def apply_attach_decky(
|
|||||||
"forwards_l3": forwards_l3,
|
"forwards_l3": forwards_l3,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
# Live materialisation: SDK network.connect on the base container.
|
||||||
|
# Service containers share the base's netns via network_mode:
|
||||||
|
# service:<base>, so they inherit the new interface — only the base
|
||||||
|
# needs the connect.
|
||||||
|
await _materialise_decky_connect(
|
||||||
|
repo, topology_id,
|
||||||
|
decky_name=decky["decky_config"]["name"],
|
||||||
|
lan_name=lan["name"],
|
||||||
|
ipv4_address=ip,
|
||||||
|
)
|
||||||
await _assert_valid_after(repo, topology_id)
|
await _assert_valid_after(repo, topology_id)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user