Files @ 2381ba93d089
Branch filter:

Location: majic-ansible-roles/roles/backup_client/tasks/main.yml

branko
MAR-148: Better workaround for https://github.com/ansible/ansible/issues/64560 (override the module_utils/mysql.py instead of the module itself).
---

- name: Install pexpect for pexpect+sftp Duplicity backend (mainly needed on Stretch)
  apt:
    name: "python-pexpect"
    state: present

- name: Install backup software
  apt:
    name:
      - duplicity
      - duply
    state: present

- name: Set-up Duply directories
  file:
    path: "{{ item }}"
    state: directory
    owner: root
    group: root
    mode: 0700
  with_items:
    - "/etc/duply"
    - "/etc/duply/main"
    - "/etc/duply/main/patterns"
    - "/etc/duply/main/gnupg"
    - "/etc/duply/main/ssh"
    - "/var/cache/duply"
    - "/var/cache/duply/main"

- name: Deploy GnuPG private keys
  copy:
    content: "{{ backup_encryption_key }}"
    dest: "/etc/duply/main/private_keys.asc"
    owner: root
    group: root
    mode: 0600
  notify:
    - Remove current keyring
    - Create keyring directory
    - Import private keys
    - Import public keys

- name: Deploy GnuPG public keys
  copy:
    content: "{{ backup_additional_encryption_keys | join('\n') }}"
    dest: "/etc/duply/main/public_keys.asc"
    owner: root
    group: root
    mode: 0600
  notify:
    - Remove current keyring
    - Create keyring directory
    - Import private keys
    - Import public keys

- name: Extract encryption key identifier (Duplicty requires key ID in hexadecimal format)
  shell: "set -o pipefail && {{ gnupg_binary }} --no-tty --list-packets /etc/duply/main/private_keys.asc | grep keyid: |
    head -n1 | sed -e 's/.*: //' | sed -re 's/^.{{ '{' + gnupg_key_cutoff + '}' }}//'"
  args:
    executable: /bin/bash
  register: backup_encryption_key_id
  changed_when: false
  failed_when: not backup_encryption_key_id.stdout

- name: Extract additional encryption keys identifiers (Duplicty requires key ID in hexadecimal format)
  shell: "set -o pipefail &&  {{ gnupg_binary }} --no-tty --list-packets /etc/duply/main/public_keys.asc | grep keyid: |
    sed -e 's/.*: //' | sort -u | sed -re 's/^.{{ '{' + gnupg_key_cutoff + '}' }}//' | tr '\n' ',' | sed -e 's/,$//'"
  args:
    executable: /bin/bash
  when: backup_additional_encryption_keys | length > 0
  register: backup_additional_encryption_keys_ids
  changed_when: false
  failed_when: not backup_additional_encryption_keys_ids.stdout

- name: Deploy private SSH key for logging-in into backup server
  copy:
    content: "{{ backup_ssh_key }}"
    dest: "/etc/duply/main/ssh/identity"
    owner: root
    group: root
    mode: 0600
  no_log: true

- name: Deploy custom known_hosts for backup purposes
  template:
    src: "known_hosts.j2"
    dest: "/etc/duply/main/ssh/known_hosts"
    owner: root
    group: root
    mode: 0600

- name: Deploy Duply configuration file
  template:
    src: "duply_main_conf.j2"
    dest: "/etc/duply/main/conf"
    owner: root
    group: root
    mode: 0600

- name: Deploy base exclude pattern (exclude all by default)
  copy:
    content: "- **"
    dest: "/etc/duply/main/exclude"
    owner: root
    group: root
    mode: 0600

- name: Set-up directory for storing pre-backup scripts
  file:
    path: "/etc/duply/main/pre.d/"
    state: directory
    owner: root
    group: root
    mode: 0700

- name: Set-up script for running all pre-backup scripts
  copy:
    src: "duply_pre"
    dest: "/etc/duply/main/pre"
    owner: root
    group: root
    mode: 0700

- name: Deploy crontab entry for running backups
  cron:
    name: backup
    cron_file: backup
    hour: "2"
    minute: "0"
    job: "/usr/bin/duply main backup"
    state: present
    user: root

- name: Ensure the file with include patterns exists (but do not overwrite)
  copy:
    content: ""
    dest: /etc/duply/main/include
    force: false
    group: root
    owner: root
    mode: 0600

- name: Explicitly run all handlers
  include: ../handlers/main.yml
  when: "run_handlers | default(False) | bool()"
  tags:
    - handlers