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,
|
||||
}
|
||||
)
|
||||
# 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)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user