diff --git a/docs/CURRENT-STATE.md b/docs/CURRENT-STATE.md index d26ccdc..e7d097c 100644 --- a/docs/CURRENT-STATE.md +++ b/docs/CURRENT-STATE.md @@ -51,13 +51,17 @@ enp3s0 metal-internal, enp4s0 data-tenant, enp5s0 storage, enp6s0 replication). **D-133 ADOPTED 2026-07-23** (flat per-NIC carve for VR1; next deployment rehearses hardware-faithful bonds/trunks). - OPEN decision points before mutation: deploy OS series (bundle is + **D-134 ADOPTED 2026-07-23** (per-role octet bands: control .10-.19, + compute .20-.49, storage .201-.254; .4-.9 utility-reserved, .50-.99 + formal VIP band; VR1 nodes: control .10-.12, compute .20-.21, + storage .201-.204, keyed by tofu name / pinned boot MAC). OPEN + decision points before their steps: deploy OS series (bundle is ubuntu@22.04/jammy; region default_distro_series=noble and ONLY - noble images are synced -- capture, ibid.), per-node static-IP/octet - plan (none recorded for VR1 fleets), per-DC artifact mirror (gap #5, - D-107 -- blocks the exit gate honestly), deploy-placement tag shape - (single region serves BOTH DCs; VR0's shared `openstack` tag cannot - disambiguate). No cloud mutation has occurred this stage; the logged + noble images are synced -- capture, ibid.), per-DC artifact mirror + (gap #5, D-107 -- blocks the exit gate honestly), deploy-placement + tag shape (single region serves BOTH DCs; VR0's shared `openstack` + tag cannot disambiguate). Carve is UNBLOCKED (D-133 shape + D-134 + addresses). No cloud mutation has occurred this stage; the logged window opens before the first one. - Position inside Stage 3: deploy step A EXECUTED 2026-07-19 (6/0/6 exact; convergence zero -- diff --git a/docs/changelog-20260723-stage4-open.md b/docs/changelog-20260723-stage4-open.md index 5e5d593..7362a53 100644 --- a/docs/changelog-20260723-stage4-open.md +++ b/docs/changelog-20260723-stage4-open.md @@ -47,3 +47,21 @@ octet plan, mirror gap #5, tag shape). - **Revert:** remove the D-133 block from design-decisions.md and the Stage-4 bullet from CURRENT-STATE.md (single commit; `git revert `). + +## Item 3 -- D-134 ADOPTED: per-role octet bands for VR1 DC node statics + +- New entry `docs/design-decisions.md` D-134 [ARCH], ADOPTED 2026-07-23. + Sequence per GA-R5: the flat .40-.48 proposal was presented and REJECTED + ("Different band"); operator directed "Per role bands with headroom. Give me + a recommendation"; the recommended band table was presented with measured + collision checks (bundle VIPs .50-.60 grep, 10.12.12.4, FIP pool, D-120 + dynamic range) and adopted ("Adopt as recommended"). +- Bands: .1-.9 infra (.4-.9 utility-reserved), .10-.19 control, .20-.49 + compute, .50-.99 formal VIP band, .100-.200 dynamic (D-120), .201-.254 + storage. One octet per node across all six planes, both DCs; VR1 + assignments control .10-.12 / compute .20-.21 / storage .201-.204 keyed by + tofu node name via pinned boot MAC. +- CURRENT-STATE Stage-4 bullet updated in the same commit (octet plan RULED; + carve now unblocked on D-133 + D-134). +- **Revert:** remove the D-134 block + the CURRENT-STATE bullet edit + (`git revert `). diff --git a/docs/design-decisions.md b/docs/design-decisions.md index ea7aa68..d1c24dd 100644 --- a/docs/design-decisions.md +++ b/docs/design-decisions.md @@ -4518,3 +4518,40 @@ METAL_INTERNAL_VID=103/IFACE=br-internal via the D-101 no-op -- needs an explicit VR1-carve comment or unset, WITH its harness, at the carve delivery). A1 test: a Roosevelt build session greps this before designing the bond/trunk carve. + +--- + +## D-134: ADOPTED -- VR1 DC node static addressing: per-role octet bands with headroom [ARCH] + +**Status:** ADOPTED 2026-07-23 (Stage 4, branch dc-dc-stage4-phase3-maas-deploy). +Question as presented: "Adopt the per-role band plan for VR1 DC node statics (both DCs, +same octet per node across all six planes): control .10-.19, compute .20-.49, storage +.201-.254, with .4-.9 reserved for future utility nodes and .50-.99 formally reserved as +the VIP band?" Operator answer: "Adopt as recommended." (The .40-.48 flat band was +presented first and REJECTED -- operator directive, exact utterance: "Per role bands +with headroom. Give me a recommendation".) + +**Decision.** On every VR1 DC plane (/22), the LAST-OCTET bands are: + +| Band | Purpose | +|---|---| +| .1-.9 | infrastructure: .1 gateway (routed planes), .2 rack, .3 DNS forwarder (metal-admin); .4-.9 RESERVED for future per-DC utility/infra nodes (D-131 sub-4 / D-132 context) | +| .10-.19 | CONTROL nodes (10 slots) | +| .20-.49 | COMPUTE nodes (30 slots) | +| .50-.99 | VIP band, formally reserved (measured today: .50-.60, 11 VIPs, VIP_COUNT_EXPECT=11 -- headroom to ~3x for Roosevelt service growth) | +| .100-.200 | dynamic/enlistment range (D-120 inheritance; live on metal-admin) | +| .201-.254 | STORAGE nodes (54 slots -- the role most likely to sprawl; echoes D-120's high node band on the office1 compose net) | + +One octet per node, IDENTICAL across all six planes (D-052 stable-octet discipline +kept). Same bands in BOTH DCs (each plane is its own L2; no cross-DC collision). +VR1 assignments: control-01..03 = .10-.12, compute-01..02 = .20-.21, +storage-01..04 = .201-.204, keyed by tofu node name (config-of-record identity via +pinned boot MAC -- NEVER by the random MAAS hostnames). + +**Context (measured 2026-07-23).** Collision check against every live reservation: +bundle VIPs .50-.60 (grep of bundle.yaml), 10.12.12.4 also present in bundle (low +single digits not fully free -- bands start at .10), FIP pool 10.12.5.0-10.12.7.254 +(provider third-octet space, not the .0/24 row), metal-admin dynamic .100-.200 (D-120), +rack .2 + forwarder .3 (D-131 sub-1). Supersedes nothing: VR0's .40-.43 (D-052) stays +VR0's as-built; this is the VR1+ convention. A1 test: Roosevelt greps this before +assigning any node address plan.