main.yml 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. - name: Set Facts For Worker
  2. set_fact:
  3. k8s_controlplane_host: "{{ hostvars[inventory_hostname]['groups']['primary_master_node'][0] }}"
  4. - name: Get Current Version
  5. environment:
  6. KUBECONFIG: "{{ ENV_KUBECONFIG }}"
  7. shell: |
  8. {{ K3S_CMDLINE_PREFIX }} kubectl -n onecloud get onecloudclusters default -o=jsonpath='{.spec.version}'
  9. args:
  10. executable: /bin/bash
  11. register: current_oc_version
  12. retries: 3
  13. delay: 15
  14. until: current_oc_version.rc == 0
  15. - name: Prepare image list
  16. environment:
  17. KUBECONFIG: "{{ ENV_KUBECONFIG }}"
  18. shell: |
  19. OCVER=$({{ K3S_CMDLINE_PREFIX }} kubectl -n onecloud get onecloudclusters default -o=jsonpath='{.spec.version}')
  20. nslist="$({{ K3S_CMDLINE_PREFIX }} kubectl get namespace | tail -n +2 | awk '{print $1}' | xargs)"
  21. namespace=onecloud
  22. typ=deployment
  23. image_repository={{ image_repository }}
  24. upgrade_onecloud_version={{upgrade_onecloud_version}}
  25. 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
  26. dep=$(echo $line | awk -F@ '{print $1}')
  27. names=($(echo $line | sed -e 's#.*@##g' -e 's#%.*$##g'))
  28. images=($(echo $line | sed -e 's#.*%##'))
  29. for idx in ${!names[@]}; do
  30. img="${images[$idx]}"
  31. if ! echo "$img" | grep -Pq ":$OCVER\b|:$upgrade_onecloud_version\b" ; then
  32. continue
  33. fi
  34. img="$(echo "$img" | sed -E -e "s#.*/([^/:]*):[^/:]*#$image_repository/\1:$upgrade_onecloud_version#" -e 's#//#/#g')"
  35. echo -e "kubectl set image -n $namespace $typ/$dep \c"
  36. echo -e "${names[$idx]}=$img \c"
  37. done
  38. echo
  39. 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' || :
  40. 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
  41. if ! echo "$line" | grep -q '@%$'; then
  42. dep=$(echo $line | awk -F@ '{print $1}')
  43. img=$(echo "$line" | sed -e 's#.*%##')
  44. echo -e "kubectl set image -n $namespace $typ/$dep \c"
  45. img="$(echo "$img" | sed -E -e "s#.*/([^/:]*):[^/:]*#$image_repository/\1:$upgrade_onecloud_version#" -e 's#//#/#g')"
  46. echo -e "init=$img \c"
  47. fi
  48. echo
  49. 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' || :
  50. args:
  51. executable: /bin/bash
  52. register: oc_deployment_images
  53. - name: Parse image names from lines
  54. set_fact:
  55. oc_image_names: "{{ oc_image_names|default([]) + [image_item.split('=')[-1]] }}"
  56. loop: "{{ oc_deployment_images.stdout_lines }}"
  57. loop_control:
  58. index_var: item_index
  59. label: "[{{ (item_index + 1) }} of {{ oc_deployment_images.stdout_lines | length }}]"
  60. loop_var: image_item
  61. when:
  62. - oc_deployment_images.stdout_lines | length > 0
  63. - name: Parse image names from lines
  64. set_fact:
  65. oc_image_names: "{{ oc_image_names | list | unique }}"
  66. when:
  67. - oc_image_names | default([]) | length > 0
  68. - name: Prepare images on controller(s)
  69. shell: |
  70. docker pull {{ image_item }} || :
  71. loop: "{{ oc_image_names }}"
  72. loop_control:
  73. index_var: item_index
  74. label: "[{{ (item_index + 1) }} of {{ oc_image_names|length }}]"
  75. loop_var: image_item
  76. when:
  77. - oc_image_names | default([]) | length > 0
  78. - name: Wait until all pods running
  79. include_tasks: "check-and-wait.yml"
  80. - debug: var=remaining_imgs_count
  81. - name: Ensurance upgrade 1
  82. include_tasks: "check-and-wait.yml"
  83. when:
  84. - remaining_imgs_count | default(0) | int > 0
  85. - name: Ensurance upgrade 2
  86. include_tasks: "check-and-wait.yml"
  87. when:
  88. - remaining_imgs_count | default(0) | int > 0
  89. - name: Ensurance upgrade 3
  90. include_tasks: "check-and-wait.yml"
  91. when:
  92. - remaining_imgs_count | default(0) | int > 0