scripts/phase-00-maas-standup.sh brings MAAS to the D-058 plane topology idempotently. Dry-run is the audit (default): it resolves live ids BY CIDR/name (PATTERN-1) and prints the plan, changing nothing. --apply executes.
A re-CIDR is destructive (MAAS cannot change a subnet CIDR in place), so it is out of scope by design: the drift scan reports it as MIGRATE-NEEDED and the script refuses to build onto a CIDR the wrong plane occupies. Verified idempotent on --apply (zero mutations against an already-correct cloud).
provider-public 10.12.4.0/22 (untagged, gw .4.1) | provider-vip 10.12.8.0/22 (VID 104 on the provider fabric, gw .8.1, VIP band .8.2-.100) | metal-admin 10.12.12.0/22 (untagged, gw .12.1, VIP band .12.2-.100) | metal-internal 10.12.16.0/22 (VID 103 on the metal fabric, VIP band .16.2-.100) | data-tenant 10.12.20.0/22 | storage 10.12.32.0/22 | replication 10.12.36.0/22. Untagged base planes are created first so their tagged siblings can ride the same fabric (provider-public->provider-vip, metal-admin->metal-internal).
phase-00-maas-carve.sh is RETIRED -- its reserves are folded in here, and its gated stale-range delete is subsumed by the teardown + re-CIDR step.This generalizes that script from one plane to the whole topology; provider-vip is now just one row of the table. provider-vip-standup.sh remains the targeted single-plane tool (add provider-vip to an already-D-058 cloud). Both source lib-net.sh; no conflict.
tests/phase-00-maas-standup/ -- fake maas + real jq, fixtures generated by make_fixtures.py. Four scenarios, ALL PASS: fresh MAAS (full create plan), D-058 done (all SKIP / zero WOULD), D-052 current (the three migrating planes drift + refuse), wrong-VID (vid drift). Run: bash tests/phase-00-maas-standup/run-tests.sh.
The live cloud is D-052/053, so this stand-up will report metal-admin (.8), metal-internal (.12), data-tenant (.16) as DRIFT -- those CIDRs are reassigned by D-058. The destructive cutover (release/teardown so subnets have no links, delete the old subnets in collision-safe order, then --apply to build the new scheme) is a separate gated step, not this script. Sequence: teardown -> delete old subnets -> phase-00-maas-standup.sh --apply -> phase-00-maas-carve.sh (D-058) -> jumphost bridge re-IP (D-058 ordering trap) -> deploy.