From 8b0175c70cbf3ed63c9a0e617c3f1e5332650ff6 Mon Sep 17 00:00:00 2001 From: Colin Wilk Date: Sat, 27 Jun 2026 21:20:35 +0000 Subject: feat: add storage quota support Add borg_storage_quota variable to limit repository storage on the borg server via --storage-quota option in authorized_keys. When not using borg_ssh_key_per_repo, all repos for a host must share the same quota setting (similar to --append-only). Per-repo SSH keys enable independent quotas per repository. --- CHANGELOG.md | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 CHANGELOG.md (limited to 'CHANGELOG.md') diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..653cbcb --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,112 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +## [Unreleased] + + + +### Breaking Changes + +#### Decryption keys file format changed + +**Am I affected?** +You have a `decryption_keys.yml` file with entries from previous versions. + +**What changed?** +Keys now include the repository name to support multiple repos per host. + +Old format: + +```yaml +my-host: BORG_KEY_abc123... +``` + +New format: + +```yaml +my-host_repo-name: BORG_KEY_abc123... +``` + +Generally a harmless change, just leads to duplicate keys with old and new +format. + +**Migration:** + +1. Run the role with the new version (new keys created automatically) +2. Verify backups work correctly +3. Remove old hostname-only entries from `decryption_keys.yml` + +--- + +#### Backup script block markers changed + +**Am I affected?** +Yes. + +**What changed?** +Block markers in the backup script now include repository name to support +multiple repos per host. + +Old: + +```bash +## BEGIN ANSIBLE MANAGED BLOCK for server: backup-server +``` + +New: + +```bash +## BEGIN ANSIBLE MANAGED BLOCK for backup-server/my-repo +``` + +**Migration:** + + + +Delete the script and re-run the role: + +```bash +rm /usr/local/bin/run_borg_backup +# Then run your playbook +``` + +--- + +#### Default backup argument + +**Am I affected?** +You are using the default value of `borg_backup_argument`. + +**What will change?** +Default will change from `{{ borg_server_host_url }}` to +`{{ borg_server_host_url }}-{{ borg_repo_name }}`. + +**Migration:** + + + +Systemd unit names will change. Manually migrate: + +```bash +# Stop old units +systemctl stop borg_backup@OLD-VALUE.timer +systemctl disable borg_backup@OLD-VALUE.timer + +# Run role to create new units +# Then enable new units +systemctl enable borg_backup@NEW-VALUE.timer +systemctl start borg_backup@NEW-VALUE.timer +``` + +### Added + +- Multi-instance backup support (multiple repositories per client host) +- Non-root backup user support via `borg_client_user` variable +- Configurable SSH key type (`borg_ssh_key_type`) with support for + ed25519, rsa, and ecdsa +- Per-repo SSH key support (`borg_ssh_key_per_repo`) for independent keys per repository +- Storage quota support (`borg_storage_quota`) to limit repository size on server +- Comprehensive test suite including disaster recovery scenarios +- Negative security tests for cross-host repository isolation +- Appendix-only repository mode (`borg_mode_append_only`) -- cgit v1.2.3