Guide the operator through pausing BackupSchedule on the primary hub, with version-specific instructions for ACM 2.11 vs 2.12+. > **Reference**: [docs/ACM_SWITCHOVER_RUNBOOK.md — Step 1](../../../docs/ACM_SWITCHOVER_RUNBOOK.md#step-1-pause-backupschedule-on-primary-hub) **If Argo CD / GitOps manages the BackupSchedule:** Pause Argo CD auto-sync for ACM-touching Applications first (runbook: "Optional: Pause Argo CD Auto-Sync"), or run the switchover tool with `--argocd-manage` so it pauses tho...
Scanned 9/3/2026
Install to Claude Code
npx -y skills add tomazb/rh-acm-switchover --skill operations --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Operations?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/tomazb-operations-9807b9f7)More formats (shields.io, HTML) on the badges page.
# Pause Backups on Primary Hub
Guide the operator through pausing BackupSchedule on the primary hub, with version-specific instructions for ACM 2.11 vs 2.12+.
> **Reference**: [docs/ACM_SWITCHOVER_RUNBOOK.md — Step 1](../../../docs/ACM_SWITCHOVER_RUNBOOK.md#step-1-pause-backupschedule-on-primary-hub)
**If Argo CD / GitOps manages the BackupSchedule:** Pause Argo CD auto-sync for ACM-touching Applications first (runbook: "Optional: Pause Argo CD Auto-Sync"), or run the switchover tool with `--argocd-manage` so it pauses those Applications during primary prep. Otherwise GitOps may immediately revert the pause.
---
## Conversation Flow
### 1. Identify ACM Version
Ask: **"What ACM version is running on your primary hub?"**
```bash
oc get multiclusterhub -A -o jsonpath='{.items[0].status.currentVersion}' --context <primary>
```
**Decision Tree:**
- ACM 2.12+ → Use patch method (simpler, reversible)
- ACM 2.11 → Use delete method (save YAML first)
---
## ACM 2.12+ Instructions
### Step 1: Find BackupSchedule Name
```bash
# List BackupSchedules
oc get backupschedule.cluster.open-cluster-management.io -n open-cluster-management-backup --context <primary>
# Set the BackupSchedule name from the list above
BACKUP_SCHEDULE_NAME="<paste-backupschedule-name-here>"
echo "BackupSchedule name: $BACKUP_SCHEDULE_NAME"
```
### Step 2: Pause BackupSchedule
```bash
oc patch backupschedule.cluster.open-cluster-management.io "$BACKUP_SCHEDULE_NAME" \
-n open-cluster-management-backup --context <primary> \
--type='merge' -p '{"spec":{"paused":true}}'
```
### Step 3: Verify
```bash
oc get backupschedule.cluster.open-cluster-management.io "$BACKUP_SCHEDULE_NAME" \
-n open-cluster-management-backup --context <primary> \
-o jsonpath='{.spec.paused}'
# Should return: true
```
**Decision Tree:**
- ✅ Returns `true` → Proceed to next step
- ❌ Returns `false` or empty → Retry patch command
---
## ACM 2.11 Instructions
### Step 1: Save BackupSchedule YAML First
> ⚠️ **IMPORTANT**: Save before deleting — you'll need this to recreate later
```bash
# Set the BackupSchedule name from the list above
BACKUP_SCHEDULE_NAME="<paste-backupschedule-name-here>"
# Save to file
oc get backupschedule.cluster.open-cluster-management.io "$BACKUP_SCHEDULE_NAME" \
-n open-cluster-management-backup --context <primary> \
-o yaml > "${BACKUP_SCHEDULE_NAME}.yaml"
echo "Saved to: ${BACKUP_SCHEDULE_NAME}.yaml"
```
### Step 2: Delete BackupSchedule
```bash
oc delete backupschedule.cluster.open-cluster-management.io "$BACKUP_SCHEDULE_NAME" \
-n open-cluster-management-backup --context <primary>
```
### Step 3: Verify Deletion
```bash
oc get backupschedule.cluster.open-cluster-management.io -n open-cluster-management-backup --context <primary>
# Should return: No resources found
```
### To Restore Later (if rollback needed)
```bash
# Option 1: Using yq
yq 'del(.metadata.uid, .metadata.resourceVersion, .metadata.managedFields, .status)' \
"${BACKUP_SCHEDULE_NAME}.yaml" | oc apply -f -
# Option 2: Without yq
oc create -f "${BACKUP_SCHEDULE_NAME}.yaml" --dry-run=client -o yaml | oc apply -f -
```
---
## What If...
### "I can't find any BackupSchedule"
```bash
# Check all namespaces
oc get backupschedule.cluster.open-cluster-management.io -A --context <primary>
```
If none exist:
- Backups may be disabled on this hub
- Check if using external backup mechanism
- Proceed to next step (no action needed here)
### "BackupSchedule shows error status"
Check events:
```bash
oc describe backupschedule.cluster.open-cluster-management.io "$BACKUP_SCHEDULE_NAME" \
-n open-cluster-management-backup --context <primary>
```
Common issues:
- OADP not configured → Fix before switchover
- Storage backend unavailable → Check BackupStorageLocation
### "I need to verify no backups are running"
```bash
oc get backup.velero.io -n open-cluster-management-backup --context <primary> \
--field-selector=status.phase=InProgress
# Should return: No resources found
```
If backup in progress:
- Wait for completion (typically 5-15 minutes)
- If urgent, delete the backup CR (this removes only the CR; the backup will NOT be restorable):
```bash
oc delete backup.velero.io <name> -n open-cluster-management-backup --context <primary>
```
- After switchover stabilizes, take a fresh backup on the new primary hub
---
## Confirmation
Before proceeding, confirm:
- [ ] BackupSchedule is paused (2.12+) or deleted with YAML saved (2.11)
- [ ] No backups currently in progress
- [ ] YAML file saved securely (for potential rollback)
---
## Next Step
Proceed to: [activate-passive-restore.skill.md](activate-passive-restore.skill.md) (Step 2: Disable Auto-Import)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!