Harden backup credentials and add durable image inventory publication
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a06ecb-456a-71c2-b41e-0755d336e883
This commit is contained in:
codex 2026-09-05 01:53:24 +02:00
parent 62423fd092
commit 0349a08e1b
13 changed files with 365 additions and 23 deletions

View file

@ -73,7 +73,38 @@ make forgejo-package-prune-dry-run # list would-delete candidates
make forgejo-package-prune # delete beyond retention depth
```
## Rollback
## Durable multi-cluster image inventory
The inventory belongs outside the platform checkout. On the production worker
host, use `/home/tegwick/.local/state/railiance-platform/live-images/all.txt`.
`make live-images-refresh LIVE_IMAGES_SOURCES="/path/railiance01.txt /path/coulombcore.txt"`
merges complete, nonempty exports with the prior inventory under a writer lock,
then atomically publishes sorted image references and a count/hash receipt.
Set `LIVE_IMAGES_OUTPUT` when publishing for a different host user.
Missing, empty, or malformed input fails without replacing the previous file.
Refresh only adds protection: removal of obsolete tags requires a separate
review of every production cluster and rollback requirement.
Migration and rollout sequence:
1. Seed from the restored `docs/evidence/live-images-all.txt` plus fresh exports
from railiance01 and coulombcore; retain the restored multi-cluster entries.
2. Project the durable **directory** read-only into the activity-core worker
and configure its inventory argument to `all.txt` in that directory. Do not
mount the single file: atomic replacement must be visible to the worker.
3. Verify the worker reads a nonempty inventory and retains the existing hard
refusal of apply when that file is missing or empty. Use only its dry-run
verification; do not manually trigger prune.
4. After each cluster image rollout, export pod regular, init, and ephemeral
container images to a temporary file. Require successful kubectl exit and
nonempty output, then invoke this refresh target with that export. Keep
other clusters' prior entries during outages. Run the hook on the durable
host, or transfer the complete export there before invoking it.
The publisher is implemented here; host migration and the activity-core mount
and rollout-hook adoption are tracked in `RPF-WP-0028` until verified live.
## Rollback procedure
If a needed tag was removed, restore from the latest Nextcloud `forgejo-dump-*.zip.age`
(`make forgejo-backup` evidence) using `railiance-infra/tools/forgejo-restore-drill.sh`,