--- # This playbook rotates backups - name: Do backup rotation hosts: all gather_facts: True vars: directories: - /media/backup/docker - /media/backup/strato-production tasks: - name: Register new backup directories find: paths: "{{ item }}" file_type: directory recurse: false register: backup_dirs loop: "{{ directories }}" - name: Create the logrotate directories file: path: "{{ item[1].path }}/{{ item[2] }}" state: directory with_nested: - "{{ backup_dirs.results | subelements('files') }}" - ['daily', 'weekly', 'monthly', 'yearly'] loop_control: label: "{{ item[1].path }} {{ item[2] }}" - name: Search for new container backups find: paths: "{{ item[1].path }}" file_type: file patterns: '*.gz' recurse: false register: backup_files loop: "{{ backup_dirs.results | subelements('files') }}" loop_control: label: "{{ item[1].path }}" - name: Store the yearly backups copy: remote_src: true src: "{{ item[1].path }}" dest: "{{ item[1].path | dirname }}/yearly/{{ item[1].path | basename }}" loop: "{{ backup_files.results | subelements('files') if (ansible_date_time.day == '01' and ansible_date_time.month == '01') else [] }}" loop_control: label: "{{ item[1].path }}" - name: Store the monthly backups copy: remote_src: true src: "{{ item[1].path }}" dest: "{{ item[1].path | dirname }}/monthly/{{ item[1].path | basename }}" loop: "{{ backup_files.results | subelements('files') if (ansible_date_time.day == '01' and ansible_date_time.month != '01') else [] }}" loop_control: label: "{{ item[1].path }}" - name: Store the weekly backups copy: remote_src: true src: "{{ item[1].path }}" dest: "{{ item[1].path | dirname }}/weekly/{{ item[1].path | basename }}" loop: "{{ backup_files.results | subelements('files') if (ansible_date_time.weekday_number == '1' and ansible_date_time.day != '01') else [] }}" loop_control: label: "{{ item[1].path }}" - name: Store the daily backup copy: remote_src: true src: "{{ item[1].path }}" dest: "{{ item[1].path | dirname }}/daily/{{ item[1].path | basename }}" loop: "{{ backup_files.results | subelements('files') if (ansible_date_time.weekday_number != '1' and ansible_date_time.day != '01') else [] }}" loop_control: label: "{{ item[1].path }}" - name: Cleanup original backup files file: path: "{{ item[1].path }}" state: absent loop: "{{ backup_files.results | subelements('files') }}" loop_control: label: "{{ item[1].path }}" - name: Include the run next playbook import_playbook: run-next.yaml vars: to_do: remove