--- - name: "Ensure needed packages" become: yes package: name: pigz - name: "Create destination backup directory" become: yes ansible.builtin.file: path: '{{ backup_dest_dir }}' state: directory mode: '0755' owner: postgres group: postgres # there is no ansible module already in place # so using shell module - name: "Creating pg_basebackup ... + doing async check if successful or not" become: yes become_user: postgres shell: | set -o pipefail /usr/bin/pg_basebackup -Ft -X fetch -D - | pigz -p 4 > {{ backup_dest_dir }}/basebackup_{{ current_date_time }}.tar.gz args: executable: /bin/bash async: 3600 # allows duration for task up to 3600sec poll: 30 # rechecks every 30sec if task has finished yet changed_when: false # just to make it easier to detect potential failures. # maybe: can be removed later - name: "Create STATUS file for successful backup" become: yes file: path: '{{ backup_status_file }}_{{ current_date_time }}' state: touch mode: '0644' owner: postgres group: postgres - name: "Prepare backup dir..." become: yes ansible.builtin.file: path: '{{ backup_dest_dir }}' owner: '{{ backupuser_user_name }}' group: '{{ backupuser_user_name }}' recurse: yes