mirror of
https://git.local.zernis.ch/simon/homeserver.zernis.ch.git
synced 2025-12-15 17:59:41 +01:00
added "borgbackup" role
This commit is contained in:
5
roles/borgbackup/handlers/main.yml
Normal file
5
roles/borgbackup/handlers/main.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
- name: Restart cron
|
||||
ansible.builtin.service:
|
||||
name: cron
|
||||
state: restarted
|
||||
31
roles/borgbackup/tasks/main.yml
Normal file
31
roles/borgbackup/tasks/main.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
- name: Install required system packages
|
||||
ansible.builtin.package:
|
||||
state: present
|
||||
name: "{{ borgbackup_deps }}"
|
||||
|
||||
- name: Copy smb credentials file
|
||||
ansible.builtin.template:
|
||||
src: "../templates/.cifs.j2"
|
||||
dest: /home/{{ user['name'] }}/.cifs
|
||||
owner: simon
|
||||
group: simon
|
||||
mode: '0600'
|
||||
|
||||
- name: Copy "backup_to_smb.sh" Skript
|
||||
ansible.builtin.template:
|
||||
src: "../templates/backup_to_smb.sh"
|
||||
dest: /usr/local/bin/
|
||||
owner: simon
|
||||
group: simon
|
||||
mode: '0700'
|
||||
|
||||
- name: add cron backupjob for backups to samba server
|
||||
become: true
|
||||
ansible.builtin.cron:
|
||||
user: simon
|
||||
name: "borgbackup the docker dir to smb"
|
||||
minute: "30"
|
||||
hour: "3"
|
||||
job: "sudo /usr/local/bin/backup_to_smb.sh > /dev/null 2>&1"
|
||||
notify: restart cron
|
||||
2
roles/borgbackup/templates/.cifs.j2
Normal file
2
roles/borgbackup/templates/.cifs.j2
Normal file
@@ -0,0 +1,2 @@
|
||||
username= {{ smb_username }}
|
||||
password= {{ smb_pass }}
|
||||
73
roles/borgbackup/templates/backup_to_smb.sh
Normal file
73
roles/borgbackup/templates/backup_to_smb.sh
Normal file
@@ -0,0 +1,73 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Variablen
|
||||
data_dir="{{ data_dir }}"
|
||||
samba_share="{{ smb_share }}"
|
||||
samba_credentials="{{ smb_credentials }}"
|
||||
backup_target_usage_threshold="{{smb_threshold}}" # Prozentuale Schwellenwert für die Speicherauslastung
|
||||
mount_point="{{ mount_point }}"
|
||||
backup_repository="$mount_point/{{borg_repo}}"
|
||||
borg_password="{{borg_pass}}"
|
||||
email_recipient="{{admin_mail}}"
|
||||
|
||||
|
||||
# Mounten des Backup-Ziels
|
||||
mount_successful=0
|
||||
mount_output=$(mount -t cifs "$samba_share" "$mount_point" -o credentials="$samba_credentials" 2>&1)
|
||||
mount_status=$?
|
||||
|
||||
if [ "$mount_status" -eq 0 ]; then
|
||||
mount_successful=1
|
||||
else
|
||||
echo "Mount fehlgeschlagen: $mount_output" >&2
|
||||
fi
|
||||
|
||||
if [ "$mount_successful" -eq 1 ]; then
|
||||
# Alle laufenden Container stoppen
|
||||
running_containers=$(docker ps --format '{{.Names}}')
|
||||
for container in $running_containers; do
|
||||
docker stop "$container"
|
||||
done
|
||||
|
||||
# Backup mit BorgBackup erstellen
|
||||
export BORG_PASSPHRASE="$borg_password"
|
||||
backup_result=$(borg create --progress --list --stats --compression lz4 "$backup_repository"::'{hostname}-{now:%Y-%m-%d_%H:%M:%S}' $data_dir 2>&1)
|
||||
backup_status=$?
|
||||
|
||||
# Alle gestoppten Container starten
|
||||
for container in $running_containers; do
|
||||
docker start "$container"
|
||||
done
|
||||
|
||||
# Backup-Integrität überprüfen
|
||||
borg_check_result=$(borg check --repository-only "$backup_repository" 2>&1)
|
||||
|
||||
# Backup-Status und Speicherauslastung prüfen
|
||||
if [ "$backup_status" -eq 0 ]; then
|
||||
backup_result="Backup erfolgreich:\n$backup_result\n\nIntegrität des Backups überprüft:\n$borg_check_result"
|
||||
else
|
||||
backup_result="Backup fehlgeschlagen (Status: $backup_status):\n$backup_result\n\nIntegrität des Backups konnte nicht überprüft werden."
|
||||
fi
|
||||
|
||||
# Retention Policy anwenden
|
||||
borg_prune_result=$(borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=6 "$backup_repository" 2>&1)
|
||||
|
||||
# Unmounten des Backup-Ziels
|
||||
umount_output=$(umount "$mount_point" 2>&1)
|
||||
umount_status=$?
|
||||
if [ "$umount_status" -ne 0 ]; then
|
||||
echo "Unmount fehlgeschlagen: $umount_output" >&2
|
||||
fi
|
||||
|
||||
# E-Mail senden
|
||||
target_usage=$(df -h "$mount_point" | tail -1 | awk '{ print $5 }')
|
||||
target_usage_number=${target_usage%%%}
|
||||
|
||||
if [ "$target_usage_number" -gt "$backup_target_usage_threshold" ]; then
|
||||
target_usage_warning="\n\nWARNUNG: Die Speicherauslastung des Backup-Ziels beträgt $target_usage und überschreitet den festgelegten Schwellenwert von $backup_target_usage_threshold%."
|
||||
else
|
||||
target_usage_warning=""
|
||||
fi
|
||||
|
||||
mail_subject="Backup-Bericht: $(date +'%Y-%m-%d %H:%M:%S')"
|
||||
mail_body="$backup_result\n
|
||||
22
roles/borgbackup/vars/main.yml
Normal file
22
roles/borgbackup/vars/main.yml
Normal file
@@ -0,0 +1,22 @@
|
||||
$ANSIBLE_VAULT;1.1;AES256
|
||||
61623832336230653866643264303864323139326239363664393164333865353231306365626231
|
||||
6230366364326262643966313133323233376661343034390a646464323330303361626239383562
|
||||
66326134626365643464656431353238653835376636653630343533343461316339663365383963
|
||||
3739623738623766380a643465613364366233336230353237303862653964643765323535363835
|
||||
63336161363131343365383837666165366536653535323166383433326462643363326261666434
|
||||
64376232643533663537613239653731343661393733373665316234616137316433653366613161
|
||||
63613134613365363632316238316438633466373236383138303430376138376635663438623661
|
||||
34633562666464336466663135623661336465333231393731656535333434356133353564663833
|
||||
32323963643966643831396261383535353765383636313064316363643136333436316230313931
|
||||
63326261636430313533643537363731633332396434323136656536386165616464636435303239
|
||||
66363963376438396638383238663264316662626433646135323936373733363364626634346631
|
||||
31336661663430396461303166376332383064383436626138343830313338396335646465343166
|
||||
34613935656562656339303736343032376361653461616337623537636163393763356466616130
|
||||
65666331316430636133656637663435633637313938346663356337613464633333613230646263
|
||||
39346438346235663839356564313766313636393961303362373561386332653764663062633563
|
||||
39643238343736326233346436623130383838303639323966333434633766383130313962663131
|
||||
61616438353233643432383861663238373566393435663636383732643062376139653863396531
|
||||
31646435333631376466383565363137636637393233306362643965396363623261386433353137
|
||||
35323836653130343930356661356338353133333932646333343336376564613834613162653162
|
||||
32336234663665393130376334303032346436343961373232626631336533323132376261356530
|
||||
6262
|
||||
Reference in New Issue
Block a user