OpenBao is down, or a secret is needed without it
- When
- An srvvault node or the whole OpenBao cluster is lost, or a secret has to be read while there is no cluster to read it from.
The procedures themselves are the Ansible OpenBao runbook, mirrored on this site. This card gets you to the right section with the right things on the desk.
Identify #
| You see | Go to |
|---|---|
One srvvaultN gone. The other two hold quorum and clients are fine |
Single-node loss |
| All three gone at once | Whole-cluster loss |
| One secret needed, and no cluster to ask | Break-glass |
srviac's iac won't start because OpenBao is down |
IaC agent cold boot |
| Everything restarted at once (a power cut) | Estate cold boot |
New hardware (fire, theft, nothing left): OpenBao is not first. The order is on Estate down, or a power cut.
Before you start #
- Roboformthe ansible-vault passphrase, the Shamir recovery keys (3 of 5), the age backup key
- The Ansible key, for
iacwhile OpenBao is downin RoboForm under "Homelab SSH key" until SecretRotator'sssh-keykind is in its nightly run'skinds_enabled. From then on RoboForm holds none:iactakes srviac's own copy of the key, which step 3 of IaC agent cold boot splices in. - An Ansible checkout
git clone https://github.com/pvginkel/Ansible, thenpoetry install - On the machine you work from
bao,age,jq,terraform, SSH to the PVE hosts - If
openbao_ufw_enableis onsrvvaultN takes SSH from srviac only, so work from there - Whole-cluster loss only: the newest backup
openbao/<ts>_openbao-backup.tgz.ageatbackupServer.rcloneRemote(HomelabAppsDeploystorage/config/prd/values.yaml)
Then #
Work the runbook section top to bottom. A whole-cluster recovery does not end at the snapshot
restore. The restore brings every AppRole back with the secret_ids it held at the snapshot, so
steps 5 to 8 re-issue the ones whose consumers are now rejected: openbao-admin from a root
token minted with the Shamir keys, then iac-agent, then backup, then every rotation made
since the snapshot. Step 9 verifies.
The Ansible key is written back, not rotated again
Once SecretRotator's ssh-key kind is in its nightly run's kinds_enabled, step 8 starts
with the Ansible key: before any rotation it re-runs, any iac run that logs in as
ansible, and the night's run. The restore can set iac/ansible-ssh-key back to a key the
hosts no longer take, and the rotator logs in with the key the leaf holds, so running its
plan again cannot repair it. srviac's own copy holds the key the hosts take, since nothing
writes it from the leaf: step 8 of
Whole-cluster loss
writes it back to the leaf and its catalog copy.