blob: 4d661f8fabf919232f430348eeb15ae730b61282 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
---
# NOTE(jan.gutter): These tasks assume a cluster is running
- name: Get info on etcd container
become: true
kolla_container_facts:
action: get_containers
container_engine: "{{ kolla_container_engine }}"
name:
- etcd
register: etcd_container_info
- 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.
ansible.builtin.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([]))
- etcd_container_info.containers['etcd'] is defined
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') }}
ansible.builtin.group_by:
key: etcd_is_leader_{{ etcd_member_id == etcd_leader_id }}
changed_when: false
- name: Set the etcd cluster leader
ansible.builtin.set_fact:
etcd_cluster_leader: "{{ groups.etcd_is_leader_True | sort | first }}"
when: groups.etcd_is_leader_True is defined
changed_when: false
|