|
Octavia: R8a BUILT (record was false), two stale surfaces, R7 generator de-frozen
Follows an upstream/vendor research pass answering "can Octavia run full IPv6" -- yes; nothing inside Octavia requires IPv4. charm-octavia creates the lb-mgmt subnet with ip_version: 6 and has no IPv4 code path at all; the health manager is v6-capable both directions; the amphora agent binds '::' and verifies certs by amphora UUID, not IP; and Nova metadata is not a dependency (config_drive=True). Surviving v4 pressure is soft or external. R8a BUILT. phase-05-octavia-verify.sh now compares o-hm0's MTU against lb-mgmt-net's (resolved BY TAG, never by name), fails in either direction, and REFUSES when a value cannot be read. This closes the LP#2018998 obligation, live on our exact pin after its 2025-12-31 recurrence. THE DECISION RECORD HAD CLAIMED THIS SHIPPED. design-decisions.md carried a present-tense "Delivery: the assertion ships in ..." written on the day of the ruling, while the file held zero MTU references and its last commit predated the ruling by a month. Corrected in place. Sharper than the usual ruled-but-not-built class: the decision doc was the false witness. TWO OWNED ERRORS: - I concluded "no octavia harness exists" from a NAME grep. The script's harness has always been tests/phase-05. Duplicate deleted, R8a cases folded into the real one. - My first MTU draft ABORTED the script: a $( ) under set -euo pipefail with inherit_errexit exits the run rather than reaching the refusal branch. The pre-existing harness I had just declared nonexistent caught it. Same class as commit 1's IFS word-splitting trap; both now locked by cases. Two live surfaces still contradicted R8 -- dc-dc-phase4 and the workflow doc both called lb-mgmt IPv6 "a real, open risk" and recommended keeping it v4-only, citing the two refuted bugs. A reader would have re-litigated a closed ruling in the wrong direction. Both superseded in place. R7 executed: phase-01 Step 1.0-GEN gains a $DC selector; the baked /CN=VR0 DC0 CA subjects derive from it, and the VIP gate derives this DC's provider prefix from the same overlay it read the VIP from -- R7's explicit "read the MERGED input" caveat. dc1's 10.12.64.57 used to hard-ABORT, so no dc1 artifact could be produced. Verified both DCs, negative control still aborts. Logged not built: the controller cert's CN/DNS SANs still carry dc0.vr0 (outside R7's ruled scope, inert while os-public-hostname is unset), and it gains no IPv6 IP SAN though the VIP is dual-family -- a gap, not a break, and adding v6 SANs needs its own ruling. tests/phase-05 14 cases (was 9); gauntlet ALL GREEN (85) on vcloud; repo-lint 0 fail / 611 files. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvCyrwvYTTcDYnRErfMsNf |
|---|
|
|
| docs/CURRENT-STATE.md |
|---|
| docs/changelog-20260728-vip-arity-gate.md |
|---|
| docs/dc-dc-deployment-workflow.md |
|---|
| docs/design-decisions.md |
|---|
| runbooks/dc-dc-phase4-juju-bundle-per-dc.md |
|---|
| runbooks/phase-01-bundle-deploy.md |
|---|
| scripts/phase-05-octavia-verify.sh |
|---|
| tests/phase-05/fakebin/juju |
|---|
| tests/phase-05/fakebin/openstack |
|---|
| tests/phase-05/run-tests.sh |
|---|