main.yml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440
  1. - set_fact: default_interface=false
  2. - set_fact: disable_resource_management=false
  3. - set_fact: use_hyper_image=false
  4. - name: Get default gateway for IPv6
  5. shell: "ip -6 route get 2001:4860:4860::8888 | head -n 1 | awk '{print $3}' 2>/dev/null || echo ''"
  6. register: default_gateway_ret
  7. when: ip_type is defined and ip_type == 'ipv6'
  8. - name: Get default gateway for IPv6 (dual-stack)
  9. shell: "ip -6 route get 2001:4860:4860::8888 | head -n 1 | awk '{print $3}' 2>/dev/null || echo ''"
  10. register: default_gateway_v6_ret
  11. when: ip_type is defined and ip_type == 'dual-stack'
  12. - name: Get default gateway for IPv4 (dual-stack)
  13. shell: "ip route get 1 | head -n 1 | awk '{print $3}'"
  14. register: default_gateway_v4_ret
  15. when: ip_type is defined and ip_type == 'dual-stack'
  16. - name: Get default ip by node ip by command for IPv6
  17. shell: "ip -6 route get 2001:4860:4860::8888 | head -n 1 | awk '{print $7}' 2>/dev/null || echo ''"
  18. register: default_ip_ret
  19. when: ip_type is defined and ip_type == 'ipv6'
  20. - name: Get default gateway for IPv4
  21. shell: "ip route get 1 | head -n 1 | awk '{print $3}'"
  22. register: default_gateway_ret
  23. when: ip_type is not defined or ip_type != 'ipv6'
  24. - name: Get default ip by node ip by command for IPv4
  25. shell: "ip route get 1 | head -n 1 | awk '{print $7}'"
  26. register: default_ip_ret
  27. when: ip_type is not defined or ip_type != 'ipv6'
  28. - name: Parse default ip by node
  29. set_fact:
  30. default_ip: "{{ default_ip_ret.stdout if default_ip_ret is defined and default_ip_ret.stdout is defined else node_ip }}"
  31. - name: Default interface for IPv6
  32. set_fact:
  33. default_interface: true
  34. when:
  35. - ip_type is defined and ip_type == 'ipv6'
  36. - node_ip is defined
  37. - node_ip == default_ip
  38. - node_ip | regex_search(':')
  39. - name: Default interface for IPv4
  40. set_fact:
  41. default_interface: true
  42. when:
  43. - ip_type is not defined or ip_type != 'ipv6'
  44. - node_ip is defined
  45. - node_ip == default_ip
  46. - node_ip is match('^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$')
  47. - name: Set default Gateway
  48. set_fact:
  49. default_gateway: "{{ default_gateway_ret.stdout if default_interface and default_gateway_ret is defined and default_gateway_ret.stdout is defined else '' }}"
  50. default_ip: "{{ default_ip if default_interface else node_ip }}"
  51. - name: "Get default IPv6 address {{ default_ip }} prefix length"
  52. shell: |
  53. prefix_len="$(ip -6 route list | grep -w {{ default_ip }} | grep -E '/[0-9]+' | head -n 1 | awk '{print $1}' | cut -d '/' -f 2)"
  54. if [[ "$prefix_len" =~ ^[0-9]+$ ]]; then
  55. echo "$prefix_len"
  56. exit 0
  57. fi
  58. # Default to /64 for IPv6 if not found
  59. echo 64
  60. register: default_masklen_ret
  61. args:
  62. executable: /bin/bash
  63. when: ip_type is defined and ip_type == 'ipv6'
  64. - name: "Get default ip address {{ default_ip }} masklen"
  65. shell: |
  66. masklen="$(ip route list | grep -w {{ default_ip }} | grep -E '/[0-9]+' | head -n 1 | awk '{print $1}' | cut -d '/' -f 2)"
  67. if [[ "$masklen" =~ ^[0-9]+$ ]]; then
  68. echo "$masklen"
  69. exit 0
  70. fi
  71. c=$(echo {{ default_ip }} |awk -F. '{print $1}')
  72. # 8 for class A
  73. # 16 for class B
  74. # 24 for class C
  75. if [[ "$c" -le 127 ]]; then
  76. echo 8
  77. exit 0
  78. elif [[ "$c" -ge 128 ]] && [[ "$c" -le 191 ]]; then
  79. echo 16
  80. exit 0
  81. elif [[ "$c" -ge 192 ]] && [[ "$c" -le 223 ]]; then
  82. echo 24
  83. exit 0
  84. fi
  85. register: default_masklen_ret
  86. args:
  87. executable: /bin/bash
  88. when: ip_type is not defined or ip_type != 'ipv6'
  89. - name: Set default ip masklen
  90. set_fact:
  91. default_masklen: "{{ default_masklen_ret.stdout if default_masklen_ret is defined and default_masklen_ret.stdout is defined else '64' }}"
  92. - name: Set dual-stack gateways
  93. set_fact:
  94. default_gateway_v6: "{{ default_gateway_v6_ret.stdout if default_gateway_v6_ret is defined and default_gateway_v6_ret.stdout is defined else '' }}"
  95. default_gateway_v4: "{{ default_gateway_v4_ret.stdout if default_gateway_v4_ret is defined and default_gateway_v4_ret.stdout is defined else '' }}"
  96. when: ip_type is defined and ip_type == 'dual-stack'
  97. - name: include k8s cloud if needed
  98. include_tasks: "k8s_cloud.yml"
  99. when:
  100. - k8s_or_k3s == 'k8s'
  101. - block:
  102. - name: test if version file contains cloudpods-ee image
  103. shell: |
  104. cat "{{ offline_data_path }}/versions.json" |jq '.dockers |to_entries[]' |grep -wq cloudpods-ee
  105. register: has_cloudpack_image
  106. failed_when: false
  107. args:
  108. executable: /bin/bash
  109. - name: construct create cluster use hyper image
  110. set_fact:
  111. use_hyper_image: true
  112. edition: ee
  113. when:
  114. - has_cloudpack_image.rc == 0
  115. when:
  116. - online_status | default("") == "offline"
  117. - offline_data_path | length > 0
  118. - use_ee|default(false)|bool == true
  119. - name: construct create cluster args disable-resource-management
  120. set_fact:
  121. disable_resource_management: true
  122. when:
  123. - is_kylin_based is defined
  124. - is_kylin_based |default(false)|bool == true
  125. - name: Copy onecloud kubernetes manifests
  126. ansible.builtin.template:
  127. src: "onecloud-manifests.yaml.j2"
  128. dest: "/tmp/onecloud-manifests.yaml"
  129. - name: include cluster task if needed
  130. include_tasks: "k8s_create_cluster.yml"
  131. when:
  132. - k8s_or_k3s == 'k8s'
  133. - name: misc
  134. debug:
  135. msg: '{{ K3S_CMDLINE_PREFIX }} kubectl apply -f /tmp/onecloud-manifests.yaml'
  136. - name: Create onecloud cluster CRD
  137. shell: |
  138. KUBECONFIG={{ENV_KUBECONFIG}} {{ K3S_CMDLINE_PREFIX }} kubectl apply -f /tmp/onecloud-manifests.yaml
  139. register: result
  140. until: result.rc == 0
  141. retries: 6
  142. delay: 10
  143. when:
  144. - k8s_or_k3s == 'k3s'
  145. - name: Copy fetch-rcadmin.sh to /opt/yunion/bin/
  146. template:
  147. src: "fetch-rcadmin.sh.j2"
  148. dest: "/opt/yunion/bin/fetch-rcadmin.sh"
  149. mode: '0755'
  150. - name: Init waiter script
  151. include_role:
  152. name: utils/onecloud-waiter
  153. - name: "Execute `/opt/yunion/bin/wait-onecloud-services.sh` to wait essential services to be running. You can open another terminal and execute `kubectl get pods -n onecloud -w` to watch the process."
  154. shell: "bash /opt/yunion/bin/wait-onecloud-services.sh"
  155. - name: Use customized DNS entries
  156. shell: |
  157. {{ K3S_CMDLINE_PREFIX }} kubectl -n onecloud patch onecloudcluster default --type='json' -p '[{"op": "replace", "path": "/spec/regionDNS/proxies/0/to", "value": {{ user_dns | to_json }} }]'
  158. {{ K3S_CMDLINE_PREFIX }} kubectl -n onecloud delete configmap default-region-dns || :
  159. {{ K3S_CMDLINE_PREFIX }} kubectl -n onecloud rollout restart ds default-region-dns || :
  160. become: yes
  161. when: user_dns is defined and user_dns|length > 0
  162. - name: Source climc bash completion in master's ~/.bashrc
  163. lineinfile:
  164. dest: ~/.bashrc
  165. line: "source <(/opt/yunion/bin/climc --completion bash)"
  166. state: present
  167. create: yes
  168. regexp: '.*climc --completion bash.*'
  169. when:
  170. - shell is undefined or shell == 'bash'
  171. - name: "Write cluster rcadmin in master's ~/.onecloud_rcadmin for root"
  172. shell: |
  173. /opt/yunion/bin/fetch-rcadmin.sh > ~/.onecloud_rcadmin
  174. /opt/yunion/bin/fetch-rcadmin.sh cluster rcadmin > /tmp/.onecloud_rcadmin
  175. become: yes
  176. retries: 6
  177. delay: 15
  178. register: onecloud_rcadmin
  179. until: onecloud_rcadmin.rc == 0
  180. - name: Print message if ansible version is greater than 2.7.0
  181. shell: |
  182. if [ "$EUID" -eq 0 ]; then
  183. rm -f /tmp/.onecloud_rcadmin
  184. else
  185. conf=~/.onecloud_rcadmin
  186. sudo mv /tmp/.onecloud_rcadmin $conf
  187. sudo chown {{ansible_user_id}}:{{ansible_user_id}} $conf
  188. fi
  189. args:
  190. executable: /bin/bash
  191. - name: "Source ~/.onecloud_rcadmin in ~/.bashrc for root"
  192. lineinfile:
  193. dest: ~/.bashrc
  194. line: "source ~/.onecloud_rcadmin"
  195. state: present
  196. create: yes
  197. regexp: '^source ~/.onecloud_rcadmin'
  198. become: yes
  199. when:
  200. - shell is undefined or shell == 'bash'
  201. - name: "Source ~/.onecloud_rcadmin in ~/.bashrc for current user"
  202. lineinfile:
  203. dest: ~/.bashrc
  204. line: "source ~/.onecloud_rcadmin"
  205. state: present
  206. create: yes
  207. regexp: '^source ~/.onecloud_rcadmin'
  208. when:
  209. - shell is undefined or shell == 'bash'
  210. - ansible_user_id != 'root'
  211. - name: "Check onecloud user {{ onecloud_user }} exists"
  212. shell: |
  213. source ~/.onecloud_rcadmin
  214. /opt/yunion/bin/climc user-list | grep -w {{ onecloud_user }} | wc -l
  215. register: OC_USER_COUNT
  216. become: yes
  217. ignore_errors: yes
  218. retries: 3
  219. delay: 10
  220. - name: "Create onecloud web login user {{ onecloud_user }}"
  221. shell: |
  222. source ~/.onecloud_rcadmin
  223. /opt/yunion/bin/climc user-create --password {{ onecloud_user_password }} --enabled {{ onecloud_user }}
  224. become: yes
  225. retries: 10
  226. delay: 30
  227. register: create_user_ret
  228. args:
  229. executable: /bin/bash
  230. when:
  231. - OC_USER_COUNT.stdout|int == 0
  232. - use_ee is not defined or not use_ee
  233. - name: "Update onecloud user {{ onecloud_user }} password to {{ onecloud_user_password }}"
  234. shell: |
  235. source ~/.onecloud_rcadmin
  236. /opt/yunion/bin/climc user-update --password {{ onecloud_user_password }} --enabled --allow-web-console {{ onecloud_user }}
  237. retries: 10
  238. register: update_user_ret
  239. become: yes
  240. delay: 30
  241. args:
  242. executable: /bin/bash
  243. when:
  244. - use_ee is not defined or not use_ee
  245. - name: "Make onecloud user {{ onecloud_user }} as system admin"
  246. shell: |
  247. source ~/.onecloud_rcadmin
  248. /opt/yunion/bin/climc project-add-user system {{ onecloud_user }} admin
  249. become: yes
  250. args:
  251. executable: /bin/bash
  252. when:
  253. - use_ee is not defined or not use_ee
  254. - name: Check if admin network adm0 exists
  255. shell: |
  256. source ~/.onecloud_rcadmin
  257. /opt/yunion/bin/climc network-show adm0 > /dev/null 2>&1
  258. become: yes
  259. register: network_admin_exist
  260. ignore_errors: yes
  261. changed_when: false
  262. failed_when: false
  263. args:
  264. executable: /bin/bash
  265. - name: "Check if network contains {{ default_ip }}"
  266. shell: |
  267. source ~/.onecloud_rcadmin
  268. env |grep OS_AUTH
  269. /opt/yunion/bin/climc network-list --ip {{ default_ip }} | grep -v Total | wc -l
  270. become: yes
  271. register: network_count_ret
  272. ignore_errors: yes
  273. args:
  274. executable: /bin/bash
  275. - name: set admin network count
  276. set_fact:
  277. admin_network_count: "{{ network_count_ret.stdout }}"
  278. - name: Set adm0 command for IPv4
  279. set_fact:
  280. adm0_cmd: "/opt/yunion/bin/climc network-create --server-type baremetal bcast0 adm0 {{ default_ip }} {{ default_ip }} {{ default_masklen }} "
  281. when:
  282. - ip_type is not defined or ip_type != 'ipv6'
  283. - name: Update adm0 command for IPv4 with gateway
  284. set_fact:
  285. adm0_cmd: "{{ adm0_cmd }} --gateway {{ default_gateway }} "
  286. when:
  287. - ip_type is not defined or ip_type != 'ipv6'
  288. - default_gateway | length > 0
  289. - name: Set adm0 command for IPv6
  290. set_fact:
  291. adm0_cmd: "/opt/yunion/bin/climc network-create3 --server-type baremetal bcast0 adm0 --start-ip6 {{ default_ip }} --end-ip6 {{ default_ip }} --net-mask6 {{ default_masklen }} "
  292. when:
  293. - ip_type is defined and ip_type == 'ipv6'
  294. - name: Update adm0 command for IPv6 with gateway
  295. set_fact:
  296. adm0_cmd: "{{ adm0_cmd }} --gateway6 {{ default_gateway }} "
  297. when:
  298. - ip_type is defined and ip_type == 'ipv6'
  299. - default_gateway | length > 0
  300. - name: Set adm0 command for dual-stack (IPv4 primary)
  301. set_fact:
  302. adm0_cmd: "/opt/yunion/bin/climc network-create3 --server-type baremetal bcast0 adm0 --start-ip {{ default_ip }} --end-ip {{ default_ip }} --net-mask {{ default_masklen }} --start-ip6 {{ node_ip_v6 }} --end-ip6 {{ node_ip_v6 }} --net-mask6 64 "
  303. when:
  304. - ip_type is defined and ip_type == 'dual-stack'
  305. - node_ip is defined and node_ip == node_ip_v4
  306. - name: Update adm0 command for dual-stack (IPv4 primary) with gateway
  307. set_fact:
  308. adm0_cmd: "{{ adm0_cmd }} --gateway {{ default_gateway }} --gateway6 {{ default_gateway_v6 | default('') }} "
  309. when:
  310. - ip_type is defined and ip_type == 'dual-stack'
  311. - node_ip is defined and node_ip == node_ip_v4
  312. - default_gateway | length > 0
  313. - name: Set adm0 command for dual-stack (IPv6 primary)
  314. set_fact:
  315. adm0_cmd: "/opt/yunion/bin/climc network-create3 --server-type baremetal bcast0 adm0 --start-ip6 {{ default_ip }} --end-ip6 {{ default_ip }} --net-mask6 {{ default_masklen }} --start-ip {{ node_ip_v4 }} --end-ip {{ node_ip_v4 }} --net-mask 24 "
  316. when:
  317. - ip_type is defined and ip_type == 'dual-stack'
  318. - node_ip is defined and node_ip == node_ip_v6
  319. - name: Update adm0 command for dual-stack (IPv6 primary) with gateway
  320. set_fact:
  321. adm0_cmd: "{{ adm0_cmd }} --gateway6 {{ default_gateway }} --gateway {{ default_gateway_v4 | default('') }} "
  322. when:
  323. - ip_type is defined and ip_type == 'dual-stack'
  324. - node_ip is defined and node_ip == node_ip_v6
  325. - default_gateway | length > 0
  326. - debug: var=adm0_cmd
  327. # as of zentao/task-view-4914.html
  328. - block:
  329. - name: "Register adm0 network for {{ default_ip }}/{{ default_masklen }}, gateway {{ default_gateway }}"
  330. shell: |
  331. source ~/.onecloud_rcadmin
  332. {{ adm0_cmd }}
  333. when: network_admin_exist.rc != 0 and admin_network_count|int == 0
  334. become: yes
  335. args:
  336. executable: /bin/bash
  337. register: run_create_adm0
  338. until: run_create_adm0.rc == 0
  339. retries: 3
  340. delay: 15
  341. failed_when: false
  342. - name: Make network adm0 private
  343. shell: |
  344. source ~/.onecloud_rcadmin
  345. /opt/yunion/bin/climc network-private adm0
  346. become: yes
  347. args:
  348. executable: /bin/bash
  349. retries: 3
  350. delay: 15
  351. failed_when: false
  352. when:
  353. - product_version | default("") in ['FullStack', 'Edge', 'LightEdge', 'AI']
  354. - name: add default host-local network
  355. shell: |
  356. source ~/.onecloud_rcadmin
  357. if [ $(/opt/yunion/bin/climc network-list --scope system | grep -w vhl0 | wc -l) -eq 0 ]; then
  358. /opt/yunion/bin/climc network-create3 --server-type hostlocal __host_local__ vh0 --start-ip 10.255.192.2 --end-ip 10.255.255.254 --net-mask 18 --gateway 10.255.192.1 --desc 'Default hostlocal virtual network'
  359. fi
  360. become: yes
  361. args:
  362. executable: /bin/bash
  363. when:
  364. - product_version | default("") in ['FullStack', 'Edge', 'LightEdge', 'AI']
  365. - onecloud_version is version('v4.0', '>=')
  366. - name: rm sync-user option
  367. include_role:
  368. name: utils/sync-user/off
  369. - name: "post install scripts"
  370. shell: |
  371. if [ ! -d /opt/yunion/upgrade/post-install ]; then
  372. exit
  373. fi
  374. find /opt/yunion/upgrade/post-install -name '*.sh' -type f| while read line
  375. do
  376. echo "processing $line ... "
  377. sh -c "$line" 2>&1 | tee -a /tmp/post-install.log
  378. echo "[DONE ]processing $line OK"
  379. done
  380. become: yes
  381. args:
  382. executable: /bin/bash
  383. - name: Include utils/k8s/addons tasks
  384. include_role:
  385. name: utils/k8s/addons