---
- name: "Create destination backup directory"
  become: yes
  ansible.builtin.file:
    path: '{{ backup_dest_dir }}'
    state: directory
    mode: '0755'
    owner: root
    group: root

- name: "Create {{ my_cnf_file }} file"
  become: yes
  copy:
    dest: '{{ my_cnf_file }}'
    mode: '0600'
    content: |
      [client]
      user={{ mysql_root_username }}
      password={{ mysql_root_password }}

- name: "Block: gpg stuff"
  block:
    - name: Create temp dir
      ansible.builtin.tempfile:
        state: directory
        suffix: gitcheckout
        path: /tmp
      register: tempdir

    - name: "Checkout repo for gpg communication-keys"
      ansible.builtin.git:
        repo: 'https://{{ gituser | default("gitea-admin") | urlencode }}:{{ gitea_admin_password | urlencode }}@{{ stage }}-gitea-01.smardigo.digital/gitea-admin/communication-keys.git'
        dest: '{{ tempdir.path }}'
        version: master

# there is no ansible gpg module already in place
# linting violation needs to be whitelisted
    - name: "Importing stage specific automation gpg-key" # noqa command-instead-of-shell
      shell: 'gpg --import {{ tempdir.path }}/smardigo_automation_{{ stage }}.gpg.pub'

# there is no ansible module already in place for (mariabackup|gpg)
# so using shell module
- name: "Creating mariabackup ... + doing async check if successful or not"
  become: yes
  vars:
    backup_file: '{{ backup_dest_dir }}/mariabackupstream_{{ current_date_time }}.gz'
  shell: |
      set -o pipefail
      /usr/bin/mariabackup --defaults-file={{ my_cnf_file }} --backup --stream=xbstream | gzip > {{ backup_file }} && \
      gpg --encrypt --recipient "smardigo automation {{ stage | upper }}" --trust-model always {{ backup_file }} && \
      rm {{ backup_file }}
  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: root
    group: root

- name: "Prepare backup dir..."
  become: yes
  ansible.builtin.file:
    path: '{{ backup_dest_dir }}'
    owner: '{{ backupuser_user_name }}'
    group: '{{ backupuser_user_name }}'
    recurse: yes

- name: "Remove {{ my_cnf_file }} file"
  become: yes
  file:
    path: '{{ my_cnf_file }}'
    state: absent
