What's in v1.6.7
Three commits, grouped by area below. All changes land on top of v1.6.6 — no breaking changes, no config migration required.
Backup destinations
- Manual backup trigger now honors the destination selection. The
/backups/triggerform gained a destination checkbox group; the POST handler acceptsdestination_idsso runs write to the destinations you pick instead of silently falling back to "the first enabled local destination". - Multi-destination recording in the
Backuprow. When a backup writes to more than one destination (e.g. local + SMB), all of them are now recorded and rendered as colored badges in the list / detail / history views. Previously only the last successful destination showed. - Proxmox / binary-archive backups now ship to every selected destination, not only local. The binary backup handler used to hard-code
destination_type = "local"; it now loops every selected destination and calls a new optionalsave_binary(hostname, data, extension, config)method onDestinationBackend.LocalDestinationandSMBDestinationimplement it; git-family backends are skipped with a warning (archives in git are unusual). Fixes the long-standing "only Brocade backups hit SMB, Proxmox didn't" issue.
New UI
- Per-device backup history at
/backups/device/<id>/history— full chronological timeline withFirst / Changed / Unchangedmarkers computed from the stored config hash (cheap, no diffing per row), and checkboxes to pick any two backups to compare. - Compare view at
/backups/compare?a=<id>&b=<id>— unified diff between any two backups of the same device. Normalises older→newer automatically, handles identical configs and archive bundles gracefully. - Destination badges replacing the plain-text "Destination" column across the list / detail / history pages.
- Shortcut links: View all / Compare on the device detail page, History and Compare with previous on each backup detail page.
Safety / upgrade ergonomics
SECRET_KEYself-test at startup.init_db()now probe-decrypts one credential + one notification channel. If the currentSECRET_KEYcan't decrypt existing ciphertext (data volume wiped,.envregenerated, migration without copying the key, etc.), a clear WARNING is logged with recovery steps instead of silent empty-error backup failures at runtime. Catches the single biggest upgrade footgun.- Device edit form: SSH proxy fields stay visible when values are saved. The "SSH Proxy / Jump Host" section was being hidden whenever the engine was not Netmiko or SCP, which also hid any saved proxy data after an engine switch (no way to see or clear it). The section now stays visible whenever the device has saved proxy values, and a caption clarifies that the fields apply to Netmiko / SCP engines only.
Housekeeping
.dockerignoreadded — keeps.env,*.db,ssh_keys/,backups/,staging-backups/,venv/,.git/, and test caches out of the Docker build context (previous builds baked all of these into the image)..gitignorecoversstaging-backups/*except.gitkeepso local test artifacts don't show up as untracked.
Commits
1e9a9c1— multi-destination fixes + backup compare/history UI2bd52ca—SECRET_KEYself-test at startup088b5cb— keep device edit form's SSH-proxy section visible when values saved
Upgrading
- Docker:
docker compose pull && docker compose up -d—SECRET_KEYpersists in the data volume; encrypted credentials continue to decrypt. - Shell / systemd: rerun
install.sh; it preserves.env(and thereforeSECRET_KEY).
No schema migration beyond what v1.6.x already applied.