Newer
Older
openstack-caracal-dc-dc / docs / changelog-20260709-dc-dc-phase5-runbook.md

Changelog 2026-07-09 -- Stage 6 runbook: DR wiring and failover drill (DOCFIX-158)

No live infrastructure touched -- new runbook document only. Authored by a delegated subagent (general-purpose, briefed with this repo's discipline, the DR seed doc, D-108/D-104, Section 8's failover skeleton, and the tooling gap register), reviewed before this commit -- repo-lint was clean on the first pass.

Item

1. DOCFIX-158 -- runbooks/dc-dc-phase5-dr-failover-drill.md

FILES: runbooks/dc-dc-phase5-dr-failover-drill.md (new), docs/dc-dc- deployment-workflow.md (Stage 6 row updated, tooling gap register item 14 added).

WHAT: command-level implementation of docs/dc-dc-buildout-design.md Section 8's failover/failback skeleton, staged one-way-then-two-way per D-108's explicit requirement, plus the D-104 per-DC controller backup/ restore drill (exercised here, not deferred).

Three real bundle gaps found and flagged before any mutation is proposed (grepped bundle.yaml directly, not assumed): no cinder- backup charm is deployed in either DC's bundle (the DR seed's own text assumes cinder already exposes a backup-backend endpoint, which is true, but the separate charm that runs the backup driver isn't there); no ceph-rbd-mirror charm is deployed either; and ceph-mon's existing rbd-mirror endpoint binding is on storage, not replication (inherited from the VR0/DC0 seed at commit 8813efc, predates D-108's ULA- carrier requirement). All three become the runbook's own Step 2 (a gated, reviewed bundle-relation-binding change with its own changelog/revert requirement) rather than being silently routed around or left unmentioned.

Every realm/zonegroup/zone/pool/endpoint name is an explicit <UPPER_SNAKE_TBD> placeholder -- the runbook is explicit that the underlying Ceph commands (radosgw-admin realm/zonegroup/zone create, rbd mirror pool enable/peer bootstrap/promote/demote) are standard, well-documented upstream Ceph administration, not invented for this repo, while the specific names/endpoints/addresses genuinely don't exist yet and must never be guessed.

A negative-control drill precedes the real one: Step 10.0 runs a replication-plane-ONLY partition first (DC1 stays otherwise reachable) and explicitly states the split-brain-avoidance check in Step 10.1 SHOULD REFUSE to treat that as "DC1 down" -- if it promotes DC2 anyway under a mere partition, that's flagged as a finding against the drill design, not a pass. Only after that negative control does Step 10 run the real hard-down drill.

RTO/RPO are treated strictly as MEASURED DRILL OUTPUTS throughout (Steps 6, 7, 9, 10.5, 11.5), never asserted as a pre-committed SLA, matching D-108's own explicit language.

VERIFIED: bash scripts/repo-lint.sh 0 fail, 1 documented legacy warn (no fixes needed). NOT YET EXECUTED -- no live Ceph cluster this session.

REVERT: rm runbooks/dc-dc-phase5-dr-failover-drill.md && git checkout HEAD~ -- docs/dc-dc-deployment-workflow.md (safe).

Next actionable step

Once this drill has been run manually end-to-end at least once, the radosgw multisite/rbd-mirror command sequences it documents are strong candidates for extraction into real scripts/ with a test harness, closing tooling gap register item #5 for real -- explicitly logged as future work in the runbook's own delivery checklist, not built here (no live Ceph cluster exists this session to test a script against).