blob: 4d2dfa6ccaf3248d0e6da37b452b85a1bcf907ad [file] [log] [blame]
Vasyl Saienko4a2832d2024-05-16 09:00:03 +03001#!/bin/bash
2set -x
3set -e
4# allow access to the local variables from prepare-metadata.py
5set -a
6
7# ensure we don't re-source this in the same environment
8[[ -z "$_INSTALL_SCRIPT" ]] || return 0
9declare -r -g _INSTALL_SCRIPT=1
10
11#
12# Variables in this block are passed from heat template
13#
14CONTROL_NETWORK_CIDR=${CONTROL_NETWORK_CIDR:-$control_network_cidr}
15PUBLIC_INTERFACE=${PUBLIC_INTERFACE:-$private_floating_interface}
16PUBLIC_INTERFACE_IP=${PUBLIC_INTERFACE_IP:-$private_floating_interface_ip}
17PUBLIC_INTERFACE_CIDR=${PUBLIC_INTERFACE_CIDR:-$private_floating_network_cidr}
Mykyta Karpinad86fe72025-01-20 08:25:20 +010018EXTERNAL_SEVICES_INTERFACE_IP=${EXTERNAL_SEVICES_INTERFACE_IP:-$external_services_interface_ip}
19EXTERNAL_SEVICES_INTERFACE_CIDR=${EXTERNAL_SEVICES_INTERFACE_CIDR:-$external_services_network_cidr}
Vasyl Saienko4a2832d2024-05-16 09:00:03 +030020DEFAULT_INTERFACE=${DEFAULT_INTERFACE:-$default_interface}
21STORAGE_BACKEND_INTERFACE=${STORAGE_BACKEND_INTERFACE:-$storage_backend_interface}
22STORAGE_BACKEND_INTERFACE_IP=${STORAGE_BACKEND_INTERFACE_IP:-$storage_backend_network_interface_ip}
23STORAGE_BACKEND_NETWORK=${STORAGE_BACKEND_NETWORK:-$storage_backend_network_cidr}
24STORAGE_FRONTEND_INTERFACE=${STORAGE_FRONTEND_INTERFACE:-$storage_frontend_interface}
25STORAGE_FRONTEND_INTERFACE_IP=${STORAGE_FRONTEND_INTERFACE_IP:-$storage_frontend_network_interface_ip}
26STORAGE_FRONTEND_NETWORK=${STORAGE_FRONTEND_NETWORK:-$storage_frontend_network_cidr}
27STORAGE_FRONTEND_NETWORK_NETMASK=$(echo ${STORAGE_FRONTEND_NETWORK} | cut -d'/' -f2)
28
29IRONIC_BAREMETAL_NETWORK=${IRONIC_BAREMETAL_NETWORK:-$ironic_baremetal_network_cidr}
30IRONIC_BAREMETAL_INTERFACE_IP=${IRONIC_BAREMETAL_INTERFACE_IP:-$ironic_baremetal_interface_ip}
31IRONIC_BAREMETAL_TUNNEL_NETWORK=${IRONIC_BAREMETAL_TUNNEL_NETWORK:-$ironic_baremetal_tunnel_cidr}
32TUNNEL_INTERFACE_IP=${TUNNEL_INTERFACE_IP:-$tunnel_interface_ip}
33FRR_BGP_NEIGHBORS=${FRR_BGP_NEIGHBORS:-$frr_bgp_neighbors}
34FRR_EVPN_TUNNELS_RANGE=${FRR_EVPN_TUNNELS_RANGE:-$frr_evpn_tunnels_range}
35FRR_EVPN_VXLAN_DST_PORT=${FRR_EVPN_VXLAN_DST_PORT:-$frr_evpn_vxlan_dst_port}
36
37NODE_TYPE=${NODE_TYPE:-$node_type}
38KUBERNETES_INSTALLER=${KUBERNETES_INSTALLER:-$kubernetes_installer}
39UCP_MASTER_HOST=${UCP_MASTER_HOST:-$ucp_master_host}
40NODE_METADATA=${NODE_METADATA:-'$node_metadata'}
41DOCKER_EE_URL=${DOCKER_EE_URL:-$docker_ee_url}
42DOCKER_EE_RELEASE=${DOCKER_EE_RELEASE:-$docker_ee_release}
43DOCKER_EE_PACKAGES=${DOCKER_EE_PACKAGES:-$docker_ee_packages}
44DOCKER_UCP_IMAGE=${DOCKER_UCP_IMAGE:-$docker_ucp_image}
45BINARY_BASE_URL=${BINARY_BASE_URL:-$binary_base_url}
46UCP_DOCKER_SWARM_DATA_PORT=${UCP_DOCKER_SWARM_DATA_PORT:-$docker_ucp_swarm_data_port}
Mykyta Karpin9df830a2024-09-12 14:25:01 +020047UCP_AUDIT_LOG_LEVEL=${UCP_AUDIT_LOG_LEVEL:-$ucp_audit_log_level}
Vasyl Saienko4a2832d2024-05-16 09:00:03 +030048FLOATING_NETWORK_PREFIXES=${FLOATING_NETWORK_PREFIXES:-$private_floating_network_cidr}
49IRONIC_MT_ENABLED=${IRONIC_MT_ENABLED:-$ironic_mt_enabled}
50
51HUGE_PAGES=${HUGE_PAGES:-$huge_pages}
dbiletskiy45f104f2025-05-26 13:14:19 +020052DPDK_ENABLED=${DPDK_ENABLED:-$dpdk_enabled}
Vasyl Saienko4a2832d2024-05-16 09:00:03 +030053TUNGSTENFABRIC_ENABLED=${TUNGSTENFABRIC_ENABLED:-$tungstenfabric_enabled}
54SINGLE_NODE=${SINGLE_NODE:-$single_node}
55DOCKER_DEFAULT_ADDRESS_POOL=${DOCKER_DEFAULT_ADDRESS_POOL:-$docker_default_address_pool}
56LVM_LOOP_DEVICE_SIZE=${LVM_LOOP_DEVICE_SIZE:-$lvm_loop_device_size}
57CINDER_LVM_LOOP_DEVICE_SIZE=${CINDER_LVM_LOOP_DEVICE_SIZE:-$cinder_lvm_loop_device_size}
58SECURE_OVERLAY_ENABLED=${SECURE_OVERLAY_ENABLED:-$secure_overlay_enabled}
59KUBECTL_VERSION=${KUBECTL_VERSION:-$kubectl_version}
Vasyl Saienko92133c02024-05-16 10:18:51 +030060KUBERNETES_CONTAINER_RUNTIME=${KUBERNETES_CONTAINER_RUNTIME:-$kubernetes_container_runtime}
Vasyl Saienko4a2832d2024-05-16 09:00:03 +030061
62DEVOPS_UTILS_REFSPEC=${DEVOPS_UTILS_REFSPEC:-$devops_utils_refspec}
Vasyl Saienko3e8ba732024-09-09 14:07:49 +030063K0S_VERSION=${K0S_VERSION:-$k0s_version}
Vasyl Saienko4a2832d2024-05-16 09:00:03 +030064#
65# End of block
66#
67
68DEVOPS_UTILS_REPO=${DEVOPS_UTILS_REPO:-'https://gerrit.mcp.mirantis.com/oscore-tools/devops-utils'}
69DEVOPS_UTILS_REFSPEC=${DEVOPS_UTILS_REFSPEC:-'master'}
70DEVOPS_UTILS_DST=/usr/share/devops-utils
71
72#Wait external network
Vasyl Saienko59425522024-05-17 14:00:19 +030073netplan apply
Vasyl Saienko4a2832d2024-05-16 09:00:03 +030074systemctl restart systemd-resolved
Vasyl Saienko59425522024-05-17 14:00:19 +030075sleep 15
76curl --connect-timeout 10 --retry 12 --retry-delay 10 ${DEVOPS_UTILS_REPO} || (sleep 1; /bin/false)
Vasyl Saienko4a2832d2024-05-16 09:00:03 +030077
Vasyl Saienko183863f2024-05-18 14:18:39 +030078if [[ ! -d ${DEVOPS_UTILS_DST} ]]; then
79 git clone ${DEVOPS_UTILS_REPO} ${DEVOPS_UTILS_DST}
80fi
Vasyl Saienko4a2832d2024-05-16 09:00:03 +030081pushd ${DEVOPS_UTILS_DST}
82if echo "$DEVOPS_UTILS_REFSPEC" |grep -q "^refs"; then
83 git fetch ${DEVOPS_UTILS_REPO} ${DEVOPS_UTILS_REFSPEC}
84 git checkout FETCH_HEAD
85else
86 git checkout ${DEVOPS_UTILS_REFSPEC}
87fi
88git log --oneline -10
89popd
90
91
92source ${DEVOPS_UTILS_DST}/de/heat-templates/scripts/functions.sh
93
94function wait_condition_send {
95 local status=${1:-SUCCESS}
96 local reason=${2:-\"empty\"}
97 local data=${3:-\"empty\"}
98 local data_binary="{\"status\": \"$status\", \"reason\": \"$reason\", \"data\": $data}"
99 echo "Trying to send signal to wait condition 5 times: $data_binary"
100 WAIT_CONDITION_NOTIFY_EXIT_CODE=2
101 i=0
102 while (( ${WAIT_CONDITION_NOTIFY_EXIT_CODE} != 0 && ${i} < 5 )); do
103 $wait_condition_notify -k --data-binary "$data_binary" && WAIT_CONDITION_NOTIFY_EXIT_CODE=0 || WAIT_CONDITION_NOTIFY_EXIT_CODE=2
104 i=$((i + 1))
105 sleep 1
106 done
107 if (( ${WAIT_CONDITION_NOTIFY_EXIT_CODE} !=0 && "${status}" == "SUCCESS" ))
108 then
109 status="FAILURE"
110 reason="Can't reach metadata service to report about SUCCESS."
111 fi
112 if [ "$status" == "FAILURE" ]; then
113 exit 1
114 fi
115}
116
117# Exit on any errors
118function handle_exit {
119 if [ $? != 0 ] ; then
120 wait_condition_send "FAILURE" "Script terminated with an error."
121 fi
122}
123trap handle_exit EXIT
124
125if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
126 case "$NODE_TYPE" in
127 # Please keep the "prepare_metadata_files", "disable-rp-filter", "network_config" and "prepare_network" functions
128 # at the very beginning in the same order.
129 ucp)
Vasyl Saienko45280eb2024-06-24 11:45:13 +0000130 configure_sysctl_limits
Vasyl Saienkof9813512024-07-02 12:30:25 +0300131 configure_logind_conf
dbiletskiy70af8192024-06-19 09:27:10 +0200132 disable_unattended_upgr
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300133 setup_bind_mounts
134 wait_for_external_network
135 prepare_metadata_files
136 disable_rp_filter
dbiletskiya1732ba2025-04-23 14:55:23 +0200137 install_required_packages
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300138 network_config
139 prepare_network
140 if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
141 prepare_docker_config
142 fi
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300143 install_kubectl
144 configure_ntp
145 configure_atop
Oleksandr Kononenkodd272aa2024-12-09 20:13:46 +0200146 workaround_default_forward_policy
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300147 if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
148 install_docker
149 swarm_init
150 create_ucp_config
151 cache_images
152 install_ucp
153 download_bundles
154 rm_ucp_config
155 elif [[ "${KUBERNETES_INSTALLER}" == "k0s" ]]; then
156 download_k0s
157 install_k0s
158 fi
Vasyl Saienko59e5b2a2024-09-09 08:57:18 +0300159 wait_for_node
160 set_node_labels
Mykyta Karpin20d9c4f2025-08-22 11:31:20 +0200161 if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
162 disable_ucp_metrics
163 fi
Vasyl Saienko59e5b2a2024-09-09 08:57:18 +0300164 collect_ceph_metadata
165 configure_contrack
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300166 if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300167 disable_iptables_for_bridges
168 fi
169 if [[ "${SINGLE_NODE}" == true ]]; then
170 nested_virt_config
Vasyl Saienko59e5b2a2024-09-09 08:57:18 +0300171 if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
172 disable_master_taint
173 fi
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300174 collect_interfaces_metadata
175 fi
176 cron_disable_calico_offloading
177 ;;
178 master)
Vasyl Saienko45280eb2024-06-24 11:45:13 +0000179 configure_sysctl_limits
Vasyl Saienkof9813512024-07-02 12:30:25 +0300180 configure_logind_conf
dbiletskiy70af8192024-06-19 09:27:10 +0200181 disable_unattended_upgr
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300182 setup_bind_mounts
183 wait_for_external_network
184 nested_virt_config
185 prepare_metadata_files
186 disable_rp_filter
dbiletskiya1732ba2025-04-23 14:55:23 +0200187 install_required_packages
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300188 network_config
189 prepare_network
190 if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
191 prepare_docker_config
192 fi
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300193 install_kubectl
194 configure_ntp
195 configure_atop
Oleksandr Kononenkodd272aa2024-12-09 20:13:46 +0200196 workaround_default_forward_policy
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300197 if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
198 install_docker
199 cache_images
200 download_bundles
201 join_node manager
202 fi
203 wait_for_node
204 set_node_labels
205 collect_ceph_metadata
206 configure_contrack
207 if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
208 disable_iptables_for_bridges
209 fi
210 collect_interfaces_metadata
211 cron_disable_calico_offloading
212 increase_iscsi_timeout
213 ;;
214 worker)
Vasyl Saienko45280eb2024-06-24 11:45:13 +0000215 configure_sysctl_limits
Vasyl Saienkof9813512024-07-02 12:30:25 +0300216 configure_logind_conf
dbiletskiy70af8192024-06-19 09:27:10 +0200217 disable_unattended_upgr
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300218 setup_bind_mounts
219 wait_for_external_network
220 if [[ "${CONFIGURE_HUGE_PAGES}" == true ]]; then
221 configure_huge_pages
222 fi
223 nested_virt_config
224 prepare_metadata_files
225 disable_rp_filter
dbiletskiya1732ba2025-04-23 14:55:23 +0200226 install_required_packages
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300227 network_config
228 prepare_network
229 if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
230 prepare_docker_config
231 fi
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300232 install_kubectl
233 enable_iscsi
234 configure_ntp
235 configure_atop
Oleksandr Kononenkodd272aa2024-12-09 20:13:46 +0200236 workaround_default_forward_policy
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300237 if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
238 install_docker
239 cache_images
240 download_bundles
241 join_node worker
242 elif [[ "${KUBERNETES_INSTALLER}" == "k0s" ]]; then
243 download_k0s
244 download_k8s_metadata
245 join_k0s_node worker
246 fi
247 wait_for_node
248 set_node_labels
249 collect_ceph_metadata
250 configure_contrack
251 if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
252 disable_iptables_for_bridges
253 fi
254 collect_interfaces_metadata
255 configure_lvm
256 cron_disable_calico_offloading
257 increase_iscsi_timeout
258 ;;
259 frr)
Vasyl Saienko45280eb2024-06-24 11:45:13 +0000260 configure_sysctl_limits
dbiletskiy70af8192024-06-19 09:27:10 +0200261 disable_unattended_upgr
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300262 wait_for_external_network
263 prepare_metadata_files
264 disable_rp_filter
dbiletskiya1732ba2025-04-23 14:55:23 +0200265 install_required_packages
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300266 network_config
267 prepare_network
268 if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
269 prepare_docker_config
270 fi
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300271 configure_ntp
272 configure_atop
273 if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
274 install_docker
275 cache_images
276 download_bundles
277 fi
Oleksandr Kononenkodd272aa2024-12-09 20:13:46 +0200278 workaround_default_forward_policy
Vasyl Saienko4a2832d2024-05-16 09:00:03 +0300279 configure_contrack
280 disable_iptables_for_bridges
281 install_frr
282 cron_disable_calico_offloading
283 increase_iscsi_timeout
284 ;;
285 *)
286 echo "Usage: $0 {ucp|master|worker}"
287 exit 1
288 esac
289
290 wait_condition_send "SUCCESS" "Instance successfuly started." "${HW_METADATA}"
291fi