container-elim topology (D-144)
Author: W1 worker, follow-on to the container-elim pass (D-144, RULED 2026-08-10). Scope: ONLY the substrate/management-plane surfaces the flat topology REDESIGNS -- where the collapse of vcloud -> vvr1-dcN -> node VMs to vcloud -> node VMs changes what address family a path can carry. READ-ONLY; nothing built or executed.
Session-measured inputs (per tasking, used as given, not re-derived here): (1) the MAAS node power-dial (qemu+ssh) from a region VM connects to vcloud's sshd, not to a libvirt endpoint bound on a plane bridge; (2) vcloud's libvirt access control is group-based with fine-grained polkit actions available. Both feed DEC-15 (the power-key mitigation, OWED, docs/design-decisions.md:8299-8304).
Governing posture (read before any family claim, per memory caveat): D-101 (docs/design-decisions.md:2243) -- "IPv6 unless IPv4 is NECESSARY", v4 is a justified exception, never a neutral default. D-139 Ruling A (docs/design-decisions.md:7280, RULED 2026-07-31) -- per DC, provider-public and metal-admin are dual-stack (v4 retained + v6), the other five planes are IPv6-only. Neither rules on the D-124 transit overlay or the MAAS power-dial reach path -- those are OUTSIDE the six plane/space family matrix, which is exactly why this pass exists.
| # | Surface | Current family + cite | Flat-design option | What forces v4 | Tooling-support status | Governing D |
|---|---|---|---|---|---|---|
| 1 | MAAS node power-dial reach path (vr1-dcN-maas-01 -> target libvirtd, qemu+ssh) |
v4 only, both forms. VIRSH_POWER_ADDRESS_FROM_OFFICE1="qemu+ssh://jessea123@172.31.0.2/system" (scripts/lib-hosts.sh:212, dc0; :246, dc1 172.31.0.6) and VIRSH_POWER_ADDRESS_FROM_DCREGION="qemu+ssh://jessea123@10.12.8.2/system" (:213, dc0; :250, dc1 10.12.68.2) -- both dial the (soon-eliminated) rack/containment VM's libvirtd on a plane-bridge address. |
v6-possible, genuinely structural. Under D-144 the target is no longer a plane-bridge libvirt endpoint at all -- it becomes vcloud's own sshd (session-measured fact above), and vr1-dcN-maas-01 already holds a v6 address on metal-admin (dual-stack, D-139 Ruling A; lib-hosts.sh:199,233 carve the region VM 2-plane, no br-ex, per :95-100). SSH transport is family-agnostic; qemu+ssh:// accepts a bracketed IPv6 literal or an AAAA-resolving hostname (OpenSSH + libvirt vendor capability, not repo-specific). |
Nothing structural any more. The historical force was "dial the address the target libvirtd is bound to on a plane bridge" -- removed by flattening (there is no more plane-bridge libvirt host to dial; vcloud's libvirtd is not itself plane-bound). | UNVERIFIED (live). Whether vcloud's sshd is actually reachable from the metal-admin plane over v6 -- and at what address, since the (a) control forbids a host address ON a plane bridge -- is exactly what DEC-15 is GATED on: "GATED on vcloud's live polkit/libvirt config" (docs/design-decisions.md:8302); pass2 states directly "a read of vcloud's LIVE polkit/libvirt config is delivery work, not asserted here" (pass2-admin-report.md:166). The qemu+ssh/OpenSSH v6-literal mechanism itself is vendor-verified; the concrete reachable address is not. |
DEC-15 (D-144 body, docs/design-decisions.md:8299-8304) -- "must decide REACH ... AND authorization together." |
| 2 | D-124 region<->rack TRANSIT overlay (172.31.0.0/24, carved supernet) |
v4 only. Dedicated management/transit supernet 172.31.0.0/24, NOT under Cloud, ratified 2026-07-16 (docs/design-decisions.md:5044-5054); dc0 /30 = 172.31.0.0/30, dc1 = a sibling /30 per the same pattern. Carried by opentofu/modules/mesh-link (the D-100 dark-fiber triangle). |
v6-possible, but an OPEN/UNRULED question, not a tooling gap. modules/mesh-link is a bare L2 segment with NO address family baked in (opentofu/modules/mesh-link/main.tf, variables.tf -- only link_name/mtu; addressing is entirely the consumer's, i.e. D-124's). The IPv6 IPAM apex already reserves the conceptually-matching slot: X00::/48 = "Infrastructure / site-to-site links", VR1's is f00::/40 -> per-DC /48s (docs/design-decisions.md:3751-3753) -- structurally the right home for a transit link, but no f00::... allocation has actually been carved or cited anywhere in the repo (grep for f00:: returns only the table definition, docs/design-decisions.md:3753). Under D-144 this leg's consumer moves to the client VM (D-124 AMENDS, docs/design-decisions.md:8279-8280); the amendment says addressing "survives" unchanged, not that family was reconsidered. |
Nothing cited. No D-NNN states PXE, DHCP, or any protocol on this leg requires v4; it was carved v4 by convention (mirroring the v4 Edge role, D-115) at a time (2026-07-16) that predates D-139's v6-only-east-west posture. Its live traffic (per FINAL-PLAN concern-(ii), FINAL-PLAN.md:132-147) is operator ssh -J + Office1-originated flows -- SSH, again family-agnostic. |
UNVERIFIED (design), not tooling-blocked. mesh-link (L2) and SSH (transport) both support v6 today; what's missing is a ruling to carve a v6 prefix for the transit NetBox role and amend D-124 to dual-stack or v6-only. Not part of any current DEC row -- a genuine NEW gap this pass surfaces. |
D-124 AMENDS (D-144 ledger, docs/design-decisions.md:8279-8280); no DEC row currently owns the family question. |
| 3 | Client-VM metal-admin leg | Dual-stack already, structurally. The client VM lands on utility-band .8 on metal-admin (D-134 AMENDMENT 2026-08-10, docs/design-decisions.md:6240-6248: 10.13.8.8 dc0 / 10.13.68.8 dc1) -- metal-admin is D-139 Ruling-A dual-stack (v4 retained + v6) for EVERY host on that plane, the client VM included; no plane-level exception is named for it. |
Already v6 (no flip needed). This is not an "unlock" from the collapse -- it is inherited automatically from the standing D-139 plane-family ruling the moment the client VM is placed on metal-admin. |
PXE/commissioning-class forces that keep metal-admin dual-stack (not v6-only) are plane-wide (D-139 Ruling A rationale: MAAS region API, node-DNS forwarder, the v4-only D-134 utility band, no rack with v6-only reachability) -- they justify the plane staying dual-stack, they do not force the client VM specifically off v6. |
Verified (ruled). D-139 Ruling A is an ADOPTED, RULED family assignment for the whole plane -- no live measurement owed for the family itself (carve mechanics at build time are a separate, ordinary Stage-3/4 concern). | D-139 Ruling A; D-134 AMENDMENT 2026-08-10 (octet). |
| 4 | Client-VM transit leg + how MAAS reaches/powers via it | v4, same 172.31.0.x/30 scheme as row 2 (D-124 AMENDS: "Scheme-A addressing survives on the client VM," docs/design-decisions.md:8279-8280). |
Same as row 2 (v6-possible, unruled) -- BUT do not conflate this leg with row 1. The client VM's transit leg carries operator ssh -J / Office1-originated flows and is the concern-(ii) SEC-010-successor endpoint (FINAL-PLAN.md:132-147); MAAS's own power-dial (row 1) does NOT route through the client VM at all in the pass's design -- vr1-dcN-maas-01 and vcloud's libvirtd are both flat vcloud-resident objects, so DEC-15's reach question is maas-01 -> vcloud, never maas-01 -> client-VM -> vcloud. Treating the client VM as if it sits in the power-dial path would misattribute a DEC-15 finding to the wrong surface. |
Same as row 2. | Same as row 2 (design-open, not tooling-blocked). | D-124 AMENDS; concern-(ii) endpoint disposition is DEC-16 (D-144 body). |
| 5 | (a) cross-DC host isolation control (vcloud-level nftables, OWED, DEC-14) | N/A -- not yet built. Modeled on the EXISTING SEC-010 mechanism (below), which is already family-agnostic. | v6-native by construction, VERIFIED via precedent. SEC-010's live artifact uses table inet sec010 (scripts/site-headend-install.sh:299, confirmed nft list table inet sec010 check at :221) -- nftables' inet family is a SINGLE ruleset that matches BOTH IPv4 and IPv6 traffic, and the rule matches by oifname/iifname (interface), never by IP literal or family. Building the (a) control on the same table inet pattern gets v4+v6 coverage for free, with no new capability needed. |
Nothing -- this is a forwarding/interface-scoped control, not an address-family-scoped one. | Verified (repo precedent, mechanism-identical). The table inet fact is a direct read of the live SEC-010 artifact; the (a) control's own concrete ruleset is still OWED (DEC-14), but the FAMILY question is answered by the pattern it will reuse. |
DEC-14 (D-144 body, docs/design-decisions.md:8305-8308). |
| 6 | SEC-010 transit-drop successor (endpoints: client VM + voffice1, OWED, DEC-16) | v4-and-v6-agnostic already -- see row 5; SEC-010's CURRENT closed artifact (docs/security-ledger.md:21) is table inet sec010, i.e. already dual-family on its existing (v4-only-addressed) interface. |
v6-native by construction, same evidence as row 5. The planned extraction (pulling the writer out of site-headend-install.sh's node_host_setup() into a role-agnostic subcommand installing both ends, pass2-admin-report.md:142-147) carries the table inet shape forward -- no redesign needed for the successor to cover a v6 transit leg IF/WHEN row 2/4's transit ever carries v6 traffic. |
Nothing -- same interface-scoped reasoning as row 5. | Verified (repo precedent). Same citation as row 5. | DEC-16 (D-144 body). |
| 7 | MAAS region<->rack control path in the flat topology | Conditionally MOOT, pending DEC-08. vr1-dcN-maas-01 already runs COMBINED region+rack (pass2 adversarial check 2, pass2-admin-report.md:26-46, confirmed by direct read of both DC changelogs); D-131's own text independently states "Co-located region+rack controllers are immune" to the MAAS 3.7 rack-only-agent DNS defect (docs/design-decisions.md:5705), corroborating that region+rack already run as ONE co-located service, not two ends of a network hop. Standalone rack-controller RETIREMENT is pass2's recommendation (pass2-admin-report.md:267-277) but is GATED, not yet ratified -- DEC-08 (D-144 body) needs a current-day live re-measure of primary_rack/rackd state at both DCs first. |
If DEC-08 ratifies retirement: the question dissolves -- no separate rack agent, no network link, so no address-family question to answer for VR1. If retirement is REJECTED (a standalone rack persists somewhere): whether MAAS 3.7 supports a v6-only or dual-stack region<->rack RPC link is a genuinely open, UNVERIFIED question. | N/A pending the DEC-08 branch. | UNVERIFIED, no repo citation found either way. Grepped docs/design-decisions.md + docs/CURRENT-STATE.md for MAAS-3.7-and-IPv6: three unrelated 3.7 facts turned up (LXD >=6.7 incompatibility, site-headend-install.sh:60; the rack-only-agent DNS SERVFAIL bug, D-131 / dc-rack-net.sh:26,134; MAAS auto-reserving ::1-::ffff:ffff on every v6 /64, docs/design-decisions.md:7421) -- NONE address rack<->region transport family. To confirm: Canonical's MAAS 3.7 release/architecture docs (rack-registration protocol), or a live test enrolling a rack-only agent against a v6-only region address, before this branch is ever exercised. |
DEC-08 (D-144 body, docs/design-decisions.md:8309-8311). |
Genuine, evidence-backed unlocks (structural, caused by the collapse or by an already-ruled ADOPTED decision -- not guesses):
table inet shape (site-headend-install.sh:299). Building them on the same pattern costs nothing extra for v6 coverage.metal-admin) that already has v6.Needs live/design verification before being called real (do not build against these yet):
metal-admin at an address that is NOT itself on a plane bridge (satisfying the (a) control) -- is explicitly what DEC-15 is gated on; this pass did not and could not resolve it read-only.f00::/40 "Infrastructure / site-to-site links", currently unassigned anywhere in the repo) and a D-124 amendment. This is a NEW gap this pass surfaces -- it is not currently owned by any DEC row in the D-144 body.Top risks carried forward:
f00::/40 slot from scratch.Verification note. Direct reads this session: docs/audit/container-elim-pass/FINAL-PLAN.md (full), pass2-admin-report.md (full), scripts/lib-net.sh (full), scripts/lib-hosts.sh (full), docs/tool-index.md (full); docs/design-decisions.md D-144 (:8210-8330), D-124 (:4978-5070), D-101 (:2243-2340), D-139 (:7280-7340), D-134 amendment 2026-08-10 (:6240-6248), D-128 (:5353-5397, incl. its D-144 amendment header), D-115 (:3723-3810), D-126 (:5172-5250), D-131 co-location note (:5700-5710); docs/security-ledger.md SEC-010 row (:21); scripts/site-headend-install.sh (nft/inet greps, :219-314); opentofu/modules/mesh-link/*.tf (full); repo-wide greps for f00::, MAAS 3.7+ipv6, region+rack, polkit, vcloud.*ssh. READ-ONLY; no mutation; nothing executed against the cloud.