The repo's runbooks/appendix-A-troubleshooting.md is the operational symptom->cause->fix index, keyed by D-NNN/DOCFIX-NNN (it now includes the mysql-innodb-cluster recovery signatures and a point-of-use identifier index). ALWAYS check it before diagnosing from first principles - most failures on this cloud have been seen before and have a validated fix. ops-capi-recovery.md covers the CAPI/Magnum stack; runbooks/ops-restart-procedure.md covers full-cloud recovery. This file gives you the method and the reflexes that must fire BEFORE and WHILE you read those.
VR1 DC-DC track: appendix-A above is VR0-specific -- nothing in the VR1 DC-DC track (docs/dc-dc-deployment-workflow.md) has been executed yet, so there is no equivalent incident index for it (an OpenTofu/MAAS-vm_host/ OPNsense-edge failure will not be in appendix-A). Apply the SAME triage method below regardless, but do not expect a pre-catalogued fix for a VR1- specific symptom -- log a genuinely new finding as a DOCFIX/D-NNN candidate per this repo's own discipline rather than assuming it must already be documented somewhere.
bash scripts/cloud-assert.sh first - it runs every service-own-verdict gate in one read-only sweep and localizes the failing layer. Then the targeted read-only audit of that surface before touching anything. juju status, the service's own state (haproxy admin socket, mysql cluster-status, vault status, ovn-appctl), the relevant logs. Hard rule 2: measurements, not memory.active/idle is BLIND to: a DOWN haproxy backend (D-045 - hid a dead nova-api for 3 days), a missing magnum trustee domain (D-046 - magnum reports ready regardless), an unparsed-but-attached policy override, and per-backend/service state generally. Gate on the service's OWN verdict (admin sockets, functional probes), never on juju status alone.who -b / uptime / journalctl -k | grep -i oom before treating it as an outage.uninitialized taint, magnum reconcile dead, addons Pending -> check capi-mgmt-v2 is ACTIVE before anything else. Manual start is POLICY (down is a signal), not a defect.juju destroy-model decomposes MAAS pod-composed machines - machine retention is juju remove-machine --keep-instance (D-061); mysql-innodb-cluster never bootstraps at num_units 1 - deploy at 3 (D-062); reboot-cluster-from-complete-outage is destructive against an already-healthy cluster - check cluster status FIRST; vault restarts sealed by design - sealed-after-reboot is expected, not a fault; the magnum domain-setup action must be re-run after every redeploy (D-046).Prove event-driven flows by FUNCTIONAL OUTCOME, not packet/snapshot forensics. For a bursty, per-operation client flow (e.g. the magnum conductor's helm/watch to the mgmt apiserver), an instantaneous ss snapshot or a short tcpdump window will usually catch NOTHING -- the connection is idle at rest and short-lived under load. That absence is expected, not a fault. The right proof is a forced real operation that SUCCEEDS end-to-end (a cluster resize reaching UPDATE_COMPLETE proves the conductor reached the mgmt apiserver through the boundary), plus a TCP handshake from the real source. Reach for established-state or a forced functional op before concluding a flow is broken; a service's own successful state transition outranks a captured packet.