diff --git a/docs/dc0-deploy-readiness.md b/docs/dc0-deploy-readiness.md index 28dc527..484da5c 100644 --- a/docs/dc0-deploy-readiness.md +++ b/docs/dc0-deploy-readiness.md @@ -1,14 +1,15 @@ # DC0 (vr1-dc0) deployment readiness + prep checklist -Prep/handoff for the Stage-3 Phase-2 DC0 build (`runbooks/dc-dc-phase2-tofu-dc-substrate.md`, -Model B two-root). Written 2026-07-16 at the outer-apply gate. A FRESH session starts the -deployment from here. **Nothing has been applied** -- the outer `tofu apply` is the first mutation -and is operator-gated. `vr1-dc1` is HELD (no ruled addressing; see below), DC0 only. +Checklist support for the Stage-3 Phase-2 DC0 build. A fresh session's CANONICAL ENTRY DOC is +`runbooks/dc-dc-phase2-tofu-dc-substrate.md` (gate G9, probe hole H1) -- start THERE, not here; +this doc is its section-E step table + prep checklists. Status and the expected plan triple live +ONLY in `docs/CURRENT-STATE.md` (GA-R1). `vr1-dc1` is HELD (no ruled addressing; see below). -> **STATUS 2026-07-17: PREP COMPLETE -- DC0 IS DEPLOY-READY.** Final gate re-checked: opentofu-validate +> Historical prep record (2026-07-17, this doc's own gate re-check that day): opentofu-validate > clean (both roots + 12 modules), the four `vr1_dc0_rack_*` + `vr1_dc0_ssh_pubkey_path` tfvars in place, > `creds-audit vr1-dc0` CLEAN, gauntlet ALL GREEN (65), repo-lint 0-fail. Per-env-key (D-126 option a) -> DONE; netem = placeholder (deploy-time, Step 11). The ONLY remaining items are NOT prep: (1) the final +> DONE; netem = placeholder (deploy-time, Step 11). This blockquote is HISTORY, not a status claim +> (its former DEPLOY-READY banner was falsified post-reboot -- GA-F01/GA-F02). Also noted then: (1) the final > **bookend restart** -- OS patch + reboot of vcloud + voffice1 + office1-opnsense, done together as the > boundary into the new session (voffice1 is load-bearing like vcloud -- it hosts netbox/MAAS + the only > netbox path, so it defers WITH vcloud, not mid-prep); (2) fresh-session start = re-verify the plan @@ -34,10 +35,11 @@ ## B. The outer-root plan -- VERIFIED SAFE (this is the apply gate) -`tofu -chdir=opentofu plan` => **5 add / 2 in-place / 6 destroy**, decomposed and verified: -- **2 in-place (D-127 autostart, 2026-07-17):** voffice1 + office1-opnsense get `autostart false->true` - -- an **update-in-place** (verified: NOT replacement; replacement would destroy the live host/edge). - These COLLAPSE to 0-change once the bookend sets them autostart=true live before the fresh-session apply. +The EXPECTED plan triple lives ONLY in `docs/CURRENT-STATE.md` section 5, recorded with its +evidencing capture (GA-R1; the counts this section used to carry were falsified post-reboot, +GA-F02). Decomposition history: +- The 2 in-place autostart changes this section predicted were RESOLVED by the G6 state + reconcile (operator-ruled state surgery, 2026-07-19) -- not by the bookend collapse predicted here. - **5 create:** `vvr1_dc0` containment VM (**425984 MiB = 416 GiB / 108 vCPU** -- full-fleet D-121/R-3 sizing, expose_nested_virt) + disk/seed/cloudinit; `vr1_dc0_uplink` (D-125 simulated-ISP NAT). - **6 destroy:** the six `vr1-dc0` plane networks -- INTENDED Model B relocation from vcloud (outer) @@ -45,8 +47,9 @@ EMPTY (0 leases, 0 attached domains). No live/consumed infra touched. - **RAM gate:** host 980 GiB available >= 416 GiB needed (only voffice1 32G + opnsense 2G committed). -> A fresh session MUST re-run the plan and re-confirm 5-add/(0-or-2)-change/6-destroy-empty (autostart in-place collapses to 0 post-bookend) before apply -> (live state can drift; verify, don't assume). +> A fresh session MUST re-run the plan and confirm it EQUALS the expected triple recorded in +> `docs/CURRENT-STATE.md` section 5 before apply (live state can drift; verify, don't assume; +> any difference is a STOP). --- @@ -56,8 +59,9 @@ 1. **[RESOLVED 2026-07-16] Per-env key for `vvr1-dc0` = option (a) dedicated dc0 key (operator ruling).** DONE: minted `~/vr1-dc0-creds/vr1-dc0_svc_ed25519` (600/644, `creds-audit vr1-dc0` CLEAN); added `variable "vr1_dc0_ssh_pubkey_path"`; `vvr1-dc0` cloud-init now installs the dc0 pubkey (voffice1 - keeps office1's key); tfvar set. Re-validated + re-planned -> outer plan UNCHANGED (5/0/6, create-only - content). **Remaining for the inner apply:** the inner root's `qemu+ssh` to `vvr1-dc0` must use the dc0 + keeps office1's key); tfvar set. Re-validated + re-planned -> outer plan UNCHANGED at the + then-current gate triple (since superseded; the expected triple lives in CURRENT-STATE.md + section 5). **Remaining for the inner apply:** the inner root's `qemu+ssh` to `vvr1-dc0` must use the dc0 PRIVATE key -- wire an ssh alias/`-i ~/vr1-dc0-creds/vr1-dc0_svc_ed25519` AFTER the outer apply boots `vvr1-dc0` (its transit IP is knowable then; D-126 DC ssh-config rows are deferred to that point). 2. **[ENV] `bunzip2`** -- required by `scripts/opnsense-prep-image.sh`. Under Model B that prep runs @@ -164,7 +168,7 @@ 3. Read THIS doc + `runbooks/dc-dc-phase2-tofu-dc-substrate.md` (Model B reshape section, ~line 144). 4. **Start logging (cloud-mutating session):** `bash scripts/run-logged.sh dc0-deploy`. 5. Settle **C1.1** (the per-env-key ruling) first. -6. Re-run the outer plan; confirm 5-add/(0-or-2)-change/6-destroy-empty (autostart in-place collapses to 0 post-bookend); then the **gated outer apply**. +6. Re-run the outer plan; confirm it equals the expected triple in `docs/CURRENT-STATE.md` section 5 (any difference is a STOP); then the **gated outer apply**. 7. Proceed A -> B -> C -> D -> E, each mutation individually approved; review after each step. ## E. Gated deploy sequence (Model B, from the runbook)