---
- name: Backup etcd data
  command: /bin/true
  notify:
    - Refresh Time Fact
    - Set Backup Directory
    - Create Backup Directory
    - Stat etcd v2 data directory
    - Backup etcd v2 data
    - Backup etcd v3 data
  when: etcd_cluster_is_healthy.rc == 0

- name: Refresh Time Fact
  setup:
    filter: ansible_date_time

- name: Set Backup Directory
  set_fact:
    etcd_backup_directory: "{{ etcd_backup_prefix }}/etcd-{{ ansible_date_time.date }}_{{ ansible_date_time.time }}"

- name: Create Backup Directory
  file:
    path: "{{ etcd_backup_directory }}"
    state: directory
    owner: root
    group: root
    mode: 0600

- name: Stat etcd v2 data directory
  stat:
    path: "{{ etcd_data_dir }}/member"
    get_attributes: no
    get_checksum: no
    get_mime: no
  register: etcd_data_dir_member

- name: Backup etcd v2 data
  when: etcd_data_dir_member.stat.exists
  command: >-
    {{ bin_dir }}/etcdctl backup
      --data-dir {{ etcd_data_dir }}
      --backup-dir {{ etcd_backup_directory }}
  environment:
    ETCDCTL_API: "2"
  retries: 3
  register: backup_v2_command
  until: backup_v2_command.rc == 0
  delay: "{{ retry_stagger | random + 3 }}"

- name: Backup etcd v3 data
  command: >-
    {{ bin_dir }}/etcdctl
      snapshot save {{ etcd_backup_directory }}/snapshot.db
  environment:
    ETCDCTL_API: "3"
    ETCDCTL_ENDPOINTS: "{{ etcd_access_addresses.split(',') | first }}"
    ETCDCTL_CERT: "{{ etcd_cert_dir }}/admin-{{ inventory_hostname }}.pem"
    ETCDCTL_KEY: "{{ etcd_cert_dir }}/admin-{{ inventory_hostname }}-key.pem"
    ETCDCTL_CACERT: "{{ etcd_cert_dir }}/ca.pem"
  retries: 3
  register: etcd_backup_v3_command
  until: etcd_backup_v3_command.rc == 0
  delay: "{{ retry_stagger | random + 3 }}"
