You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.7 KiB
74 lines
2.7 KiB
---
|
|
- name: Setup Backup Script
|
|
hosts: all
|
|
become: yes
|
|
vars_files:
|
|
- vault.yml
|
|
tasks:
|
|
- name: Erstelle Backup-Verzeichnis
|
|
file:
|
|
path: /mnt/docker/backup
|
|
state: directory
|
|
mode: '0755'
|
|
|
|
- name: Erstelle Backup-Skript
|
|
copy:
|
|
dest: /usr/local/src/backup-to-s3.sh
|
|
mode: '0750'
|
|
owner: root
|
|
group: root
|
|
content: |
|
|
#!/bin/bash
|
|
EMAIL_FROM="mail@notifications.asmodee.de"
|
|
EMAIL_TO="it-admin@asmodee.de"
|
|
ARCHIV_NAME="docker05"
|
|
ARCHIV_PASS="{{ backup_archive_password }}"
|
|
ARCHIV_PATH="/mnt/docker/backup"
|
|
ARCHIV_TIME="$(date +%Y-%m-%d_%H-%M-%S)"
|
|
AWS_BUCKET="de.asmodee.docker05.backup"
|
|
AWS_SETUP_CP="--storage-class GLACIER"
|
|
AWS_EXEC="docker run --rm -v /root/.aws:/root/.aws -v ${ARCHIV_PATH}:/aws amazon/aws-cli"
|
|
BACKUP_DATAS[0]="unifi-backups|/mnt/docker/unifi-controller/data/data/backup/"
|
|
|
|
# Testings
|
|
test -f /root/.aws/config || exit 1
|
|
test -f /root/.aws/credentials || exit 1
|
|
test -d "${ARCHIV_PATH}" || exit 1
|
|
test -x "$(which 7z)" || exit 1
|
|
test -x "$(which docker)" || exit 1
|
|
|
|
# CleanUp previews Backups
|
|
find "${ARCHIV_PATH}" -maxdepth 1 -type f -name "*.7z" -delete
|
|
|
|
# Backup Attachements (only on Sunday!)
|
|
if [[ $(date +%u) -eq 7 ]]; then
|
|
for BACKUP_DATA in "${BACKUP_DATAS[@]}"; do
|
|
mapfile -td \| ENV_MAPFILE <<<"$BACKUP_DATA"
|
|
DATA_NAME=$(echo ${ENV_MAPFILE[0]})
|
|
DATA_PATH=$(echo ${ENV_MAPFILE[1]})
|
|
7z a -p"${ARCHIV_PASS}" -mhe=on "${ARCHIV_PATH}/${ARCHIV_NAME}_${ARCHIV_TIME}_${DATA_NAME}-data.7z" "${DATA_PATH}"
|
|
if [ $? -eq 0 ]; then
|
|
$AWS_EXEC s3 cp "${ARCHIV_NAME}_${ARCHIV_TIME}_${DATA_NAME}-data.7z" s3://${AWS_BUCKET}/ ${AWS_SETUP_CP}
|
|
else
|
|
rm "${ARCHIV_PATH}/${ARCHIV_NAME}_${ARCHIV_TIME}_${DATA_NAME}-data.7z"
|
|
echo "ERROR: ${DATA_NAME} Backup failed!"; exit 1; fi
|
|
done
|
|
fi
|
|
|
|
# Email Notification
|
|
echo "Subject:[$ARCHIV_NAME] Cloud Backup
|
|
From:$ARCHIV_NAME <$EMAIL_FROM>
|
|
To: $EMAIL_TO
|
|
Mime-Version: 1.0
|
|
Content-Type: text/html
|
|
Charset: UTF-8
|
|
<html><body>
|
|
Backup Files:<br>
|
|
$(ls -lh "${ARCHIV_PATH}" | sed "s/$/<br>/")
|
|
<br>
|
|
Service Log:<br>
|
|
$(journalctl -u backup-to-s3.service --since today --output short | sed "s/$/<br>/")
|
|
</body></html>" | docker exec -i mail-relay sendmail -f $EMAIL_FROM $EMAIL_TO
|
|
|
|
# Clean Exit
|
|
exit 0
|