Test Repo für Ansible Semaphore
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

---
- 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