main.yml 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. ---
  2. - name: Include utils/controlplane tasks
  3. include_role:
  4. name: utils/controlplane
  5. - name: Get Current Version
  6. environment:
  7. KUBECONFIG: "{{ ENV_KUBECONFIG }}"
  8. shell: |
  9. {{ K3S_CMDLINE_PREFIX }} kubectl -n onecloud get onecloudclusters default -o=jsonpath='{.spec.version}'
  10. args:
  11. executable: /bin/bash
  12. register: current_oc_version
  13. - name: Copy clean_k8s_obj.sed script to /tmp
  14. copy:
  15. src: "clean_k8s_obj.sed"
  16. dest: "/tmp/clean_k8s_obj.sed"
  17. - name: Backup current onecloud cluster and operator resource to /opt/yunion/ocboot/_upgrade/.*
  18. environment:
  19. KUBECONFIG: "{{ ENV_KUBECONFIG }}"
  20. shell: |
  21. bk_dir=/opt/yunion/ocboot/_upgrade/`date +%Y.%m.%d-%H:%M:%S`
  22. mkdir -p $bk_dir
  23. {{ K3S_CMDLINE_PREFIX }} kubectl get deployment -n onecloud onecloud-operator -o yaml | sed -f /tmp/clean_k8s_obj.sed > $bk_dir/operator.yml
  24. {{ K3S_CMDLINE_PREFIX }} kubectl get oc -n onecloud default -o yaml | sed -f /tmp/clean_k8s_obj.sed > $bk_dir/oc.yml
  25. become: yes
  26. - name: Copy turn-on-operator-clear-component patch to /tmp/turn-on-operator-clear-component.patch.yml
  27. template:
  28. src: "turn-on-operator-clear-component.patch.yml.j2"
  29. dest: "/tmp/turn-on-operator-clear-component.patch.yml"
  30. vars:
  31. k8s_or_k3s: "{{ k8s_or_k3s | default('') }}"
  32. - name: Turn on operator -clear-component option
  33. environment:
  34. KUBECONFIG: "{{ ENV_KUBECONFIG }}"
  35. shell: |
  36. {{ K3S_CMDLINE_PREFIX }} kubectl patch deployment -n onecloud onecloud-operator --patch "$(cat /tmp/turn-on-operator-clear-component.patch.yml)" && rm -f /tmp/turn-on-operator-clear-component.patch.yml
  37. become: yes
  38. args:
  39. executable: /bin/bash
  40. - block:
  41. - name: test if version file contains cloudpods-ee image
  42. shell: |
  43. cat "{{ offline_data_path }}/versions.json" |jq '.dockers |to_entries[]' |grep -wq cloudpods-ee
  44. register: has_cloudpack_image
  45. failed_when: false
  46. args:
  47. executable: /bin/bash
  48. - name: patch hyper image for ee mode
  49. environment:
  50. KUBECONFIG: /etc/kubernetes/admin.conf
  51. shell: |
  52. kubectl -n onecloud patch onecloudcluster default --type='json' -p '[{"op": "replace", "path": "/spec/useHyperImage", "value": true}]'
  53. kubectl rollout restart deployment -n onecloud onecloud-operator
  54. sleep 30
  55. kubectl -n onecloud -o yaml get oc |grep 'useHyperImage: true'
  56. args:
  57. executable: /bin/bash
  58. when:
  59. - has_cloudpack_image.rc == 0
  60. retries: 10
  61. register: hyper_image_patch_result
  62. delay: 30
  63. ignore_errors: true
  64. become: yes
  65. until: hyper_image_patch_result.rc == 0
  66. when:
  67. - offline_data_path |default("") | length > 0
  68. - name: controllable upgrade
  69. include_tasks: controllerble.yml
  70. when:
  71. - controllable_upgrade | default(false) | bool == true
  72. - name: init waiter script
  73. include_role:
  74. name: utils/onecloud-waiter
  75. # use async task to upgrade, ref: https://docs.ansible.com/ansible/latest/user_guide/playbooks_async.html
  76. - name: primary master node | Upgrade version "{{ current_onecloud_version }}" to "{{ upgrade_onecloud_version }}"
  77. environment:
  78. KUBECONFIG: "{{ ENV_KUBECONFIG }}"
  79. PATH: /opt/yunion/bin:{{ ansible_env.PATH }}
  80. args:
  81. executable: /bin/bash
  82. shell: |
  83. edition=$(KUBECONFIG="{{ ENV_KUBECONFIG }}" {{ K3S_CMDLINE_PREFIX }} kubectl -n onecloud get oc -o jsonpath='{.items[0].metadata.annotations.onecloud\.yunion\.io/edition}' || :)
  84. if [[ "$edition" == "ee" ]]; then
  85. /opt/yunion/bin/climc-ee update-record-create --version {{ upgrade_onecloud_version }} \
  86. --registry {{ image_repository | default('registry.cn-beijing.aliyuncs.com/yunion')}} || :
  87. fi
  88. KUBECONFIG="{{ ENV_KUBECONFIG }}" {{ K3S_CMDLINE_PREFIX }} kubectl -n onecloud patch deployment onecloud-operator --type=json \
  89. -p '[
  90. {"op": "replace", "path": "/spec/template/spec/containers/0/image", "value": "{{ image_repository | default('registry.cn-beijing.aliyuncs.com/yunion')}}/onecloud-operator:{{ upgrade_onecloud_version }}"},
  91. {"op": "replace", "path": "/spec/template/spec/containers/0/command", "value": ["/bin/onecloud-controller-manager", "-disable-init-crd", "-clear-component"]} ## disable-init-cr
  92. ]'
  93. bash /opt/yunion/bin/wait-onecloud-services.sh "onecloud-operator"
  94. KUBECONFIG="{{ ENV_KUBECONFIG }}" {{ K3S_CMDLINE_PREFIX }} kubectl patch onecloudclusters -n onecloud default --type merge --patch '
  95. {
  96. "spec": {
  97. "version": "{{ upgrade_onecloud_version }}",
  98. "imageRepository": "{{ image_repository | default('registry.cn-beijing.aliyuncs.com/yunion')}}"
  99. }
  100. }'
  101. # delete annotation for autoupdate.onecloud.yunion.io/current-version
  102. KUBECONFIG="{{ ENV_KUBECONFIG }}" {{ K3S_CMDLINE_PREFIX }} kubectl patch onecloudclusters -n onecloud default --type merge --patch '
  103. {
  104. "metadata": {
  105. "annotations": {
  106. "autoupdate.onecloud.yunion.io/current-version": null
  107. }
  108. },
  109. "spec": {
  110. "autoupdate": {
  111. "tag": ""
  112. },
  113. "hostagent": {
  114. "tag": ""
  115. }
  116. }
  117. }
  118. '
  119. KUBECONFIG="{{ ENV_KUBECONFIG }}" {{ K3S_CMDLINE_PREFIX }} kubectl rollout restart deployment -n onecloud onecloud-operator
  120. bash /opt/yunion/bin/wait-onecloud-services.sh
  121. # 30 minutes timeout
  122. become: yes
  123. async: 1800
  124. poll: 0
  125. register: upgrade_status
  126. - name: >
  127. primary master node | Check upgrade async task.
  128. To watch upgrade process,
  129. SSH login host "{{ ansible_hostname }}" execute:
  130. kubectl get pods -n onecloud -w
  131. become: yes
  132. async_status:
  133. jid: "{{ upgrade_status.ansible_job_id }}"
  134. register: ocadm_update_result
  135. until: ocadm_update_result.finished
  136. retries: 30
  137. delay: 60
  138. - name: Copy turn-off-operator-clear-component patch to /tmp/turn-off-operator-clear-component.patch.yml
  139. template:
  140. src: "turn-off-operator-clear-component.patch.yml.j2"
  141. dest: "/tmp/turn-off-operator-clear-component.patch.yml"
  142. vars:
  143. k8s_or_k3s: "{{ k8s_or_k3s | default('') }}"
  144. - name: Turn off operator -clear-component option
  145. environment:
  146. KUBECONFIG: "{{ ENV_KUBECONFIG }}"
  147. shell: |
  148. {{ K3S_CMDLINE_PREFIX }} kubectl patch deployment -n onecloud onecloud-operator --patch "$(cat /tmp/turn-off-operator-clear-component.patch.yml)" && rm -f /tmp/turn-off-operator-clear-component.patch.yml
  149. become: yes
  150. args:
  151. executable: /bin/bash
  152. - name: copy for autoupdate hack
  153. copy:
  154. src: patch-for-autoupdate.sh
  155. dest: /tmp/patch-for-autoupdate.sh
  156. mode: 0755
  157. - name: apply hack
  158. shell: bash /tmp/patch-for-autoupdate.sh
  159. become: yes
  160. args:
  161. executable: /bin/bash