Skip to content

Commit 9a00d1e

Browse files
stuggiclaude
andcommitted
[b/r] Update restore README with ci-framework and manual procedure
Update automated Quick Start to use ci-framework playbooks. Rewrite manual restore procedure with fully rendered Restore CRs and resource modifier ConfigMap instead of Jinja2 template references. Update Velero version notes for OCP 4.20. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 38fb9f6 commit 9a00d1e

6 files changed

Lines changed: 398 additions & 194 deletions

File tree

docs/dev/backup-restore/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ ansible-playbook playbooks/backup_restore.yaml \
3636
-e cifmw_backup_restore_run_backup=false \
3737
-e cifmw_backup_restore_run_cleanup=true \
3838
-e cifmw_backup_restore_run_restore=true \
39-
-e cifmw_backup_restore_backup_timestamp=20260311-081234
39+
-e cifmw_backup_restore_backup_name_suffix=20260311-081234
4040
```
4141

4242
The restore triggers an EDPM deployment to resync credentials but does

docs/dev/backup-restore/backup-restore-controller-design.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,21 +1117,19 @@ Use cases:
11171117
### Phase 2: OADP Backup (Done)
11181118

11191119
- Split backup: two OADP Backup CRs (PVCs with CSI snapshots + everything else)
1120-
- Backup templates in `docs/dev/backup-restore/backup/templates/`
1121-
- Ansible playbook orchestrates Galera DB dumps + OADP backups
1120+
- ci-framework `cifmw_backup_restore` role orchestrates Galera DB dumps + OADP backups
11221121
- Data Mover support (`snapshotMoveData: true`, default)
1122+
- Manual procedure documented in `docs/dev/backup-restore/backup/README.md`
11231123

11241124
### Phase 3: OADP Restore with Ansible Automation (Done)
11251125

1126-
- Restore templates in `docs/dev/backup-restore/restore/templates/`
1127-
- Ansible playbook orchestrates the full restore flow:
1126+
- ci-framework `cifmw_backup_restore` role orchestrates the full restore flow:
11281127
- Ordered OADP restores (00 → 10 → 20 → 30 → 40 → 60)
11291128
- Automated database restore (GaleraRestore CRs + restore script)
11301129
- RabbitMQ credential restore (secrets from backup + RabbitMQUser CRs)
11311130
- Staged deployment (infrastructure-only → full)
11321131
- EDPM deployment to resync credentials
1133-
- Interactive pauses between steps (skippable with `auto_ack=true`)
1134-
- See `docs/dev/backup-restore/restore/README.md` for usage
1132+
- Manual procedure documented in `docs/dev/backup-restore/restore/README.md`
11351133

11361134
### Phase 4: Golang Backup/Restore Controllers (Future)
11371135

docs/dev/backup-restore/backup-restore-controller-implementation.md

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ We use two separate OADP backups:
366366
367367
### Restore CRs
368368
369-
Restore CRs are in `docs/dev/backup-restore/restore/`. Each uses a shared resource modifier ConfigMap (`00-resource-modifiers-configmap.yaml`) that:
369+
Restore CRs are documented in `docs/dev/backup-restore/restore/README.md`. Each uses a shared resource modifier ConfigMap that:
370370
- Strips `kubectl.kubernetes.io/last-applied-configuration` annotations
371371
- Adds `deployment-stage: infrastructure-only` annotation to OpenStackControlPlane
372372
@@ -401,17 +401,12 @@ RabbitMQ clusters generate new random credentials on creation, but EDPM nodes st
401401
4. Create RabbitMQUser CRs to import the old credentials
402402
5. Clean up the temporary namespace
403403
404-
See `docs/dev/backup-restore/restore/06b-restore-rabbitmq-secrets.yaml` for the manual procedure or the restore playbook (`docs/dev/backup-restore/restore/restore-openstack.yaml`) for automation.
404+
See `docs/dev/backup-restore/restore/06c-manual-rabbitmq-restore.md` for the manual procedure or the ci-framework `cifmw_backup_restore` role for automation.
405405
406-
### Automated Restore Playbook
406+
### Automated Restore
407407
408-
The Ansible playbook at `docs/dev/backup-restore/restore/restore-openstack.yaml` orchestrates the full restore flow:
409-
410-
```bash
411-
ansible-playbook docs/dev/backup-restore/restore/restore-openstack.yaml \
412-
-e pvc_backup_name=openstack-backup-pvcs \
413-
-e resources_backup_name=openstack-backup-resources
414-
```
408+
The ci-framework `cifmw_backup_restore` role orchestrates the full restore flow.
409+
See `docs/dev/backup-restore/restore/README.md` for usage.
415410
416411
## Testing Checklist
417412
@@ -462,12 +457,8 @@ oc get volumesnapshot -n openstack
462457
### Restore Testing
463458
464459
```bash
465-
# Apply restore CRs in order and wait for each
466-
oc apply -f docs/dev/backup-restore/restore/01-restore-order-00-pvcs.yaml
467-
oc wait --for=jsonpath='{.status.phase}'=Completed restore/openstack-restore-00-pvcs -n openshift-adp --timeout=15m
468-
469-
# Continue with each order...
470-
# See docs/dev/backup-restore/restore/README.md for full procedure
460+
# Follow the manual restore procedure in docs/dev/backup-restore/restore/README.md
461+
# or use the ci-framework cifmw_backup_restore role
471462
```
472463
473464
## Troubleshooting
@@ -509,7 +500,6 @@ oc wait --for=jsonpath='{.status.phase}'=Completed restore/openstack-restore-00-
509500
## See Also
510501
511502
- Design document: `docs/dev/backup-restore/backup-restore-controller-design.md`
512-
- Backup CRs: `docs/dev/backup-restore/backup/`
513-
- Restore CRs: `docs/dev/backup-restore/restore/`
514-
- Restore playbook: `docs/dev/backup-restore/restore/restore-openstack.yaml`
515-
- Restore scripts: `docs/dev/backup-restore/scripts/restore-galera.sh`
503+
- Backup: `docs/dev/backup-restore/backup/README.md`
504+
- Restore: `docs/dev/backup-restore/restore/README.md`
505+
- ci-framework playbooks: [ci-framework](https://github.com/openstack-k8s-operators/ci-framework)

docs/dev/backup-restore/restore/06-manual-database-restore.md

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -127,27 +127,8 @@ oc delete galerarestore openstackrestore -n openstack
127127
oc delete galerarestore openstackrestorecell1 -n openstack
128128
```
129129

