Allow per-app configurations (#9)

This PR allows for multiple per application borgmatic configurations as per this article: https://torsion.org/borgmatic/docs/how-to/make-per-application-backups/
This commit is contained in:
madhermit 2019-10-23 22:05:19 -07:00 committed by Manuel Riel
parent 0fd01bc13f
commit 0fcbef29a9
4 changed files with 22 additions and 21 deletions

View File

@ -10,7 +10,6 @@ An Ansible Role that sets up automated remote backups on the target machine. Use
### Optional Arguments ### Optional Arguments
- `borg_encryption_passphrase`: Password to use for repokey or keyfile. Empty if repo is unencrypted. - `borg_encryption_passphrase`: Password to use for repokey or keyfile. Empty if repo is unencrypted.
- `borgmatic_config_name`: Name to use for the borgmatic config file. Defaults to `config.yml`
- `borgmatic_large_repo`: Does repo-checking on a weekly basis instead of daily. Good for repos with 100GB+ size. - `borgmatic_large_repo`: Does repo-checking on a weekly basis instead of daily. Good for repos with 100GB+ size.
- `borgmatic_failure_command`: Run this command when an error occurs. E.g. `curl -s -F "token=xxx" -F "user=xxx" -F "message=Error during backup" https://api.pushover.net/1/messages.json` - `borgmatic_failure_command`: Run this command when an error occurs. E.g. `curl -s -F "token=xxx" -F "user=xxx" -F "message=Error during backup" https://api.pushover.net/1/messages.json`
- `borg_exclude_patterns`: Paths or patterns to exclude from backup. See [official documentation](https://borgbackup.readthedocs.io/en/stable/usage/help.html#borg-help-patterns) for more. - `borg_exclude_patterns`: Paths or patterns to exclude from backup. See [official documentation](https://borgbackup.readthedocs.io/en/stable/usage/help.html#borg-help-patterns) for more.

View File

@ -1,7 +1,6 @@
--- ---
borg_encryption_passphrase: '' borg_encryption_passphrase: ''
borg_exclude_patterns: [] borg_exclude_patterns: []
borgmatic_config_name: config.yaml
borgmatic_large_repo: false borgmatic_large_repo: false
borgmatic_failure_command: echo "`date` - Error while creating a backup." borgmatic_failure_command: echo "`date` - Error while creating a backup."
borg_one_file_system: true borg_one_file_system: true

View File

@ -52,9 +52,9 @@
borg_repository: "{{ repo_creation['data']['repoPath'] }}" borg_repository: "{{ repo_creation['data']['repoPath'] }}"
when: create_repo when: create_repo
- name: Ensures /etc/borgmatic exists - name: Ensures /etc/borgmatic.d exists
file: file:
path: /etc/borgmatic path: /etc/borgmatic.d
state: directory state: directory
mode: 0700 mode: 0700
owner: root owner: root
@ -62,8 +62,12 @@
- name: Add Borgmatic Configuration - name: Add Borgmatic Configuration
template: template:
src: config.yaml.j2 src: config.yaml.j2
dest: "/etc/borgmatic/{{ borgmatic_config_name }}" dest: "/etc/borgmatic.d/{{ item | regex_replace('\\/$', '') | basename }}.yaml"
mode: 0600 mode: 0600
with_items: "{{ borg_source_directories }}"
- debug: msg="/etc/borgmatic.d/{{ item | regex_replace('\\/$', '') | basename }}.yaml"
with_items: "{{ borg_source_directories }}"
- name: Add cron-job for borgmatic (large repo, create and check separate) - name: Add cron-job for borgmatic (large repo, create and check separate)
block: block:
@ -73,7 +77,7 @@
minute: "{{ 59 |random }}" minute: "{{ 59 |random }}"
user: "root" user: "root"
cron_file: borgmatic cron_file: borgmatic
job: "/usr/local/bin/borgmatic -c /etc/borgmatic/{{ borgmatic_config_name }} --create --prune" job: "/usr/local/bin/borgmatic --create --prune"
- cron: - cron:
name: "borgmatic-check" name: "borgmatic-check"
day: "{{ 28 | random }}" day: "{{ 28 | random }}"
@ -81,7 +85,7 @@
minute: "{{ 59 | random }}" minute: "{{ 59 | random }}"
user: "root" user: "root"
cron_file: borgmatic cron_file: borgmatic
job: "/usr/local/bin/borgmatic -c /etc/borgmatic/{{ borgmatic_config_name }} --check" job: "/usr/local/bin/borgmatic --check"
when: borgmatic_large_repo when: borgmatic_large_repo
- name: Add cron-job for borgmatic (normal-sized repo) - name: Add cron-job for borgmatic (normal-sized repo)
@ -92,7 +96,7 @@
minute: "{{ 59 | random }}" minute: "{{ 59 | random }}"
user: "root" user: "root"
cron_file: borgmatic cron_file: borgmatic
job: "/usr/local/bin/borgmatic -c /etc/borgmatic/{{ borgmatic_config_name }}" job: "/usr/local/bin/borgmatic"
- cron: - cron:
name: "borgmatic-check" name: "borgmatic-check"
state: absent state: absent

View File

@ -1,9 +1,8 @@
# Full config: https://gist.github.com/coaxial/46e36d89d7b81887f7275d587fe04c44 # Full config: https://gist.github.com/coaxial/46e36d89d7b81887f7275d587fe04c44
{% set archive_prefix = item | regex_replace("\\/$", "") | basename %}
location: location:
source_directories: source_directories:
{% for dir in borg_source_directories %} - {{ item }}
- {{ dir }}
{% endfor %}
# Stay in same file system (do not cross mount points). # Stay in same file system (do not cross mount points).
one_file_system: {{ borg_one_file_system }} one_file_system: {{ borg_one_file_system }}
@ -73,7 +72,7 @@ storage:
# also specify a prefix in the retention section to avoid accidental pruning of # also specify a prefix in the retention section to avoid accidental pruning of
# archives with a different archive name format. And you should also specify a # archives with a different archive name format. And you should also specify a
# prefix in the consistency section as well. # prefix in the consistency section as well.
archive_name_format: '{hostname}-{now}' archive_name_format: '{{ archive_prefix }}-{now}'
# Retention policy for how many backups to keep in each category. See # Retention policy for how many backups to keep in each category. See
# https://borgbackup.readthedocs.org/en/stable/usage.html#borg-prune for details. # https://borgbackup.readthedocs.org/en/stable/usage.html#borg-prune for details.
@ -117,7 +116,7 @@ retention:
# When pruning, only consider archive names starting with this prefix. # When pruning, only consider archive names starting with this prefix.
# Borg placeholders can be used. See the output of "borg help placeholders" for # Borg placeholders can be used. See the output of "borg help placeholders" for
# details. Default is "{hostname}-". # details. Default is "{hostname}-".
prefix: '{hostname}-' prefix: '{{ archive_prefix }}-'
# Consistency checks to run after backups. See # Consistency checks to run after backups. See
# https://borgbackup.readthedocs.org/en/stable/usage.html#borg-check and # https://borgbackup.readthedocs.org/en/stable/usage.html#borg-check and
@ -138,7 +137,7 @@ consistency:
# When performing the "archives" check, only consider archive names starting with # When performing the "archives" check, only consider archive names starting with
# this prefix. Borg placeholders can be used. See the output of # this prefix. Borg placeholders can be used. See the output of
# "borg help placeholders" for details. Default is "{hostname}-". # "borg help placeholders" for details. Default is "{hostname}-".
prefix: '{hostname}-' prefix: '{{ archive_prefix }}-'
# Shell commands or scripts to execute before and after a backup or if an error has occurred. # Shell commands or scripts to execute before and after a backup or if an error has occurred.
# IMPORTANT: All provided commands and scripts are executed with user permissions of borgmatic. # IMPORTANT: All provided commands and scripts are executed with user permissions of borgmatic.