From 6ce464fc90d3e2043cfac97b43af876f2528028c Mon Sep 17 00:00:00 2001 From: chsteinle Date: Tue, 21 Dec 2021 08:10:26 +0100 Subject: [PATCH] Extend odroid playbook to find old backups of remote servers. --- odroid.yaml | 370 ++++++++++++++++++++++++++-------------------------- 1 file changed, 185 insertions(+), 185 deletions(-) diff --git a/odroid.yaml b/odroid.yaml index 3888440..563d4d2 100644 --- a/odroid.yaml +++ b/odroid.yaml @@ -11,190 +11,190 @@ - include_vars: vars/odroid/secret.yaml - include_vars: vars/odroid/variable.yaml - - name: Check if directories exist - stat: - path: "{{ backup_dir }}/{{ item }}" - register: dirs - loop: "{{ systems }}" - - - name: Create not existing directories - file: - path: "{{ backup_dir }}/{{ item.item }}" - state: directory - mode: 0755 - group: chris - owner: chris - when: item.stat.exists == false - with_items: "{{ dirs.results }}" - loop_control: - label: "{{ item.item }}" - - - name: Backup container volumes - shell: docker run --rm -v {{ backup_dir }}/{{ item.value.container }}:/backup --volumes-from {{ item.value.container }} busybox tar cvfz /backup/{{ item.key }}-{{ ansible_date_time.iso8601_basic_short }}.tar.gz {{ item.value.path }} - loop: "{{ lookup('dict', volumes) }}" - loop_control: - label: "{{ item.key }}" - - - name: Change ownership of volume backups - file: - path: "{{ backup_dir }}/{{ item.value.container }}/{{ item.key }}-{{ ansible_date_time.iso8601_basic_short }}.tar.gz" - owner: chris - group: chris - become: yes - become_method: sudo - become_user: root - loop: "{{ lookup('dict', volumes) }}" - loop_control: - label: "{{ item.key }}" - - - name: Backup mysql databases - shell: docker exec mysql8 mysqldump -u{{ mysql_user }} -p{{ mysql_password }} {{ item }} > {{ backup_dir }}/{{ item }}/db-{{ ansible_date_time.iso8601_basic_short }}.sql - loop: "{{ mysql_databases }}" - - - name: Backup postgres databases - shell: docker exec psql14 pg_dump -U {{ postgres_user }} {{ item }} > {{ backup_dir }}/{{ item }}/db-{{ ansible_date_time.iso8601_basic_short }}.sql - loop: "{{ postgres_databases }}" - - - name: Compress database backup files - shell: gzip {{ backup_dir }}/{{ item }}/db-{{ ansible_date_time.iso8601_basic_short }}.sql - loop: "{{ databases }}" - - - name: Check logrotate directories - stat: - path: "{{ backup_dir }}/{{ item[0] }}/{{ item[1] }}" - register: subdirs - with_nested: - - "{{ systems }}" - - ['daily', 'weekly', 'monthly', 'yearly'] - loop_control: - label: "{{ item[0] }} {{ item[1] }}" - - - name: Create not existing logrotate directories - file: - path: "{{ backup_dir }}/{{ item.item[0] }}/{{ item.item[1] }}" - state: directory - mode: 0755 - group: chris - owner: chris - when: item.stat.exists == false - with_items: "{{ subdirs.results }}" - loop_control: - label: "{{ item.item[0] }} {{ item.item[1] }}" - - - name: Search for the created backups - find: - paths: "{{ backup_dir }}/{{ item }}" - file_type: file - patterns: '*.gz' - recurse: false - register: backup_files - loop: "{{ systems }}" - - - name: Store the yearly backups - copy: - remote_src: true - src: "{{ item.path }}" - dest: "{{ item.path | dirname }}/yearly/{{ item.path | basename }}" - with_items: "{{ backup_files.results | map(attribute='files') | list }}" - when: (ansible_date_time.day == "01" and ansible_date_time.month == "01") - loop_control: - label: "{{ item.path }}" - - - name: Store the monthly backups - copy: - remote_src: true - src: "{{ item.path }}" - dest: "{{ item.path | dirname }}/monthly/{{ item.path | basename }}" - with_items: "{{ backup_files.results | map(attribute='files') | list }}" - when: (ansible_date_time.day == "01" and ansible_date_time.month != "01") - loop_control: - label: "{{ item.path }}" - - - name: Store the weekly backups - copy: - remote_src: true - src: "{{ item.path }}" - dest: "{{ item.path | dirname }}/weekly/{{ item.path | basename }}" - with_items: "{{ backup_files.results | map(attribute='files') | list }}" - when: (ansible_date_time.weekday_number == "1") - loop_control: - label: "{{ item.path }}" - - - name: Store the daily backup - copy: - remote_src: true - src: "{{ item.path }}" - dest: "{{ item.path | dirname }}/daily/{{ item.path | basename }}" - with_items: "{{ backup_files.results | map(attribute='files') | list }}" - when: (ansible_date_time.weekday_number != "1" and ansible_date_time.day != "01") - loop_control: - label: "{{ item.path }}" - - - name: Cleanup original backup files - file: - path: "{{ item.path }}" - state: absent - with_items: "{{ backup_files.results | map(attribute='files') | list }}" - loop_control: - label: "{{ item.path }}" - - - name: Find old daily backups - find: - paths: "{{ backup_dir }}/{{ item }}/daily" - file_type: file - age: 8d - age_stamp: ctime - patterns: '*.gz' - recurse: false - register: backup_files - loop: "{{ systems }}" - - - name: Delete old daily backups - file: - path: "{{ item.path }}" - state: absent - with_items: "{{ backup_files.results | map(attribute='files') | list }}" - loop_control: - label: "{{ item.path }}" - - - name: Find old weekly backups - find: - paths: "{{ backup_dir }}/{{ item }}/weekly" - file_type: file - age: 5w - age_stamp: ctime - patterns: '*.gz' - recurse: false - register: backup_files - loop: "{{ systems }}" - - - name: Delete old weekly backups - file: - path: "{{ item.path }}" - state: absent - with_items: "{{ backup_files.results | map(attribute='files') | list }}" - loop_control: - label: "{{ item.path }}" - - - name: Find old monthly backups - find: - paths: "{{ backup_dir }}/{{ item }}/monthly" - file_type: file - age: 56w - age_stamp: ctime - patterns: '*.gz' - recurse: false - register: backup_files - loop: "{{ systems }}" - - - name: Delete old monthly backups - file: - path: "{{ item.path }}" - state: absent - with_items: "{{ backup_files.results | map(attribute='files') | list }}" - loop_control: - label: "{{ item.path }}" - +# - name: Check if directories exist +# stat: +# path: "{{ backup_dir }}/{{ item }}" +# register: dirs +# loop: "{{ systems }}" +# +# - name: Create not existing directories +# file: +# path: "{{ backup_dir }}/{{ item.item }}" +# state: directory +# mode: 0755 +# group: chris +# owner: chris +# when: item.stat.exists == false +# with_items: "{{ dirs.results }}" +# loop_control: +# label: "{{ item.item }}" +# +# - name: Backup container volumes +# shell: docker run --rm -v {{ backup_dir }}/{{ item.value.container }}:/backup --volumes-from {{ item.value.container }} busybox tar cvfz /backup/{{ item.key }}-{{ ansible_date_time.iso8601_basic_short }}.tar.gz {{ item.value.path }} +# loop: "{{ lookup('dict', volumes) }}" +# loop_control: +# label: "{{ item.key }}" +# +# - name: Change ownership of volume backups +# file: +# path: "{{ backup_dir }}/{{ item.value.container }}/{{ item.key }}-{{ ansible_date_time.iso8601_basic_short }}.tar.gz" +# owner: chris +# group: chris +# become: yes +# become_method: sudo +# become_user: root +# loop: "{{ lookup('dict', volumes) }}" +# loop_control: +# label: "{{ item.key }}" +# +# - name: Backup mysql databases +# shell: docker exec mysql8 mysqldump -u{{ mysql_user }} -p{{ mysql_password }} {{ item }} > {{ backup_dir }}/{{ item }}/db-{{ ansible_date_time.iso8601_basic_short }}.sql +# loop: "{{ mysql_databases }}" +# +# - name: Backup postgres databases +# shell: docker exec psql14 pg_dump -U {{ postgres_user }} {{ item }} > {{ backup_dir }}/{{ item }}/db-{{ ansible_date_time.iso8601_basic_short }}.sql +# loop: "{{ postgres_databases }}" +# +# - name: Compress database backup files +# shell: gzip {{ backup_dir }}/{{ item }}/db-{{ ansible_date_time.iso8601_basic_short }}.sql +# loop: "{{ databases }}" +# +# - name: Check logrotate directories +# stat: +# path: "{{ backup_dir }}/{{ item[0] }}/{{ item[1] }}" +# register: subdirs +# with_nested: +# - "{{ systems }}" +# - ['daily', 'weekly', 'monthly', 'yearly'] +# loop_control: +# label: "{{ item[0] }} {{ item[1] }}" +# +# - name: Create not existing logrotate directories +# file: +# path: "{{ backup_dir }}/{{ item.item[0] }}/{{ item.item[1] }}" +# state: directory +# mode: 0755 +# group: chris +# owner: chris +# when: item.stat.exists == false +# with_items: "{{ subdirs.results }}" +# loop_control: +# label: "{{ item.item[0] }} {{ item.item[1] }}" +# +# - name: Search for the created backups +# find: +# paths: "{{ backup_dir }}/{{ item }}" +# file_type: file +# patterns: '*.gz' +# recurse: false +# register: backup_files +# loop: "{{ systems }}" +# +# - name: Store the yearly backups +# copy: +# remote_src: true +# src: "{{ item.path }}" +# dest: "{{ item.path | dirname }}/yearly/{{ item.path | basename }}" +# with_items: "{{ backup_files.results | map(attribute='files') | list }}" +# when: (ansible_date_time.day == "01" and ansible_date_time.month == "01") +# loop_control: +# label: "{{ item.path }}" +# +# - name: Store the monthly backups +# copy: +# remote_src: true +# src: "{{ item.path }}" +# dest: "{{ item.path | dirname }}/monthly/{{ item.path | basename }}" +# with_items: "{{ backup_files.results | map(attribute='files') | list }}" +# when: (ansible_date_time.day == "01" and ansible_date_time.month != "01") +# loop_control: +# label: "{{ item.path }}" +# +# - name: Store the weekly backups +# copy: +# remote_src: true +# src: "{{ item.path }}" +# dest: "{{ item.path | dirname }}/weekly/{{ item.path | basename }}" +# with_items: "{{ backup_files.results | map(attribute='files') | list }}" +# when: (ansible_date_time.weekday_number == "1") +# loop_control: +# label: "{{ item.path }}" +# +# - name: Store the daily backup +# copy: +# remote_src: true +# src: "{{ item.path }}" +# dest: "{{ item.path | dirname }}/daily/{{ item.path | basename }}" +# with_items: "{{ backup_files.results | map(attribute='files') | list }}" +# when: (ansible_date_time.weekday_number != "1" and ansible_date_time.day != "01") +# loop_control: +# label: "{{ item.path }}" +# +# - name: Cleanup original backup files +# file: +# path: "{{ item.path }}" +# state: absent +# with_items: "{{ backup_files.results | map(attribute='files') | list }}" +# loop_control: +# label: "{{ item.path }}" +# +# - name: Find old daily backups +# find: +# paths: "{{ backup_dir }}/{{ item }}/daily" +# file_type: file +# age: 8d +# age_stamp: ctime +# patterns: '*.gz' +# recurse: false +# register: backup_files +# loop: "{{ systems }}" +# +# - name: Delete old daily backups +# file: +# path: "{{ item.path }}" +# state: absent +# with_items: "{{ backup_files.results | map(attribute='files') | list }}" +# loop_control: +# label: "{{ item.path }}" +# +# - name: Find old weekly backups +# find: +# paths: "{{ backup_dir }}/{{ item }}/weekly" +# file_type: file +# age: 5w +# age_stamp: ctime +# patterns: '*.gz' +# recurse: false +# register: backup_files +# loop: "{{ systems }}" +# +# - name: Delete old weekly backups +# file: +# path: "{{ item.path }}" +# state: absent +# with_items: "{{ backup_files.results | map(attribute='files') | list }}" +# loop_control: +# label: "{{ item.path }}" +# +# - name: Find old monthly backups +# find: +# paths: "{{ backup_dir }}/{{ item }}/monthly" +# file_type: file +# age: 56w +# age_stamp: ctime +# patterns: '*.gz' +# recurse: false +# register: backup_files +# loop: "{{ systems }}" +# +# - name: Delete old monthly backups +# file: +# path: "{{ item.path }}" +# state: absent +# with_items: "{{ backup_files.results | map(attribute='files') | list }}" +# loop_control: +# label: "{{ item.path }}" +# # - name: Create nexcloud data backup # shell: rdiff-backup /var/lib/docker/volumes/nextcloud-data/_data /media/backup/docker/nextcloud/data # become: yes @@ -210,7 +210,7 @@ loop: "{{ servers }}" - name: Find old daily backups - file: + find: path: "{{ item.path }}/daily" file_type: file age: 8d