# {{ ansible_managed }} # Backup script for {{ item.src|default('stdin') }} # Use this file to create a Backup and prune existing data. set -euxo pipefail export RESTIC_REPOSITORY={{ restic_repos[item.repo].location }} export RESTIC_PASSWORD={{ restic_repos[item.repo].password }} BACKUP_NAME={{ item.name }} {% if item.src is defined %} BACKUP_SOURCE={{ item.src }} {% endif %} {# Define Tags #} {% macro tags(tags) -%} {% if tags is defined %}{% for tag in tags %} --tag {{ tag }}{% endfor %}{% endif %} {%- endmacro %} {# Define Hostname #} {% macro hostname(h) -%} {% if h is defined %} --hostname {{ h }}{% endif %} {%- endmacro %} {# Define stdin filename #} {% macro stdin_filename(n) -%} {% if n is defined %} --stdin-filename {{ n }}{% endif %} {%- endmacro %} {# Define path #} {% macro path(repo) -%} {% if repo.src is defined %}{{ repo.src }}{% else %}$HOME/{{ repo.stdin_filename }}{% endif %} {%- endmacro %} {# Define retention pattern #} {% macro retention_pattern(repo) -%} {% if repo.keep_last is defined %}--keep-last {{ item.keep_last }}{% endif %} \ {% if repo.keep_hourly is defined %}--keep-hourly {{ item.keep_hourly }}{% endif %} \ {% if repo.keep_daily is defined %}--keep-daily {{ item.keep_daily }}{% endif %} \ {% if repo.keep_weekly is defined %}--keep-weekly {{ item.keep_weekly }}{% endif %} \ {% if repo.keep_monthly is defined %}--keep-monthly {{ item.keep_monthly }}{% endif %} \ {% if repo.keep_yearly is defined %}--keep-yearly {{ item.keep_yearly }}{% endif %} \ {% if repo.keep_within is defined %}--keep-within {{ item.keep_within }}{% endif %} \ {% if repo.keep_tag is defined %}--keep-tag {{ item.keep_tag }}{% endif %} {%- endmacro %} {# Define backup commands #} {% if item.stdin is defined and item.stdin == true %} {{ item.stdin_cmd }} | {{ restic_install_path }}/restic backup --stdin --tag manual {{ tags(item.tags) }} {{ stdin_filename(item.stdin_filename) }} $@ {% else %} {{ restic_install_path }}/restic backup $BACKUP_SOURCE --tag manual {{ tags(item.tags) }} $@ {% endif %} {# Define stdin forget commands #} {{ restic_install_path }}/restic forget --prune --tag manual --path {{ path(item) }} {{ retention_pattern(item) }}