R1 PRECONDITION 3 -- VERIFICATION CAPTURE, 2026-07-29
=====================================================
Read-only. Run from voffice1 (the D-128 Plane-2 host; `maas` and `juju` live there,
both ABSENT on vcloud). No mutation performed.
THE PRECONDITION, verbatim from the D-121 AMENDMENT 2026-07-27:
"MAAS must RE-COMMISSION the four storage nodes per DC afterwards for the new device
to appear in its inventory, and the audit did NOT verify whether re-commissioning
preserves the D-134 statics and the pinned MACs. Verify that before the apply, not
after -- the 2026-07-20 MAC-regeneration incident is the precedent."
Two independent halves. Both now answered.
-- HALF 1: does re-commissioning reset the network config? ---------------------------
BASELINE MEASURED (maas admin machines read):
20 machines: 18 Ready + 2 Deployed (office1 guests)
all 18 VR1 role nodes: 7 interfaces, 12 links, mode=static on EVERY link
(12 = 6 planes x 2 families: the D-134 v4 carve + the 2026-07-27 v6 carve)
MECHANISM, from `maas admin machine commission --help` on THIS MAAS (3.7.2):
:param skip_networking: Optional. Whether to skip
re-configuring the networking on the machine after the commissioning
has completed. '1' == True, '0' == False.
:param skip_storage: Optional. Whether to skip
re-configuring the storage on the machine after the commissioning has ...
READING: the option exists BECAUSE the default re-configures networking after
commissioning. That is exactly the risk the amendment flagged. The combination R1 needs
is therefore:
maas admin machine commission <sysid> skip_networking=1
- skip_networking=1 -> the 12 static links and their addresses are NOT re-derived
- skip_storage UNSET -> storage IS re-scanned, which is the whole point (the new
/dev/vdb must enter MAAS's inventory)
NOT ASSERTED: that skip_networking=1 is bit-for-bit lossless. It is the vendor's own
control for this exact case on this exact version, which is the strongest evidence
available without mutating. The post-apply verification below is what closes it.
-- HALF 2: does the tofu change itself touch the NICs? -------------------------------
The 2026-07-20 incident is the precedent BECAUSE the plan looked innocent: it reported
0/9/0 in-place and regenerated all 9 nodes' MACs anyway. So a clean plan is necessary
but NOT sufficient, and is not treated as sufficient here.
MEASURED PLAN, both inner roots (tofu plan, -lock=false, read-only):
vr1-dc0-substrate: Plan: 6 to add, 4 to change, 0 to destroy
vr1-dc1-substrate: Plan: 6 to add, 4 to change, 0 to destroy
adds = 4 x libvirt_volume.osd + the juju-01 domain + its disk volume
changes = the 4 storage domains, IN-PLACE
DIFF CONTENT on an in-place domain -- the ONLY change is devices.disks gaining vdb:
~ resource "libvirt_domain" "node" {
~ devices = {
~ disks = [
+ { driver={type=qcow2}
source={volume={pool=vr1-dc1-inner-pool
volume=vr1-dc1-storage-01-osd.qcow2}}
target={bus=virtio dev=vdb} }
grep for mac/interface/network_name across the whole diff returns exactly ONE hit,
`+ interfaces = [`, and it is inside the NEW juju-01 CREATE block -- not a change to
any existing domain. NO existing NIC is touched.
WHY THE RISK IS MATERIALLY LOWER THAN 2026-07-20: the MACs are now CONFIG-PINNED
(`interface_macs`, shipped 2026-07-21 precisely because the plan was untrustworthy on
this point). The provider asserts them rather than leaving them to libvirt.
-- CONCLUSION -----------------------------------------------------------------------
Precondition 3 is SATISFIABLE, and the safe sequence is:
1. apply (creates the 4 volumes per DC, attaches vdb in-place)
2. *** BEFORE re-commissioning ***, verify MACs are unchanged:
virsh -c qemu+ssh://<rack>/system domiflist <domain> vs lib-hosts HOST_*_MAC
This is the checkpoint that makes 2026-07-20 non-repeatable. That incident became
a fleet-wide outage because MAAS was told to re-commission while its records were
already stale. Checking here costs one command and removes the whole class.
3. re-commission the 4 storage nodes per DC WITH skip_networking=1
4. verify 12 static links still present per node, and that /dev/vdb now appears in
physicalblockdevice_set
5. re-converge both inner roots to ZERO DIFF and capture (precondition 1)
STILL OPEN, unrelated to this precondition:
dc0 /var/lib/libvirt has 2.0T available against 4 x 500 GiB = 2.0 TiB nominal.
Thin-provisioned so creation is nearly free, but there is no room for those OSDs to
fill. dc1 has 2.9T. Flagged, not blocking the apply.