# shellcheck shell=bash # shellcheck source=scripts/shared/lib/source_only . "${BASH_SOURCE%/*}"/source_only ### Constants ### readonly SUBMARINER_BROKER_NS=submariner-k8s-broker readonly SUBMARINER_PSK=$(LC_CTYPE=C tr -dc 'a-zA-Z0-9' < /dev/urandom | fold -w 64 | head -n 1) ### Functions ### function install_helm() { if kubectl -n kube-system rollout status deploy/tiller-deploy --timeout=3s > /dev/null 2>&1; then echo "Helm already installed, skipping helm installation..." return fi echo "Installing helm..." kubectl -n kube-system create serviceaccount tiller kubectl create clusterrolebinding tiller --clusterrole=cluster-admin --serviceaccount=kube-system:tiller helm --kube-context "${cluster}" init --service-account tiller kubectl -n kube-system rollout status deploy/tiller-deploy --timeout=30s } function deploytool_prereqs() { helm init --client-only run_all_clusters install_helm } function setup_broker() { if kubectl get crd clusters.submariner.io > /dev/null 2>&1; then echo "Submariner CRDs already exist, skipping broker creation..." else echo "Installing submariner broker..." # shellcheck disable=SC2086 # Split on purpose helm install ./submariner-k8s-broker \ --kube-context "${cluster}" \ --name "${SUBMARINER_BROKER_NS}" \ --namespace "${SUBMARINER_BROKER_NS}" \ ${deploytool_broker_args} fi submariner_broker_url=$(kubectl -n default get endpoints kubernetes -o jsonpath="{.subsets[0].addresses[0].ip}:{.subsets[0].ports[?(@.name=='https')].port}") submariner_broker_ca=$(kubectl -n "${SUBMARINER_BROKER_NS}" get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='${SUBMARINER_BROKER_NS}-client')].data['ca\.crt']}") submariner_broker_token=$(kubectl -n "${SUBMARINER_BROKER_NS}" get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='${SUBMARINER_BROKER_NS}-client')].data.token}"|base64 --decode) } function helm_install_subm() { local crd_create=false [[ "${cluster}" = "${broker}" ]] || crd_create=true if kubectl wait --for=condition=Ready pods -l app=submariner-operator -n "${SUBM_NS}" --timeout=60s > /dev/null 2>&1; then echo "Submariner already installed, skipping installation..." return fi echo "Installing Submariner..." # shellcheck disable=SC2086 # Split on purpose helm --kube-context "${cluster}" install ./submariner-operator \ --name submariner-operator \ --namespace "${SUBM_NS}" \ --set ipsec.psk="${SUBMARINER_PSK}" \ --set broker.server="${submariner_broker_url}" \ --set broker.token="${submariner_broker_token}" \ --set broker.namespace="${SUBMARINER_BROKER_NS}" \ --set broker.ca="${submariner_broker_ca}" \ --set submariner.clusterId="${cluster}" \ --set submariner.clusterCidr="${cluster_CIDRs[$cluster]}" \ --set submariner.serviceCidr="${service_CIDRs[$cluster]}" \ --set submariner.globalCidr="${global_CIDRs[$cluster]}" \ --set serviceAccounts.globalnet.create="${globalnet}" \ --set submariner.natEnabled="false" \ --set operator.image.repository="localhost:5000/submariner-operator" \ --set operator.image.tag="local" \ --set operator.image.pullPolicy="IfNotPresent" \ --set submariner.images.repository="localhost:5000" \ --set submariner.images.tag="local" \ --set brokercrds.create="${crd_create}" \ ${deploytool_submariner_args} } function install_subm_all_clusters() { run_subm_clusters helm_install_subm }