--- - 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