b527430ec7
The guest-level backup layer + the journaled self-restore-test (restore→boot→verify→ teardown) that closes "a backup you haven't restored isn't a backup". All benign (reuses the slice-4 classifier/gate/journal; no new destructive class/crypto). Local target only; PBS = Phase B. Restore to a NEW guest only. Backups crash-consistent. - proxmox: DestroyLXC, VzdumpOptions.Notes (notes-template), LatestBackupVolID. - reconcile: Engine.RunRestoreTest (journal Scratch entry BEFORE mutation; net link-down pre-boot; defer teardown always; benign gated destroy) + Recover extended to reap a leaked scratch guest (Scratch flag, special-cased before the UPID path; idempotent). - internal/backup: runner (vzdump + archive resolve + bulk-gap = backup!=1) + cadence scheduler (4th daemon goroutine, default 24h) + in-memory report store. - hub: Backup/RestoreTest filled; collector seams; cross-repo golden byte-identical + bidirectional key-set tests; hub handler logs a FAILED restore-test prominently. - config BackupConfig (band 990000-990009 default); --selftest=backup / restore-test. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
48 lines
1.2 KiB
JSON
48 lines
1.2 KiB
JSON
{
|
|
"proxmox": {
|
|
"endpoint": "https://127.0.0.1:8006",
|
|
"node": "demo-felhom",
|
|
"token": "felhom-agent@pve!agent=REPLACE_WITH_SECRET",
|
|
"tls": {
|
|
"ca_file": "",
|
|
"fingerprint": "BA:7C:99:7D:45:D0:67:91:E2:F2:72:74:6E:D6:9F:83:51:D1:61:E5:C3:BD:F6:A0:B8:0B:E3:D8:DB:89:5B:CF",
|
|
"insecure_skip_verify": false
|
|
}
|
|
},
|
|
"privileged": {
|
|
"mode": "sudo",
|
|
"sudo_path": "sudo"
|
|
},
|
|
"authz": {
|
|
"nonce_store_path": "/var/lib/felhom-agent/nonces.log",
|
|
"signers": [
|
|
{
|
|
"key_id": "felhom-op-1",
|
|
"role": "operational",
|
|
"public_key": "ssh-ed25519 AAAA... felhom-op-1"
|
|
},
|
|
{
|
|
"key_id": "felhom-recovery-1",
|
|
"role": "recovery",
|
|
"public_key": "ssh-ed25519 AAAA... felhom-recovery-1"
|
|
}
|
|
]
|
|
},
|
|
"hub": {
|
|
"url": "https://hub.felhom.eu",
|
|
"host_id": "demo-host-01",
|
|
"api_key": "REPLACE_WITH_PER_HOST_HUB_KEY",
|
|
"poll_seconds": 900,
|
|
"timeout_seconds": 30,
|
|
"ca_file": ""
|
|
},
|
|
"backup": {
|
|
"local_backup_target": "local",
|
|
"restore_storage": "local-lvm",
|
|
"restore_test_cadence_seconds": 0,
|
|
"scratch_vmid_min": 990000,
|
|
"scratch_vmid_max": 990009
|
|
},
|
|
"log_level": "info"
|
|
}
|