--- # NOTE(jan.gutter): These tasks assume a cluster is running - name: Check for the etcd leader vars: service_name: "etcd" service: "{{ etcd_services[service_name] }}" become: true # NOTE(jan.gutter): We need to set the ETCD environment vars here to # handle an upgrade scenario from older etcd containers. These can be # removed once the new workflow has been in place for a cycle or two. command: >- {{ kolla_container_engine }} exec -e ETCDCTL_API=3 -e ETCDCTL_ENDPOINTS="{{ etcd_client_internal_endpoint }}" -e ETCDCTL_WRITE_OUT="json" {{ service.container_name }} etcdctl endpoint status changed_when: false when: - inventory_hostname in (groups.etcd_had_volume_True | default([])) register: etcd_endpoint_status_result - name: Divide hosts by their etcd leader status vars: etcd_endpoint_status: >- {{ etcd_endpoint_status_result.stdout | default('[]') | from_json }} etcd_member_id: >- {{ etcd_endpoint_status[0]['Status']['header']['member_id'] | default('') }} etcd_leader_id: >- {{ etcd_endpoint_status[0]['Status']['leader'] | default('none') }} group_by: key: etcd_is_leader_{{ etcd_member_id == etcd_leader_id }} changed_when: false - name: Set the etcd cluster leader set_fact: etcd_cluster_leader: "{{ groups.etcd_is_leader_True | sort | first }}" when: groups.etcd_is_leader_True is defined changed_when: false