diff --git a/common/borgbackup/tasks/main.yml b/common/borgbackup/tasks/main.yml index fa986d951764a3e2cd4118299fe2857ab0cea49d..cbf4fb0166b9cec3c8ae1d7307b89c30ca399d32 100644 --- a/common/borgbackup/tasks/main.yml +++ b/common/borgbackup/tasks/main.yml @@ -2,26 +2,28 @@ # Pakete installieren - name: pakete installieren apt: - name: "{{ packages }}" + pkg: "{{ item }}" update_cache: yes state: present - vars: - packages: - - borgbackup - - logrotate - - moreutils - - openssl - -- name: create directory + with_items: + - borgbackup + - logrotate + - moreutils + - openssl + +- name: create directories 1 file: - path: "/srv/borgbackup/" + path: "{{ item }}" state: "directory" + with_items: + - /srv/borgbackup + - /var/log/borgbackup -- name: create directories +- name: create directories 2 file: - path: "/srv/borgbackup/{{ item }}" + path: "/srv/borgbackup/{{ item.key }}" state: "directory" - with_items: "{{ borgbackup_repos }}" + with_dict: "{{ borgbackup_repos }}" - name: generate new repo_passphrase (check) stat: @@ -54,23 +56,61 @@ # BorgBackup Scripte erstellen -- name: BorgBackup Scripte erstellen - template: src={{ item }} dest=/srv/borgbackup/{{ item }} mode=o+x - with_items: - - "borgbackup-check.sh" - - "borgbackup-create.sh" - - "borgbackup-delete.sh" - - "borgbackup-info.sh" - - "borgbackup-init.sh" - - "borgbackup-list.sh" - - "borgbackup-mount.sh" - - "borgbackup-prometheus.sh" - -- name: BorgBackup log folder erstellen - file: - path: "/var/log/borgbackup" - state: "directory" +- name: BorgBackup Scripte erstellen (check) + template: + src: borgbackup-check.sh + dest: /srv/borgbackup/{{ item.key }}/borgbackup-check.sh + mode: u+x + with_dict: "{{ borgbackup_repos }}" + +- name: BorgBackup Scripte erstellen (create) + template: + src: borgbackup-create.sh + dest: /srv/borgbackup/{{ item.key }}/borgbackup-create.sh + mode: u+x + with_dict: "{{ borgbackup_repos }}" +- name: BorgBackup Scripte erstellen (delete) + template: + src: borgbackup-delete.sh + dest: /srv/borgbackup/{{ item.key }}/borgbackup-delete.sh + mode: u+x + with_dict: "{{ borgbackup_repos }}" + +- name: BorgBackup Scripte erstellen (init) + template: + src: borgbackup-init.sh + dest: /srv/borgbackup/{{ item.key }}/borgbackup-init.sh + mode: u+x + with_dict: "{{ borgbackup_repos }}" + +- name: BorgBackup Scripte erstellen (info) + template: + src: borgbackup-info.sh + dest: /srv/borgbackup/{{ item.key }}/borgbackup-info.sh + mode: u+x + with_dict: "{{ borgbackup_repos }}" + +- name: BorgBackup Scripte erstellen (list) + template: + src: borgbackup-list.sh + dest: /srv/borgbackup/{{ item.key }}/borgbackup-list.sh + mode: u+x + with_dict: "{{ borgbackup_repos }}" + +- name: BorgBackup Scripte erstellen (mount) + template: + src: borgbackup-mount.sh + dest: /srv/borgbackup/{{ item.key }}/borgbackup-mount.sh + mode: u+x + with_dict: "{{ borgbackup_repos }}" + +- name: BorgBackup Scripte erstellen (prometheus) + template: + src: borgbackup-prometheus.sh + dest: /srv/borgbackup/borgbackup-prometheus.sh + mode: u+x + - name: BorgBackup LogRotate config erstellen template: src: logrotate @@ -82,8 +122,9 @@ state: absent - name: Cronjob für BorgBackup Backup - cron: name="borgbackup-create" weekday="{{borgbackup_weekday}}" hour="{{borgbackup_hour}}" minute="{{borgbackup_minute}}" job="/srv/borgbackup/borgbackup-create.sh 2>&1 | ts '[\\%Y-\\%m-\\%d \\%H:\\%M:\\%S]' >> /var/log/borgbackup/borgbackup.log" + cron: name="borgbackup-{{ item.key }}" weekday="{{ item.value.weekday }}" hour="{{ item.value.hour }}" minute="{{ item.value.minute }}" job="/srv/borgbackup/{{ item.key }}/borgbackup-create.sh 2>&1 | ts '[\\%Y-\\%m-\\%d \\%H:\\%M:\\%S]' >> /var/log/borgbackup/{{ item.key }}.log" + with_dict: "{{ borgbackup_repos }}" - name: Cronjob für BorgBackup Prometheus export - cron: name="borgbackup-prom" weekday="*" hour="*" minute="0" job="/srv/borgbackup/borgbackup-prometheus.sh 2>&1 | ts '[\\%Y-\\%m-\\%d \\%H:\%M:\\%S]' >> /var/log/borgbackup/borgbackup.log" + cron: name="borgbackup-prom" weekday="*" hour="*" minute="0" job="/srv/borgbackup/borgbackup-prometheus.sh 2>&1 | ts '[\\%Y-\\%m-\\%d \\%H:\%M:\\%S]' >> /var/log/borgbackup/borgbackup-prometheus.log" diff --git a/common/borgbackup/templates/borgbackup-check.sh b/common/borgbackup/templates/borgbackup-check.sh index bf0ac7237f2daa2f960cdce77dac054e13658fd4..84bf54690cb4260ac23bdadc9d511653c7bcfa48 100644 --- a/common/borgbackup/templates/borgbackup-check.sh +++ b/common/borgbackup/templates/borgbackup-check.sh @@ -5,10 +5,6 @@ export BORG_PASSPHRASE="{{repo_passphrase}}" export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey" +echo "===[ Check Repo: {{ item.value.repo }} ]===" +borg check $1 $2 $3 --info --show-rc {{ item.value.options }} {{ item.value.repo }} -{% for repo_url in borgbackup_repos %} - -echo "===[ Check Repo: {{repo_url}} ]============================================================" -borg check $1 $2 $3 --info --show-rc --remote-path borg1 {{repo_url}} - -{% endfor %} \ No newline at end of file diff --git a/common/borgbackup/templates/borgbackup-create.sh b/common/borgbackup/templates/borgbackup-create.sh index 4351531da5eb21c45a782d0828a6b4971a23435d..0d257d03bfa35e258767a57fabf5dccbe031be1f 100644 --- a/common/borgbackup/templates/borgbackup-create.sh +++ b/common/borgbackup/templates/borgbackup-create.sh @@ -3,25 +3,46 @@ export BORG_PASSPHRASE="{{repo_passphrase}}" export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey" export BACKUP_DATE=`date +%Y-%m-%d_%H_%M` +export LAST_BACKUPS_PROM="/var/lib/prometheus/node-exporter/lastbackup.prom" # Ausführung der Backups # anschließend Bereinigung # abschließend Integritätscheck -{% for repo_url in borgbackup_repos %} - -echo "===[ Create Backup: {{repo_url}} ]============================================================" - -borg create $1 $2 $3 --info --show-rc --remote-path borg1 --stats --compression lzma,2 {{repo_url}}::$BACKUP_DATE \ +echo "===[ Create Backup: {{ item.value.repo }} ]===" \ +&& \ +borg create $1 $2 $3 --info --show-rc --stats --compression {{ item.value.compression }} {{ item.value.options }} {{ item.value.repo }}::$BACKUP_DATE \ {% for directory in borgbackup_directories %} {{ directory }} \ -{% endfor %} +{% endfor %} \ +{% if item.value.directories is defined %} + {% for directory in item.value.directories %} + {{ directory }} \ + {% endfor %} \ + {% endif %} && \ -borg prune $1 $2 $3 --info --show-rc --list {{repo_url}} \ -{% for prune in borgbackup_prune %} -{{ prune }} \ -{% endfor %} +echo "===[ Prune old Backups: {{ item.value.repo }} ]===" \ && \ -borg check $1 $2 $3 --info --show-rc {{repo_url}} - -{% endfor %} +borg prune $1 $2 $3 --info --show-rc --list {{ item.value.prune }} {{ item.value.options }} {{ item.value.repo }} \ +&& \ +echo "===[ Check Repo: {{ item.value.repo }} ]===" \ +&& \ +borg check $1 $2 $3 --info --show-rc {{ item.value.options }} {{ item.value.repo }} \ +&& \ +echo "===[ write: /srv/rsyncbackup/{{ item.key }}/lastbackup ]===" \ +&& \ +date > "/srv/borgbackup/{{ item.key }}/lastbackup" \ +&& \ +echo "===[ add value to: $LAST_BACKUPS_PROM ]===" \ +&& \ +touch $LAST_BACKUPS_PROM \ +&& \ +sed -i '/borgbackup_lastbackup{repo="{{ item.key }}"}/d' $LAST_BACKUPS_PROM \ +&& \ +echo "borgbackup_lastbackup{repo=\"{{ item.key }}\"} $(date +%s)" >> $LAST_BACKUPS_PROM \ +&& \ +echo "===[ send alerta heartbeat ]===" \ +&& \ +/srv/alerta_heartbeat/send_service_heartbeat.sh {{ item.value.heartbeat_timeout }} borg@{{ item.key }} \ +&& \ +echo "===[ DONE ]===" diff --git a/common/borgbackup/templates/borgbackup-delete.sh b/common/borgbackup/templates/borgbackup-delete.sh index b42369dd757ac0b56c38e350837759ef546235d3..66c15c8a6fcc58c1fbbbcc95741e9fcaf065ea54 100644 --- a/common/borgbackup/templates/borgbackup-delete.sh +++ b/common/borgbackup/templates/borgbackup-delete.sh @@ -5,20 +5,11 @@ export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey" # Löschen eines Backups -echo "Available Repos: " - -{% for repo_url in borgbackup_repos %} -echo "{{repo_url}}" -{% endfor %} - -echo "RepoName, followed by [ENTER]:" -read repo_url - echo "Available Backups: " -borg list $1 $2 $3 --info --show-rc --remote-path borg1 $repo_url +borg list $1 $2 $3 --info --show-rc {{ item.value.options }} {{ item.value.repo }} echo "BackupName, followed by [ENTER]:" read target -borg delete $1 $2 $3 --info --show-rc --remote-path borg1 $repo_url::$target +borg delete $1 $2 $3 --info --show-rc {{ item.value.options }} {{ item.value.repo }}::$target diff --git a/common/borgbackup/templates/borgbackup-info.sh b/common/borgbackup/templates/borgbackup-info.sh index d0d14f2db512af7a434cf04f2390a80c81028839..5afb6d1686fd09148cb8e1fbeb3797a1b46fdbe7 100644 --- a/common/borgbackup/templates/borgbackup-info.sh +++ b/common/borgbackup/templates/borgbackup-info.sh @@ -5,12 +5,11 @@ export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey" # Anzeige des Inhaltes in den Borg Backup Archiven -{% for repo_url in borgbackup_repos %} +echo "=============================================" +echo "Backups Repo Info: {{ item.key }} " -BACKUPS=$(borg list $1 $2 $3 --info --show-rc --remote-path borg1 {{repo_url}}) +BACKUPS=$(borg list $1 $2 $3 --info --show-rc {{ item.value.options }} {{ item.value.repo }}) -echo "=============================================" -echo "Backups List " echo "$BACKUPS" BACKUPS_LIST=$(echo "$BACKUPS" | awk '{print $1}') @@ -19,11 +18,10 @@ for BACKUP in $BACKUPS_LIST; do echo "=============================================" - borg info $1 $2 $3 --info --show-rc --remote-path borg1 {{repo_url}}::$BACKUP + borg info $1 $2 $3 --info --show-rc {{ item.value.options }} {{ item.value.repo }}::$BACKUP done echo "=============================================" -{% endfor %} diff --git a/common/borgbackup/templates/borgbackup-init.sh b/common/borgbackup/templates/borgbackup-init.sh index 7d12e5b75e98c156f2bb41854769db1cabe5a431..cdaa77e39f32eb1ae3fe3dcd3bf08a107eff828d 100644 --- a/common/borgbackup/templates/borgbackup-init.sh +++ b/common/borgbackup/templates/borgbackup-init.sh @@ -6,18 +6,15 @@ export BORG_PASSPHRASE="{{repo_passphrase}}" export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey" -{% for repo_url in borgbackup_repos %} +if [ ! -e "/srv/borgbackup/{{ item.key }}/initialized" ]; then -if [ ! -e "{{repo_url}}.initialized" ]; then + echo "Initialize Repo: {{ item.key }}" + date > "/srv/borgbackup/{{ item.key }}/initialized" - echo "Initialize Repo: {{repo_url}}" - date > "{{repo_url}}.initialized" - - borg init $1 $2 $3 --info --show-rc --remote-path borg1 --encryption=repokey {{repo_url}} + borg init $1 $2 $3 --info --show-rc --encryption=repokey {{ item.value.options }} {{ item.value.repo }} else - echo "Repo already initialized: {{repo_url}}" + echo "Repo already initialized: {{ item.key }}" fi -{% endfor %} diff --git a/common/borgbackup/templates/borgbackup-list.sh b/common/borgbackup/templates/borgbackup-list.sh index 6d0fe73938e2fd2f58706ba058d4ff0e45d2ec41..f9cfb9682ac1576e468aa407d8cacc141232f16e 100644 --- a/common/borgbackup/templates/borgbackup-list.sh +++ b/common/borgbackup/templates/borgbackup-list.sh @@ -5,10 +5,7 @@ export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey" # Anzeige des Inhaltes in den Borg Backup Archiven -{% for repo_url in borgbackup_repos %} +echo "===[ List Repo: {{ item.key }} ]===" +borg list $1 $2 $3 --info --show-rc {{ item.value.options }} {{ item.value.repo }} -echo "===[ List Repo: {{repo_url}} ]============================================================" -borg list $1 $2 $3 --info --show-rc --remote-path borg1 {{repo_url}} - -{% endfor %} diff --git a/common/borgbackup/templates/borgbackup-mount.sh b/common/borgbackup/templates/borgbackup-mount.sh index 86e2e0e973e2544b69e2df1929da34f12410e85a..24eda480d58cea0aa0e3178de9b2d17eb45b5af4 100644 --- a/common/borgbackup/templates/borgbackup-mount.sh +++ b/common/borgbackup/templates/borgbackup-mount.sh @@ -5,17 +5,8 @@ export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey" # Einhängen der Repos in /mnt/ -echo "Available Repos: " +echo "Directory to mount, followed by [ENTER]:" +read target -{% for repo_url in borgbackup_repos %} -echo "{{repo_url}}" -{% endfor %} - -echo "RepoName, followed by [ENTER]:" -read repo_url - -echo -n 'Mounting to: /mnt' - -mkdir /mnt/ -borg mount $1 $2 $3 --info --show-rc --remote-path borg1 $repo_url /mnt/ +borg mount $1 $2 $3 --info --show-rc {{ item.value.options }} {{ item.value.repo }} $target diff --git a/common/borgbackup/templates/borgbackup-prometheus.sh b/common/borgbackup/templates/borgbackup-prometheus.sh index c5c4cd9f0b83b946a402399afae4c55352c1cae6..497ad3f6e5e7fa9b07e27032d7586da118f7a27b 100644 --- a/common/borgbackup/templates/borgbackup-prometheus.sh +++ b/common/borgbackup/templates/borgbackup-prometheus.sh @@ -28,11 +28,14 @@ function calc_bytes { esac } -echo "borgbackup_repos_count {{borgbackup_repos|length}}" > $TMP_FILE +# create temp file +TMP_FILE=$(mktemp) + +echo "borgbackup_repos_count {{ borgbackup_repos|length }}" > $TMP_FILE -{% for repo_url in borgbackup_repos %} +{% for repo in borgbackup_repos %} -BACKUPS=$(borg list --remote-path borg1 {{repo_url}}) +BACKUPS=$(borg list {{ borgbackup_repos[repo].options }} {{ borgbackup_repos[repo].repo }}) BACKUPS_LIST=$(echo "$BACKUPS" | awk '{print $1}') COUNTER=0 @@ -42,15 +45,12 @@ for BACKUP in $BACKUPS_LIST; do done -BORG_INFO=$(borg info --remote-path borg1 {{repo_url}}::$BACKUP) - -# create temp file -TMP_FILE=$(mktemp) +BORG_INFO=$(borg info {{ borgbackup_repos[repo].options }} {{ borgbackup_repos[repo].repo }}::$BACKUP) -echo "borgbackup_count{repo="{{ repo_url }}"} $COUNTER" > $TMP_FILE -echo "borgbackup_files{repo="{{ repo_url }}"} $(echo "$BORG_INFO" | grep "Number of files" | awk '{print $4}')" >> $TMP_FILE -echo "borgbackup_chunks_unique{repo="{{ repo_url }}"} $(echo "$BORG_INFO" | grep "Chunk index" | awk '{print $3}')" >> $TMP_FILE -echo "borgbackup_chunks_total{repo="{{ repo_url }}"} $(echo "$BORG_INFO" | grep "Chunk index" | awk '{print $4}')" >> $TMP_FILE +echo "borgbackup_count{repo=\"{{ repo }}\"} $COUNTER" >> $TMP_FILE +echo "borgbackup_files{repo=\"{{ repo }}\"} $(echo "$BORG_INFO" | grep "Number of files" | awk '{print $4}')" >> $TMP_FILE +echo "borgbackup_chunks_unique{repo=\"{{ repo }}\"} $(echo "$BORG_INFO" | grep "Chunk index" | awk '{print $3}')" >> $TMP_FILE +echo "borgbackup_chunks_total{repo=\"{{ repo }}\"} $(echo "$BORG_INFO" | grep "Chunk index" | awk '{print $4}')" >> $TMP_FILE # byte size calculation LAST_SIZE=$(calc_bytes $(echo "$BORG_INFO" |grep "This archive" |awk '{print $3}') $(echo "$BORG_INFO" |grep "This archive" |awk '{print $4}')) @@ -60,12 +60,12 @@ TOTAL_SIZE=$(calc_bytes $(echo "$BORG_INFO" |grep "All archives" |awk '{print $3 TOTAL_SIZE_COMPRESSED=$(calc_bytes $(echo "$BORG_INFO" |grep "All archives" |awk '{print $5}') $(echo "$BORG_INFO" |grep "All archives" |awk '{print $6}')) TOTAL_SIZE_DEDUP=$(calc_bytes $(echo "$BORG_INFO" |grep "All archives" |awk '{print $7}') $(echo "$BORG_INFO" |grep "All archives" |awk '{print $8}')) -echo "borgbackup_last_size{repo="{{ repo_url }}"} $LAST_SIZE" >> $TMP_FILE -echo "borgbackup_last_size_compressed{repo="{{ repo_url }}"} $LAST_SIZE_COMPRESSED" >> $TMP_FILE -echo "borgbackup_last_size_dedup{repo="{{ repo_url }}"} $LAST_SIZE_DEDUP" >> $TMP_FILE -echo "borgbackup_total_size{repo="{{ repo_url }}"} $TOTAL_SIZE" >> $TMP_FILE -echo "borgbackup_total_size_compressed{repo="{{ repo_url }}"} $TOTAL_SIZE_COMPRESSED" >> $TMP_FILE -echo "borgbackup_total_size_dedup{repo="{{ repo_url }}"} $TOTAL_SIZE_DEDUP" >> $TMP_FILE +echo "borgbackup_last_size{repo=\"{{ repo }}\"} $LAST_SIZE" >> $TMP_FILE +echo "borgbackup_last_size_compressed{repo=\"{{ repo }}\"} $LAST_SIZE_COMPRESSED" >> $TMP_FILE +echo "borgbackup_last_size_dedup{repo=\"{{ repo }}\"} $LAST_SIZE_DEDUP" >> $TMP_FILE +echo "borgbackup_total_size{repo=\"{{ repo }}\"} $TOTAL_SIZE" >> $TMP_FILE +echo "borgbackup_total_size_compressed{repo=\"{{ repo }}\"} $TOTAL_SIZE_COMPRESSED" >> $TMP_FILE +echo "borgbackup_total_size_dedup{repo=\"{{ repo }}\"} $TOTAL_SIZE_DEDUP" >> $TMP_FILE {% endfor %} @@ -73,5 +73,5 @@ echo "borgbackup_total_size_dedup{repo="{{ repo_url }}"} $TOTAL_SIZE_DEDUP" >> $ mv $TMP_FILE $PROM_FILE chown prometheus:prometheus $PROM_FILE -echo "created BorgBackup statistic for $COUNTER backups in $PROM_FILE" +echo "created BorgBackup statistic for {{ borgbackup_repos|length }} repos: $PROM_FILE"