- name: deploy podified Cinder API ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} oc patch openstackcontrolplane openstack --type=merge --patch '{{ cinder_api_patch }}' - name: wait for Cinder API to start up ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} oc wait pod --for condition=Ready -l component=cinder-api register: cinder_api_running until: cinder_api_running is success retries: 60 delay: "{{ cinder_retry_delay }}" - name: Get cinder-api pod name ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} oc get pods -l component=cinder-api -o custom-columns="NAME:.metadata.name" --no-headers | head -1 register: cinder_api_pod - name: check that Cinder is reachable and its endpoints are defined ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} alias openstack="oc exec -t openstackclient -- openstack" ${BASH_ALIASES[openstack]} endpoint list | grep cinder ${BASH_ALIASES[openstack]} volume type list register: cinder_responding_result until: cinder_responding_result is success retries: 60 delay: "{{ cinder_retry_delay }}" - name: Get cinder-backup down services ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} oc exec -t openstackclient -- openstack volume service list --service cinder-backup -c Host -f value register: backup_down_services - name: Remove old cinder-backup service ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} oc exec -t "{{ cinder_api_pod.stdout }}" -c cinder-api -- cinder-manage service remove cinder-backup "{{ item }}" loop: "{{ backup_down_services.stdout_lines }}" - name: Get cinder-scheduler down services ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} oc exec -t openstackclient -- openstack volume service list --service cinder-scheduler -c Host -f value register: scheduler_down_services - name: Remove old cinder-scheduler service ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} oc exec -t "{{ cinder_api_pod.stdout }}" -c cinder-api -- cinder-manage service remove cinder-scheduler "{{ item }}" loop: "{{ scheduler_down_services.stdout_lines }}" - name: deploy podified Cinder scheduler ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} oc patch openstackcontrolplane openstack --type=merge --patch '{{ cinder_scheduler_patch }}' - name: Get the default volume type from 17.1 ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} CONTROLLER1_SSH="{{ controller1_ssh }}" $CONTROLLER1_SSH "sudo python3 -c \"import configparser; c = configparser.ConfigParser(); c.read('/var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf'); print(c['DEFAULT']['default_volume_type'])\"" register: default_type - name: Patch the default volume type in openstackcontrolplane CR ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} oc patch openstackcontrolplane openstack --type=merge -p '{"spec":{"cinder":{"template":{"customServiceConfig":"[DEFAULT]\ndefault_volume_type = \"{{ default_type.stdout }}\" \n"}}}}' - name: Deploy cinder-volume if necessary when: cinder_volume_backend | default('') != '' ansible.builtin.include_tasks: volume_backend.yaml - name: Deploy cinder-backup if necessary when: cinder_backup_backend | default('') != '' ansible.builtin.include_tasks: backup_backend.yaml - name: wait for Cinder pods to start up ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} oc wait pod --for condition=Ready -l component=cinder-scheduler [ -z "{{ cinder_volume_backend }}" ] || oc wait pod --for condition=Ready -l component=cinder-volume [ -z "{{ cinder_backup_backend }}" ] || oc wait pod --for condition=Ready -l component=cinder-backup register: cinder_running_result until: cinder_running_result is success retries: 60 delay: "{{ cinder_retry_delay }}" # Give time for volume and backup services to initialize drivers, otherwise they # always looks ok (up) because that's the default at the start. - name: Pause to allow backend drivers to start when: cinder_volume_backend | default('') != '' or cinder_backup_backend | default('') != '' ansible.builtin.pause: seconds: 90 - name: wait for Cinder scheduler to be up and ready ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} oc exec -t openstackclient -- openstack volume service list --service cinder-scheduler -c State -f value | grep 'up' register: cinder_scheduler_running_result until: cinder_scheduler_running_result is success retries: 5 delay: "{{ cinder_retry_delay }}" - name: wait for Cinder volume to be up and ready when: cinder_volume_backend != '' ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} oc exec -t openstackclient -- openstack volume service list --service cinder-volume -c State -f value | grep 'up' register: cinder_running_result until: cinder_running_result is success retries: 5 delay: "{{ cinder_retry_delay }}" - name: wait for Cinder backup to be up and ready when: cinder_backup_backend != '' ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} oc exec -t openstackclient -- openstack volume service list --service cinder-backup -c State -f value | grep 'up' register: cinder_running_result until: cinder_running_result is success retries: 5 delay: "{{ cinder_retry_delay }}" - name: Cinder online data migrations ansible.builtin.shell: | {{ shell_header }} {{ oc_header }} oc exec -t "{{ cinder_api_pod.stdout }}" -c cinder-api -- cinder-manage db online_data_migrations