check_cluster_status.yml 1.4 KB

1234567891011121314151617181920212223242526272829303132
  1. ---
  2. # etcd_ip originates from etcd_common role
  3. - name: Check cluster status
  4. command: >
  5. etcdctl --cert {{ etcd_peer_cert_file }} --key {{ etcd_peer_key_file }} --cacert {{ etcd_peer_ca_file }} --endpoints 'https://{{ etcd_peer }}:{{ etcd_client_port }}' -w json endpoint status
  6. environment:
  7. ETCDCTL_API: 3
  8. register: l_etcd_cluster_status
  9. - name: Retrieve raftIndex
  10. set_fact:
  11. etcd_member_raft_index: "{{ (l_etcd_cluster_status.stdout | from_json)[0]['Status']['raftIndex'] }}"
  12. - block:
  13. # http://docs.ansible.com/ansible/playbooks_filters.html#extracting-values-from-containers
  14. - name: Group all raftIndices into a list
  15. set_fact:
  16. etcd_members_raft_indices: "{{ groups['oo_etcd_to_migrate'] | map('extract', hostvars, 'etcd_member_raft_index') | list | unique }}"
  17. - name: Check the minimum and the maximum of raftIndices is at most 1
  18. set_fact:
  19. etcd_members_raft_indices_diff: "{{ ((etcd_members_raft_indices | max | int) - (etcd_members_raft_indices | min | int)) | int }}"
  20. - debug:
  21. msg: "Raft indices difference: {{ etcd_members_raft_indices_diff }}"
  22. when: inventory_hostname in groups.oo_etcd_to_migrate[0]
  23. # The cluster raft status is ok if the difference of the max and min raft index is at most 1
  24. - name: capture the status
  25. set_fact:
  26. l_etcd_cluster_status_ok: "{{ hostvars[groups.oo_etcd_to_migrate[0]]['etcd_members_raft_indices_diff'] | int < 2 }}"