You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
2.0 KiB

  1. ---
  2. - name: Backup etcd data
  3. command: /bin/true
  4. notify:
  5. - Refresh Time Fact
  6. - Set Backup Directory
  7. - Create Backup Directory
  8. - Stat etcd v2 data directory
  9. - Backup etcd v2 data
  10. - Backup etcd v3 data
  11. - Remove old etcd backups
  12. when: etcd_cluster_is_healthy.rc == 0
  13. - name: Refresh Time Fact
  14. setup: filter=ansible_date_time
  15. - name: Set Backup Directory
  16. set_fact:
  17. etcd_backup_directory: "{{ etcd_backup_prefix }}/etcd-{{ ansible_date_time.date }}_{{ ansible_date_time.time }}"
  18. - name: Create Backup Directory
  19. file:
  20. path: "{{ etcd_backup_directory }}"
  21. state: directory
  22. owner: root
  23. group: root
  24. mode: 0600
  25. - name: Stat etcd v2 data directory
  26. stat:
  27. path: "{{ etcd_data_dir }}/member"
  28. get_attributes: no
  29. get_checksum: no
  30. get_mime: no
  31. register: etcd_data_dir_member
  32. - name: Backup etcd v2 data
  33. when: etcd_data_dir_member.stat.exists
  34. command: >-
  35. {{ bin_dir }}/etcdctl backup
  36. --data-dir {{ etcd_data_dir }}
  37. --backup-dir {{ etcd_backup_directory }}
  38. environment:
  39. ETCDCTL_API: 2
  40. retries: 3
  41. register: backup_v2_command
  42. until: backup_v2_command.rc == 0
  43. delay: "{{ retry_stagger | random + 3 }}"
  44. - name: Backup etcd v3 data
  45. command: >-
  46. {{ bin_dir }}/etcdctl
  47. snapshot save {{ etcd_backup_directory }}/snapshot.db
  48. environment:
  49. ETCDCTL_API: 3
  50. ETCDCTL_ENDPOINTS: "{{ etcd_access_addresses.split(',') | first }}"
  51. ETCDCTL_CERT: "{{ etcd_cert_dir }}/admin-{{ inventory_hostname }}.pem"
  52. ETCDCTL_KEY: "{{ etcd_cert_dir }}/admin-{{ inventory_hostname }}-key.pem"
  53. ETCDCTL_CACERT: "{{ etcd_cert_dir }}/ca.pem"
  54. retries: 3
  55. register: etcd_backup_v3_command
  56. until: etcd_backup_v3_command.rc == 0
  57. delay: "{{ retry_stagger | random + 3 }}"
  58. - name: Remove old etcd backups
  59. shell:
  60. chdir: "{{ etcd_backup_prefix }}"
  61. cmd: "find . -name 'etcd-*' -type d | sort -n | head -n -{{ etcd_backup_retention_count }} | xargs rm -rf"
  62. when: etcd_backup_retention_count >= 0