--- # This playbook cleans up its own backup directory. - name: Cleanup semaphore hosts: all gather_facts: true tasks: - include_vars: vars/semaphore/variable.yaml - name: Search for volume's backup directories become: yes find: paths: "{{ local_backup }}" file_type: directory recurse: false register: backup_dirs - name: Copy backup files become: yes copy: remote_src: true src: "{{ item.path }}" dest: "{{ backup_dir }}" loop: "{{ backup_dirs.files }}" loop_control: label: "{{ item.path }}" - name: Cleanup volume's backup directories become: yes file: path: "{{ local_backup }}" state: absent loop: "{{ backup_dirs.files }}" loop_control: label: "{{ item.path }}" - name: Correct directory owner become: yes file: path: "{{ backup_dir }}" owner: chris group: chris recurse: yes - name: Register new backup directories find: paths: "{{ backup_dir }}" file_type: directory recurse: false register: backup_dirs - name: Check logrotate directories file: path: "{{ item[0].path }}/{{ item[1] }}" state: directory with_nested: - "{{ backup_dirs.files }}" - ['daily', 'weekly', 'monthly', 'yearly'] loop_control: label: "{{ item[0].path }} {{ item[1] }}" - name: Search for the created backups find: paths: "{{ item.path }}" file_type: file patterns: '*.gz' recurse: false register: backup_files loop: "{{ backup_dirs.files }}" loop_control: label: "{{ item.path }}" - 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_data_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_data_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 }}"