fix(backup-drill): guard shared-volume + size drill VM for bundle+extract (#131) #143
Inga granskare
Etiketter
Inga etiketter
area/backups
area/ci
area/control-panel
area/identity
area/infra
area/observability
area/payments
area/security
area/storage
area/web
blocked
needs-info
needs-triage
ready-for-implementation
type
bug
type
chore
type
docs
type
epic
type
feature
type
task
wontfix
Ingen milstolpe
Inget projekt
Inga tilldelade
1 deltagare
Notiser
Förfallodatum
Inget förfallodatum satt.
Beroenden
Inga beroenden satta
Referens
bitborg/bitborg-infra!143
Läser in…
Hänvisa till i nytt ärende
Ingen beskrivning angiven.
Ta bort grenen "fix/131-drill-redesign"
Borttagning av en gren är permanent. Även om den borttagna grenen kan fortsätta existera en kort tid innan den faktiskt tas bort, kan det INTE ångras i de flesta fall. Vill du fortsätta?
Fixes #131 properly after #130 (40 GB) proved insufficient and triggering the drill spiked the shared prod backup volume 81%→97% (DiskUsageCritical) — root cause: the orchestrator fetches the archive and decrypts a ~3× larger bundle into
WORKDIRon/srv/gitborg-backup.Changes (orchestrator + defaults)
WORKDIR's volume has< backup_drill_min_free_gb(25) free. A drill can now never fill a shared prod volume; it fails safe instead. (This is the guarantee that the 2026-07-19 incident can't recur.)WORKDIRpeak.Validated: rendered orchestrator
py_compiles;ansible-lint roles/backup-drillpasses (production).⚠️ Operator sequence (this PR alone is not enough to make the drill pass)
The guard needs headroom to clear — with the backup volume at 81% (~19 GB free), the guard will (correctly) abort the drill. To get a passing drill:
ansible-playbook site.yml --tags backup-drill(installs guard + 60 GB VM).backup_volume_size100 → 150 interraform.tfvars(gitignored — local edit),tofu apply, thenresize2fs /dev/vdc— this is PR #26's backup-headroom item too. NowWORKDIRclears the 25 GB floor with margin.systemctl --user enable --now bitborg-backup-drill.timer) — I stopped+disabled it as the incident stopgap.forgejo doctorpasses +BackupDrillFailedclears.I won't run the drill or apply anything here — this is review-only, and the timer stays disabled until you've done the above.
Future hardening (not here): stream the decrypt straight to the VM (
age -d | ssh 'cat > bundle') to eliminate the local bundle entirely, and derive the VM disk size from the live data volume (#131 box 3).