summaryrefslogtreecommitdiffstats
path: root/roles/openshift_storage_glusterfs/tasks/main.yml
blob: 265a3cc6e98576a6effa9208219406ff9a2e9311 (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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
---
- name: Create temp directory for doing work in
  command: mktemp -d /tmp/openshift-glusterfs-ansible-XXXXXX
  register: mktemp
  changed_when: False
  check_mode: no

- name: Verify target namespace exists
  oc_project:
    state: present
    name: "{{ openshift_storage_glusterfs_namespace }}"
  when: openshift_storage_glusterfs_is_native or openshift_storage_glusterfs_heketi_is_native

- include: glusterfs_deploy.yml
  when: openshift_storage_glusterfs_is_native

- name: Make sure heketi-client is installed
  package: name=heketi-client state=present

- name: Delete pre-existing heketi resources
  oc_obj:
    namespace: "{{ openshift_storage_glusterfs_namespace }}"
    kind: "{{ item.kind }}"
    name: "{{ item.name | default(omit) }}"
    selector: "{{ item.selector | default(omit) }}"
    state: absent
  with_items:
  - kind: "template,route,service,jobs,dc,secret"
    selector: "deploy-heketi"
  - kind: "template,route,dc,service"
    name: "heketi"
  - kind: "svc,ep"
    name: "heketi-storage-endpoints"
  - kind: "sa"
    name: "heketi-service-account"
  failed_when: False
  when: openshift_storage_glusterfs_heketi_wipe

- name: Wait for deploy-heketi pods to terminate
  oc_obj:
    namespace: "{{ openshift_storage_glusterfs_namespace }}"
    kind: pod
    state: list
    selector: "glusterfs=deploy-heketi-pod"
  register: heketi_pod
  until: "heketi_pod.results.results[0]['items'] | count == 0"
  delay: 10
  retries: "{{ (openshift_storage_glusterfs_timeout / 10) | int }}"
  when: openshift_storage_glusterfs_heketi_wipe

- name: Wait for heketi pods to terminate
  oc_obj:
    namespace: "{{ openshift_storage_glusterfs_namespace }}"
    kind: pod
    state: list
    selector: "glusterfs=heketi-pod"
  register: heketi_pod
  until: "heketi_pod.results.results[0]['items'] | count == 0"
  delay: 10
  retries: "{{ (openshift_storage_glusterfs_timeout / 10) | int }}"
  when: openshift_storage_glusterfs_heketi_wipe

- name: Create heketi service account
  oc_serviceaccount:
    namespace: "{{ openshift_storage_glusterfs_namespace }}"
    name: heketi-service-account
    state: present
  when: openshift_storage_glusterfs_heketi_is_native

- name: Add heketi service account to privileged SCC
  oc_adm_policy_user:
    user: "system:serviceaccount:{{ openshift_storage_glusterfs_namespace }}:heketi-service-account"
    resource_kind: scc
    resource_name: privileged
    state: present
  when: openshift_storage_glusterfs_heketi_is_native

- name: Allow heketi service account to view/edit pods
  oc_adm_policy_user:
    user: "system:serviceaccount:{{ openshift_storage_glusterfs_namespace }}:heketi-service-account"
    resource_kind: role
    resource_name: edit
    state: present
  when: openshift_storage_glusterfs_heketi_is_native

- name: Check for existing deploy-heketi pod
  oc_obj:
    namespace: "{{ openshift_storage_glusterfs_namespace }}"
    state: list
    kind: pod
    selector: "glusterfs=deploy-heketi-pod,deploy-heketi=support"
  register: heketi_pod
  when: openshift_storage_glusterfs_heketi_is_native

- name: Check if need to deploy deploy-heketi
  set_fact:
    openshift_storage_glusterfs_heketi_deploy_is_missing: False
  when:
  - "openshift_storage_glusterfs_heketi_is_native"
  - "heketi_pod.results.results[0]['items'] | count > 0"
  # deploy-heketi is not missing when there are one or more pods with matching labels whose 'Ready' status is True
  - "heketi_pod.results.results[0]['items'] | oo_collect(attribute='status.conditions') | oo_collect(attribute='status', filters={'type': 'Ready'}) | map('bool') | select | list | count > 0"

- name: Check for existing heketi pod
  oc_obj:
    namespace: "{{ openshift_storage_glusterfs_namespace }}"
    state: list
    kind: pod
    selector: "glusterfs=heketi-pod"
  register: heketi_pod
  when: openshift_storage_glusterfs_heketi_is_native

- name: Check if need to deploy heketi
  set_fact:
    openshift_storage_glusterfs_heketi_is_missing: False
  when:
  - "openshift_storage_glusterfs_heketi_is_native"
  - "heketi_pod.results.results[0]['items'] | count > 0"
  # heketi is not missing when there are one or more pods with matching labels whose 'Ready' status is True
  - "heketi_pod.results.results[0]['items'] | oo_collect(attribute='status.conditions') | oo_collect(attribute='status', filters={'type': 'Ready'}) | map('bool') | select | list | count > 0"

- include: heketi_deploy_part1.yml
  when:
  - openshift_storage_glusterfs_heketi_is_native
  - openshift_storage_glusterfs_heketi_deploy_is_missing
  - openshift_storage_glusterfs_heketi_is_missing

- name: Determine heketi URL
  oc_obj:
    namespace: "{{ openshift_storage_glusterfs_namespace }}"
    state: list
    kind: ep
    selector: "glusterfs in (deploy-heketi-service, heketi-service)"
  register: heketi_url
  until:
  - "heketi_url.results.results[0]['items'][0].subsets[0].addresses[0].ip != ''"
  - "heketi_url.results.results[0]['items'][0].subsets[0].ports[0].port != ''"
  delay: 10
  retries: "{{ (openshift_storage_glusterfs_timeout / 10) | int }}"
  when:
  - openshift_storage_glusterfs_heketi_is_native
  - openshift_storage_glusterfs_heketi_url is undefined

- name: Set heketi URL
  set_fact:
    openshift_storage_glusterfs_heketi_url: "{{ heketi_url.results.results[0]['items'][0].subsets[0].addresses[0].ip }}:{{ heketi_url.results.results[0]['items'][0].subsets[0].ports[0].port }}"
  when:
  - openshift_storage_glusterfs_heketi_is_native
  - openshift_storage_glusterfs_heketi_url is undefined

- name: Verify heketi service
  command: "heketi-cli -s http://{{ openshift_storage_glusterfs_heketi_url }} --user admin --secret '{{ openshift_storage_glusterfs_heketi_admin_key }}' cluster list"
  changed_when: False

- name: Generate topology file
  template:
    src: "{{ openshift.common.examples_content_version }}/topology.json.j2"
    dest: "{{ mktemp.stdout }}/topology.json"
  when:
  - openshift_storage_glusterfs_is_native
  - openshift_storage_glusterfs_heketi_topology_load

- name: Load heketi topology
  command: "heketi-cli -s http://{{ openshift_storage_glusterfs_heketi_url }} --user admin --secret '{{ openshift_storage_glusterfs_heketi_admin_key }}' topology load --json={{ mktemp.stdout }}/topology.json 2>&1"
  register: topology_load
  failed_when: "topology_load.rc != 0 or 'Unable' in topology_load.stdout"
  when:
  - openshift_storage_glusterfs_is_native
  - openshift_storage_glusterfs_heketi_topology_load

- include: heketi_deploy_part2.yml
  when: openshift_storage_glusterfs_heketi_is_native and openshift_storage_glusterfs_heketi_is_missing

- include: glusterfs_registry.yml
  when: "openshift.hosted.registry.storage.kind == 'glusterfs'"

- name: Delete temp directory
  file:
    name: "{{ mktemp.stdout }}"
    state: absent
  changed_when: False
  check_mode: no