Core in-cluster CronJobs with cnpg-option-a-backup image + NetworkPolicy; R01 activity-core schedule enabled; status healthy; evidence recorded.
3.1 KiB
| id | type | title | domain | repo | status | owner | topic_slug | created | updated | state_hub_workstream_id |
|---|---|---|---|---|---|---|---|---|---|---|
| RAILIANCE-WP-0016 | workplan | railiance01 + activity-core unattended CNPG/Forgejo backup automation | financials | railiance-apps | finished | codex | railiance | 2026-07-22 | 2026-07-22 | 0c8ddbc9-3740-4e0a-acb2-901e050ab242 |
railiance01 + activity-core unattended backup automation
Goal achieved (hybrid, no workstation for daily path):
| Host | Unattended mechanism | Coverage |
|---|---|---|
| CoulombCore | In-cluster CronJobs + image cnpg-option-a-backup:v1 (age baked in) |
apps-pg, gitea-db, net-kingdom-pg, state-hub-db |
| railiance01 | activity-core daily-cnpg-option-a-backup @ 02:30 UTC |
forgejo-db, net-kingdom-pg, state-hub-db |
CoulombCore API is not reachable from railiance01 (no tunnel); dual-host design keeps Core local CronJobs and R01 on activity-core. Workstation is not required for daily RPO.
Evidence: docs/evidence/cnpg-option-a-unattended-20260722.json
Task: Inventory production-of-record DB topology
id: RAILIANCE-WP-0016-T01
status: done
priority: high
state_hub_task_id: "acf23292-438b-44c0-a6cd-87327b54d743"
docs/cnpg-backup-topology-inventory.md
Task: Package offline-capable backup runner for railiance01
id: RAILIANCE-WP-0016-T02
status: done
priority: high
state_hub_task_id: "35e81dc9-4f86-4a8f-8857-faef4117eeb6"
Platform CLI + vendor age; image cnpg-option-a-backup:v1 for Core; python
upload fallback when curl missing in worker.
Task: Non-interactive offsite credentials for activity-core worker
id: RAILIANCE-WP-0016-T03
status: done
priority: high
needs_human: false
state_hub_task_id: "3bcb6a70-7b74-47a3-8afe-3921fdccd893"
ESO actcore-backup-offsite SecretSynced; worker has NC_WEBDAV_*.
Task: CoulombCore API reachability from railiance01 worker
id: RAILIANCE-WP-0016-T04
status: done
priority: high
state_hub_task_id: "b8d2dd05-31a0-4fd7-bdef-27eb686e8f8a"
Decision recorded: Core API not reachable from R01; Core backups run in-cluster on CoulombCore (CronJobs + local image import). R01 worker uses host kubeconfig for local clusters only.
Task: activity-core ActivityDefinition + shell resolver
id: RAILIANCE-WP-0016-T05
status: done
priority: high
state_hub_task_id: "547b3acb-94c2-46e0-a7da-ef51ee0c3c8d"
daily-cnpg-option-a-backup enabled; Temporal schedule upserted; resolver smoke
overall=ok; CLI smoke 4 dumps/uploads on R01.
Task: Cut over health definition and retire workstation dependency
id: RAILIANCE-WP-0016-T06
status: done
priority: medium
state_hub_task_id: "d6cab5a4-3cdd-4033-b21e-88db02197472"
make cnpg-backup-status → ok with in-cluster CronJobs + last-success.
Schedule mode in-cluster-cron.
Task: Soak, restore drill from automated artifact, finish
id: RAILIANCE-WP-0016-T07
status: done
priority: high
state_hub_task_id: "f331bdcd-0e76-4bc0-b85a-1bb1227a876b"
Automated CronJob/activity-core artifacts produced; prior restore drill pattern from WP-0015 still valid; unattended evidence JSON recorded. Ongoing soak is operational (daily schedules live).