130-
### 8. Remove deployment-stage annotation
131-
132-
Resume full OpenStack deployment by removing the annotation:
133-
134-
```bash
135-
oc annotate openstackcontrolplane <name> -n openstack core.openstack.org/deployment-stage-
136-
```
137-
138-
Replace `<name>` with your OpenStackControlPlane CR name.
139-
140-
### 9. Wait for OpenStack services to start
141-
142-
```bash
143-
oc get pods -n openstack
144-
oc get openstackcontrolplane -n openstack
145-
```
146-
147130
## Next Steps
148131

149-
After database restore and annotation removal, proceed to:
150-
1. **Order 55**: Restore RabbitMQ credentials (see `06c-manual-rabbitmq-restore.md`)
151-
2. **Order 60**: Restore DataPlane resources (if applicable)
152-
3. See [Post-Restore](../README.md#post-restore-credential-rotation-and-edpm-nodes)
153-
for EDPM deployment and InstanceHa re-enablement
132+
After database restore, return to the main restore procedure in
133+
[README.md](README.md#step-6b-rabbitmq-credential-restore) for
134+
RabbitMQ credential restore and removing the deployment-stage annotation.

docs/dev/backup-restore/restore/06c-manual-rabbitmq-restore.md

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,59 @@ and creates RabbitMQUser CRs to re-establish the old credentials.
1414

1515
### 1. Restore secrets to a temporary namespace
1616

17+
First, create a resource modifier ConfigMap that strips finalizers so
18+
the temp namespace can be deleted cleanly:
19+
1720
```bash
18-
# Create temp namespace
1921
oc create namespace openstack-restore-tmp
2022

21-
# Restore all secrets from backup to temp namespace
22-
# Edit backupName in 06b-restore-rabbitmq-secrets.yaml first, then:
23-
oc apply -f 06b-restore-rabbitmq-secrets.yaml
23+
cat <<'EOF' | oc apply -f -
24+
apiVersion: v1
25+
kind: ConfigMap
26+
metadata:
27+
name: openstack-restore-tmp-resource-modifiers
28+
namespace: openshift-adp
29+
data:
30+
resource-modifiers.yaml: |
31+
version: v1
32+
resourceModifierRules:
33+
- conditions:
34+
groupResource: "*"
35+
namespaces:
36+
- openstack-restore-tmp
37+
mergePatches:
38+
- patchData: |
39+
metadata:
40+
finalizers: null
41+
EOF
42+
```
43+
44+
Then restore all secrets from the backup to the temp namespace. Replace
45+
`RESOURCES_BACKUP` with your backup name (e.g.,
46+
`openstack-backup-resources-20260311-081234`):
47+
48+
```bash
49+
cat <<EOF | oc apply -f -
50+
apiVersion: velero.io/v1
51+
kind: Restore
52+
metadata:
53+
name: openstack-restore-rabbitmq-secrets-${RESTORE_SUFFIX}
54+
namespace: openshift-adp
55+
spec:
56+
backupName: ${RESOURCES_BACKUP}
57+
includedNamespaces:
58+
- openstack
59+
namespaceMapping:
60+
openstack: openstack-restore-tmp
61+
includedResources:
62+
- secrets
63+
resourceModifier:
64+
kind: ConfigMap
65+
name: openstack-restore-tmp-resource-modifiers
66+
EOF
67+
2468
oc wait --for=jsonpath='{.status.phase}'=Completed \
25-
restore/openstack-restore-rabbitmq-secrets -n openshift-adp --timeout=5m
69+
restore/openstack-restore-rabbitmq-secrets-${RESTORE_SUFFIX} -n openshift-adp --timeout=5m
2670
```
2771

2872
### 2. Copy old credentials to target namespace
@@ -85,7 +129,6 @@ oc delete namespace openstack-restore-tmp
85129

86130
## Next Steps
87131

88-
After RabbitMQ credential restore, proceed to:
89-
1. **Order 60**: Restore DataPlane resources (if applicable)
90-
2. See [Post-Restore](../README.md#post-restore-credential-rotation-and-edpm-nodes)
91-
for EDPM deployment and InstanceHa re-enablement
132+
After RabbitMQ credential restore, return to the main restore procedure in
133+
[README.md](README.md#step-6c-remove-deployment-stage-annotation) to
134+
remove the deployment-stage annotation and resume full deployment.

0 commit comments

Comments
 (0)