Add cnpg-option-a-backup JSON runner, vendored static age, kubectl install helper, and ESO policy path for offsite lane so railiance01 workers can upload without workstation OIDC (RAILIANCE-WP-0016).
1.8 KiB
1.8 KiB
CNPG Option A multi-host backup
Workplan: RAILIANCE-WP-0016
CLI: tools/cmd/cnpg-option-a-backup
Scheduler: activity-core daily-cnpg-option-a-backup (railiance01)
What it does
Logical pg_dump -Fc → age encrypt → Nextcloud WebDAV for production-of-record
CNPG databases on CoulombCore and railiance01. Emits JSON for
activity-core evidence sinks.
Inventory: railiance-apps/docs/cnpg-backup-topology-inventory.md.
Operator commands
# One-time vendor tools (age committed; kubectl downloaded)
tools/cmd/install-cnpg-backup-vendor-tools
# Dry-run (no upload)
RAILIANCE_BACKUP_DRY_RUN=1 tools/cmd/cnpg-option-a-backup
# Live upload (env or bao OIDC)
export RAILIANCE_BACKUP_NC_TOKEN=… # or bao login + auto-fetch
tools/cmd/cnpg-option-a-backup
From railiance-apps:
make cnpg-option-a-backup-dry-run
make cnpg-option-a-backup
activity-core enable
- Re-mint ESO token with backup policy:
OPENBAO_ACTIVITY_CORE_POLICIES="… workload-kv-read-railiance-backup-offsite-lane" \ scripts/openbao-eso-token-apply.sh - Apply
k8s/railiance/15-externalsecret-backup-offsite.yaml - Ensure
/home/tegwick/railiance-platformand~/.kubeon railiance01 host (worker hostPath). Place CoulombCore kubeconfig as~/.kube/config. - Rebuild/restart worker with resolver code; sync ActivityDefinition;
set
enabled: trueondaily-cnpg-option-a-backup. - Forced run; check State Hub progress +
make cnpg-backup-status.
Credentials
| Field | Where |
|---|---|
NC_WEBDAV_TOKEN / NC_WEBDAV_URL |
OpenBao offsite-lane → ESO → actcore-runtime-secret |
AGE_PUBLIC_KEY |
public constant / env (not private key) |
AGE_PRIVATE_KEY |
OpenBao only — restore drills, never on worker |
Catalog: warden route show railiance-backup-offsite-lane.