#!/bin/bash
|
|
|
|
REPO="backup@{{ item[1].ansible_host }}.dmz.{{ domain }}:{{ item[0].key }}"
|
|
|
|
export BORG_RSH="ssh -i /root/.ssh/id_ed25519_BORG"
|
|
export BORG_PASSPHRASE="{{ item[1].encryption_passphrase | d('') }}"
|
|
|
|
export BORG_RELOCATED_REPO_ACCESS_IS_OK="no"
|
|
export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK="no"
|
|
|
|
borg --version
|
|
|
|
borg break-lock backup@{{ item[1].ansible_host }}.dmz.{{ domain }}:{{ item[0].key }}
|
|
|
|
|
|
{% for folder in item[0].value.folders|d({})|dict2items %}
|
|
##### Folder {{ folder.key }}
|
|
BEGIN_EPOCH=$(date +%s)
|
|
DATE="folder-{{ folder.key }}-$(date --iso-8601)-$(hostname)"
|
|
echo "Starting backup for $DATE"
|
|
borg create \
|
|
--verbose \
|
|
--filter AME \
|
|
--list \
|
|
--stats \
|
|
--show-rc \
|
|
--compression lz4 \
|
|
--exclude-caches \
|
|
{% for exclude in folder.value.excludes|d([]) %}
|
|
--exclude '{{ exclude }}' \
|
|
{% endfor %}
|
|
\
|
|
${REPO}::'folder-{{ folder.key }}-{hostname}-{now:%Y-%m-%d@%H:%M}' \
|
|
{{ folder.value.path }}
|
|
|
|
backup_rc=$?
|
|
prune_rc=99
|
|
|
|
if [ "${backup_rc}" = "2" ]; then
|
|
echo "Failed backup for $DATE"
|
|
else
|
|
echo "Completed backup for $DATE"
|
|
|
|
echo "Pruning archives for $DATE"
|
|
borg prune \
|
|
--list \
|
|
--prefix 'folder-{{ folder.key }}-{hostname}-' \
|
|
--show-rc \
|
|
--keep-daily {{ folder.value.daily|d(7) }} \
|
|
--keep-weekly {{ folder.value.weekly|d(4) }} \
|
|
--keep-monthly {{ folder.value.monthly|d(6) }} \
|
|
${REPO}
|
|
|
|
prune_rc=$?
|
|
|
|
if [ "${prune_rc}" = "2" ]; then
|
|
echo "Failed pruning for $DATE"
|
|
else
|
|
echo "Completed pruning for $DATE"
|
|
fi
|
|
fi
|
|
|
|
echo "$(date +%s)|${BEGIN_EPOCH}|${backup_rc}|${prune_rc}" > /var/log/backup-status/{{ item[0].key }}.{{ item[1].ansible_host }}/folder-{{ folder.key }}
|
|
|
|
{% endfor %}
|
|
#####
|
|
|
|
{% for db in item[0].value.pgsql_dbs|d({})|dict2items %}
|
|
##### pgSQL DB {{ db.key }}
|
|
DATE="pgsqldb-{{ db.key }}-$(date --iso-8601)-$(hostname)"
|
|
echo "Starting backup for $DATE"
|
|
su postgres -c 'pg_dump -d {{ db.value.dbname }}' | borg create \
|
|
--verbose \
|
|
--filter AME \
|
|
--list \
|
|
--stats \
|
|
--show-rc \
|
|
--compression lz4 \
|
|
--stdin-name "{{ db.value.dbname }}.sql" \
|
|
\
|
|
${REPO}::'pgsqldb-{{ db.key }}-{hostname}-{now:%Y-%m-%d@%H:%M}' \
|
|
-
|
|
|
|
backup_rc=$?
|
|
prune_rc=99
|
|
|
|
if [ "${backup_rc}" = "2" ]; then
|
|
echo "Failed backup for $DATE"
|
|
else
|
|
echo "Completed backup for $DATE"
|
|
|
|
echo "Pruning archives for $DATE"
|
|
borg prune \
|
|
--list \
|
|
--prefix 'pgsqldb-{{ db.key }}-{hostname}-' \
|
|
--show-rc \
|
|
--keep-daily {{ db.value.daily|d(7) }} \
|
|
--keep-weekly {{ db.value.weekly|d(4) }} \
|
|
--keep-monthly {{ db.value.monthly|d(6) }} \
|
|
${REPO}
|
|
|
|
prune_rc=$?
|
|
|
|
if [ "${prune_rc}" = "2" ]; then
|
|
echo "Failed pruning for $DATE"
|
|
else
|
|
echo "Completed pruning for $DATE"
|
|
fi
|
|
fi
|
|
|
|
echo "$(date +%s)|${BEGIN_EPOCH}|${backup_rc}|${prune_rc}" > /var/log/backup-status/{{ item[0].key }}.{{ item[1].ansible_host }}/pgsqldb-{{ db.key }}
|
|
|
|
{% endfor %}
|
|
|
|
|
|
{% for db in item[0].value.ldap_dbs|d({})|dict2items %}
|
|
##### LDAP DB {{ db.key }}
|
|
DATE="ldapdb-{{ db.key }}-$(date --iso-8601)-$(hostname)"
|
|
echo "Starting backup for $DATE"
|
|
slapcat -n {{ db.value.dbnum }} | borg create \
|
|
--verbose \
|
|
--filter AME \
|
|
--list \
|
|
--stats \
|
|
--show-rc \
|
|
--compression lz4 \
|
|
--stdin-name "slapcat.db{{ db.value.dbnum }}.ldif" \
|
|
\
|
|
${REPO}::'ldapdb-{{ db.key }}-{hostname}-{now:%Y-%m-%d@%H:%M}' \
|
|
-
|
|
|
|
backup_rc=$?
|
|
prune_rc=99
|
|
|
|
if [ "${backup_rc}" = "2" ]; then
|
|
echo "Failed backup for $DATE"
|
|
else
|
|
echo "Completed backup for $DATE"
|
|
|
|
echo "Pruning archives for $DATE"
|
|
borg prune \
|
|
--list \
|
|
--prefix 'ldapdb-{{ db.key }}-{hostname}-' \
|
|
--show-rc \
|
|
--keep-daily {{ db.value.daily|d(7) }} \
|
|
--keep-weekly {{ db.value.weekly|d(4) }} \
|
|
--keep-monthly {{ db.value.monthly|d(6) }} \
|
|
${REPO}
|
|
|
|
prune_rc=$?
|
|
|
|
if [ "${prune_rc}" = "2" ]; then
|
|
echo "Failed pruning for $DATE"
|
|
else
|
|
echo "Completed pruning for $DATE"
|
|
fi
|
|
fi
|
|
|
|
echo "$(date +%s)|${BEGIN_EPOCH}|${backup_rc}|${prune_rc}" > /var/log/backup-status/{{ item[0].key }}.{{ item[1].ansible_host }}/ldapdb-{{ db.key }}
|
|
|
|
{% endfor %}
|