- name: Set Facts For Worker set_fact: k8s_controlplane_host: "{{ hostvars[inventory_hostname]['groups']['primary_master_node'][0] }}" - name: Get Current Version environment: KUBECONFIG: "{{ ENV_KUBECONFIG }}" shell: | {{ K3S_CMDLINE_PREFIX }} kubectl -n onecloud get onecloudclusters default -o=jsonpath='{.spec.version}' args: executable: /bin/bash register: current_oc_version retries: 3 delay: 15 until: current_oc_version.rc == 0 - name: Prepare image list environment: KUBECONFIG: "{{ ENV_KUBECONFIG }}" shell: | OCVER=$({{ K3S_CMDLINE_PREFIX }} kubectl -n onecloud get onecloudclusters default -o=jsonpath='{.spec.version}') nslist="$({{ K3S_CMDLINE_PREFIX }} kubectl get namespace | tail -n +2 | awk '{print $1}' | xargs)" namespace=onecloud typ=deployment image_repository={{ image_repository }} upgrade_onecloud_version={{upgrade_onecloud_version}} kubectl get $typ -n $namespace -o jsonpath='{range .items[*]}{@.metadata.name}{"@"}{@.spec.template.spec.containers[*].name}{"%"}{@.spec.template.spec.containers[*].image}{"\n"}{end}'} | while read line; do dep=$(echo $line | awk -F@ '{print $1}') names=($(echo $line | sed -e 's#.*@##g' -e 's#%.*$##g')) images=($(echo $line | sed -e 's#.*%##')) for idx in ${!names[@]}; do img="${images[$idx]}" if ! echo "$img" | grep -Pq ":$OCVER\b|:$upgrade_onecloud_version\b" ; then continue fi img="$(echo "$img" | sed -E -e "s#.*/([^/:]*):[^/:]*#$image_repository/\1:$upgrade_onecloud_version#" -e 's#//#/#g')" echo -e "kubectl set image -n $namespace $typ/$dep \c" echo -e "${names[$idx]}=$img \c" done echo done | sort -u | sed -e 's#^ *##' -e 's# *$##' -e 's#\s*kubectl set image#\nkubectl set image#g' | grep -v '/onecloud-operator:' | sed -e '/^$/d' || : kubectl get $typ -n $namespace -o jsonpath='{range .items[*]}{@.metadata.name}{"@"}{@.spec.template.spec.initContainers[*].name}{"%"}{@.spec.template.spec.initContainers[*].image}{"\n"}{end}'} | while read line; do if ! echo "$line" | grep -q '@%$'; then dep=$(echo $line | awk -F@ '{print $1}') img=$(echo "$line" | sed -e 's#.*%##') echo -e "kubectl set image -n $namespace $typ/$dep \c" img="$(echo "$img" | sed -E -e "s#.*/([^/:]*):[^/:]*#$image_repository/\1:$upgrade_onecloud_version#" -e 's#//#/#g')" echo -e "init=$img \c" fi echo done | sed -e 's# kubectl#\nkubectl#g' |sort -u | sed -e 's#^ *##' -e 's# *$##' -e 's#\s*kubectl set image#\nkubectl set image#g' | grep -v '/onecloud-operator:' | sed -e '/^$/d' || : args: executable: /bin/bash register: oc_deployment_images - name: Parse image names from lines set_fact: oc_image_names: "{{ oc_image_names|default([]) + [image_item.split('=')[-1]] }}" loop: "{{ oc_deployment_images.stdout_lines }}" loop_control: index_var: item_index label: "[{{ (item_index + 1) }} of {{ oc_deployment_images.stdout_lines | length }}]" loop_var: image_item when: - oc_deployment_images.stdout_lines | length > 0 - name: Parse image names from lines set_fact: oc_image_names: "{{ oc_image_names | list | unique }}" when: - oc_image_names | default([]) | length > 0 - name: Prepare images on controller(s) shell: | docker pull {{ image_item }} || : loop: "{{ oc_image_names }}" loop_control: index_var: item_index label: "[{{ (item_index + 1) }} of {{ oc_image_names|length }}]" loop_var: image_item when: - oc_image_names | default([]) | length > 0 - name: Wait until all pods running include_tasks: "check-and-wait.yml" - debug: var=remaining_imgs_count - name: Ensurance upgrade 1 include_tasks: "check-and-wait.yml" when: - remaining_imgs_count | default(0) | int > 0 - name: Ensurance upgrade 2 include_tasks: "check-and-wait.yml" when: - remaining_imgs_count | default(0) | int > 0 - name: Ensurance upgrade 3 include_tasks: "check-and-wait.yml" when: - remaining_imgs_count | default(0) | int > 0