main.yml 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. - name: Set Facts For Worker
  2. set_fact:
  3. k8s_controlplane_host: "{{ hostvars[inventory_hostname]['groups']['primary_master_node'][0] }}"
  4. worker_node_hostname: "{{ inventory_hostname }}"
  5. - name: Get Upgrade Command For Worker
  6. environment:
  7. KUBECONFIG: "{{ ENV_KUBECONFIG }}"
  8. shell: |
  9. OCVER="$(kubectl -n onecloud get onecloudclusters default -o=jsonpath='{.spec.version}')"
  10. NEW_VER="{{upgrade_onecloud_version}}"
  11. image_repository={{ image_repository }}
  12. upgrade_onecloud_version={{upgrade_onecloud_version}}
  13. worker_node_hostname={{worker_node_hostname}}
  14. if [[ -z "$OCVER" ]] ; then
  15. echo "get current oc version failed. "
  16. exit 1
  17. fi
  18. if [[ -z "$NEW_VER" ]] ; then
  19. echo "get new oc version failed. "
  20. exit 1
  21. fi
  22. kubectl get pods --field-selector=spec.nodeName="$worker_node_hostname" --all-namespaces --no-headers -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name | while read line
  23. do
  24. namespace="$(echo "$line" | awk '{print $1}')"
  25. pod="$(echo "$line" | awk '{print $2}')"
  26. kubectl get pod -n "$namespace" "$pod" -o=jsonpath='{range .spec.containers[*]}{.name}={.image}{"\n"}{end}' | while read subline; do
  27. cmd="kubectl set image -n $namespace pod/$pod $subline"
  28. if ! echo "$subline" | grep -q ":$OCVER$" && ! echo "$subline" | grep -q ":$NEW_VER$"; then
  29. continue
  30. fi
  31. new_cmd="$(echo $cmd | sed -e "s#:$OCVER\$#:$NEW_VER#")"
  32. new_cmd="$(echo $new_cmd | sed -E -e "s#=.*/([^/:]*):[^/:]*#=$image_repository/\1:$upgrade_onecloud_version#" -e 's#//#/#g')"
  33. echo "$new_cmd"
  34. done
  35. done | grep -v '/onecloud-operator:' | sed -e '/^$/d' || :
  36. args:
  37. executable: /bin/bash
  38. register: host_deployment_images
  39. delegate_to: "{{ k8s_controlplane_host }}"
  40. - name: Parse image names from lines
  41. set_fact:
  42. host_image_names: "{{ host_image_names|default([]) + [image_item.split('=')[-1]] }}"
  43. loop: "{{ host_deployment_images.stdout_lines }}"
  44. loop_control:
  45. index_var: item_index
  46. label: "[{{ (item_index + 1) }} of {{ host_deployment_images.stdout_lines | length }}]"
  47. loop_var: image_item
  48. when:
  49. - host_deployment_images.stdout_lines | length > 0
  50. - name: Pull Docker images for worker node(s)
  51. shell: |
  52. docker pull {{ image_item }}
  53. loop: "{{ host_image_names | list | unique }}"
  54. loop_control:
  55. index_var: item_index
  56. label: "[{{ (item_index + 1) }} of {{ host_image_names | length }}]"
  57. loop_var: image_item
  58. when:
  59. - host_image_names | default([]) | length > 0
  60. - name: Apply new images for Host pods
  61. environment:
  62. KUBECONFIG: "{{ ENV_KUBECONFIG }}"
  63. shell: |
  64. {{image_item}}
  65. with_items:
  66. - "{{ host_deployment_images.stdout_lines | list }}"
  67. args:
  68. executable: /bin/bash
  69. register: host_apply_deployment_images
  70. delegate_to: "{{ k8s_controlplane_host }}"
  71. when:
  72. - host_deployment_images.stdout_lines | length > 0
  73. loop_control:
  74. index_var: item_index
  75. label: "[{{ (item_index + 1) }} of {{ host_deployment_images.stdout_lines | length }}]"
  76. loop_var: image_item