- set_fact: default_interface=false - set_fact: disable_resource_management=false - set_fact: use_hyper_image=false - name: Get default gateway for IPv6 shell: "ip -6 route get 2001:4860:4860::8888 | head -n 1 | awk '{print $3}' 2>/dev/null || echo ''" register: default_gateway_ret when: ip_type is defined and ip_type == 'ipv6' - name: Get default gateway for IPv6 (dual-stack) shell: "ip -6 route get 2001:4860:4860::8888 | head -n 1 | awk '{print $3}' 2>/dev/null || echo ''" register: default_gateway_v6_ret when: ip_type is defined and ip_type == 'dual-stack' - name: Get default gateway for IPv4 (dual-stack) shell: "ip route get 1 | head -n 1 | awk '{print $3}'" register: default_gateway_v4_ret when: ip_type is defined and ip_type == 'dual-stack' - name: Get default ip by node ip by command for IPv6 shell: "ip -6 route get 2001:4860:4860::8888 | head -n 1 | awk '{print $7}' 2>/dev/null || echo ''" register: default_ip_ret when: ip_type is defined and ip_type == 'ipv6' - name: Get default gateway for IPv4 shell: "ip route get 1 | head -n 1 | awk '{print $3}'" register: default_gateway_ret when: ip_type is not defined or ip_type != 'ipv6' - name: Get default ip by node ip by command for IPv4 shell: "ip route get 1 | head -n 1 | awk '{print $7}'" register: default_ip_ret when: ip_type is not defined or ip_type != 'ipv6' - name: Parse default ip by node set_fact: default_ip: "{{ default_ip_ret.stdout if default_ip_ret is defined and default_ip_ret.stdout is defined else node_ip }}" - name: Default interface for IPv6 set_fact: default_interface: true when: - ip_type is defined and ip_type == 'ipv6' - node_ip is defined - node_ip == default_ip - node_ip | regex_search(':') - name: Default interface for IPv4 set_fact: default_interface: true when: - ip_type is not defined or ip_type != 'ipv6' - node_ip is defined - node_ip == default_ip - node_ip is match('^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$') - name: Set default Gateway set_fact: default_gateway: "{{ default_gateway_ret.stdout if default_interface and default_gateway_ret is defined and default_gateway_ret.stdout is defined else '' }}" default_ip: "{{ default_ip if default_interface else node_ip }}" - name: "Get default IPv6 address {{ default_ip }} prefix length" shell: | prefix_len="$(ip -6 route list | grep -w {{ default_ip }} | grep -E '/[0-9]+' | head -n 1 | awk '{print $1}' | cut -d '/' -f 2)" if [[ "$prefix_len" =~ ^[0-9]+$ ]]; then echo "$prefix_len" exit 0 fi # Default to /64 for IPv6 if not found echo 64 register: default_masklen_ret args: executable: /bin/bash when: ip_type is defined and ip_type == 'ipv6' - name: "Get default ip address {{ default_ip }} masklen" shell: | masklen="$(ip route list | grep -w {{ default_ip }} | grep -E '/[0-9]+' | head -n 1 | awk '{print $1}' | cut -d '/' -f 2)" if [[ "$masklen" =~ ^[0-9]+$ ]]; then echo "$masklen" exit 0 fi c=$(echo {{ default_ip }} |awk -F. '{print $1}') # 8 for class A # 16 for class B # 24 for class C if [[ "$c" -le 127 ]]; then echo 8 exit 0 elif [[ "$c" -ge 128 ]] && [[ "$c" -le 191 ]]; then echo 16 exit 0 elif [[ "$c" -ge 192 ]] && [[ "$c" -le 223 ]]; then echo 24 exit 0 fi register: default_masklen_ret args: executable: /bin/bash when: ip_type is not defined or ip_type != 'ipv6' - name: Set default ip masklen set_fact: default_masklen: "{{ default_masklen_ret.stdout if default_masklen_ret is defined and default_masklen_ret.stdout is defined else '64' }}" - name: Set dual-stack gateways set_fact: default_gateway_v6: "{{ default_gateway_v6_ret.stdout if default_gateway_v6_ret is defined and default_gateway_v6_ret.stdout is defined else '' }}" default_gateway_v4: "{{ default_gateway_v4_ret.stdout if default_gateway_v4_ret is defined and default_gateway_v4_ret.stdout is defined else '' }}" when: ip_type is defined and ip_type == 'dual-stack' - name: include k8s cloud if needed include_tasks: "k8s_cloud.yml" when: - k8s_or_k3s == 'k8s' - block: - name: test if version file contains cloudpods-ee image shell: | cat "{{ offline_data_path }}/versions.json" |jq '.dockers |to_entries[]' |grep -wq cloudpods-ee register: has_cloudpack_image failed_when: false args: executable: /bin/bash - name: construct create cluster use hyper image set_fact: use_hyper_image: true edition: ee when: - has_cloudpack_image.rc == 0 when: - online_status | default("") == "offline" - offline_data_path | length > 0 - use_ee|default(false)|bool == true - name: construct create cluster args disable-resource-management set_fact: disable_resource_management: true when: - is_kylin_based is defined - is_kylin_based |default(false)|bool == true - name: Copy onecloud kubernetes manifests ansible.builtin.template: src: "onecloud-manifests.yaml.j2" dest: "/tmp/onecloud-manifests.yaml" - name: include cluster task if needed include_tasks: "k8s_create_cluster.yml" when: - k8s_or_k3s == 'k8s' - name: misc debug: msg: '{{ K3S_CMDLINE_PREFIX }} kubectl apply -f /tmp/onecloud-manifests.yaml' - name: Create onecloud cluster CRD shell: | KUBECONFIG={{ENV_KUBECONFIG}} {{ K3S_CMDLINE_PREFIX }} kubectl apply -f /tmp/onecloud-manifests.yaml register: result until: result.rc == 0 retries: 6 delay: 10 when: - k8s_or_k3s == 'k3s' - name: Copy fetch-rcadmin.sh to /opt/yunion/bin/ template: src: "fetch-rcadmin.sh.j2" dest: "/opt/yunion/bin/fetch-rcadmin.sh" mode: '0755' - name: Init waiter script include_role: name: utils/onecloud-waiter - 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." shell: "bash /opt/yunion/bin/wait-onecloud-services.sh" - name: Use customized DNS entries shell: | {{ 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 }} }]' {{ K3S_CMDLINE_PREFIX }} kubectl -n onecloud delete configmap default-region-dns || : {{ K3S_CMDLINE_PREFIX }} kubectl -n onecloud rollout restart ds default-region-dns || : become: yes when: user_dns is defined and user_dns|length > 0 - name: Source climc bash completion in master's ~/.bashrc lineinfile: dest: ~/.bashrc line: "source <(/opt/yunion/bin/climc --completion bash)" state: present create: yes regexp: '.*climc --completion bash.*' when: - shell is undefined or shell == 'bash' - name: "Write cluster rcadmin in master's ~/.onecloud_rcadmin for root" shell: | /opt/yunion/bin/fetch-rcadmin.sh > ~/.onecloud_rcadmin /opt/yunion/bin/fetch-rcadmin.sh cluster rcadmin > /tmp/.onecloud_rcadmin become: yes retries: 6 delay: 15 register: onecloud_rcadmin until: onecloud_rcadmin.rc == 0 - name: Print message if ansible version is greater than 2.7.0 shell: | if [ "$EUID" -eq 0 ]; then rm -f /tmp/.onecloud_rcadmin else conf=~/.onecloud_rcadmin sudo mv /tmp/.onecloud_rcadmin $conf sudo chown {{ansible_user_id}}:{{ansible_user_id}} $conf fi args: executable: /bin/bash - name: "Source ~/.onecloud_rcadmin in ~/.bashrc for root" lineinfile: dest: ~/.bashrc line: "source ~/.onecloud_rcadmin" state: present create: yes regexp: '^source ~/.onecloud_rcadmin' become: yes when: - shell is undefined or shell == 'bash' - name: "Source ~/.onecloud_rcadmin in ~/.bashrc for current user" lineinfile: dest: ~/.bashrc line: "source ~/.onecloud_rcadmin" state: present create: yes regexp: '^source ~/.onecloud_rcadmin' when: - shell is undefined or shell == 'bash' - ansible_user_id != 'root' - name: "Check onecloud user {{ onecloud_user }} exists" shell: | source ~/.onecloud_rcadmin /opt/yunion/bin/climc user-list | grep -w {{ onecloud_user }} | wc -l register: OC_USER_COUNT become: yes ignore_errors: yes retries: 3 delay: 10 - name: "Create onecloud web login user {{ onecloud_user }}" shell: | source ~/.onecloud_rcadmin /opt/yunion/bin/climc user-create --password {{ onecloud_user_password }} --enabled {{ onecloud_user }} become: yes retries: 10 delay: 30 register: create_user_ret args: executable: /bin/bash when: - OC_USER_COUNT.stdout|int == 0 - use_ee is not defined or not use_ee - name: "Update onecloud user {{ onecloud_user }} password to {{ onecloud_user_password }}" shell: | source ~/.onecloud_rcadmin /opt/yunion/bin/climc user-update --password {{ onecloud_user_password }} --enabled --allow-web-console {{ onecloud_user }} retries: 10 register: update_user_ret become: yes delay: 30 args: executable: /bin/bash when: - use_ee is not defined or not use_ee - name: "Make onecloud user {{ onecloud_user }} as system admin" shell: | source ~/.onecloud_rcadmin /opt/yunion/bin/climc project-add-user system {{ onecloud_user }} admin become: yes args: executable: /bin/bash when: - use_ee is not defined or not use_ee - name: Check if admin network adm0 exists shell: | source ~/.onecloud_rcadmin /opt/yunion/bin/climc network-show adm0 > /dev/null 2>&1 become: yes register: network_admin_exist ignore_errors: yes changed_when: false failed_when: false args: executable: /bin/bash - name: "Check if network contains {{ default_ip }}" shell: | source ~/.onecloud_rcadmin env |grep OS_AUTH /opt/yunion/bin/climc network-list --ip {{ default_ip }} | grep -v Total | wc -l become: yes register: network_count_ret ignore_errors: yes args: executable: /bin/bash - name: set admin network count set_fact: admin_network_count: "{{ network_count_ret.stdout }}" - name: Set adm0 command for IPv4 set_fact: adm0_cmd: "/opt/yunion/bin/climc network-create --server-type baremetal bcast0 adm0 {{ default_ip }} {{ default_ip }} {{ default_masklen }} " when: - ip_type is not defined or ip_type != 'ipv6' - name: Update adm0 command for IPv4 with gateway set_fact: adm0_cmd: "{{ adm0_cmd }} --gateway {{ default_gateway }} " when: - ip_type is not defined or ip_type != 'ipv6' - default_gateway | length > 0 - name: Set adm0 command for IPv6 set_fact: 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 }} " when: - ip_type is defined and ip_type == 'ipv6' - name: Update adm0 command for IPv6 with gateway set_fact: adm0_cmd: "{{ adm0_cmd }} --gateway6 {{ default_gateway }} " when: - ip_type is defined and ip_type == 'ipv6' - default_gateway | length > 0 - name: Set adm0 command for dual-stack (IPv4 primary) set_fact: 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 " when: - ip_type is defined and ip_type == 'dual-stack' - node_ip is defined and node_ip == node_ip_v4 - name: Update adm0 command for dual-stack (IPv4 primary) with gateway set_fact: adm0_cmd: "{{ adm0_cmd }} --gateway {{ default_gateway }} --gateway6 {{ default_gateway_v6 | default('') }} " when: - ip_type is defined and ip_type == 'dual-stack' - node_ip is defined and node_ip == node_ip_v4 - default_gateway | length > 0 - name: Set adm0 command for dual-stack (IPv6 primary) set_fact: 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 " when: - ip_type is defined and ip_type == 'dual-stack' - node_ip is defined and node_ip == node_ip_v6 - name: Update adm0 command for dual-stack (IPv6 primary) with gateway set_fact: adm0_cmd: "{{ adm0_cmd }} --gateway6 {{ default_gateway }} --gateway {{ default_gateway_v4 | default('') }} " when: - ip_type is defined and ip_type == 'dual-stack' - node_ip is defined and node_ip == node_ip_v6 - default_gateway | length > 0 - debug: var=adm0_cmd # as of zentao/task-view-4914.html - block: - name: "Register adm0 network for {{ default_ip }}/{{ default_masklen }}, gateway {{ default_gateway }}" shell: | source ~/.onecloud_rcadmin {{ adm0_cmd }} when: network_admin_exist.rc != 0 and admin_network_count|int == 0 become: yes args: executable: /bin/bash register: run_create_adm0 until: run_create_adm0.rc == 0 retries: 3 delay: 15 failed_when: false - name: Make network adm0 private shell: | source ~/.onecloud_rcadmin /opt/yunion/bin/climc network-private adm0 become: yes args: executable: /bin/bash retries: 3 delay: 15 failed_when: false when: - product_version | default("") in ['FullStack', 'Edge', 'LightEdge', 'AI'] - name: add default host-local network shell: | source ~/.onecloud_rcadmin if [ $(/opt/yunion/bin/climc network-list --scope system | grep -w vhl0 | wc -l) -eq 0 ]; then /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' fi become: yes args: executable: /bin/bash when: - product_version | default("") in ['FullStack', 'Edge', 'LightEdge', 'AI'] - onecloud_version is version('v4.0', '>=') - name: rm sync-user option include_role: name: utils/sync-user/off - name: "post install scripts" shell: | if [ ! -d /opt/yunion/upgrade/post-install ]; then exit fi find /opt/yunion/upgrade/post-install -name '*.sh' -type f| while read line do echo "processing $line ... " sh -c "$line" 2>&1 | tee -a /tmp/post-install.log echo "[DONE ]processing $line OK" done become: yes args: executable: /bin/bash - name: Include utils/k8s/addons tasks include_role: name: utils/k8s/addons