blob: f0723eac2c1d04f7e1800de88303b0339670ce4b [file] [log] [blame]
garciadeblasd8bc5c32018-05-09 17:37:56 +02001#!/bin/bash
garciadeblasd8bc5c32018-05-09 17:37:56 +02002#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
garciadeblas0bc87522021-10-20 22:16:17 +020014#
garciadeblasd8bc5c32018-05-09 17:37:56 +020015
16function usage(){
garciadeblas0bc87522021-10-20 22:16:17 +020017 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblasd8bc5c32018-05-09 17:37:56 +020018 echo -e "usage: $0 [OPTIONS]"
garciadeblas81077ae2023-07-03 19:31:15 +020019 echo -e "Install OSM"
garciadeblasd8bc5c32018-05-09 17:37:56 +020020 echo -e " OPTIONS"
garciadeblas7f1e1042020-11-30 14:07:03 +000021 echo -e " -h / --help: print this help"
22 echo -e " -y: do not prompt for confirmation, assumes yes"
garciadeblasd8bc5c32018-05-09 17:37:56 +020023 echo -e " -r <repo>: use specified repository name for osm packages"
24 echo -e " -R <release>: use specified release for osm binaries (deb packages, lxd images, ...)"
25 echo -e " -u <repo base>: use specified repository url for osm packages"
26 echo -e " -k <repo key>: use specified repository public key url"
garciadeblas0bc87522021-10-20 22:16:17 +020027 echo -e " -a <apt proxy url>: use this apt proxy url when downloading apt packages (air-gapped installation)"
garciadeblasb3797412024-06-06 14:26:24 +020028 echo -e " -c <kubernetes engine>: use a specific kubernetes engine (options: kubeadm, k3s), default is kubeadm"
garciadeblas8d8cd992024-05-21 16:04:14 +020029 echo -e " -t <docker tag> specify osm docker tag (default is latest)"
30 echo -e " -M <KUBECONFIG_FILE>: Kubeconfig of an existing cluster to be used as mgmt cluster instead of OSM cluster"
31 echo -e " -G <KUBECONFIG_FILE>: Kubeconfig of an existing cluster to be used as auxiliary cluster instead of OSM cluster"
32 echo -e " --no-mgmt-cluster: Do not provision a mgmt cluster for cloud-native gitops operations in OSM (NEW in Release SIXTEEN) (by default, it is installed)"
33 echo -e " --no-aux-cluster: Do not provision an auxiliary cluster for cloud-native gitops operations in OSM (NEW in Release SIXTEEN) (by default, it is installed)"
34 echo -e " -D <devops path>: use local devops installation path"
garciadeblas325032a2023-04-13 18:07:44 +020035 echo -e " -s <namespace> namespace when installed using k8s, default is osm"
Mike Marchettib8420852018-09-13 13:45:06 -040036 echo -e " -H <VCA host> use specific juju host controller IP"
37 echo -e " -S <VCA secret> use VCA/juju secret key"
garciadeblasaa3ddf42019-04-04 19:04:32 +020038 echo -e " -P <VCA pubkey> use VCA/juju public key file"
Adam Israel5ddc97f2019-09-03 18:11:12 -040039 echo -e " -A <VCA apiproxy> use VCA/juju API proxy"
garciadeblas8d8cd992024-05-21 16:04:14 +020040 echo -e " -w <work dir>: Location to store runtime installation"
David Garcia79f4f532020-04-07 12:59:34 +020041 echo -e " -l: LXD cloud yaml file"
42 echo -e " -L: LXD credentials yaml file"
David Garcia404ae122020-04-28 11:47:55 +020043 echo -e " -K: Specifies the name of the controller to use - The controller must be already bootstrapped"
garciadeblas7f1e1042020-11-30 14:07:03 +000044 echo -e " -d <docker registry URL> use docker registry URL instead of dockerhub"
45 echo -e " -p <docker proxy URL> set docker proxy URL as part of docker CE configuration"
46 echo -e " -T <docker tag> specify docker tag for the modules specified with option -m"
garciadeblas0bc87522021-10-20 22:16:17 +020047 echo -e " --debug: debug mode"
garciadeblas9a510862021-04-21 14:15:56 +020048 echo -e " --nocachelxdimages: do not cache local lxd images, do not create cronjob for that cache (will save installation time, might affect instantiation time)"
garciadeblas0bc87522021-10-20 22:16:17 +020049 echo -e " --cachelxdimages: cache local lxd images, create cronjob for that cache (will make installation longer)"
David Garcia79f4f532020-04-07 12:59:34 +020050 echo -e " --nolxd: do not install and configure LXD, allowing unattended installations (assumes LXD is already installed and confifured)"
garciadeblasa3e26612018-05-30 17:58:55 +020051 echo -e " --nodocker: do not install docker, do not initialize a swarm (assumes docker is already installed and a swarm has been initialized)"
Mike Marchettib8420852018-09-13 13:45:06 -040052 echo -e " --nojuju: do not juju, assumes already installed"
Mike Marchettib8420852018-09-13 13:45:06 -040053 echo -e " --nohostports: do not expose docker ports to host (useful for creating multiple instances of osm on the same host)"
54 echo -e " --nohostclient: do not install the osmclient"
garciadeblase990f662018-05-18 11:43:39 +020055 echo -e " --uninstall: uninstall OSM: remove the containers and delete NAT rules"
romeromonser599d5e22020-03-06 10:23:29 +010056 echo -e " --k8s_monitor: install the OSM kubernetes monitoring with prometheus and grafana"
garciadeblasd8bc5c32018-05-09 17:37:56 +020057 echo -e " --showopts: print chosen options and exit (only for debugging)"
Dominik Fleischmann7a97a4c2020-06-04 10:52:05 +020058 echo -e " --charmed: Deploy and operate OSM with Charms on k8s"
59 echo -e " [--bundle <bundle path>]: Specify with which bundle to deploy OSM with charms (--charmed option)"
60 echo -e " [--k8s <kubeconfig path>]: Specify with which kubernetes to deploy OSM with charms (--charmed option)"
Dominik Fleischmannc57296f2020-06-09 11:45:08 +020061 echo -e " [--vca <name>]: Specifies the name of the controller to use - The controller must be already bootstrapped (--charmed option)"
aticig5d19ac22022-05-06 13:46:22 +030062 echo -e " [--small-profile]: Do not install and configure LXD which aims to use only K8s Clouds (--charmed option)"
Dominik Fleischmannc57296f2020-06-09 11:45:08 +020063 echo -e " [--lxd <yaml path>]: Takes a YAML file as a parameter with the LXD Cloud information (--charmed option)"
Dominik Fleischmann7a97a4c2020-06-04 10:52:05 +020064 echo -e " [--lxd-cred <yaml path>]: Takes a YAML file as a parameter with the LXD Credentials information (--charmed option)"
65 echo -e " [--microstack]: Installs microstack as a vim. (--charmed option)"
David Garcia4bd2bf02021-05-05 19:01:43 +020066 echo -e " [--overlay]: Add an overlay to override some defaults of the default bundle (--charmed option)"
Dominik Fleischmannc57296f2020-06-09 11:45:08 +020067 echo -e " [--ha]: Installs High Availability bundle. (--charmed option)"
beierlmf2782c52020-11-05 17:04:05 -050068 echo -e " [--tag]: Docker image tag. (--charmed option)"
69 echo -e " [--registry]: Docker registry with optional credentials as user:pass@hostname:port (--charmed option)"
garciadeblas0bc87522021-10-20 22:16:17 +020070 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblasd8bc5c32018-05-09 17:37:56 +020071}
72
Mike Marchettib8420852018-09-13 13:45:06 -040073# takes a juju/accounts.yaml file and returns the password specific
Adam Israel8232e562018-11-21 16:47:45 -050074# for a controller. I wrote this using only bash tools to minimize
Mike Marchettib8420852018-09-13 13:45:06 -040075# additions of other packages
76function parse_juju_password {
garciadeblas0bc87522021-10-20 22:16:17 +020077 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
78 password_file="${HOME}/.local/share/juju/accounts.yaml"
79 local controller_name=$1
80 local s='[[:space:]]*' w='[a-zA-Z0-9_-]*' fs=$(echo @|tr @ '\034')
81 sed -ne "s|^\($s\):|\1|" \
82 -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
83 -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $password_file |
84 awk -F$fs -v controller=$controller_name '{
85 indent = length($1)/2;
86 vname[indent] = $2;
87 for (i in vname) {if (i > indent) {delete vname[i]}}
88 if (length($3) > 0) {
89 vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
90 if (match(vn,controller) && match($2,"password")) {
91 printf("%s",$3);
92 }
93 }
94 }'
95 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
96}
97
98function set_vca_variables() {
99 OSM_VCA_CLOUDNAME="lxd-cloud"
100 [ -n "$OSM_VCA_HOST" ] && OSM_VCA_CLOUDNAME="localhost"
101 if [ -z "$OSM_VCA_HOST" ]; then
garciadeblas325032a2023-04-13 18:07:44 +0200102 [ -z "$CONTROLLER_NAME" ] && OSM_VCA_HOST=`sg lxd -c "juju show-controller $OSM_NAMESPACE"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
garciadeblas0bc87522021-10-20 22:16:17 +0200103 [ -n "$CONTROLLER_NAME" ] && OSM_VCA_HOST=`juju show-controller $CONTROLLER_NAME |grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
104 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
105 fi
106 if [ -z "$OSM_VCA_SECRET" ]; then
garciadeblas325032a2023-04-13 18:07:44 +0200107 [ -z "$CONTROLLER_NAME" ] && OSM_VCA_SECRET=$(parse_juju_password $OSM_NAMESPACE)
garciadeblas0bc87522021-10-20 22:16:17 +0200108 [ -n "$CONTROLLER_NAME" ] && OSM_VCA_SECRET=$(parse_juju_password $CONTROLLER_NAME)
109 [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
110 fi
111 if [ -z "$OSM_VCA_PUBKEY" ]; then
112 OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
113 [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
114 fi
115 if [ -z "$OSM_VCA_CACERT" ]; then
garciadeblas325032a2023-04-13 18:07:44 +0200116 [ -z "$CONTROLLER_NAME" ] && OSM_VCA_CACERT=$(juju controllers --format json | jq -r --arg controller $OSM_NAMESPACE '.controllers[$controller]["ca-cert"]' | base64 | tr -d \\n)
garciadeblas0bc87522021-10-20 22:16:17 +0200117 [ -n "$CONTROLLER_NAME" ] && OSM_VCA_CACERT=$(juju controllers --format json | jq -r --arg controller $CONTROLLER_NAME '.controllers[$controller]["ca-cert"]' | base64 | tr -d \\n)
118 [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
119 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400120}
121
Benjamin Diazba2cca92018-11-08 21:07:15 -0300122function generate_secret() {
garciadeblas0bc87522021-10-20 22:16:17 +0200123 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
Benjamin Diazba2cca92018-11-08 21:07:15 -0300124 head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32
garciadeblas0bc87522021-10-20 22:16:17 +0200125 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
calvinosanc10c82da02020-08-17 11:45:15 +0200126}
127
beierlm2ce2b002021-12-07 16:02:22 -0500128function check_packages() {
129 NEEDED_PACKAGES="$1"
130 echo -e "Checking required packages: ${NEEDED_PACKAGES}"
131 for PACKAGE in ${NEEDED_PACKAGES} ; do
garciadeblas835088e2022-01-28 11:25:18 +0100132 dpkg -L ${PACKAGE}
beierlm2ce2b002021-12-07 16:02:22 -0500133 if [ $? -ne 0 ]; then
garciadeblas835088e2022-01-28 11:25:18 +0100134 echo -e "Package ${PACKAGE} is not installed."
135 echo -e "Updating apt-cache ..."
beierlm2ce2b002021-12-07 16:02:22 -0500136 sudo apt-get update
garciadeblas835088e2022-01-28 11:25:18 +0100137 echo -e "Installing ${PACKAGE} ..."
beierlm2ce2b002021-12-07 16:02:22 -0500138 sudo apt-get install -y ${PACKAGE} || FATAL "failed to install ${PACKAGE}"
139 fi
140 done
141 echo -e "Required packages are present: ${NEEDED_PACKAGES}"
142}
143
garciadeblasd8bc5c32018-05-09 17:37:56 +0200144function ask_user(){
145 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
146 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
147 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
garciadeblas0bc87522021-10-20 22:16:17 +0200148 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblasd8bc5c32018-05-09 17:37:56 +0200149 read -e -p "$1" USER_CONFIRMATION
150 while true ; do
151 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
152 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
153 [ "${USER_CONFIRMATION,,}" == "yes" ] || [ "${USER_CONFIRMATION,,}" == "y" ] && return 0
154 [ "${USER_CONFIRMATION,,}" == "no" ] || [ "${USER_CONFIRMATION,,}" == "n" ] && return 1
155 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
156 done
garciadeblas0bc87522021-10-20 22:16:17 +0200157 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblasd8bc5c32018-05-09 17:37:56 +0200158}
159
garciadeblasd8bc5c32018-05-09 17:37:56 +0200160function install_osmclient(){
garciadeblas0bc87522021-10-20 22:16:17 +0200161 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblasd8bc5c32018-05-09 17:37:56 +0200162 CLIENT_RELEASE=${RELEASE#"-R "}
163 CLIENT_REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
164 CLIENT_REPOSITORY=${REPOSITORY#"-r "}
garciadeblasd8bc5c32018-05-09 17:37:56 +0200165 CLIENT_REPOSITORY_BASE=${REPOSITORY_BASE#"-u "}
166 key_location=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
garciadeblas0bc87522021-10-20 22:16:17 +0200167 curl $key_location | sudo APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add -
garciadeblas078f5982019-11-27 15:06:06 +0100168 sudo add-apt-repository -y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient IM"
garciadeblas80b2e172023-06-01 18:38:13 +0200169 sudo apt-get -y update
170 sudo DEBIAN_FRONTEND=noninteractive apt-get install -y python3-pip
garciadeblas078f5982019-11-27 15:06:06 +0100171 sudo -H LC_ALL=C python3 -m pip install -U pip
garciadeblas80b2e172023-06-01 18:38:13 +0200172 sudo DEBIAN_FRONTEND=noninteractive apt-get install -y python3-osm-im python3-osmclient
beierlm920d7562021-04-21 05:13:53 -0400173 if [ -f /usr/lib/python3/dist-packages/osm_im/requirements.txt ]; then
beierlm021b3072021-04-27 14:33:24 -0400174 python3 -m pip install -r /usr/lib/python3/dist-packages/osm_im/requirements.txt
beierlm920d7562021-04-21 05:13:53 -0400175 fi
176 if [ -f /usr/lib/python3/dist-packages/osmclient/requirements.txt ]; then
garciadeblas357a3c22023-06-26 09:10:11 +0200177 sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libmagic1
beierlm021b3072021-04-27 14:33:24 -0400178 python3 -m pip install -r /usr/lib/python3/dist-packages/osmclient/requirements.txt
beierlm920d7562021-04-21 05:13:53 -0400179 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +0200180 echo -e "\nOSM client installed"
garciadeblase3a84a52024-09-27 11:34:55 +0200181 echo "You can get the OSM NBI endpoint using the following command"
182 echo ' kubectl -n osm get ingress nbi-ingress -o jsonpath="{.spec.rules[0].host}"'
183 echo "You will have to configure this env variable in your .bashrc file:"
184 echo " export OSM_HOSTNAME=nbi.${OSM_K8S_EXTERNAL_IP}.nip.io"
garciadeblas0bc87522021-10-20 22:16:17 +0200185 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblasd8bc5c32018-05-09 17:37:56 +0200186 return 0
187}
188
garciadeblas453d4582020-12-16 19:03:10 +0100189function docker_login() {
garciadeblas0bc87522021-10-20 22:16:17 +0200190 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblas453d4582020-12-16 19:03:10 +0100191 echo "Docker login"
garciadeblas0bc87522021-10-20 22:16:17 +0200192 [ -z "${DEBUG_INSTALL}" ] || DEBUG "Docker registry user: ${DOCKER_REGISTRY_USER}"
193 sg docker -c "docker login -u ${DOCKER_REGISTRY_USER} -p ${DOCKER_REGISTRY_PASSWORD} --password-stdin"
194 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblas453d4582020-12-16 19:03:10 +0100195}
196
garciadeblasf6ed60c2020-07-08 14:30:29 +0000197#deploys osm pods and services
garciadeblas9bae86f2024-05-31 17:15:18 +0200198function deploy_osm_helm_chart() {
garciadeblas0bc87522021-10-20 22:16:17 +0200199 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblas8080e4b2023-04-14 09:57:17 +0200200 # Generate helm values to be passed with -f osm-values.yaml
201 sudo mkdir -p ${OSM_HELM_WORK_DIR}
garciadeblas8375da12023-10-10 10:52:29 +0200202 if [ -n "${INSTALL_JUJU}" ]; then
203 sudo bash -c "cat << EOF > ${OSM_HELM_WORK_DIR}/osm-values.yaml
garciadeblas8080e4b2023-04-14 09:57:17 +0200204vca:
205 pubkey: \"${OSM_VCA_PUBKEY}\"
206EOF"
garciadeblas8375da12023-10-10 10:52:29 +0200207 fi
garciadeblas8080e4b2023-04-14 09:57:17 +0200208
209 # Generate helm values to be passed with --set
210 OSM_HELM_OPTS=""
211 # OSM_HELM_OPTS="${OSM_HELM_OPTS} --set nbi.useOsmSecret=false"
garciadeblase6d45882024-05-22 15:03:00 +0200212
213 OSM_HELM_OPTS="${OSM_HELM_OPTS} --set global.image.repositoryBase=${DOCKER_REGISTRY_URL}${DOCKER_USER}"
214 [ ! "$OSM_DOCKER_TAG" == "testing-daily" ] && OSM_HELM_OPTS="${OSM_HELM_OPTS} --set-string global.image.tag=${OSM_DOCKER_TAG}"
215 [ ! "$OSM_DOCKER_TAG" == "testing-daily" ] && OSM_HELM_OPTS="${OSM_HELM_OPTS} --set prometheus.server.sidecarContainers.prometheus-config-sidecar.image=${DOCKER_REGISTRY_URL}${DOCKER_USER}/prometheus:${OSM_DOCKER_TAG}"
216
garciadeblase3a84a52024-09-27 11:34:55 +0200217 OSM_HELM_OPTS="${OSM_HELM_OPTS} --set global.hostname=${OSM_K8S_EXTERNAL_IP}.nip.io"
218 OSM_HELM_OPTS="${OSM_HELM_OPTS} --set grafana.ingress.hosts={grafana.${OSM_K8S_EXTERNAL_IP}.nip.io}"
219 OSM_HELM_OPTS="${OSM_HELM_OPTS} --set prometheus.server.ingress.hosts={prometheus.${OSM_K8S_EXTERNAL_IP}.nip.io}"
220 # OSM_HELM_OPTS="${OSM_HELM_OPTS} --set prometheus.alertmanager.ingress.hosts={alertmanager.${OSM_K8S_EXTERNAL_IP}.nip.io}"
garciadeblas1f6e09a2024-09-10 18:50:29 +0200221 if [ -z "${INSTALL_MGMT_CLUSTER}" ]; then
222 OSM_HELM_OPTS="${OSM_HELM_OPTS} --set global.gitops.enabled=false"
223 else
224 source "${HOME}/.osm/.credentials/gitea_environment.rc"
225 OSM_HELM_OPTS="${OSM_HELM_OPTS} --set global.gitops.gitBaseUrl=${GITEA_HTTP_URL}"
226 OSM_HELM_OPTS="${OSM_HELM_OPTS} --set global.gitops.gitUser=${GITEA_STD_USERNAME}"
227 AGE_MGMT_PUBKEY=$(tr -d '\n' < ${HOME}/.osm/.credentials/age.mgmt.pub)
228 OSM_HELM_OPTS="${OSM_HELM_OPTS} --set global.gitops.pubkey=${AGE_MGMT_PUBKEY}"
229 fi
garciadeblas18582e92024-05-21 12:13:50 +0200230
garciadeblas8375da12023-10-10 10:52:29 +0200231 if [ -n "${INSTALL_JUJU}" ]; then
232 OSM_HELM_OPTS="${OSM_HELM_OPTS} --set vca.enabled=true"
233 OSM_HELM_OPTS="${OSM_HELM_OPTS} --set vca.host=${OSM_VCA_HOST}"
234 OSM_HELM_OPTS="${OSM_HELM_OPTS} --set vca.secret=${OSM_VCA_SECRET}"
235 OSM_HELM_OPTS="${OSM_HELM_OPTS} --set vca.cacert=${OSM_VCA_CACERT}"
236 fi
garciadeblas8080e4b2023-04-14 09:57:17 +0200237 [ -n "$OSM_VCA_APIPROXY" ] && OSM_HELM_OPTS="${OSM_HELM_OPTS} --set lcm.config.OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}"
garciadeblas18582e92024-05-21 12:13:50 +0200238
khelifi81a1a222025-04-28 09:35:51 +0100239 OSM_HELM_OPTS="${OSM_HELM_OPTS} --set airflow.defaultAirflowRepository=${DOCKER_REGISTRY_URL}${DOCKER_USER}/airflow"
240 [ ! "$OSM_DOCKER_TAG" == "testing-daily" ] && OSM_HELM_OPTS="${OSM_HELM_OPTS} --set-string airflow.defaultAirflowTag=${OSM_DOCKER_TAG}"
241 OSM_HELM_OPTS="${OSM_HELM_OPTS} --set airflow.ingress.web.hosts[0].name=airflow.${OSM_K8S_EXTERNAL_IP}.nip.io"
242
garciadeblas555702a2023-05-31 23:47:01 +0200243 if [ -n "${OSM_BEHIND_PROXY}" ]; then
244 OSM_HELM_OPTS="${OSM_HELM_OPTS} --set global.behindHttpProxy=true"
garciadeblas8c2b2642023-11-02 07:56:50 +0100245 [ -n "${HTTP_PROXY}" ] && OSM_HELM_OPTS="${OSM_HELM_OPTS} --set global.httpProxy.HTTP_PROXY=\"${HTTP_PROXY}\""
246 [ -n "${HTTPS_PROXY}" ] && OSM_HELM_OPTS="${OSM_HELM_OPTS} --set global.httpProxy.HTTPS_PROXY=\"${HTTPS_PROXY}\""
247 if [ -n "${NO_PROXY}" ]; then
248 if [[ ! "${NO_PROXY}" =~ .*".svc".* ]]; then
249 NO_PROXY="${NO_PROXY},.svc"
250 fi
251 if [[ ! "${NO_PROXY}" =~ .*".cluster.local".* ]]; then
252 NO_PROXY="${NO_PROXY},.cluster.local"
253 fi
254 OSM_HELM_OPTS="${OSM_HELM_OPTS} --set global.httpProxy.NO_PROXY=\"${NO_PROXY//,/\,}\""
255 fi
garciadeblas555702a2023-05-31 23:47:01 +0200256 fi
garciadeblas8080e4b2023-04-14 09:57:17 +0200257
garciadeblas8375da12023-10-10 10:52:29 +0200258 if [ -n "${INSTALL_JUJU}" ]; then
259 OSM_HELM_OPTS="-f ${OSM_HELM_WORK_DIR}/osm-values.yaml ${OSM_HELM_OPTS}"
260 fi
garciadeblase6d45882024-05-22 15:03:00 +0200261 echo "helm upgrade --install -n $OSM_NAMESPACE --create-namespace $OSM_NAMESPACE $OSM_DEVOPS/installers/helm/osm ${OSM_HELM_OPTS}"
262 helm upgrade --install -n $OSM_NAMESPACE --create-namespace $OSM_NAMESPACE $OSM_DEVOPS/installers/helm/osm ${OSM_HELM_OPTS}
garciadeblas8080e4b2023-04-14 09:57:17 +0200263 # Override existing values.yaml with the final values.yaml used to install OSM
264 helm -n $OSM_NAMESPACE get values $OSM_NAMESPACE | sudo tee -a ${OSM_HELM_WORK_DIR}/osm-values.yaml
garciadeblas0bc87522021-10-20 22:16:17 +0200265 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
vijaynag8339ed22019-07-25 17:10:58 +0530266}
267
garciadeblase92a18d2020-07-03 16:24:23 +0000268function add_local_k8scluster() {
garciadeblas0bc87522021-10-20 22:16:17 +0200269 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblas18582e92024-05-21 12:13:50 +0200270 # OSM_HOSTNAME=$(kubectl get --namespace osm -o jsonpath="{.spec.rules[0].host}" ingress nbi-ingress)
garciadeblase3a84a52024-09-27 11:34:55 +0200271 OSM_HOSTNAME="nbi.${OSM_K8S_EXTERNAL_IP}.nip.io:443"
garciadeblas18582e92024-05-21 12:13:50 +0200272 /usr/bin/osm --hostname ${OSM_HOSTNAME} --all-projects vim-create \
garciadeblase92a18d2020-07-03 16:24:23 +0000273 --name _system-osm-vim \
274 --account_type dummy \
275 --auth_url http://dummy \
276 --user osm --password osm --tenant osm \
277 --description "dummy" \
278 --config '{management_network_name: mgmt}'
garciadeblas18582e92024-05-21 12:13:50 +0200279 /usr/bin/osm --hostname ${OSM_HOSTNAME} --all-projects k8scluster-add \
garciadeblase92a18d2020-07-03 16:24:23 +0000280 --creds ${HOME}/.kube/config \
281 --vim _system-osm-vim \
282 --k8s-nets '{"net1": null}' \
garciadeblas18582e92024-05-21 12:13:50 +0200283 --version '1.29' \
garciadeblase92a18d2020-07-03 16:24:23 +0000284 --description "OSM Internal Cluster" \
285 _system-osm-k8s
garciadeblas0bc87522021-10-20 22:16:17 +0200286 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblase92a18d2020-07-03 16:24:23 +0000287}
288
garciadeblas0bc87522021-10-20 22:16:17 +0200289function configure_apt_proxy() {
290 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
291 OSM_APT_PROXY=$1
292 OSM_APT_PROXY_FILE="/etc/apt/apt.conf.d/osm-apt"
293 echo "Configuring apt proxy in file ${OSM_APT_PROXY_FILE}"
294 if [ ! -f ${OSM_APT_PROXY_FILE} ]; then
295 sudo bash -c "cat <<EOF > ${OSM_APT_PROXY}
296Acquire::http { Proxy \"${OSM_APT_PROXY}\"; }
297EOF"
298 else
299 sudo sed -i "s|Proxy.*|Proxy \"${OSM_APT_PROXY}\"; }|" ${OSM_APT_PROXY_FILE}
300 fi
301 sudo apt-get update || FATAL "Configured apt proxy, but couldn't run 'apt-get update'. Check ${OSM_APT_PROXY_FILE}"
garciadeblas4d89c372021-11-25 11:57:18 +0100302 track prereq apt_proxy_configured_ok
garciadeblas0bc87522021-10-20 22:16:17 +0200303 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
304}
305
garciadeblasfa3eb332022-11-15 14:11:56 +0100306function ask_proceed() {
garciadeblas0bc87522021-10-20 22:16:17 +0200307 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblasadcf95e2022-01-28 17:15:39 +0100308
garciadeblas0bc87522021-10-20 22:16:17 +0200309 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
310 1. Install and configure LXD
311 2. Install juju
312 3. Install docker CE
313 4. Disable swap space
314 5. Install and initialize Kubernetes
315 as pre-requirements.
316 Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
garciadeblasfa3eb332022-11-15 14:11:56 +0100317
318 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
319}
320
321function check_osm_behind_proxy() {
322 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
323
324 export OSM_BEHIND_PROXY=""
325 export OSM_PROXY_ENV_VARIABLES=""
326 [ -n "${http_proxy}" ] && OSM_BEHIND_PROXY="y" && echo "http_proxy=${http_proxy}" && OSM_PROXY_ENV_VARIABLES="${OSM_PROXY_ENV_VARIABLES} http_proxy"
327 [ -n "${https_proxy}" ] && OSM_BEHIND_PROXY="y" && echo "https_proxy=${https_proxy}" && OSM_PROXY_ENV_VARIABLES="${OSM_PROXY_ENV_VARIABLES} https_proxy"
328 [ -n "${HTTP_PROXY}" ] && OSM_BEHIND_PROXY="y" && echo "HTTP_PROXY=${HTTP_PROXY}" && OSM_PROXY_ENV_VARIABLES="${OSM_PROXY_ENV_VARIABLES} HTTP_PROXY"
329 [ -n "${HTTPS_PROXY}" ] && OSM_BEHIND_PROXY="y" && echo "https_proxy=${HTTPS_PROXY}" && OSM_PROXY_ENV_VARIABLES="${OSM_PROXY_ENV_VARIABLES} HTTPS_PROXY"
330 [ -n "${no_proxy}" ] && echo "no_proxy=${no_proxy}" && OSM_PROXY_ENV_VARIABLES="${OSM_PROXY_ENV_VARIABLES} no_proxy"
331 [ -n "${NO_PROXY}" ] && echo "NO_PROXY=${NO_PROXY}" && OSM_PROXY_ENV_VARIABLES="${OSM_PROXY_ENV_VARIABLES} NO_PROXY"
332
333 echo "OSM_BEHIND_PROXY=${OSM_BEHIND_PROXY}"
334 echo "OSM_PROXY_ENV_VARIABLES=${OSM_PROXY_ENV_VARIABLES}"
335
336 if [ -n "${OSM_BEHIND_PROXY}" ]; then
337 [ -z "$ASSUME_YES" ] && ! ask_user "
338The following env variables have been found for the current user:
339${OSM_PROXY_ENV_VARIABLES}.
340
341This suggests that this machine is behind a proxy and a special configuration is required.
342The installer will install Docker CE, LXD and Juju to work behind a proxy using those
343env variables.
344
345Take into account that the installer uses apt, curl, wget, docker, lxd, juju and snap.
346Depending on the program, the env variables to work behind a proxy might be different
347(e.g. http_proxy vs HTTP_PROXY).
348
349For that reason, it is strongly recommended that at least http_proxy, https_proxy, HTTP_PROXY
350and HTTPS_PROXY are defined.
351
352Finally, some of the programs (apt, snap) those programs are run as sudoer, requiring that
353those env variables are also set for root user. If you are not sure whether those variables
354are configured for the root user, you can stop the installation now.
355
356Do you want to proceed with the installation (Y/n)? " y && echo "Cancelled!" && exit 1
357 else
358 echo "This machine is not behind a proxy"
359 fi
360
361 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
362}
363
364function find_devops_folder() {
garciadeblas9bae86f2024-05-31 17:15:18 +0200365 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblasfa3eb332022-11-15 14:11:56 +0100366 if [ -z "$OSM_DEVOPS" ]; then
367 if [ -n "$TEST_INSTALLER" ]; then
368 echo -e "\nUsing local devops repo for OSM installation"
369 OSM_DEVOPS="$(dirname $(realpath $(dirname $0)))"
370 else
371 echo -e "\nCreating temporary dir for OSM installation"
372 OSM_DEVOPS="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
373 trap 'rm -rf "$OSM_DEVOPS"' EXIT
374 git clone https://osm.etsi.org/gerrit/osm/devops.git $OSM_DEVOPS
375 fi
376 fi
garciadeblas9bae86f2024-05-31 17:15:18 +0200377 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
378}
379
380function install_lxd() {
381 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
382 LXD_INSTALL_OPTS="-D ${OSM_DEVOPS} -i ${OSM_DEFAULT_IF} ${DEBUG_INSTALL}"
383 [ -n "${OSM_BEHIND_PROXY}" ] && LXD_INSTALL_OPTS="${LXD_INSTALL_OPTS} -P"
384 $OSM_DEVOPS/installers/install_lxd.sh ${LXD_INSTALL_OPTS} || FATAL_TRACK lxd "install_lxd.sh failed"
385 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
386}
387
388function install_docker_ce() {
389 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
390 DOCKER_CE_OPTS="-D ${OSM_DEVOPS} ${DEBUG_INSTALL}"
391 [ -n "${DOCKER_PROXY_URL}" ] && DOCKER_CE_OPTS="${DOCKER_CE_OPTS} -p ${DOCKER_PROXY_URL}"
392 [ -n "${OSM_BEHIND_PROXY}" ] && DOCKER_CE_OPTS="${DOCKER_CE_OPTS} -P"
393 $OSM_DEVOPS/installers/install_docker_ce.sh ${DOCKER_CE_OPTS} || FATAL_TRACK docker_ce "install_docker_ce.sh failed"
394 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
395}
396
397function install_k8s_cluster() {
398 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
399 if [ "${K8S_CLUSTER_ENGINE}" == "kubeadm" ]; then
400 KUBEADM_INSTALL_OPTS="-d ${OSM_WORK_DIR} -D ${OSM_DEVOPS} ${DEBUG_INSTALL}"
401 $OSM_DEVOPS/installers/install_kubeadm_cluster.sh ${KUBEADM_INSTALL_OPTS} || \
402 FATAL_TRACK k8scluster "install_kubeadm_cluster.sh failed"
garciadeblasb3797412024-06-06 14:26:24 +0200403 K8SCLUSTER_ADDONS_INSTALL_OPTS="-i ${OSM_DEFAULT_IP} -d ${OSM_WORK_DIR} -D ${OSM_DEVOPS} ${DEBUG_INSTALL} --all"
garciadeblas9bae86f2024-05-31 17:15:18 +0200404 $OSM_DEVOPS/installers/install_cluster_addons.sh ${K8SCLUSTER_ADDONS_INSTALL_OPTS} || \
garciadeblasb3797412024-06-06 14:26:24 +0200405 FATAL_TRACK k8scluster "install_cluster_addons.sh failed for kubeadm cluster"
406 elif [ "${K8S_CLUSTER_ENGINE}" == "k3s" ]; then
garciadeblas1f338482024-07-04 19:26:54 +0200407 K3S_INSTALL_OPTS="-i ${OSM_DEFAULT_IP} -D ${OSM_DEVOPS} ${DEBUG_INSTALL}"
garciadeblase3a84a52024-09-27 11:34:55 +0200408 [ "${OSM_K8S_EXTERNAL_IP}" != "${OSM_DEFAULT_IP}" ] && K3S_INSTALL_OPTS="${K3S_INSTALL_OPTS} -e ${OSM_K8S_EXTERNAL_IP}"
garciadeblas117fd4a2024-08-21 18:18:14 +0200409 [ -n "${DOCKER_PROXY_URL}" ] && K3S_INSTALL_OPTS="${K3S_INSTALL_OPTS} -p ${DOCKER_PROXY_URL}"
garciadeblas2efb98b2024-08-21 21:19:36 +0200410 [ -n "${DOCKER_REGISTRY_URL}" ] && K3S_INSTALL_OPTS="${K3S_INSTALL_OPTS} -d ${DOCKER_REGISTRY_URL}"
411 [ -n "${DOCKER_REGISTRY_USER}" ] && K3S_INSTALL_OPTS="${K3S_INSTALL_OPTS} -u ${DOCKER_REGISTRY_USER}"
412 [ -n "${DOCKER_REGISTRY_PASSWORD}" ] && K3S_INSTALL_OPTS="${K3S_INSTALL_OPTS} -P ${DOCKER_REGISTRY_PASSWORD}"
garciadeblasb3797412024-06-06 14:26:24 +0200413 # The K3s installation script will automatically take the HTTP_PROXY, HTTPS_PROXY and NO_PROXY,
414 # as well as the CONTAINERD_HTTP_PROXY, CONTAINERD_HTTPS_PROXY and CONTAINERD_NO_PROXY variables
415 # from the shell, if they are present, and write them to the environment file of k3s systemd service,
416 $OSM_DEVOPS/installers/install_k3s_cluster.sh ${K3S_INSTALL_OPTS} || \
417 FATAL_TRACK k8scluster "install_k3s_cluster.sh failed"
418 K8SCLUSTER_ADDONS_INSTALL_OPTS="-i ${OSM_DEFAULT_IP} -d ${OSM_WORK_DIR} -D ${OSM_DEVOPS} ${DEBUG_INSTALL} --certmgr --nginx"
419 $OSM_DEVOPS/installers/install_cluster_addons.sh ${K8SCLUSTER_ADDONS_INSTALL_OPTS} || \
420 FATAL_TRACK k8scluster "install_cluster_addons.sh failed for k3s cluster"
garciadeblas9bae86f2024-05-31 17:15:18 +0200421 fi
garciadeblas58b5ba62024-09-11 14:58:05 +0200422 echo "Updating fsnotify settings of the system kernel"
423 sudo bash -c "sysctl -w fs.inotify.max_user_watches=699050 > /etc/sysctl.d/99-custom-osm-sysctl.conf"
424 sudo bash -c "sysctl -w fs.inotify.max_user_instances=10922 >> /etc/sysctl.d/99-custom-osm-sysctl.conf"
425 sudo bash -c "sysctl -w fs.inotify.max_queued_events=1398101 >> /etc/sysctl.d/99-custom-osm-sysctl.conf"
garciadeblas9bae86f2024-05-31 17:15:18 +0200426 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
427}
428
429function deploy_osm() {
garciadeblasb3797412024-06-06 14:26:24 +0200430 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblas9bae86f2024-05-31 17:15:18 +0200431 deploy_osm_helm_chart
garciadeblasc3aa9392025-04-22 14:13:23 +0200432 track deploy_osm deploy_mongodb_ok
garciadeblas9bae86f2024-05-31 17:15:18 +0200433 track deploy_osm deploy_osm_services_k8s_ok
garciadeblascfb60b12025-04-23 17:55:02 +0200434 track deploy_osm install_osm_ngsa_ok
garciadeblasb3797412024-06-06 14:26:24 +0200435 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblasfa3eb332022-11-15 14:11:56 +0100436}
437
garciadeblasf7a207d2025-01-30 15:54:08 +0100438function setup_external_ip() {
439 echo "Determining IP address of the interface with the default route"
440 [ -z "$OSM_DEFAULT_IF" ] && OSM_DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5; exit}')
441 [ -z "$OSM_DEFAULT_IF" ] && OSM_DEFAULT_IF=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}')
442 [ -z "$OSM_DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
443 OSM_DEFAULT_IP=`ip -o -4 a s ${OSM_DEFAULT_IF} |awk '{split($4,a,"/"); print a[1]; exit}'`
444 [ -z "$OSM_DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
445 OSM_K8S_EXTERNAL_IP=${OSM_K8S_EXTERNAL_IP:-${OSM_DEFAULT_IP}}
446}
447
garciadeblasfa3eb332022-11-15 14:11:56 +0100448function install_osm() {
449 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
450
451 trap ctrl_c INT
452
garciadeblasfa3eb332022-11-15 14:11:56 +0100453 check_osm_behind_proxy
garciadeblasfa3eb332022-11-15 14:11:56 +0100454 check_packages "git wget curl tar snapd"
garciadeblas8375da12023-10-10 10:52:29 +0200455 if [ -n "${INSTALL_JUJU}" ]; then
456 sudo snap install jq || FATAL "Could not install jq (snap package). Make sure that snap works"
457 fi
garciadeblasfa3eb332022-11-15 14:11:56 +0100458 find_devops_folder
459
garciadeblas28d71bd2023-06-07 23:06:50 +0200460 track start release $RELEASE none none docker_tag $OSM_DOCKER_TAG none none installation_type $OSM_INSTALLATION_TYPE none none os_info $os_info none none
garciadeblasfa3eb332022-11-15 14:11:56 +0100461
462 track checks checkingroot_ok
463 [ "$USER" == "root" ] && FATAL "You are running the installer as root. The installer is prepared to be executed as a normal user with sudo privileges."
464 track checks noroot_ok
garciadeblasfa3eb332022-11-15 14:11:56 +0100465 ask_proceed
garciadeblas4d89c372021-11-25 11:57:18 +0100466 track checks proceed_ok
vijaynag8339ed22019-07-25 17:10:58 +0530467
garciadeblas0bc87522021-10-20 22:16:17 +0200468 echo "Installing OSM"
469
garciadeblas28d71bd2023-06-07 23:06:50 +0200470 [ -n "$DOCKER_REGISTRY_URL" ] && parse_docker_registry_url
471
garciadeblasf7a207d2025-01-30 15:54:08 +0100472 echo "Setting up external IP address"
473 setup_external_ip
garciadeblas0bc87522021-10-20 22:16:17 +0200474
475 # configure apt proxy
476 [ -n "$APT_PROXY_URL" ] && configure_apt_proxy $APT_PROXY_URL
Mike Marchettib8420852018-09-13 13:45:06 -0400477
garciadeblas8375da12023-10-10 10:52:29 +0200478 # if lxd is requested, we will install it
garciadeblas9bae86f2024-05-31 17:15:18 +0200479 [ -n "$INSTALL_LXD" ] && install_lxd
David Garcia79f4f532020-04-07 12:59:34 +0200480
garciadeblas4d89c372021-11-25 11:57:18 +0100481 track prereq prereqok_ok
Mike Marchettib8420852018-09-13 13:45:06 -0400482
garciadeblas250b0b62024-01-22 13:30:59 +0100483 if [ -n "$INSTALL_DOCKER" ] || [ "${K8S_CLUSTER_ENGINE}" == "kubeadm" ]; then
garciadeblas9c624882024-04-01 15:01:27 +0200484 if [ "${K8S_CLUSTER_ENGINE}" == "kubeadm" ]; then
485 echo "Kubeadm requires docker, so docker will be installed."
486 fi
garciadeblas9bae86f2024-05-31 17:15:18 +0200487 install_docker_ce
garciadeblas2efb98b2024-08-21 21:19:36 +0200488 [ -n "${DOCKER_REGISTRY_URL}" ] && docker_login
garciadeblas95804f82021-11-08 23:02:01 +0100489 fi
garciadeblas4d89c372021-11-25 11:57:18 +0100490 track docker_ce docker_ce_ok
David Garcia6cbfee12020-10-23 10:40:20 +0200491
garciadeblas8d8cd992024-05-21 16:04:14 +0200492 echo "Installing helm client ..."
garciadeblas9c624882024-04-01 15:01:27 +0200493 $OSM_DEVOPS/installers/install_helm_client.sh -D ${OSM_DEVOPS} ${DEBUG_INSTALL} || \
494 FATAL_TRACK k8scluster "install_helm_client.sh failed"
495 track helm_client install_helm_client_ok
496
garciadeblas8d8cd992024-05-21 16:04:14 +0200497 echo "Installing K8s cluster ..."
garciadeblas9bae86f2024-05-31 17:15:18 +0200498 install_k8s_cluster
garciadeblas8d8cd992024-05-21 16:04:14 +0200499 kubectl create namespace ${OSM_NAMESPACE}
garciadeblas9c624882024-04-01 15:01:27 +0200500 track k8scluster k8scluster_ok
David Garcia6cbfee12020-10-23 10:40:20 +0200501
garciadeblas8375da12023-10-10 10:52:29 +0200502 if [ -n "${INSTALL_JUJU}" ]; then
garciadeblas8d8cd992024-05-21 16:04:14 +0200503 echo "Installing Juju ..."
garciadeblas8375da12023-10-10 10:52:29 +0200504 JUJU_OPTS="-D ${OSM_DEVOPS} -s ${OSM_NAMESPACE} -i ${OSM_DEFAULT_IP} ${DEBUG_INSTALL} ${INSTALL_CACHELXDIMAGES}"
505 [ -n "${OSM_VCA_HOST}" ] && JUJU_OPTS="$JUJU_OPTS -H ${OSM_VCA_HOST}"
506 [ -n "${LXD_CLOUD_FILE}" ] && JUJU_OPTS="$JUJU_OPTS -l ${LXD_CLOUD_FILE}"
507 [ -n "${LXD_CRED_FILE}" ] && JUJU_OPTS="$JUJU_OPTS -L ${LXD_CRED_FILE}"
508 [ -n "${CONTROLLER_NAME}" ] && JUJU_OPTS="$JUJU_OPTS -K ${CONTROLLER_NAME}"
509 [ -n "${OSM_BEHIND_PROXY}" ] && JUJU_OPTS="${JUJU_OPTS} -P"
510 $OSM_DEVOPS/installers/install_juju.sh ${JUJU_OPTS} || FATAL_TRACK juju "install_juju.sh failed"
511 set_vca_variables
512 fi
garciadeblas4d89c372021-11-25 11:57:18 +0100513 track juju juju_ok
Adam Israel5ddc97f2019-09-03 18:11:12 -0400514
garciadeblas9bae86f2024-05-31 17:15:18 +0200515 # This track is maintained for backwards compatibility
garciadeblas4d89c372021-11-25 11:57:18 +0100516 track docker_images docker_images_ok
vijaynag8339ed22019-07-25 17:10:58 +0530517
garciadeblas8d8cd992024-05-21 16:04:14 +0200518 # Install mgmt cluster
519 echo "Installing mgmt cluster ..."
520 MGMTCLUSTER_INSTALL_OPTS="-D ${OSM_DEVOPS} ${DEBUG_INSTALL}"
521 [ -n "${INSTALL_MGMT_CLUSTER}" ] || MGMTCLUSTER_INSTALL_OPTS="${MGMTCLUSTER_INSTALL_OPTS} --no-mgmt-cluster"
522 [ -n "${INSTALL_AUX_CLUSTER}" ] || MGMTCLUSTER_INSTALL_OPTS="${MGMTCLUSTER_INSTALL_OPTS} --no-aux-cluster"
523 export KUBECONFIG_MGMT_CLUSTER=${KUBECONFIG_MGMT_CLUSTER:-"$HOME/.kube/config"}
524 export KUBECONFIG_AUX_CLUSTER=${KUBECONFIG_AUX_CLUSTER:-"$HOME/.kube/config"}
525 MGMTCLUSTER_INSTALL_OPTS="${MGMTCLUSTER_INSTALL_OPTS} -M ${KUBECONFIG_MGMT_CLUSTER}"
526 MGMTCLUSTER_INSTALL_OPTS="${MGMTCLUSTER_INSTALL_OPTS} -G ${KUBECONFIG_AUX_CLUSTER}"
527 echo "Options: ${MGMTCLUSTER_INSTALL_OPTS}"
528 $OSM_DEVOPS/installers/mgmt-cluster/install_mgmt_cluster.sh ${MGMTCLUSTER_INSTALL_OPTS} || \
529 FATAL_TRACK mgmtcluster "install_mgmt_cluster.sh failed"
garciadeblas1f6e09a2024-09-10 18:50:29 +0200530 if [ -n "${INSTALL_MGMT_CLUSTER}" ]; then
531 echo "Credentials stored under ${HOME}/.osm/.credentials"
532 echo "Repos stored under ${HOME}/.osm/repos"
533 fi
garciadeblas8d8cd992024-05-21 16:04:14 +0200534 track mgmtcluster mgmt_and_aux_cluster_ok
535
khelifi81a1a222025-04-28 09:35:51 +0100536 # Deploy OSM (OSM helm chart)
garciadeblas8d8cd992024-05-21 16:04:14 +0200537 echo "Deploying OSM in the K8s cluster ..."
garciadeblas9bae86f2024-05-31 17:15:18 +0200538 deploy_osm
539
garciadeblas0bc87522021-10-20 22:16:17 +0200540 if [ -n "$INSTALL_K8S_MONITOR" ]; then
541 # install OSM MONITORING
542 install_k8s_monitoring
garciadeblas4d89c372021-11-25 11:57:18 +0100543 track deploy_osm install_k8s_monitoring_ok
vijaynag8339ed22019-07-25 17:10:58 +0530544 fi
545
garciadeblas8d8cd992024-05-21 16:04:14 +0200546 [ -z "$INSTALL_NOHOSTCLIENT" ] && echo "Installing osmclient ..." && install_osmclient
garciadeblas4d89c372021-11-25 11:57:18 +0100547 track osmclient osmclient_ok
beierlma4a37f72020-06-26 12:55:01 -0400548
garciadeblas4a9adcd2020-07-03 15:32:05 +0000549 echo -e "Checking OSM health state..."
garciadeblas325032a2023-04-13 18:07:44 +0200550 $OSM_DEVOPS/installers/osm_health.sh -s ${OSM_NAMESPACE} -k || \
garciadeblasf4f0e0f2021-12-03 11:37:40 +0100551 (echo -e "OSM is not healthy, but will probably converge to a healthy state soon." && \
garciadeblas325032a2023-04-13 18:07:44 +0200552 echo -e "Check OSM status with: kubectl -n ${OSM_NAMESPACE} get all" && \
garciadeblasf4f0e0f2021-12-03 11:37:40 +0100553 track healthchecks osm_unhealthy didnotconverge)
garciadeblas4d89c372021-11-25 11:57:18 +0100554 track healthchecks after_healthcheck_ok
vijaynag8339ed22019-07-25 17:10:58 +0530555
garciadeblas8d8cd992024-05-21 16:04:14 +0200556 echo -e "Adding local K8s cluster _system-osm-k8s to OSM ..."
garciadeblas0bc87522021-10-20 22:16:17 +0200557 add_local_k8scluster
garciadeblas4d89c372021-11-25 11:57:18 +0100558 track final_ops add_local_k8scluster_ok
garciadeblase92a18d2020-07-03 16:24:23 +0000559
garciadeblasb4c35932024-01-22 12:56:21 +0100560 # if lxd is requested, iptables firewall is updated to work with both docker and LXD
561 if [ -n "$INSTALL_LXD" ]; then
562 arrange_docker_default_network_policy
563 fi
Gulsum Atici5e263302023-01-30 19:11:31 +0300564
garciadeblasf407c452024-08-22 14:23:40 +0200565 wget -q -O- https://osm-download.etsi.org/ftp/osm-16.0-sixteen/README2.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200566 track end
garciadeblas0bc87522021-10-20 22:16:17 +0200567 sudo find /etc/osm
568 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblasd8bc5c32018-05-09 17:37:56 +0200569 return 0
570}
571
Gulsum Atici3d3a7672023-02-01 11:15:52 +0300572function arrange_docker_default_network_policy() {
573 echo -e "Fixing firewall so docker and LXD can share the same host without affecting each other."
574 sudo iptables -I DOCKER-USER -j ACCEPT
575 sudo iptables-save | sudo tee /etc/iptables/rules.v4
576 sudo ip6tables-save | sudo tee /etc/iptables/rules.v6
577}
578
romeromonsere366b1a2019-11-19 19:49:26 +0100579function install_k8s_monitoring() {
garciadeblas0bc87522021-10-20 22:16:17 +0200580 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
romeromonsere366b1a2019-11-19 19:49:26 +0100581 # install OSM monitoring
garciadeblasb9a84e42024-05-31 15:06:40 +0200582 sudo $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh -o ${OSM_NAMESPACE} || FATAL_TRACK install_k8s_monitoring "k8s/install_osm_k8s_monitoring.sh failed"
garciadeblas0bc87522021-10-20 22:16:17 +0200583 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
romeromonsere366b1a2019-11-19 19:49:26 +0100584}
585
garciadeblasd8bc5c32018-05-09 17:37:56 +0200586function dump_vars(){
garciadeblas0bc87522021-10-20 22:16:17 +0200587 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
588 echo "APT_PROXY_URL=$APT_PROXY_URL"
garciadeblas250b0b62024-01-22 13:30:59 +0100589 echo "K8S_CLUSTER_ENGINE=$K8S_CLUSTER_ENGINE"
garciadeblas0bc87522021-10-20 22:16:17 +0200590 echo "DEBUG_INSTALL=$DEBUG_INSTALL"
garciadeblas0bc87522021-10-20 22:16:17 +0200591 echo "DOCKER_PROXY_URL=$DOCKER_PROXY_URL"
592 echo "DOCKER_REGISTRY_URL=$DOCKER_REGISTRY_URL"
593 echo "DOCKER_USER=$DOCKER_USER"
594 echo "INSTALL_CACHELXDIMAGES=$INSTALL_CACHELXDIMAGES"
garciadeblas8375da12023-10-10 10:52:29 +0200595 echo "INSTALL_JUJU=$INSTALL_JUJU"
garciadeblas0bc87522021-10-20 22:16:17 +0200596 echo "INSTALL_K8S_MONITOR=$INSTALL_K8S_MONITOR"
garciadeblas0bc87522021-10-20 22:16:17 +0200597 echo "INSTALL_LXD=$INSTALL_LXD"
garciadeblasf69804b2024-01-22 13:09:21 +0100598 echo "INSTALL_DOCKER=$INSTALL_DOCKER"
garciadeblas0bc87522021-10-20 22:16:17 +0200599 echo "OSM_DEVOPS=$OSM_DEVOPS"
600 echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
garciadeblase3a84a52024-09-27 11:34:55 +0200601 echo "OSM_K8S_EXTERNAL_IP=$OSM_K8S_EXTERNAL_IP"
garciadeblas7b53d262022-11-04 23:18:48 +0100602 echo "OSM_HELM_WORK_DIR=$OSM_HELM_WORK_DIR"
garciadeblas325032a2023-04-13 18:07:44 +0200603 echo "OSM_NAMESPACE=$OSM_NAMESPACE"
garciadeblas0bc87522021-10-20 22:16:17 +0200604 echo "OSM_VCA_HOST=$OSM_VCA_HOST"
605 echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
606 echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
607 echo "OSM_WORK_DIR=$OSM_WORK_DIR"
608 echo "PULL_IMAGES=$PULL_IMAGES"
609 echo "RECONFIGURE=$RECONFIGURE"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200610 echo "RELEASE=$RELEASE"
611 echo "REPOSITORY=$REPOSITORY"
612 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
613 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200614 echo "SHOWOPTS=$SHOWOPTS"
garciadeblas0bc87522021-10-20 22:16:17 +0200615 echo "TEST_INSTALLER=$TEST_INSTALLER"
garciadeblas0bc87522021-10-20 22:16:17 +0200616 echo "UNINSTALL=$UNINSTALL"
617 echo "UPDATE=$UPDATE"
garciadeblas0bc87522021-10-20 22:16:17 +0200618 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblasd8bc5c32018-05-09 17:37:56 +0200619}
620
garciadeblas453d4582020-12-16 19:03:10 +0100621function parse_docker_registry_url() {
garciadeblas0bc87522021-10-20 22:16:17 +0200622 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblas453d4582020-12-16 19:03:10 +0100623 DOCKER_REGISTRY_USER=$(echo "$DOCKER_REGISTRY_URL" | awk '{split($1,a,"@"); split(a[1],b,":"); print b[1]}')
624 DOCKER_REGISTRY_PASSWORD=$(echo "$DOCKER_REGISTRY_URL" | awk '{split($1,a,"@"); split(a[1],b,":"); print b[2]}')
625 DOCKER_REGISTRY_URL=$(echo "$DOCKER_REGISTRY_URL" | awk '{split($1,a,"@"); print a[2]}')
garciadeblas0bc87522021-10-20 22:16:17 +0200626 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblas453d4582020-12-16 19:03:10 +0100627}
628
garciadeblasadcf95e2022-01-28 17:15:39 +0100629function ctrl_c() {
630 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
631 echo "** Trapped CTRL-C"
632 FATAL "User stopped the installation"
633 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
634}
635
garciadeblasd8bc5c32018-05-09 17:37:56 +0200636UNINSTALL=""
garciadeblasd8bc5c32018-05-09 17:37:56 +0200637UPDATE=""
638RECONFIGURE=""
639TEST_INSTALLER=""
640INSTALL_LXD=""
641SHOWOPTS=""
garciadeblasd8bc5c32018-05-09 17:37:56 +0200642ASSUME_YES=""
garciadeblas0bc87522021-10-20 22:16:17 +0200643APT_PROXY_URL=""
garciadeblasb3797412024-06-06 14:26:24 +0200644K8S_CLUSTER_ENGINE="k3s"
garciadeblas0bc87522021-10-20 22:16:17 +0200645DEBUG_INSTALL=""
garciadeblas18582e92024-05-21 12:13:50 +0200646RELEASE="testing-daily"
647REPOSITORY="testing"
garciadeblasfa3eb332022-11-15 14:11:56 +0100648INSTALL_K8S_MONITOR=""
garciadeblasd8bc5c32018-05-09 17:37:56 +0200649LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
650LXD_REPOSITORY_PATH=""
garciadeblasb7166812024-01-22 13:16:26 +0100651INSTALL_DOCKER=""
garciadeblas8375da12023-10-10 10:52:29 +0200652INSTALL_JUJU=""
garciadeblas0d45bc82018-11-19 14:25:13 +0100653INSTALL_NOHOSTCLIENT=""
garciadeblas0bc87522021-10-20 22:16:17 +0200654INSTALL_CACHELXDIMAGES=""
garciadeblas8d8cd992024-05-21 16:04:14 +0200655INSTALL_AUX_CLUSTER="y"
656INSTALL_MGMT_CLUSTER="y"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200657OSM_DEVOPS=
lavadoe07b1642018-10-25 10:58:34 -0500658OSM_VCA_HOST=
659OSM_VCA_SECRET=
garciadeblasaa3ddf42019-04-04 19:04:32 +0200660OSM_VCA_PUBKEY=
David Garcia79f4f532020-04-07 12:59:34 +0200661OSM_VCA_CLOUDNAME="localhost"
beierlma4a37f72020-06-26 12:55:01 -0400662OSM_VCA_K8S_CLOUDNAME="k8scloud"
garciadeblas325032a2023-04-13 18:07:44 +0200663OSM_NAMESPACE=osm
Mike Marchettib8420852018-09-13 13:45:06 -0400664REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
garciadeblas870e60a2018-11-21 16:44:21 +0100665REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
Mike Marchettib8420852018-09-13 13:45:06 -0400666OSM_WORK_DIR="/etc/osm"
garciadeblas7b53d262022-11-04 23:18:48 +0100667OSM_HELM_WORK_DIR="${OSM_WORK_DIR}/helm"
vijaynag8339ed22019-07-25 17:10:58 +0530668OSM_HOST_VOL="/var/lib/osm"
garciadeblas325032a2023-04-13 18:07:44 +0200669OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_NAMESPACE}"
garciadeblas931a5122023-10-03 17:52:02 +0200670OSM_DOCKER_TAG="testing-daily"
garciadeblas0d45bc82018-11-19 14:25:13 +0100671DOCKER_USER=opensourcemano
672PULL_IMAGES="y"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300673KAFKA_TAG=2.11-1.0.2
garciadeblas0ab16612022-02-22 14:23:57 +0100674KIWIGRID_K8S_SIDECAR_TAG="1.15.6"
675PROMETHEUS_TAG=v2.28.1
676GRAFANA_TAG=8.1.1
lavado6ad812e2019-11-29 10:58:58 -0500677PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
678PROMETHEUS_CADVISOR_TAG=latest
lavado9a8df7c2018-10-24 09:35:34 -0500679KEYSTONEDB_TAG=10
Benjamin Diazba2cca92018-11-08 21:07:15 -0300680OSM_DATABASE_COMMONKEY=
lavado53eb8f52018-11-16 12:58:23 -0500681ELASTIC_VERSION=6.4.2
lavado4e8662c2018-11-28 11:28:14 -0500682ELASTIC_CURATOR_VERSION=5.5.4
vijaynag8339ed22019-07-25 17:10:58 +0530683POD_NETWORK_CIDR=10.244.0.0/16
684K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
685RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
garciadeblas7f1e1042020-11-30 14:07:03 +0000686DOCKER_REGISTRY_URL=
687DOCKER_PROXY_URL=
688MODULE_DOCKER_TAG=
garciadeblas4d89c372021-11-25 11:57:18 +0100689OSM_INSTALLATION_TYPE="Default"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200690
garciadeblase3a84a52024-09-27 11:34:55 +0200691while getopts ":a:c:e:r:n:k:u:R:D:o:O:N:H:S:s:t:U:P:A:l:L:K:d:p:T:f:F:G:M:-: hy" o; do
garciadeblasd8bc5c32018-05-09 17:37:56 +0200692 case "${o}" in
garciadeblas0bc87522021-10-20 22:16:17 +0200693 a)
694 APT_PROXY_URL=${OPTARG}
695 ;;
garciadeblas250b0b62024-01-22 13:30:59 +0100696 c)
697 K8S_CLUSTER_ENGINE=${OPTARG}
698 [ "${K8S_CLUSTER_ENGINE}" == "kubeadm" ] && continue
699 [ "${K8S_CLUSTER_ENGINE}" == "k3s" ] && continue
garciadeblas250b0b62024-01-22 13:30:59 +0100700 echo -e "Invalid argument for -c : ' ${K8S_CLUSTER_ENGINE}'\n" >&2
701 usage && exit 1
702 ;;
garciadeblase3a84a52024-09-27 11:34:55 +0200703 e)
704 OSM_K8S_EXTERNAL_IP="${OPTARG}"
705 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +0200706 r)
Mike Marchettib8420852018-09-13 13:45:06 -0400707 REPOSITORY="${OPTARG}"
708 REPO_ARGS+=(-r "$REPOSITORY")
garciadeblasd8bc5c32018-05-09 17:37:56 +0200709 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +0200710 k)
Mike Marchettib8420852018-09-13 13:45:06 -0400711 REPOSITORY_KEY="${OPTARG}"
712 REPO_ARGS+=(-k "$REPOSITORY_KEY")
garciadeblasd8bc5c32018-05-09 17:37:56 +0200713 ;;
714 u)
Mike Marchettib8420852018-09-13 13:45:06 -0400715 REPOSITORY_BASE="${OPTARG}"
716 REPO_ARGS+=(-u "$REPOSITORY_BASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +0200717 ;;
garciadeblas25e87d22020-01-31 14:27:29 +0100718 R)
719 RELEASE="${OPTARG}"
720 REPO_ARGS+=(-R "$RELEASE")
garciadeblas0d45bc82018-11-19 14:25:13 +0100721 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +0200722 D)
723 OSM_DEVOPS="${OPTARG}"
724 ;;
garciadeblas25e87d22020-01-31 14:27:29 +0100725 H)
726 OSM_VCA_HOST="${OPTARG}"
727 ;;
728 S)
729 OSM_VCA_SECRET="${OPTARG}"
730 ;;
731 s)
garciadeblas325032a2023-04-13 18:07:44 +0200732 OSM_NAMESPACE="${OPTARG}" && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0
garciadeblas25e87d22020-01-31 14:27:29 +0100733 ;;
734 t)
735 OSM_DOCKER_TAG="${OPTARG}"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200736 REPO_ARGS+=(-t "$OSM_DOCKER_TAG")
garciadeblas25e87d22020-01-31 14:27:29 +0100737 ;;
738 U)
739 DOCKER_USER="${OPTARG}"
740 ;;
741 P)
742 OSM_VCA_PUBKEY=$(cat ${OPTARG})
743 ;;
744 A)
745 OSM_VCA_APIPROXY="${OPTARG}"
746 ;;
David Garcia79f4f532020-04-07 12:59:34 +0200747 l)
748 LXD_CLOUD_FILE="${OPTARG}"
749 ;;
750 L)
751 LXD_CRED_FILE="${OPTARG}"
752 ;;
David Garcia404ae122020-04-28 11:47:55 +0200753 K)
754 CONTROLLER_NAME="${OPTARG}"
755 ;;
garciadeblas7f1e1042020-11-30 14:07:03 +0000756 d)
757 DOCKER_REGISTRY_URL="${OPTARG}"
758 ;;
759 p)
760 DOCKER_PROXY_URL="${OPTARG}"
761 ;;
762 T)
763 MODULE_DOCKER_TAG="${OPTARG}"
764 ;;
garciadeblas8d8cd992024-05-21 16:04:14 +0200765 M)
766 KUBECONFIG_MGMT_CLUSTER="${OPTARG}"
767 ;;
768 G)
769 KUBECONFIG_AUX_CLUSTER="${OPTARG}"
770 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +0200771 -)
772 [ "${OPTARG}" == "help" ] && usage && exit 0
garciadeblas0bc87522021-10-20 22:16:17 +0200773 [ "${OPTARG}" == "debug" ] && DEBUG_INSTALL="--debug" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +0200774 [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
garciadeblas8d8cd992024-05-21 16:04:14 +0200775 [ "${OPTARG}" == "no-mgmt-cluster" ] && INSTALL_MGMT_CLUSTER="" && continue
776 [ "${OPTARG}" == "no-aux-cluster" ] && INSTALL_AUX_CLUSTER="" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +0200777 [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
778 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
779 [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
780 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
garciadeblas8375da12023-10-10 10:52:29 +0200781 [ "${OPTARG}" == "lxd" ] && INSTALL_LXD="y" && continue
782 [ "${OPTARG}" == "nolxd" ] && INSTALL_LXD="" && continue
garciadeblasf69804b2024-01-22 13:09:21 +0100783 [ "${OPTARG}" == "docker" ] && INSTALL_DOCKER="y" && continue
784 [ "${OPTARG}" == "nodocker" ] && INSTALL_DOCKER="" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +0200785 [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
garciadeblas8375da12023-10-10 10:52:29 +0200786 [ "${OPTARG}" == "juju" ] && INSTALL_JUJU="y" && continue
787 [ "${OPTARG}" == "nojuju" ] && INSTALL_JUJU="" && continue
Mike Marchettib8420852018-09-13 13:45:06 -0400788 [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
garciadeblasb5a630f2020-03-05 18:32:16 +0000789 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
garciadeblas4d89c372021-11-25 11:57:18 +0100790 [ "${OPTARG}" == "charmed" ] && CHARMED="y" && OSM_INSTALLATION_TYPE="Charmed" && continue
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +0100791 [ "${OPTARG}" == "bundle" ] && continue
Dominik Fleischmann7a97a4c2020-06-04 10:52:05 +0200792 [ "${OPTARG}" == "k8s" ] && continue
Dominik Fleischmann7a97a4c2020-06-04 10:52:05 +0200793 [ "${OPTARG}" == "lxd-cred" ] && continue
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +0100794 [ "${OPTARG}" == "microstack" ] && continue
David Garcia4bd2bf02021-05-05 19:01:43 +0200795 [ "${OPTARG}" == "overlay" ] && continue
David Garcia1bc71022021-05-03 18:27:18 +0200796 [ "${OPTARG}" == "only-vca" ] && continue
aticig5d19ac22022-05-06 13:46:22 +0300797 [ "${OPTARG}" == "small-profile" ] && continue
Dominik Fleischmannc63bed62020-09-25 12:17:54 +0200798 [ "${OPTARG}" == "vca" ] && continue
Dominik Fleischmannc57296f2020-06-09 11:45:08 +0200799 [ "${OPTARG}" == "ha" ] && continue
David Garcia69388c22020-05-07 12:14:19 +0200800 [ "${OPTARG}" == "tag" ] && continue
beierlmf2782c52020-11-05 17:04:05 -0500801 [ "${OPTARG}" == "registry" ] && continue
garciadeblas0bc87522021-10-20 22:16:17 +0200802 [ "${OPTARG}" == "nocachelxdimages" ] && continue
803 [ "${OPTARG}" == "cachelxdimages" ] && INSTALL_CACHELXDIMAGES="--cachelxdimages" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +0200804 echo -e "Invalid option: '--$OPTARG'\n" >&2
805 usage && exit 1
806 ;;
garciadeblas25e87d22020-01-31 14:27:29 +0100807 :)
808 echo "Option -$OPTARG requires an argument" >&2
809 usage && exit 1
810 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +0200811 \?)
812 echo -e "Invalid option: '-$OPTARG'\n" >&2
813 usage && exit 1
814 ;;
garciadeblas25e87d22020-01-31 14:27:29 +0100815 h)
816 usage && exit 0
817 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +0200818 y)
819 ASSUME_YES="y"
820 ;;
821 *)
822 usage && exit 1
823 ;;
824 esac
825done
826
garciadeblas0bc87522021-10-20 22:16:17 +0200827source $OSM_DEVOPS/common/all_funcs
garciadeblas6c66abf2018-05-16 14:46:19 +0200828
garciadeblas0bc87522021-10-20 22:16:17 +0200829[ -z "${DEBUG_INSTALL}" ] || DEBUG Debug is on
830[ -n "$SHOWOPTS" ] && dump_vars && exit 0
831
832# Uninstall if "--uninstall"
833if [ -n "$UNINSTALL" ]; then
834 if [ -n "$CHARMED" ]; then
garciadeblas4d89c372021-11-25 11:57:18 +0100835 ${OSM_DEVOPS}/installers/charmed_uninstall.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D $OSM_DEVOPS -t $DOCKER_TAG "$@" || \
836 FATAL_TRACK charmed_uninstall "charmed_uninstall.sh failed"
garciadeblas0bc87522021-10-20 22:16:17 +0200837 else
garciadeblas4d89c372021-11-25 11:57:18 +0100838 ${OSM_DEVOPS}/installers/uninstall_osm.sh "$@" || \
839 FATAL_TRACK community_uninstall "uninstall_osm.sh failed"
garciadeblas0bc87522021-10-20 22:16:17 +0200840 fi
841 echo -e "\nDONE"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200842 exit 0
843fi
844
garciadeblas28d71bd2023-06-07 23:06:50 +0200845# Installation starts here
846
847# Get README and create OSM_TRACK_INSTALLATION_ID
garciadeblasf407c452024-08-22 14:23:40 +0200848wget -q -O- https://osm-download.etsi.org/ftp/osm-16.0-sixteen/README.txt &> /dev/null
garciadeblas28d71bd2023-06-07 23:06:50 +0200849export OSM_TRACK_INSTALLATION_ID="$(date +%s)-$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)"
850
851# Get OS info to be tracked
852os_distro=$(lsb_release -i 2>/dev/null | awk '{print $3}')
853echo $os_distro
854os_release=$(lsb_release -r 2>/dev/null | awk '{print $2}')
855echo $os_release
856os_info="${os_distro}_${os_release}"
857os_info="${os_info// /_}"
858
garciadeblas2fdfb382025-04-29 14:54:23 +0200859# Community_installer
garciadeblas2fdfb382025-04-29 14:54:23 +0200860# This is where installation starts
861install_osm
862echo -e "\nDONE"
863exit 0