Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | set -x |
| 3 | set -e |
| 4 | # allow access to the local variables from prepare-metadata.py |
| 5 | set -a |
| 6 | |
| 7 | # ensure we don't re-source this in the same environment |
| 8 | [[ -z "$_INSTALL_SCRIPT" ]] || return 0 |
| 9 | declare -r -g _INSTALL_SCRIPT=1 |
| 10 | |
| 11 | # |
| 12 | # Variables in this block are passed from heat template |
| 13 | # |
| 14 | CONTROL_NETWORK_CIDR=${CONTROL_NETWORK_CIDR:-$control_network_cidr} |
| 15 | PUBLIC_INTERFACE=${PUBLIC_INTERFACE:-$private_floating_interface} |
| 16 | PUBLIC_INTERFACE_IP=${PUBLIC_INTERFACE_IP:-$private_floating_interface_ip} |
| 17 | PUBLIC_INTERFACE_CIDR=${PUBLIC_INTERFACE_CIDR:-$private_floating_network_cidr} |
Mykyta Karpin | ad86fe7 | 2025-01-20 08:25:20 +0100 | [diff] [blame] | 18 | EXTERNAL_SEVICES_INTERFACE_IP=${EXTERNAL_SEVICES_INTERFACE_IP:-$external_services_interface_ip} |
| 19 | EXTERNAL_SEVICES_INTERFACE_CIDR=${EXTERNAL_SEVICES_INTERFACE_CIDR:-$external_services_network_cidr} |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 20 | DEFAULT_INTERFACE=${DEFAULT_INTERFACE:-$default_interface} |
| 21 | STORAGE_BACKEND_INTERFACE=${STORAGE_BACKEND_INTERFACE:-$storage_backend_interface} |
| 22 | STORAGE_BACKEND_INTERFACE_IP=${STORAGE_BACKEND_INTERFACE_IP:-$storage_backend_network_interface_ip} |
| 23 | STORAGE_BACKEND_NETWORK=${STORAGE_BACKEND_NETWORK:-$storage_backend_network_cidr} |
| 24 | STORAGE_FRONTEND_INTERFACE=${STORAGE_FRONTEND_INTERFACE:-$storage_frontend_interface} |
| 25 | STORAGE_FRONTEND_INTERFACE_IP=${STORAGE_FRONTEND_INTERFACE_IP:-$storage_frontend_network_interface_ip} |
| 26 | STORAGE_FRONTEND_NETWORK=${STORAGE_FRONTEND_NETWORK:-$storage_frontend_network_cidr} |
| 27 | STORAGE_FRONTEND_NETWORK_NETMASK=$(echo ${STORAGE_FRONTEND_NETWORK} | cut -d'/' -f2) |
| 28 | |
| 29 | IRONIC_BAREMETAL_NETWORK=${IRONIC_BAREMETAL_NETWORK:-$ironic_baremetal_network_cidr} |
| 30 | IRONIC_BAREMETAL_INTERFACE_IP=${IRONIC_BAREMETAL_INTERFACE_IP:-$ironic_baremetal_interface_ip} |
| 31 | IRONIC_BAREMETAL_TUNNEL_NETWORK=${IRONIC_BAREMETAL_TUNNEL_NETWORK:-$ironic_baremetal_tunnel_cidr} |
| 32 | TUNNEL_INTERFACE_IP=${TUNNEL_INTERFACE_IP:-$tunnel_interface_ip} |
| 33 | FRR_BGP_NEIGHBORS=${FRR_BGP_NEIGHBORS:-$frr_bgp_neighbors} |
| 34 | FRR_EVPN_TUNNELS_RANGE=${FRR_EVPN_TUNNELS_RANGE:-$frr_evpn_tunnels_range} |
| 35 | FRR_EVPN_VXLAN_DST_PORT=${FRR_EVPN_VXLAN_DST_PORT:-$frr_evpn_vxlan_dst_port} |
| 36 | |
| 37 | NODE_TYPE=${NODE_TYPE:-$node_type} |
| 38 | KUBERNETES_INSTALLER=${KUBERNETES_INSTALLER:-$kubernetes_installer} |
| 39 | UCP_MASTER_HOST=${UCP_MASTER_HOST:-$ucp_master_host} |
| 40 | NODE_METADATA=${NODE_METADATA:-'$node_metadata'} |
| 41 | DOCKER_EE_URL=${DOCKER_EE_URL:-$docker_ee_url} |
| 42 | DOCKER_EE_RELEASE=${DOCKER_EE_RELEASE:-$docker_ee_release} |
| 43 | DOCKER_EE_PACKAGES=${DOCKER_EE_PACKAGES:-$docker_ee_packages} |
| 44 | DOCKER_UCP_IMAGE=${DOCKER_UCP_IMAGE:-$docker_ucp_image} |
| 45 | BINARY_BASE_URL=${BINARY_BASE_URL:-$binary_base_url} |
| 46 | UCP_DOCKER_SWARM_DATA_PORT=${UCP_DOCKER_SWARM_DATA_PORT:-$docker_ucp_swarm_data_port} |
Mykyta Karpin | 9df830a | 2024-09-12 14:25:01 +0200 | [diff] [blame] | 47 | UCP_AUDIT_LOG_LEVEL=${UCP_AUDIT_LOG_LEVEL:-$ucp_audit_log_level} |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 48 | FLOATING_NETWORK_PREFIXES=${FLOATING_NETWORK_PREFIXES:-$private_floating_network_cidr} |
| 49 | IRONIC_MT_ENABLED=${IRONIC_MT_ENABLED:-$ironic_mt_enabled} |
| 50 | |
| 51 | HUGE_PAGES=${HUGE_PAGES:-$huge_pages} |
dbiletskiy | 45f104f | 2025-05-26 13:14:19 +0200 | [diff] [blame] | 52 | DPDK_ENABLED=${DPDK_ENABLED:-$dpdk_enabled} |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 53 | TUNGSTENFABRIC_ENABLED=${TUNGSTENFABRIC_ENABLED:-$tungstenfabric_enabled} |
| 54 | SINGLE_NODE=${SINGLE_NODE:-$single_node} |
| 55 | DOCKER_DEFAULT_ADDRESS_POOL=${DOCKER_DEFAULT_ADDRESS_POOL:-$docker_default_address_pool} |
| 56 | LVM_LOOP_DEVICE_SIZE=${LVM_LOOP_DEVICE_SIZE:-$lvm_loop_device_size} |
| 57 | CINDER_LVM_LOOP_DEVICE_SIZE=${CINDER_LVM_LOOP_DEVICE_SIZE:-$cinder_lvm_loop_device_size} |
| 58 | SECURE_OVERLAY_ENABLED=${SECURE_OVERLAY_ENABLED:-$secure_overlay_enabled} |
| 59 | KUBECTL_VERSION=${KUBECTL_VERSION:-$kubectl_version} |
Vasyl Saienko | 92133c0 | 2024-05-16 10:18:51 +0300 | [diff] [blame] | 60 | KUBERNETES_CONTAINER_RUNTIME=${KUBERNETES_CONTAINER_RUNTIME:-$kubernetes_container_runtime} |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 61 | |
| 62 | DEVOPS_UTILS_REFSPEC=${DEVOPS_UTILS_REFSPEC:-$devops_utils_refspec} |
Vasyl Saienko | 3e8ba73 | 2024-09-09 14:07:49 +0300 | [diff] [blame] | 63 | K0S_VERSION=${K0S_VERSION:-$k0s_version} |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 64 | # |
| 65 | # End of block |
| 66 | # |
| 67 | |
| 68 | DEVOPS_UTILS_REPO=${DEVOPS_UTILS_REPO:-'https://gerrit.mcp.mirantis.com/oscore-tools/devops-utils'} |
| 69 | DEVOPS_UTILS_REFSPEC=${DEVOPS_UTILS_REFSPEC:-'master'} |
| 70 | DEVOPS_UTILS_DST=/usr/share/devops-utils |
| 71 | |
| 72 | #Wait external network |
Vasyl Saienko | 5942552 | 2024-05-17 14:00:19 +0300 | [diff] [blame] | 73 | netplan apply |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 74 | systemctl restart systemd-resolved |
Vasyl Saienko | 5942552 | 2024-05-17 14:00:19 +0300 | [diff] [blame] | 75 | sleep 15 |
| 76 | curl --connect-timeout 10 --retry 12 --retry-delay 10 ${DEVOPS_UTILS_REPO} || (sleep 1; /bin/false) |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 77 | |
Vasyl Saienko | 183863f | 2024-05-18 14:18:39 +0300 | [diff] [blame] | 78 | if [[ ! -d ${DEVOPS_UTILS_DST} ]]; then |
| 79 | git clone ${DEVOPS_UTILS_REPO} ${DEVOPS_UTILS_DST} |
| 80 | fi |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 81 | pushd ${DEVOPS_UTILS_DST} |
| 82 | if echo "$DEVOPS_UTILS_REFSPEC" |grep -q "^refs"; then |
| 83 | git fetch ${DEVOPS_UTILS_REPO} ${DEVOPS_UTILS_REFSPEC} |
| 84 | git checkout FETCH_HEAD |
| 85 | else |
| 86 | git checkout ${DEVOPS_UTILS_REFSPEC} |
| 87 | fi |
| 88 | git log --oneline -10 |
| 89 | popd |
| 90 | |
| 91 | |
| 92 | source ${DEVOPS_UTILS_DST}/de/heat-templates/scripts/functions.sh |
| 93 | |
| 94 | function 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 |
| 118 | function handle_exit { |
| 119 | if [ $? != 0 ] ; then |
| 120 | wait_condition_send "FAILURE" "Script terminated with an error." |
| 121 | fi |
| 122 | } |
| 123 | trap handle_exit EXIT |
| 124 | |
| 125 | if [[ "${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 Saienko | 45280eb | 2024-06-24 11:45:13 +0000 | [diff] [blame] | 130 | configure_sysctl_limits |
Vasyl Saienko | f981351 | 2024-07-02 12:30:25 +0300 | [diff] [blame] | 131 | configure_logind_conf |
dbiletskiy | 70af819 | 2024-06-19 09:27:10 +0200 | [diff] [blame] | 132 | disable_unattended_upgr |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 133 | setup_bind_mounts |
| 134 | wait_for_external_network |
| 135 | prepare_metadata_files |
| 136 | disable_rp_filter |
dbiletskiy | a1732ba | 2025-04-23 14:55:23 +0200 | [diff] [blame] | 137 | install_required_packages |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 138 | network_config |
| 139 | prepare_network |
| 140 | if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then |
| 141 | prepare_docker_config |
| 142 | fi |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 143 | install_kubectl |
| 144 | configure_ntp |
| 145 | configure_atop |
Oleksandr Kononenko | dd272aa | 2024-12-09 20:13:46 +0200 | [diff] [blame] | 146 | workaround_default_forward_policy |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 147 | 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 Saienko | 59e5b2a | 2024-09-09 08:57:18 +0300 | [diff] [blame] | 159 | wait_for_node |
| 160 | set_node_labels |
| 161 | collect_ceph_metadata |
| 162 | configure_contrack |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 163 | if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 164 | disable_iptables_for_bridges |
| 165 | fi |
| 166 | if [[ "${SINGLE_NODE}" == true ]]; then |
| 167 | nested_virt_config |
Vasyl Saienko | 59e5b2a | 2024-09-09 08:57:18 +0300 | [diff] [blame] | 168 | if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then |
| 169 | disable_master_taint |
| 170 | fi |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 171 | collect_interfaces_metadata |
| 172 | fi |
| 173 | cron_disable_calico_offloading |
| 174 | ;; |
| 175 | master) |
Vasyl Saienko | 45280eb | 2024-06-24 11:45:13 +0000 | [diff] [blame] | 176 | configure_sysctl_limits |
Vasyl Saienko | f981351 | 2024-07-02 12:30:25 +0300 | [diff] [blame] | 177 | configure_logind_conf |
dbiletskiy | 70af819 | 2024-06-19 09:27:10 +0200 | [diff] [blame] | 178 | disable_unattended_upgr |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 179 | setup_bind_mounts |
| 180 | wait_for_external_network |
| 181 | nested_virt_config |
| 182 | prepare_metadata_files |
| 183 | disable_rp_filter |
dbiletskiy | a1732ba | 2025-04-23 14:55:23 +0200 | [diff] [blame] | 184 | install_required_packages |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 185 | network_config |
| 186 | prepare_network |
| 187 | if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then |
| 188 | prepare_docker_config |
| 189 | fi |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 190 | install_kubectl |
| 191 | configure_ntp |
| 192 | configure_atop |
Oleksandr Kononenko | dd272aa | 2024-12-09 20:13:46 +0200 | [diff] [blame] | 193 | workaround_default_forward_policy |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 194 | if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then |
| 195 | install_docker |
| 196 | cache_images |
| 197 | download_bundles |
| 198 | join_node manager |
| 199 | fi |
| 200 | wait_for_node |
| 201 | set_node_labels |
| 202 | collect_ceph_metadata |
| 203 | configure_contrack |
| 204 | if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then |
| 205 | disable_iptables_for_bridges |
| 206 | fi |
| 207 | collect_interfaces_metadata |
| 208 | cron_disable_calico_offloading |
| 209 | increase_iscsi_timeout |
| 210 | ;; |
| 211 | worker) |
Vasyl Saienko | 45280eb | 2024-06-24 11:45:13 +0000 | [diff] [blame] | 212 | configure_sysctl_limits |
Vasyl Saienko | f981351 | 2024-07-02 12:30:25 +0300 | [diff] [blame] | 213 | configure_logind_conf |
dbiletskiy | 70af819 | 2024-06-19 09:27:10 +0200 | [diff] [blame] | 214 | disable_unattended_upgr |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 215 | setup_bind_mounts |
| 216 | wait_for_external_network |
| 217 | if [[ "${CONFIGURE_HUGE_PAGES}" == true ]]; then |
| 218 | configure_huge_pages |
| 219 | fi |
| 220 | nested_virt_config |
| 221 | prepare_metadata_files |
| 222 | disable_rp_filter |
dbiletskiy | a1732ba | 2025-04-23 14:55:23 +0200 | [diff] [blame] | 223 | install_required_packages |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 224 | network_config |
| 225 | prepare_network |
| 226 | if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then |
| 227 | prepare_docker_config |
| 228 | fi |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 229 | install_kubectl |
| 230 | enable_iscsi |
| 231 | configure_ntp |
| 232 | configure_atop |
Oleksandr Kononenko | dd272aa | 2024-12-09 20:13:46 +0200 | [diff] [blame] | 233 | workaround_default_forward_policy |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 234 | if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then |
| 235 | install_docker |
| 236 | cache_images |
| 237 | download_bundles |
| 238 | join_node worker |
| 239 | elif [[ "${KUBERNETES_INSTALLER}" == "k0s" ]]; then |
| 240 | download_k0s |
| 241 | download_k8s_metadata |
| 242 | join_k0s_node worker |
| 243 | fi |
| 244 | wait_for_node |
| 245 | set_node_labels |
| 246 | collect_ceph_metadata |
| 247 | configure_contrack |
| 248 | if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then |
| 249 | disable_iptables_for_bridges |
| 250 | fi |
| 251 | collect_interfaces_metadata |
| 252 | configure_lvm |
| 253 | cron_disable_calico_offloading |
| 254 | increase_iscsi_timeout |
| 255 | ;; |
| 256 | frr) |
Vasyl Saienko | 45280eb | 2024-06-24 11:45:13 +0000 | [diff] [blame] | 257 | configure_sysctl_limits |
dbiletskiy | 70af819 | 2024-06-19 09:27:10 +0200 | [diff] [blame] | 258 | disable_unattended_upgr |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 259 | wait_for_external_network |
| 260 | prepare_metadata_files |
| 261 | disable_rp_filter |
dbiletskiy | a1732ba | 2025-04-23 14:55:23 +0200 | [diff] [blame] | 262 | install_required_packages |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 263 | network_config |
| 264 | prepare_network |
| 265 | if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then |
| 266 | prepare_docker_config |
| 267 | fi |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 268 | configure_ntp |
| 269 | configure_atop |
| 270 | if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then |
| 271 | install_docker |
| 272 | cache_images |
| 273 | download_bundles |
| 274 | fi |
Oleksandr Kononenko | dd272aa | 2024-12-09 20:13:46 +0200 | [diff] [blame] | 275 | workaround_default_forward_policy |
Vasyl Saienko | 4a2832d | 2024-05-16 09:00:03 +0300 | [diff] [blame] | 276 | configure_contrack |
| 277 | disable_iptables_for_bridges |
| 278 | install_frr |
| 279 | cron_disable_calico_offloading |
| 280 | increase_iscsi_timeout |
| 281 | ;; |
| 282 | *) |
| 283 | echo "Usage: $0 {ucp|master|worker}" |
| 284 | exit 1 |
| 285 | esac |
| 286 | |
| 287 | wait_condition_send "SUCCESS" "Instance successfuly started." "${HW_METADATA}" |
| 288 | fi |