blob: 84249a5db114640a609fe2f24b02eb5f1777bea8 [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]"
19 echo -e "Install OSM from binaries or source code (by default, from binaries)"
20 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"
27 echo -e " -b <refspec>: install OSM from source code using a specific branch (master, v2.0, ...) or tag"
28 echo -e " -b master (main dev branch)"
29 echo -e " -b v2.0 (v2.0 branch)"
30 echo -e " -b tags/v1.1.0 (a specific tag)"
31 echo -e " ..."
garciadeblas0bc87522021-10-20 22:16:17 +020032 echo -e " -a <apt proxy url>: use this apt proxy url when downloading apt packages (air-gapped installation)"
vijaynag8339ed22019-07-25 17:10:58 +053033 echo -e " -s <stack name> or <namespace> user defined stack name when installed using swarm or namespace when installed using k8s, default is osm"
Mike Marchettib8420852018-09-13 13:45:06 -040034 echo -e " -H <VCA host> use specific juju host controller IP"
35 echo -e " -S <VCA secret> use VCA/juju secret key"
garciadeblasaa3ddf42019-04-04 19:04:32 +020036 echo -e " -P <VCA pubkey> use VCA/juju public key file"
Adam Israel5ddc97f2019-09-03 18:11:12 -040037 echo -e " -A <VCA apiproxy> use VCA/juju API proxy"
magnussonl1bbe9452020-02-25 13:43:17 +010038 echo -e " --pla: install the PLA module for placement support"
beierlmcca93642021-05-03 16:29:14 -040039 echo -e " -m <MODULE>: install OSM but only rebuild or pull the specified docker images (NG-UI, NBI, LCM, RO, MON, POL, PLA, KAFKA, MONGO, PROMETHEUS, PROMETHEUS-CADVISOR, KEYSTONE-DB, NONE)"
garciadeblas0bc87522021-10-20 22:16:17 +020040 echo -e " -o <ADDON>: ONLY (un)installs one of the addons (k8s_monitor)"
Antonio Marsico75a38c72020-12-21 17:29:42 +010041 echo -e " -O <openrc file path/cloud name>: Install OSM to an OpenStack infrastructure. <openrc file/cloud name> is required. If a <cloud name> is used, the clouds.yaml file should be under ~/.config/openstack/ or /etc/openstack/"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +020042 echo -e " -N <openstack public network name/ID>: Public network name required to setup OSM to OpenStack"
Antonio Marsico75a38c72020-12-21 17:29:42 +010043 echo -e " -f <path to SSH public key>: Public SSH key to use to deploy OSM to OpenStack"
44 echo -e " -F <path to cloud-init file>: Cloud-Init userdata file to deploy OSM to OpenStack"
garciadeblase990f662018-05-18 11:43:39 +020045 echo -e " -D <devops path> use local devops installation path"
Mike Marchettib8420852018-09-13 13:45:06 -040046 echo -e " -w <work dir> Location to store runtime installation"
Mike Marchetti13d76c82018-09-19 15:00:36 -040047 echo -e " -t <docker tag> specify osm docker tag (default is latest)"
David Garcia79f4f532020-04-07 12:59:34 +020048 echo -e " -l: LXD cloud yaml file"
49 echo -e " -L: LXD credentials yaml file"
David Garcia404ae122020-04-28 11:47:55 +020050 echo -e " -K: Specifies the name of the controller to use - The controller must be already bootstrapped"
garciadeblas7f1e1042020-11-30 14:07:03 +000051 echo -e " -d <docker registry URL> use docker registry URL instead of dockerhub"
52 echo -e " -p <docker proxy URL> set docker proxy URL as part of docker CE configuration"
53 echo -e " -T <docker tag> specify docker tag for the modules specified with option -m"
garciadeblas0bc87522021-10-20 22:16:17 +020054 echo -e " --debug: debug mode"
garciadeblas9a510862021-04-21 14:15:56 +020055 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 +020056 echo -e " --cachelxdimages: cache local lxd images, create cronjob for that cache (will make installation longer)"
David Garcia79f4f532020-04-07 12:59:34 +020057 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 +020058 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 -040059 echo -e " --nojuju: do not juju, assumes already installed"
60 echo -e " --nodockerbuild:do not build docker images (use existing locally cached images)"
61 echo -e " --nohostports: do not expose docker ports to host (useful for creating multiple instances of osm on the same host)"
62 echo -e " --nohostclient: do not install the osmclient"
garciadeblase990f662018-05-18 11:43:39 +020063 echo -e " --uninstall: uninstall OSM: remove the containers and delete NAT rules"
64 echo -e " --source: install OSM from source code using the latest stable tag"
garciadeblasd8bc5c32018-05-09 17:37:56 +020065 echo -e " --develop: (deprecated, use '-b master') install OSM from source code using the master branch"
Mike Marchettida8a9c42018-10-01 15:25:15 -040066 echo -e " --pullimages: pull/run osm images from docker.io/opensourcemano"
romeromonser599d5e22020-03-06 10:23:29 +010067 echo -e " --k8s_monitor: install the OSM kubernetes monitoring with prometheus and grafana"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +020068 echo -e " --volume: create a VM volume when installing to OpenStack"
garciadeblasd8bc5c32018-05-09 17:37:56 +020069 echo -e " --showopts: print chosen options and exit (only for debugging)"
Dominik Fleischmann7a97a4c2020-06-04 10:52:05 +020070 echo -e " --charmed: Deploy and operate OSM with Charms on k8s"
71 echo -e " [--bundle <bundle path>]: Specify with which bundle to deploy OSM with charms (--charmed option)"
72 echo -e " [--k8s <kubeconfig path>]: Specify with which kubernetes to deploy OSM with charms (--charmed option)"
Dominik Fleischmannc57296f2020-06-09 11:45:08 +020073 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 +030074 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 +020075 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 +020076 echo -e " [--lxd-cred <yaml path>]: Takes a YAML file as a parameter with the LXD Credentials information (--charmed option)"
77 echo -e " [--microstack]: Installs microstack as a vim. (--charmed option)"
David Garcia4bd2bf02021-05-05 19:01:43 +020078 echo -e " [--overlay]: Add an overlay to override some defaults of the default bundle (--charmed option)"
Dominik Fleischmannc57296f2020-06-09 11:45:08 +020079 echo -e " [--ha]: Installs High Availability bundle. (--charmed option)"
beierlmf2782c52020-11-05 17:04:05 -050080 echo -e " [--tag]: Docker image tag. (--charmed option)"
81 echo -e " [--registry]: Docker registry with optional credentials as user:pass@hostname:port (--charmed option)"
garciadeblas0bc87522021-10-20 22:16:17 +020082 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblasd8bc5c32018-05-09 17:37:56 +020083}
84
Mike Marchettib8420852018-09-13 13:45:06 -040085# takes a juju/accounts.yaml file and returns the password specific
Adam Israel8232e562018-11-21 16:47:45 -050086# for a controller. I wrote this using only bash tools to minimize
Mike Marchettib8420852018-09-13 13:45:06 -040087# additions of other packages
88function parse_juju_password {
garciadeblas0bc87522021-10-20 22:16:17 +020089 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
90 password_file="${HOME}/.local/share/juju/accounts.yaml"
91 local controller_name=$1
92 local s='[[:space:]]*' w='[a-zA-Z0-9_-]*' fs=$(echo @|tr @ '\034')
93 sed -ne "s|^\($s\):|\1|" \
94 -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
95 -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $password_file |
96 awk -F$fs -v controller=$controller_name '{
97 indent = length($1)/2;
98 vname[indent] = $2;
99 for (i in vname) {if (i > indent) {delete vname[i]}}
100 if (length($3) > 0) {
101 vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
102 if (match(vn,controller) && match($2,"password")) {
103 printf("%s",$3);
104 }
105 }
106 }'
107 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
108}
109
110function set_vca_variables() {
111 OSM_VCA_CLOUDNAME="lxd-cloud"
112 [ -n "$OSM_VCA_HOST" ] && OSM_VCA_CLOUDNAME="localhost"
113 if [ -z "$OSM_VCA_HOST" ]; then
114 [ -z "$CONTROLLER_NAME" ] && OSM_VCA_HOST=`sg lxd -c "juju show-controller $OSM_STACK_NAME"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
115 [ -n "$CONTROLLER_NAME" ] && OSM_VCA_HOST=`juju show-controller $CONTROLLER_NAME |grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
116 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
117 fi
118 if [ -z "$OSM_VCA_SECRET" ]; then
119 [ -z "$CONTROLLER_NAME" ] && OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME)
120 [ -n "$CONTROLLER_NAME" ] && OSM_VCA_SECRET=$(parse_juju_password $CONTROLLER_NAME)
121 [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
122 fi
123 if [ -z "$OSM_VCA_PUBKEY" ]; then
124 OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
125 [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
126 fi
127 if [ -z "$OSM_VCA_CACERT" ]; then
128 [ -z "$CONTROLLER_NAME" ] && OSM_VCA_CACERT=$(juju controllers --format json | jq -r --arg controller $OSM_STACK_NAME '.controllers[$controller]["ca-cert"]' | base64 | tr -d \\n)
129 [ -n "$CONTROLLER_NAME" ] && OSM_VCA_CACERT=$(juju controllers --format json | jq -r --arg controller $CONTROLLER_NAME '.controllers[$controller]["ca-cert"]' | base64 | tr -d \\n)
130 [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
131 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400132}
133
Benjamin Diazba2cca92018-11-08 21:07:15 -0300134function generate_secret() {
garciadeblas0bc87522021-10-20 22:16:17 +0200135 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
Benjamin Diazba2cca92018-11-08 21:07:15 -0300136 head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32
garciadeblas0bc87522021-10-20 22:16:17 +0200137 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
calvinosanc10c82da02020-08-17 11:45:15 +0200138}
139
beierlm2ce2b002021-12-07 16:02:22 -0500140function check_packages() {
141 NEEDED_PACKAGES="$1"
142 echo -e "Checking required packages: ${NEEDED_PACKAGES}"
143 for PACKAGE in ${NEEDED_PACKAGES} ; do
garciadeblas835088e2022-01-28 11:25:18 +0100144 dpkg -L ${PACKAGE}
beierlm2ce2b002021-12-07 16:02:22 -0500145 if [ $? -ne 0 ]; then
garciadeblas835088e2022-01-28 11:25:18 +0100146 echo -e "Package ${PACKAGE} is not installed."
147 echo -e "Updating apt-cache ..."
beierlm2ce2b002021-12-07 16:02:22 -0500148 sudo apt-get update
garciadeblas835088e2022-01-28 11:25:18 +0100149 echo -e "Installing ${PACKAGE} ..."
beierlm2ce2b002021-12-07 16:02:22 -0500150 sudo apt-get install -y ${PACKAGE} || FATAL "failed to install ${PACKAGE}"
151 fi
152 done
153 echo -e "Required packages are present: ${NEEDED_PACKAGES}"
154}
155
garciadeblasd8bc5c32018-05-09 17:37:56 +0200156function ask_user(){
157 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
158 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
159 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
garciadeblas0bc87522021-10-20 22:16:17 +0200160 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblasd8bc5c32018-05-09 17:37:56 +0200161 read -e -p "$1" USER_CONFIRMATION
162 while true ; do
163 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
164 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
165 [ "${USER_CONFIRMATION,,}" == "yes" ] || [ "${USER_CONFIRMATION,,}" == "y" ] && return 0
166 [ "${USER_CONFIRMATION,,}" == "no" ] || [ "${USER_CONFIRMATION,,}" == "n" ] && return 1
167 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
168 done
garciadeblas0bc87522021-10-20 22:16:17 +0200169 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblasd8bc5c32018-05-09 17:37:56 +0200170}
171
garciadeblasd8bc5c32018-05-09 17:37:56 +0200172function install_osmclient(){
garciadeblas0bc87522021-10-20 22:16:17 +0200173 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblasd8bc5c32018-05-09 17:37:56 +0200174 CLIENT_RELEASE=${RELEASE#"-R "}
175 CLIENT_REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
176 CLIENT_REPOSITORY=${REPOSITORY#"-r "}
garciadeblasd8bc5c32018-05-09 17:37:56 +0200177 CLIENT_REPOSITORY_BASE=${REPOSITORY_BASE#"-u "}
178 key_location=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
garciadeblas0bc87522021-10-20 22:16:17 +0200179 curl $key_location | sudo APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add -
garciadeblas078f5982019-11-27 15:06:06 +0100180 sudo add-apt-repository -y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient IM"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200181 sudo apt-get update
garciadeblas078f5982019-11-27 15:06:06 +0100182 sudo apt-get install -y python3-pip
183 sudo -H LC_ALL=C python3 -m pip install -U pip
garciadeblasa9954892020-01-22 16:05:05 +0100184 sudo -H LC_ALL=C python3 -m pip install -U python-magic pyangbind verboselogs
garciadeblasda89ee72019-11-28 02:19:59 +0100185 sudo apt-get install -y python3-osm-im python3-osmclient
beierlm920d7562021-04-21 05:13:53 -0400186 if [ -f /usr/lib/python3/dist-packages/osm_im/requirements.txt ]; then
beierlm021b3072021-04-27 14:33:24 -0400187 python3 -m pip install -r /usr/lib/python3/dist-packages/osm_im/requirements.txt
beierlm920d7562021-04-21 05:13:53 -0400188 fi
189 if [ -f /usr/lib/python3/dist-packages/osmclient/requirements.txt ]; then
garciadeblas56005542022-08-29 14:56:02 +0200190 sudo apt-get install -y libcurl4-openssl-dev libssl-dev libmagic1
beierlm021b3072021-04-27 14:33:24 -0400191 python3 -m pip install -r /usr/lib/python3/dist-packages/osmclient/requirements.txt
beierlm920d7562021-04-21 05:13:53 -0400192 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +0200193 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME=`lxc list | awk '($2=="SO-ub"){print $6}'`
194 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME=`lxc list | awk '($2=="RO"){print $6}'`
garciadeblasd8bc5c32018-05-09 17:37:56 +0200195 echo -e "\nOSM client installed"
garciadeblasc3226982018-11-27 11:32:47 +0100196 if [ -z "$INSTALL_LIGHTWEIGHT" ]; then
197 echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
198 echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
199 echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
200 else
201 echo -e "OSM client assumes that OSM host is running in localhost (127.0.0.1)."
202 echo -e "In case you want to interact with a different OSM host, you will have to configure this env variable in your .bashrc file:"
203 echo " export OSM_HOSTNAME=<OSM_host>"
204 fi
garciadeblas0bc87522021-10-20 22:16:17 +0200205 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblasd8bc5c32018-05-09 17:37:56 +0200206 return 0
207}
208
garciadeblas453d4582020-12-16 19:03:10 +0100209function docker_login() {
garciadeblas0bc87522021-10-20 22:16:17 +0200210 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblas453d4582020-12-16 19:03:10 +0100211 echo "Docker login"
garciadeblas0bc87522021-10-20 22:16:17 +0200212 [ -z "${DEBUG_INSTALL}" ] || DEBUG "Docker registry user: ${DOCKER_REGISTRY_USER}"
213 sg docker -c "docker login -u ${DOCKER_REGISTRY_USER} -p ${DOCKER_REGISTRY_PASSWORD} --password-stdin"
214 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblas453d4582020-12-16 19:03:10 +0100215}
216
garciadeblasd8bc5c32018-05-09 17:37:56 +0200217function generate_docker_images() {
garciadeblas0bc87522021-10-20 22:16:17 +0200218 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblasd8bc5c32018-05-09 17:37:56 +0200219 echo "Pulling and generating docker images"
garciadeblas453d4582020-12-16 19:03:10 +0100220 [ -n "${DOCKER_REGISTRY_URL}" ] && docker_login
Michael Marchettiee374142018-08-02 22:47:16 +0200221
garciadeblas7f1e1042020-11-30 14:07:03 +0000222 echo "Pulling docker images"
lavado60216242018-10-10 23:44:28 +0200223
garciadeblas0e596bc2018-05-28 16:04:42 +0200224 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q KAFKA ; then
225 sg docker -c "docker pull wurstmeister/zookeeper" || FATAL "cannot get zookeeper docker image"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300226 sg docker -c "docker pull wurstmeister/kafka:${KAFKA_TAG}" || FATAL "cannot get kafka docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200227 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400228
lavado60216242018-10-10 23:44:28 +0200229 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
230 sg docker -c "docker pull prom/prometheus:${PROMETHEUS_TAG}" || FATAL "cannot get prometheus docker image"
231 fi
232
garciadeblasfc5bb142019-12-10 10:49:12 +0100233 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS-CADVISOR ; then
234 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
235 fi
236
lavado6ad812e2019-11-29 10:58:58 -0500237 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q GRAFANA ; then
238 sg docker -c "docker pull grafana/grafana:${GRAFANA_TAG}" || FATAL "cannot get grafana docker image"
garciadeblas0ab16612022-02-22 14:23:57 +0100239 sg docker -c "docker pull kiwigrid/k8s-sidecar:${KIWIGRID_K8S_SIDECAR_TAG}" || FATAL "cannot get kiwigrid k8s-sidecar docker image"
garciadeblasfc5bb142019-12-10 10:49:12 +0100240 fi
lavado6ad812e2019-11-29 10:58:58 -0500241
garciadeblas4a83e6e2018-12-04 14:55:09 +0100242 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI || echo $TO_REBUILD | grep -q KEYSTONE-DB ; then
lavado9a8df7c2018-10-24 09:35:34 -0500243 sg docker -c "docker pull mariadb:${KEYSTONEDB_TAG}" || FATAL "cannot get keystone-db docker image"
244 fi
245
garciadeblas4a83e6e2018-12-04 14:55:09 +0100246 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
247 sg docker -c "docker pull mysql:5" || FATAL "cannot get mysql docker image"
248 fi
249
Mike Marchettida8a9c42018-10-01 15:25:15 -0400250 if [ -n "$PULL_IMAGES" ]; then
garciadeblas7f1e1042020-11-30 14:07:03 +0000251 echo "Pulling OSM docker images"
beierlmcca93642021-05-03 16:29:14 -0400252 for module in MON POL NBI KEYSTONE RO LCM NG-UI PLA osmclient; do
garciadeblas7f1e1042020-11-30 14:07:03 +0000253 module_lower=${module,,}
garciadeblas7f1e1042020-11-30 14:07:03 +0000254 if [ $module == "PLA" -a ! -n "$INSTALL_PLA" ]; then
255 continue
256 fi
beierlm920d7562021-04-21 05:13:53 -0400257 module_tag="${OSM_DOCKER_TAG}"
garciadeblas7f1e1042020-11-30 14:07:03 +0000258 if [ -n "${MODULE_DOCKER_TAG}" ] && echo $TO_REBUILD | grep -q $module ; then
259 module_tag="${MODULE_DOCKER_TAG}"
260 fi
beierlm920d7562021-04-21 05:13:53 -0400261 echo "Pulling ${DOCKER_REGISTRY_URL}${DOCKER_USER}/${module_lower}:${module_tag} docker image"
garciadeblas7f1e1042020-11-30 14:07:03 +0000262 sg docker -c "docker pull ${DOCKER_REGISTRY_URL}${DOCKER_USER}/${module_lower}:${module_tag}" || FATAL "cannot pull $module docker image"
263 done
vijaynag4b57d462020-06-08 14:23:10 +0000264 else
garciadeblas7f1e1042020-11-30 14:07:03 +0000265 _build_from=$COMMIT_ID
266 [ -z "$_build_from" ] && _build_from="latest"
267 echo "OSM Docker images generated from $_build_from"
garciadeblas0bc87522021-10-20 22:16:17 +0200268 LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
269 trap 'rm -rf "${LWTEMPDIR}"' EXIT
beierlmcca93642021-05-03 16:29:14 -0400270 for module in MON POL NBI KEYSTONE RO LCM NG-UI PLA; do
garciadeblas7f1e1042020-11-30 14:07:03 +0000271 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q ${module} ; then
272 module_lower=${module,,}
garciadeblas7f1e1042020-11-30 14:07:03 +0000273 if [ $module == "PLA" -a ! -n "$INSTALL_PLA" ]; then
274 continue
275 fi
276 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/$module
277 git -C ${LWTEMPDIR}/${module} checkout ${COMMIT_ID}
278 sg docker -c "docker build ${LWTEMPDIR}/${module} -f ${LWTEMPDIR}/${module}/docker/Dockerfile -t ${DOCKER_USER}/${module_lower} --no-cache" || FATAL "cannot build ${module} docker image"
279 fi
280 done
281 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q osmclient; then
282 BUILD_ARGS+=(--build-arg REPOSITORY="$REPOSITORY")
283 BUILD_ARGS+=(--build-arg RELEASE="$RELEASE")
284 BUILD_ARGS+=(--build-arg REPOSITORY_KEY="$REPOSITORY_KEY")
285 BUILD_ARGS+=(--build-arg REPOSITORY_BASE="$REPOSITORY_BASE")
286 sg docker -c "docker build -t ${DOCKER_USER}/osmclient ${BUILD_ARGS[@]} -f $OSM_DEVOPS/docker/osmclient ."
vijaynag4b57d462020-06-08 14:23:10 +0000287 fi
garciadeblas7f1e1042020-11-30 14:07:03 +0000288 echo "Finished generation of docker images"
Mike Marchettib8420852018-09-13 13:45:06 -0400289 fi
lavado6ad812e2019-11-29 10:58:58 -0500290
garciadeblas7f1e1042020-11-30 14:07:03 +0000291 echo "Finished pulling and generating docker images"
garciadeblas0bc87522021-10-20 22:16:17 +0200292 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblasd8bc5c32018-05-09 17:37:56 +0200293}
294
garciadeblas5b857d32018-05-24 18:37:58 +0200295function cmp_overwrite() {
garciadeblas0bc87522021-10-20 22:16:17 +0200296 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblas5b857d32018-05-24 18:37:58 +0200297 file1="$1"
298 file2="$2"
299 if ! $(cmp "${file1}" "${file2}" >/dev/null 2>&1); then
300 if [ -f "${file2}" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400301 ask_user "The file ${file2} already exists. Overwrite (y/N)? " n && cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200302 else
Mike Marchettib8420852018-09-13 13:45:06 -0400303 cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200304 fi
305 fi
garciadeblas0bc87522021-10-20 22:16:17 +0200306 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
beierlma4a37f72020-06-26 12:55:01 -0400307}
308
309function generate_k8s_manifest_files() {
garciadeblas0bc87522021-10-20 22:16:17 +0200310 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
beierlma4a37f72020-06-26 12:55:01 -0400311 #Kubernetes resources
garciadeblas0bc87522021-10-20 22:16:17 +0200312 sudo cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
garciadeblas3a1db652022-09-30 12:00:27 +0200313 sudo rm -f ${OSM_DOCKER_WORK_DIR}/osm_pods/ng-prometheus.yaml
garciadeblas0bc87522021-10-20 22:16:17 +0200314 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
beierlma4a37f72020-06-26 12:55:01 -0400315}
316
317function generate_prometheus_grafana_files() {
garciadeblas0bc87522021-10-20 22:16:17 +0200318 #this only works with docker swarm
319 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
beierlma4a37f72020-06-26 12:55:01 -0400320 # Prometheus files
garciadeblas0bc87522021-10-20 22:16:17 +0200321 sudo mkdir -p $OSM_DOCKER_WORK_DIR/prometheus
322 sudo cp -b ${OSM_DEVOPS}/installers/docker/prometheus/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus/prometheus.yml
beierlma4a37f72020-06-26 12:55:01 -0400323
324 # Grafana files
garciadeblas0bc87522021-10-20 22:16:17 +0200325 sudo mkdir -p $OSM_DOCKER_WORK_DIR/grafana
326 sudo cp -b ${OSM_DEVOPS}/installers/docker/grafana/dashboards-osm.yml $OSM_DOCKER_WORK_DIR/grafana/dashboards-osm.yml
327 sudo cp -b ${OSM_DEVOPS}/installers/docker/grafana/datasource-prometheus.yml $OSM_DOCKER_WORK_DIR/grafana/datasource-prometheus.yml
328 sudo cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-sample-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-sample-dashboard.json
329 sudo cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-system-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-system-dashboard.json
beierlma4a37f72020-06-26 12:55:01 -0400330
331 # Prometheus Exporters files
garciadeblas0bc87522021-10-20 22:16:17 +0200332 sudo mkdir -p $OSM_DOCKER_WORK_DIR/prometheus_exporters
333 sudo cp -b ${OSM_DEVOPS}/installers/docker/prometheus_exporters/node_exporter.service $OSM_DOCKER_WORK_DIR/prometheus_exporters/node_exporter.service
334 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
beierlma4a37f72020-06-26 12:55:01 -0400335}
336
garciadeblasd8bc5c32018-05-09 17:37:56 +0200337function generate_docker_env_files() {
garciadeblas0bc87522021-10-20 22:16:17 +0200338 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200339 echo "Doing a backup of existing env files"
garciadeblas0bc87522021-10-20 22:16:17 +0200340 sudo cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
341 sudo cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
342 sudo cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
343 sudo cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
344 sudo cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
345 sudo cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
346 sudo cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
347 sudo cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200348
garciadeblasd8bc5c32018-05-09 17:37:56 +0200349 echo "Generating docker env files"
Benjamin Diazba2cca92018-11-08 21:07:15 -0300350 # LCM
351 if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
garciadeblas0bc87522021-10-20 22:16:17 +0200352 echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300353 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400354
Benjamin Diazba2cca92018-11-08 21:07:15 -0300355 if ! grep -Fq "OSMLCM_VCA_HOST" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200356 echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300357 else
garciadeblas0bc87522021-10-20 22:16:17 +0200358 sudo sed -i "s|OSMLCM_VCA_HOST.*|OSMLCM_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/lcm.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300359 fi
360
361 if ! grep -Fq "OSMLCM_VCA_SECRET" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200362 echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300363 else
garciadeblas0bc87522021-10-20 22:16:17 +0200364 sudo sed -i "s|OSMLCM_VCA_SECRET.*|OSMLCM_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/lcm.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300365 fi
366
garciadeblasaa3ddf42019-04-04 19:04:32 +0200367 if ! grep -Fq "OSMLCM_VCA_PUBKEY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200368 echo "OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasaa3ddf42019-04-04 19:04:32 +0200369 else
garciadeblas0bc87522021-10-20 22:16:17 +0200370 sudo sed -i "s|OSMLCM_VCA_PUBKEY.*|OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasaa3ddf42019-04-04 19:04:32 +0200371 fi
372
Adam Israelbe7676a2019-10-02 16:10:53 -0400373 if ! grep -Fq "OSMLCM_VCA_CACERT" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200374 echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
Adam Israelbe7676a2019-10-02 16:10:53 -0400375 else
garciadeblas0bc87522021-10-20 22:16:17 +0200376 sudo sed -i "s|OSMLCM_VCA_CACERT.*|OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/lcm.env
Adam Israelbe7676a2019-10-02 16:10:53 -0400377 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -0300378
David Garcia6cbfee12020-10-23 10:40:20 +0200379 if [ -n "$OSM_VCA_APIPROXY" ]; then
380 if ! grep -Fq "OSMLCM_VCA_APIPROXY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200381 echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
David Garcia6cbfee12020-10-23 10:40:20 +0200382 else
garciadeblas0bc87522021-10-20 22:16:17 +0200383 sudo sed -i "s|OSMLCM_VCA_APIPROXY.*|OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
David Garcia6cbfee12020-10-23 10:40:20 +0200384 fi
Adam Israel5ddc97f2019-09-03 18:11:12 -0400385 fi
386
garciadeblasa2e41842019-12-18 11:05:24 +0100387 if ! grep -Fq "OSMLCM_VCA_ENABLEOSUPGRADE" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200388 echo "# OSMLCM_VCA_ENABLEOSUPGRADE=false" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasa2e41842019-12-18 11:05:24 +0100389 fi
390
391 if ! grep -Fq "OSMLCM_VCA_APTMIRROR" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200392 echo "# OSMLCM_VCA_APTMIRROR=http://archive.ubuntu.com/ubuntu/" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasa2e41842019-12-18 11:05:24 +0100393 fi
394
David Garcia79f4f532020-04-07 12:59:34 +0200395 if ! grep -Fq "OSMLCM_VCA_CLOUD" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200396 echo "OSMLCM_VCA_CLOUD=${OSM_VCA_CLOUDNAME}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
David Garcia79f4f532020-04-07 12:59:34 +0200397 else
garciadeblas0bc87522021-10-20 22:16:17 +0200398 sudo sed -i "s|OSMLCM_VCA_CLOUD.*|OSMLCM_VCA_CLOUD=${OSM_VCA_CLOUDNAME}|g" $OSM_DOCKER_WORK_DIR/lcm.env
David Garcia79f4f532020-04-07 12:59:34 +0200399 fi
400
beierlma4a37f72020-06-26 12:55:01 -0400401 if ! grep -Fq "OSMLCM_VCA_K8S_CLOUD" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200402 echo "OSMLCM_VCA_K8S_CLOUD=${OSM_VCA_K8S_CLOUDNAME}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
beierlma4a37f72020-06-26 12:55:01 -0400403 else
garciadeblas0bc87522021-10-20 22:16:17 +0200404 sudo sed -i "s|OSMLCM_VCA_K8S_CLOUD.*|OSMLCM_VCA_K8S_CLOUD=${OSM_VCA_K8S_CLOUDNAME}|g" $OSM_DOCKER_WORK_DIR/lcm.env
beierlma4a37f72020-06-26 12:55:01 -0400405 fi
406
Benjamin Diazba2cca92018-11-08 21:07:15 -0300407 # RO
408 MYSQL_ROOT_PASSWORD=$(generate_secret)
Mike Marchettib8420852018-09-13 13:45:06 -0400409 if [ ! -f $OSM_DOCKER_WORK_DIR/ro-db.env ]; then
garciadeblas0bc87522021-10-20 22:16:17 +0200410 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo tee $OSM_DOCKER_WORK_DIR/ro-db.env
garciadeblas5b857d32018-05-24 18:37:58 +0200411 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400412 if [ ! -f $OSM_DOCKER_WORK_DIR/ro.env ]; then
garciadeblas0bc87522021-10-20 22:16:17 +0200413 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo tee $OSM_DOCKER_WORK_DIR/ro.env
garciadeblas5b857d32018-05-24 18:37:58 +0200414 fi
tierno9ec1fe92020-11-25 13:16:51 +0000415 if ! grep -Fq "OSMRO_DATABASE_COMMONKEY" $OSM_DOCKER_WORK_DIR/ro.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200416 echo "OSMRO_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/ro.env
tierno9ec1fe92020-11-25 13:16:51 +0000417 fi
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100418
Benjamin Diazba2cca92018-11-08 21:07:15 -0300419 # Keystone
Benjamin Diazba2cca92018-11-08 21:07:15 -0300420 KEYSTONE_DB_PASSWORD=$(generate_secret)
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100421 SERVICE_PASSWORD=$(generate_secret)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100422 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone-db.env ]; then
garciadeblas0bc87522021-10-20 22:16:17 +0200423 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo tee $OSM_DOCKER_WORK_DIR/keystone-db.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100424 fi
425 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone.env ]; then
garciadeblas0bc87522021-10-20 22:16:17 +0200426 echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo tee $OSM_DOCKER_WORK_DIR/keystone.env
427 echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |sudo tee -a $OSM_DOCKER_WORK_DIR/keystone.env
428 echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |sudo tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100429 fi
430
Benjamin Diazba2cca92018-11-08 21:07:15 -0300431 # NBI
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100432 if [ ! -f $OSM_DOCKER_WORK_DIR/nbi.env ]; then
garciadeblas0bc87522021-10-20 22:16:17 +0200433 echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |sudo tee $OSM_DOCKER_WORK_DIR/nbi.env
434 echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/nbi.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100435 fi
436
Benjamin Diazba2cca92018-11-08 21:07:15 -0300437 # MON
438 if [ ! -f $OSM_DOCKER_WORK_DIR/mon.env ]; then
garciadeblas0bc87522021-10-20 22:16:17 +0200439 echo "OSMMON_KEYSTONE_SERVICE_PASSWORD=${SERVICE_PASSWORD}" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
440 echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
441 echo "OSMMON_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/mon" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300442 fi
443
444 if ! grep -Fq "OS_NOTIFIER_URI" $OSM_DOCKER_WORK_DIR/mon.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200445 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300446 else
garciadeblas0bc87522021-10-20 22:16:17 +0200447 sudo sed -i "s|OS_NOTIFIER_URI.*|OS_NOTIFIER_URI=http://$DEFAULT_IP:8662|g" $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300448 fi
449
450 if ! grep -Fq "OSMMON_VCA_HOST" $OSM_DOCKER_WORK_DIR/mon.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200451 echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300452 else
garciadeblas0bc87522021-10-20 22:16:17 +0200453 sudo sed -i "s|OSMMON_VCA_HOST.*|OSMMON_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300454 fi
455
456 if ! grep -Fq "OSMMON_VCA_SECRET" $OSM_DOCKER_WORK_DIR/mon.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200457 echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300458 else
garciadeblas0bc87522021-10-20 22:16:17 +0200459 sudo sed -i "s|OSMMON_VCA_SECRET.*|OSMMON_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300460 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400461
Adam Israel6d8adf32019-12-05 15:46:54 -0500462 if ! grep -Fq "OSMMON_VCA_CACERT" $OSM_DOCKER_WORK_DIR/mon.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200463 echo "OSMMON_VCA_CACERT=${OSM_VCA_CACERT}" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
Adam Israel6d8adf32019-12-05 15:46:54 -0500464 else
garciadeblas0bc87522021-10-20 22:16:17 +0200465 sudo sed -i "s|OSMMON_VCA_CACERT.*|OSMMON_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/mon.env
Adam Israel6d8adf32019-12-05 15:46:54 -0500466 fi
467
468
Benjamin Diaz04560882019-02-26 17:25:07 -0300469 # POL
470 if [ ! -f $OSM_DOCKER_WORK_DIR/pol.env ]; then
garciadeblas0bc87522021-10-20 22:16:17 +0200471 echo "OSMPOL_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/pol" | sudo tee -a $OSM_DOCKER_WORK_DIR/pol.env
Benjamin Diaz04560882019-02-26 17:25:07 -0300472 fi
473
garciadeblasd8bc5c32018-05-09 17:37:56 +0200474 echo "Finished generation of docker env files"
garciadeblas0bc87522021-10-20 22:16:17 +0200475 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
vijaynag8339ed22019-07-25 17:10:58 +0530476}
477
478#creates secrets from env files which will be used by containers
479function kube_secrets(){
garciadeblas0bc87522021-10-20 22:16:17 +0200480 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
vijaynag8339ed22019-07-25 17:10:58 +0530481 kubectl create ns $OSM_STACK_NAME
482 kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env
483 kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env
484 kubectl create secret generic nbi-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/nbi.env
485 kubectl create secret generic ro-db-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro-db.env
486 kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env
487 kubectl create secret generic keystone-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/keystone.env
vijaynag8339ed22019-07-25 17:10:58 +0530488 kubectl create secret generic pol-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/pol.env
garciadeblas0bc87522021-10-20 22:16:17 +0200489 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblasf6ed60c2020-07-08 14:30:29 +0000490}
491
492#deploys osm pods and services
493function deploy_osm_services() {
garciadeblas0bc87522021-10-20 22:16:17 +0200494 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
vijaynag8339ed22019-07-25 17:10:58 +0530495 kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR
garciadeblas0bc87522021-10-20 22:16:17 +0200496 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
vijaynag8339ed22019-07-25 17:10:58 +0530497}
498
David Garciaa1376012020-10-19 15:42:42 +0200499#deploy charmed services
500function deploy_charmed_services() {
garciadeblas0bc87522021-10-20 22:16:17 +0200501 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
David Garciaa1376012020-10-19 15:42:42 +0200502 juju add-model $OSM_STACK_NAME $OSM_VCA_K8S_CLOUDNAME
David Garciad68e0b42021-06-28 16:50:42 +0200503 juju deploy ch:mongodb-k8s -m $OSM_STACK_NAME
garciadeblas0bc87522021-10-20 22:16:17 +0200504 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
David Garciaa1376012020-10-19 15:42:42 +0200505}
506
magnussonl1bbe9452020-02-25 13:43:17 +0100507function deploy_osm_pla_service() {
garciadeblas0bc87522021-10-20 22:16:17 +0200508 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
magnussonl1bbe9452020-02-25 13:43:17 +0100509 # corresponding to namespace_vol
garciadeblas0bc87522021-10-20 22:16:17 +0200510 sudo sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_DOCKER_WORK_DIR/osm_pla/pla.yaml
magnussonl1bbe9452020-02-25 13:43:17 +0100511 # corresponding to deploy_osm_services
512 kubectl apply -n $OSM_STACK_NAME -f $OSM_DOCKER_WORK_DIR/osm_pla
garciadeblas0bc87522021-10-20 22:16:17 +0200513 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
romeromonser599d5e22020-03-06 10:23:29 +0100514}
515
vijaynag8339ed22019-07-25 17:10:58 +0530516function parse_yaml() {
garciadeblas0bc87522021-10-20 22:16:17 +0200517 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
vijaynag8339ed22019-07-25 17:10:58 +0530518 TAG=$1
garciadeblas7f1e1042020-11-30 14:07:03 +0000519 shift
520 services=$@
521 for module in $services; do
522 if [ "$module" == "pla" ]; then
523 if [ -n "$INSTALL_PLA" ]; then
524 echo "Updating K8s manifest file from opensourcemano\/${module}:.* to ${DOCKER_REGISTRY_URL}${DOCKER_USER}\/${module}:${TAG}"
garciadeblas0bc87522021-10-20 22:16:17 +0200525 sudo sed -i "s#opensourcemano/pla:.*#${DOCKER_REGISTRY_URL}${DOCKER_USER}/pla:${TAG}#g" ${OSM_DOCKER_WORK_DIR}/osm_pla/pla.yaml
garciadeblas7f1e1042020-11-30 14:07:03 +0000526 fi
527 else
528 echo "Updating K8s manifest file from opensourcemano\/${module}:.* to ${DOCKER_REGISTRY_URL}${DOCKER_USER}\/${module}:${TAG}"
garciadeblas0bc87522021-10-20 22:16:17 +0200529 sudo sed -i "s#opensourcemano/${module}:.*#${DOCKER_REGISTRY_URL}${DOCKER_USER}/${module}:${TAG}#g" ${OSM_K8S_WORK_DIR}/${module}.yaml
garciadeblas7f1e1042020-11-30 14:07:03 +0000530 fi
vijaynag8339ed22019-07-25 17:10:58 +0530531 done
garciadeblas0bc87522021-10-20 22:16:17 +0200532 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblas7f1e1042020-11-30 14:07:03 +0000533}
534
535function update_manifest_files() {
bravofc973b572020-10-21 16:58:50 -0300536 osm_services="nbi lcm ro pol mon ng-ui keystone pla prometheus"
garciadeblas7f1e1042020-11-30 14:07:03 +0000537 list_of_services=""
538 for module in $osm_services; do
539 module_upper="${module^^}"
garciadeblas7f1e1042020-11-30 14:07:03 +0000540 if ! echo $TO_REBUILD | grep -q $module_upper ; then
541 list_of_services="$list_of_services $module"
542 fi
543 done
garciadeblas96155042022-06-22 16:26:22 +0200544 if [ ! "$OSM_DOCKER_TAG" == "12" ]; then
garciadeblas7f1e1042020-11-30 14:07:03 +0000545 parse_yaml $OSM_DOCKER_TAG $list_of_services
546 fi
547 if [ -n "$MODULE_DOCKER_TAG" ]; then
548 parse_yaml $MODULE_DOCKER_TAG $list_of_services_to_rebuild
549 fi
garciadeblas0bc87522021-10-20 22:16:17 +0200550 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
vijaynag8339ed22019-07-25 17:10:58 +0530551}
552
553function namespace_vol() {
garciadeblas0bc87522021-10-20 22:16:17 +0200554 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
David Garciaa1376012020-10-19 15:42:42 +0200555 osm_services="nbi lcm ro pol mon kafka mysql prometheus"
vijaynag8339ed22019-07-25 17:10:58 +0530556 for osm in $osm_services; do
garciadeblas0bc87522021-10-20 22:16:17 +0200557 sudo sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml
vijaynag8339ed22019-07-25 17:10:58 +0530558 done
garciadeblas0bc87522021-10-20 22:16:17 +0200559 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblas6c66abf2018-05-16 14:46:19 +0200560}
561
garciadeblase92a18d2020-07-03 16:24:23 +0000562function add_local_k8scluster() {
garciadeblas0bc87522021-10-20 22:16:17 +0200563 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblase92a18d2020-07-03 16:24:23 +0000564 /usr/bin/osm --all-projects vim-create \
565 --name _system-osm-vim \
566 --account_type dummy \
567 --auth_url http://dummy \
568 --user osm --password osm --tenant osm \
569 --description "dummy" \
570 --config '{management_network_name: mgmt}'
571 /usr/bin/osm --all-projects k8scluster-add \
572 --creds ${HOME}/.kube/config \
573 --vim _system-osm-vim \
574 --k8s-nets '{"net1": null}' \
575 --version '1.15' \
576 --description "OSM Internal Cluster" \
577 _system-osm-k8s
garciadeblas0bc87522021-10-20 22:16:17 +0200578 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblase92a18d2020-07-03 16:24:23 +0000579}
580
garciadeblas0bc87522021-10-20 22:16:17 +0200581function configure_apt_proxy() {
582 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
583 OSM_APT_PROXY=$1
584 OSM_APT_PROXY_FILE="/etc/apt/apt.conf.d/osm-apt"
585 echo "Configuring apt proxy in file ${OSM_APT_PROXY_FILE}"
586 if [ ! -f ${OSM_APT_PROXY_FILE} ]; then
587 sudo bash -c "cat <<EOF > ${OSM_APT_PROXY}
588Acquire::http { Proxy \"${OSM_APT_PROXY}\"; }
589EOF"
590 else
591 sudo sed -i "s|Proxy.*|Proxy \"${OSM_APT_PROXY}\"; }|" ${OSM_APT_PROXY_FILE}
592 fi
593 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 +0100594 track prereq apt_proxy_configured_ok
garciadeblas0bc87522021-10-20 22:16:17 +0200595 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
596}
597
598function install_osm() {
599 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblasadcf95e2022-01-28 17:15:39 +0100600
601 trap ctrl_c INT
602 track start release $RELEASE none none docker_tag $OSM_DOCKER_TAG none none installation_type $OSM_INSTALLATION_TYPE none none
603
garciadeblas4d89c372021-11-25 11:57:18 +0100604 track checks checkingroot_ok
garciadeblasd13a8aa2018-05-18 15:24:51 +0200605 [ "$USER" == "root" ] && FATAL "You are running the installer as root. The installer is prepared to be executed as a normal user with sudo privileges."
garciadeblas4d89c372021-11-25 11:57:18 +0100606 track checks noroot_ok
vijaynag8339ed22019-07-25 17:10:58 +0530607
garciadeblas0bc87522021-10-20 22:16:17 +0200608 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
609 1. Install and configure LXD
610 2. Install juju
611 3. Install docker CE
612 4. Disable swap space
613 5. Install and initialize Kubernetes
614 as pre-requirements.
615 Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
garciadeblas4d89c372021-11-25 11:57:18 +0100616 track checks proceed_ok
vijaynag8339ed22019-07-25 17:10:58 +0530617
garciadeblas0bc87522021-10-20 22:16:17 +0200618 echo "Installing OSM"
619
620 echo "Determining IP address of the interface with the default route"
tierno7d8f12e2020-05-18 14:17:41 +0000621 DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5; exit}')
622 [ -z "$DEFAULT_IF" ] && DEFAULT_IF=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}')
garciadeblas8cd60772018-06-02 08:38:17 +0200623 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
beierlm4aad47b2021-12-07 16:15:53 -0500624 DEFAULT_IP=`ip -o -4 a s ${DEFAULT_IF} |awk '{split($4,a,"/"); print a[1]; exit}'`
garciadeblas8cd60772018-06-02 08:38:17 +0200625 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
garciadeblas0bc87522021-10-20 22:16:17 +0200626
627 # configure apt proxy
628 [ -n "$APT_PROXY_URL" ] && configure_apt_proxy $APT_PROXY_URL
Mike Marchettib8420852018-09-13 13:45:06 -0400629
630 # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to
David Garcia79f4f532020-04-07 12:59:34 +0200631 if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ] && [ -z "$LXD_CLOUD_FILE" ]; then
garciadeblas8fed1082022-08-29 11:25:02 +0200632 LXD_INSTALL_OPTS="-D ${OSM_DEVOPS} -i ${DEFAULT_IP} ${DEBUG_INSTALL}"
633 $OSM_DEVOPS/installers/install_lxd.sh ${LXD_INSTALL_OPTS} || FATAL_TRACK lxd "install_lxd.sh failed"
garciadeblasd41f5482018-05-25 10:25:06 +0200634 fi
David Garcia79f4f532020-04-07 12:59:34 +0200635
garciadeblas4d89c372021-11-25 11:57:18 +0100636 track prereq prereqok_ok
Mike Marchettib8420852018-09-13 13:45:06 -0400637
garciadeblas95804f82021-11-08 23:02:01 +0100638 if [ ! -n "$INSTALL_NODOCKER" ]; then
639 DOCKER_CE_OPTS="-D ${OSM_DEVOPS} ${DEBUG_INSTALL}"
640 [ -n "${DOCKER_PROXY_URL}" ] && DOCKER_CE_OPTS="${DOCKER_CE_OPTS} -p ${DOCKER_PROXY_URL}"
garciadeblas4d89c372021-11-25 11:57:18 +0100641 $OSM_DEVOPS/installers/install_docker_ce.sh ${DOCKER_CE_OPTS} || FATAL_TRACK docker_ce "install_docker_ce.sh failed"
garciadeblas95804f82021-11-08 23:02:01 +0100642 fi
garciadeblas0bc87522021-10-20 22:16:17 +0200643
garciadeblas4d89c372021-11-25 11:57:18 +0100644 track docker_ce docker_ce_ok
David Garcia6cbfee12020-10-23 10:40:20 +0200645
646 echo "Creating folders for installation"
garciadeblas0bc87522021-10-20 22:16:17 +0200647 [ ! -d "$OSM_DOCKER_WORK_DIR" ] && sudo mkdir -p $OSM_DOCKER_WORK_DIR
648 [ ! -d "$OSM_DOCKER_WORK_DIR/osm_pla" -a -n "$INSTALL_PLA" ] && sudo mkdir -p $OSM_DOCKER_WORK_DIR/osm_pla
649 sudo cp -b $OSM_DEVOPS/installers/docker/cluster-config.yaml $OSM_DOCKER_WORK_DIR/cluster-config.yaml
David Garcia6cbfee12020-10-23 10:40:20 +0200650
garciadeblas4d89c372021-11-25 11:57:18 +0100651 $OSM_DEVOPS/installers/install_kubeadm_cluster.sh -i ${DEFAULT_IP} -d ${OSM_DOCKER_WORK_DIR} -D ${OSM_DEVOPS} ${DEBUG_INSTALL} || \
652 FATAL_TRACK k8scluster "install_kubeadm_cluster.sh failed"
653 track k8scluster k8scluster_ok
David Garcia6cbfee12020-10-23 10:40:20 +0200654
garciadeblas0bc87522021-10-20 22:16:17 +0200655 JUJU_OPTS="-D ${OSM_DEVOPS} -s ${OSM_STACK_NAME} -i ${DEFAULT_IP} ${DEBUG_INSTALL} ${INSTALL_NOJUJU} ${INSTALL_CACHELXDIMAGES}"
656 [ -n "${OSM_VCA_HOST}" ] && JUJU_OPTS="$JUJU_OPTS -H ${OSM_VCA_HOST}"
657 [ -n "${LXD_CLOUD_FILE}" ] && JUJU_OPTS="$JUJU_OPTS -l ${LXD_CLOUD_FILE}"
658 [ -n "${LXD_CRED_FILE}" ] && JUJU_OPTS="$JUJU_OPTS -L ${LXD_CRED_FILE}"
659 [ -n "${CONTROLLER_NAME}" ] && JUJU_OPTS="$JUJU_OPTS -K ${CONTROLLER_NAME}"
garciadeblas4d89c372021-11-25 11:57:18 +0100660 $OSM_DEVOPS/installers/install_juju.sh ${JUJU_OPTS} || FATAL_TRACK juju "install_juju.sh failed"
garciadeblas0bc87522021-10-20 22:16:17 +0200661 set_vca_variables
garciadeblas4d89c372021-11-25 11:57:18 +0100662 track juju juju_ok
Adam Israel5ddc97f2019-09-03 18:11:12 -0400663
Benjamin Diazba2cca92018-11-08 21:07:15 -0300664 if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
665 OSM_DATABASE_COMMONKEY=$(generate_secret)
666 [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret"
667 fi
vijaynag8339ed22019-07-25 17:10:58 +0530668
David Garcia6cbfee12020-10-23 10:40:20 +0200669 # Deploy OSM services
Mike Marchettib8420852018-09-13 13:45:06 -0400670 [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
garciadeblas4d89c372021-11-25 11:57:18 +0100671 track docker_images docker_images_ok
vijaynag8339ed22019-07-25 17:10:58 +0530672
garciadeblas0bc87522021-10-20 22:16:17 +0200673 generate_k8s_manifest_files
garciadeblas4d89c372021-11-25 11:57:18 +0100674 track osm_files manifest_files_ok
garciadeblasd8bc5c32018-05-09 17:37:56 +0200675 generate_docker_env_files
garciadeblas4d89c372021-11-25 11:57:18 +0100676 track osm_files env_files_ok
Mike Marchettib8420852018-09-13 13:45:06 -0400677
garciadeblas0bc87522021-10-20 22:16:17 +0200678 deploy_charmed_services
garciadeblas4d89c372021-11-25 11:57:18 +0100679 track deploy_osm deploy_charmed_services_ok
garciadeblas0bc87522021-10-20 22:16:17 +0200680 kube_secrets
garciadeblas4d89c372021-11-25 11:57:18 +0100681 track deploy_osm kube_secrets_ok
garciadeblas0bc87522021-10-20 22:16:17 +0200682 update_manifest_files
garciadeblas4d89c372021-11-25 11:57:18 +0100683 track deploy_osm update_manifest_files_ok
garciadeblas0bc87522021-10-20 22:16:17 +0200684 namespace_vol
garciadeblas4d89c372021-11-25 11:57:18 +0100685 track deploy_osm namespace_vol_ok
garciadeblas0bc87522021-10-20 22:16:17 +0200686 deploy_osm_services
garciadeblas4d89c372021-11-25 11:57:18 +0100687 track deploy_osm deploy_osm_services_k8s_ok
garciadeblas0bc87522021-10-20 22:16:17 +0200688 if [ -n "$INSTALL_PLA"]; then
689 # optional PLA install
690 deploy_osm_pla_service
garciadeblas4d89c372021-11-25 11:57:18 +0100691 track deploy_osm deploy_osm_pla_ok
garciadeblas0bc87522021-10-20 22:16:17 +0200692 fi
garciadeblas0bc87522021-10-20 22:16:17 +0200693 if [ -n "$INSTALL_K8S_MONITOR" ]; then
694 # install OSM MONITORING
695 install_k8s_monitoring
garciadeblas4d89c372021-11-25 11:57:18 +0100696 track deploy_osm install_k8s_monitoring_ok
vijaynag8339ed22019-07-25 17:10:58 +0530697 fi
698
Mike Marchettib8420852018-09-13 13:45:06 -0400699 [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
garciadeblas4d89c372021-11-25 11:57:18 +0100700 track osmclient osmclient_ok
beierlma4a37f72020-06-26 12:55:01 -0400701
garciadeblas4a9adcd2020-07-03 15:32:05 +0000702 echo -e "Checking OSM health state..."
garciadeblas0bc87522021-10-20 22:16:17 +0200703 $OSM_DEVOPS/installers/osm_health.sh -s ${OSM_STACK_NAME} -k || \
garciadeblasf4f0e0f2021-12-03 11:37:40 +0100704 (echo -e "OSM is not healthy, but will probably converge to a healthy state soon." && \
garciadeblas0bc87522021-10-20 22:16:17 +0200705 echo -e "Check OSM status with: kubectl -n ${OSM_STACK_NAME} get all" && \
garciadeblasf4f0e0f2021-12-03 11:37:40 +0100706 track healthchecks osm_unhealthy didnotconverge)
garciadeblas4d89c372021-11-25 11:57:18 +0100707 track healthchecks after_healthcheck_ok
vijaynag8339ed22019-07-25 17:10:58 +0530708
garciadeblas0bc87522021-10-20 22:16:17 +0200709 add_local_k8scluster
garciadeblas4d89c372021-11-25 11:57:18 +0100710 track final_ops add_local_k8scluster_ok
garciadeblase92a18d2020-07-03 16:24:23 +0000711
garciadeblas96155042022-06-22 16:26:22 +0200712 wget -q -O- https://osm-download.etsi.org/ftp/osm-12.0-twelve/README2.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200713 track end
garciadeblas0bc87522021-10-20 22:16:17 +0200714 sudo find /etc/osm
715 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblasd8bc5c32018-05-09 17:37:56 +0200716 return 0
717}
718
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200719function install_to_openstack() {
garciadeblas0bc87522021-10-20 22:16:17 +0200720 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200721
722 if [ -z "$2" ]; then
723 FATAL "OpenStack installer requires a valid external network name"
724 fi
725
726 # Install Pip for Python3
garciadeblas0bc87522021-10-20 22:16:17 +0200727 sudo apt install -y python3-pip python3-venv
728 sudo -H LC_ALL=C python3 -m pip install -U pip
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200729
Antonio Marsico75a38c72020-12-21 17:29:42 +0100730 # Create a venv to avoid conflicts with the host installation
731 python3 -m venv $OPENSTACK_PYTHON_VENV
732
733 source $OPENSTACK_PYTHON_VENV/bin/activate
734
Antonio Marsicoef3b2362021-03-19 18:54:57 +0100735 # Install Ansible, OpenStack client and SDK, latest openstack version supported is Train
Antonio Marsico75a38c72020-12-21 17:29:42 +0100736 python -m pip install -U wheel
Antonio Marsicoef3b2362021-03-19 18:54:57 +0100737 python -m pip install -U "python-openstackclient<=4.0.2" "openstacksdk>=0.12.0,<=0.36.2" "ansible>=2.10,<2.11"
Antonio Marsico75a38c72020-12-21 17:29:42 +0100738
739 # Install the Openstack cloud module (ansible>=2.10)
740 ansible-galaxy collection install openstack.cloud
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200741
742 export ANSIBLE_CONFIG="$OSM_DEVOPS/installers/openstack/ansible.cfg"
743
744 OSM_INSTALLER_ARGS="${REPO_ARGS[@]}"
745
Antonio Marsico75a38c72020-12-21 17:29:42 +0100746 ANSIBLE_VARS="external_network_name=$2 setup_volume=$3 server_name=$OPENSTACK_VM_NAME"
747
748 if [ -n "$OPENSTACK_SSH_KEY_FILE" ]; then
749 ANSIBLE_VARS+=" key_file=$OPENSTACK_SSH_KEY_FILE"
750 fi
751
752 if [ -n "$OPENSTACK_USERDATA_FILE" ]; then
753 ANSIBLE_VARS+=" userdata_file=$OPENSTACK_USERDATA_FILE"
754 fi
755
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200756 # Execute the Ansible playbook based on openrc or clouds.yaml
757 if [ -e "$1" ]; then
758 . $1
Antonio Marsico75a38c72020-12-21 17:29:42 +0100759 ansible-playbook -e installer_args="\"$OSM_INSTALLER_ARGS\"" -e "$ANSIBLE_VARS" \
760 $OSM_DEVOPS/installers/openstack/site.yml
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200761 else
Antonio Marsico75a38c72020-12-21 17:29:42 +0100762 ansible-playbook -e installer_args="\"$OSM_INSTALLER_ARGS\"" -e "$ANSIBLE_VARS" \
763 -e cloud_name=$1 $OSM_DEVOPS/installers/openstack/site.yml
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200764 fi
765
Antonio Marsico75a38c72020-12-21 17:29:42 +0100766 # Exit from venv
767 deactivate
768
garciadeblas0bc87522021-10-20 22:16:17 +0200769 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200770 return 0
771}
772
romeromonsere366b1a2019-11-19 19:49:26 +0100773function install_k8s_monitoring() {
garciadeblas0bc87522021-10-20 22:16:17 +0200774 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
romeromonsere366b1a2019-11-19 19:49:26 +0100775 # install OSM monitoring
garciadeblas0bc87522021-10-20 22:16:17 +0200776 sudo chmod +x $OSM_DEVOPS/installers/k8s/*.sh
garciadeblas4d89c372021-11-25 11:57:18 +0100777 sudo $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh || FATAL_TRACK install_k8s_monitoring "k8s/install_osm_k8s_monitoring.sh failed"
garciadeblas0bc87522021-10-20 22:16:17 +0200778 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
romeromonsere366b1a2019-11-19 19:49:26 +0100779}
780
garciadeblasd8bc5c32018-05-09 17:37:56 +0200781function dump_vars(){
garciadeblas0bc87522021-10-20 22:16:17 +0200782 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
783 echo "APT_PROXY_URL=$APT_PROXY_URL"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200784 echo "DEVELOP=$DEVELOP"
garciadeblas0bc87522021-10-20 22:16:17 +0200785 echo "DEBUG_INSTALL=$DEBUG_INSTALL"
786 echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
787 echo "DOCKER_PROXY_URL=$DOCKER_PROXY_URL"
788 echo "DOCKER_REGISTRY_URL=$DOCKER_REGISTRY_URL"
789 echo "DOCKER_USER=$DOCKER_USER"
790 echo "INSTALL_CACHELXDIMAGES=$INSTALL_CACHELXDIMAGES"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200791 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
garciadeblas0bc87522021-10-20 22:16:17 +0200792 echo "INSTALL_K8S_MONITOR=$INSTALL_K8S_MONITOR"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200793 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
garciadeblas0bc87522021-10-20 22:16:17 +0200794 echo "INSTALL_LXD=$INSTALL_LXD"
795 echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
796 echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
797 echo "INSTALL_NOLXD=$INSTALL_NOLXD"
garciadeblas6c66abf2018-05-16 14:46:19 +0200798 echo "INSTALL_ONLY=$INSTALL_ONLY"
garciadeblas0bc87522021-10-20 22:16:17 +0200799 echo "INSTALL_PLA=$INSTALL_PLA"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200800 echo "INSTALL_TO_OPENSTACK=$INSTALL_TO_OPENSTACK"
garciadeblas0bc87522021-10-20 22:16:17 +0200801 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
802 echo "NO_HOST_PORTS=$NO_HOST_PORTS"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200803 echo "OPENSTACK_PUBLIC_NET_NAME=$OPENSTACK_PUBLIC_NET_NAME"
804 echo "OPENSTACK_OPENRC_FILE_OR_CLOUD=$OPENSTACK_OPENRC_FILE_OR_CLOUD"
805 echo "OPENSTACK_ATTACH_VOLUME=$OPENSTACK_ATTACH_VOLUME"
Antonio Marsico75a38c72020-12-21 17:29:42 +0100806 echo "OPENSTACK_SSH_KEY_FILE"="$OPENSTACK_SSH_KEY_FILE"
807 echo "OPENSTACK_USERDATA_FILE"="$OPENSTACK_USERDATA_FILE"
808 echo "OPENSTACK_VM_NAME"="$OPENSTACK_VM_NAME"
garciadeblas0bc87522021-10-20 22:16:17 +0200809 echo "OSM_DEVOPS=$OSM_DEVOPS"
810 echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
garciadeblas0cd9b882022-02-10 03:11:50 +0100811 echo "OSM_DOCKER_WORK_DIR=$OSM_DOCKER_WORK_DIR"
812 echo "OSM_K8S_WORK_DIR=$OSM_K8S_WORK_DIR"
garciadeblas0bc87522021-10-20 22:16:17 +0200813 echo "OSM_STACK_NAME=$OSM_STACK_NAME"
814 echo "OSM_VCA_HOST=$OSM_VCA_HOST"
815 echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
816 echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
817 echo "OSM_WORK_DIR=$OSM_WORK_DIR"
818 echo "PULL_IMAGES=$PULL_IMAGES"
819 echo "RECONFIGURE=$RECONFIGURE"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200820 echo "RELEASE=$RELEASE"
821 echo "REPOSITORY=$REPOSITORY"
822 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
823 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200824 echo "SHOWOPTS=$SHOWOPTS"
garciadeblas0bc87522021-10-20 22:16:17 +0200825 echo "TEST_INSTALLER=$TEST_INSTALLER"
826 echo "TO_REBUILD=$TO_REBUILD"
827 echo "UNINSTALL=$UNINSTALL"
828 echo "UPDATE=$UPDATE"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200829 echo "Install from specific refspec (-b): $COMMIT_ID"
garciadeblas0bc87522021-10-20 22:16:17 +0200830 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblasd8bc5c32018-05-09 17:37:56 +0200831}
832
garciadeblas453d4582020-12-16 19:03:10 +0100833function parse_docker_registry_url() {
garciadeblas0bc87522021-10-20 22:16:17 +0200834 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblas453d4582020-12-16 19:03:10 +0100835 DOCKER_REGISTRY_USER=$(echo "$DOCKER_REGISTRY_URL" | awk '{split($1,a,"@"); split(a[1],b,":"); print b[1]}')
836 DOCKER_REGISTRY_PASSWORD=$(echo "$DOCKER_REGISTRY_URL" | awk '{split($1,a,"@"); split(a[1],b,":"); print b[2]}')
837 DOCKER_REGISTRY_URL=$(echo "$DOCKER_REGISTRY_URL" | awk '{split($1,a,"@"); print a[2]}')
garciadeblas0bc87522021-10-20 22:16:17 +0200838 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblas453d4582020-12-16 19:03:10 +0100839}
840
garciadeblasadcf95e2022-01-28 17:15:39 +0100841function ctrl_c() {
842 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
843 echo "** Trapped CTRL-C"
844 FATAL "User stopped the installation"
845 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
846}
847
garciadeblasd8bc5c32018-05-09 17:37:56 +0200848UNINSTALL=""
849DEVELOP=""
garciadeblasd8bc5c32018-05-09 17:37:56 +0200850UPDATE=""
851RECONFIGURE=""
852TEST_INSTALLER=""
853INSTALL_LXD=""
854SHOWOPTS=""
855COMMIT_ID=""
856ASSUME_YES=""
garciadeblas0bc87522021-10-20 22:16:17 +0200857APT_PROXY_URL=""
garciadeblasd8bc5c32018-05-09 17:37:56 +0200858INSTALL_FROM_SOURCE=""
garciadeblas0bc87522021-10-20 22:16:17 +0200859DEBUG_INSTALL=""
garciadeblas00627272021-05-26 16:54:05 +0200860RELEASE="ReleaseTEN"
Mike Marchettib8420852018-09-13 13:45:06 -0400861REPOSITORY="stable"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200862INSTALL_VIMEMU=""
magnussonl1bbe9452020-02-25 13:43:17 +0100863INSTALL_PLA=""
garciadeblasd8bc5c32018-05-09 17:37:56 +0200864LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
865LXD_REPOSITORY_PATH=""
866INSTALL_LIGHTWEIGHT="y"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200867INSTALL_TO_OPENSTACK=""
868OPENSTACK_OPENRC_FILE_OR_CLOUD=""
869OPENSTACK_PUBLIC_NET_NAME=""
870OPENSTACK_ATTACH_VOLUME="false"
Antonio Marsico75a38c72020-12-21 17:29:42 +0100871OPENSTACK_SSH_KEY_FILE=""
872OPENSTACK_USERDATA_FILE=""
873OPENSTACK_VM_NAME="server-osm"
874OPENSTACK_PYTHON_VENV="$HOME/.virtual-envs/osm"
garciadeblas6c66abf2018-05-16 14:46:19 +0200875INSTALL_ONLY=""
garciadeblas0e596bc2018-05-28 16:04:42 +0200876TO_REBUILD=""
garciadeblasd41f5482018-05-25 10:25:06 +0200877INSTALL_NOLXD=""
garciadeblasa3e26612018-05-30 17:58:55 +0200878INSTALL_NODOCKER=""
Mike Marchettib8420852018-09-13 13:45:06 -0400879INSTALL_NOJUJU=""
garciadeblasb5a630f2020-03-05 18:32:16 +0000880INSTALL_K8S_MONITOR=""
garciadeblas0d45bc82018-11-19 14:25:13 +0100881INSTALL_NOHOSTCLIENT=""
garciadeblas0bc87522021-10-20 22:16:17 +0200882INSTALL_CACHELXDIMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +0200883OSM_DEVOPS=
lavadoe07b1642018-10-25 10:58:34 -0500884OSM_VCA_HOST=
885OSM_VCA_SECRET=
garciadeblasaa3ddf42019-04-04 19:04:32 +0200886OSM_VCA_PUBKEY=
David Garcia79f4f532020-04-07 12:59:34 +0200887OSM_VCA_CLOUDNAME="localhost"
beierlma4a37f72020-06-26 12:55:01 -0400888OSM_VCA_K8S_CLOUDNAME="k8scloud"
Mike Marchettib8420852018-09-13 13:45:06 -0400889OSM_STACK_NAME=osm
890NO_HOST_PORTS=""
891DOCKER_NOBUILD=""
892REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
garciadeblas870e60a2018-11-21 16:44:21 +0100893REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
Mike Marchettib8420852018-09-13 13:45:06 -0400894OSM_WORK_DIR="/etc/osm"
garciadeblas526f0fb2018-11-23 14:47:40 +0100895OSM_DOCKER_WORK_DIR="/etc/osm/docker"
vijaynag8339ed22019-07-25 17:10:58 +0530896OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
897OSM_HOST_VOL="/var/lib/osm"
898OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
Mike Marchetti13d76c82018-09-19 15:00:36 -0400899OSM_DOCKER_TAG=latest
garciadeblas0d45bc82018-11-19 14:25:13 +0100900DOCKER_USER=opensourcemano
901PULL_IMAGES="y"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300902KAFKA_TAG=2.11-1.0.2
garciadeblas0ab16612022-02-22 14:23:57 +0100903KIWIGRID_K8S_SIDECAR_TAG="1.15.6"
904PROMETHEUS_TAG=v2.28.1
905GRAFANA_TAG=8.1.1
lavado6ad812e2019-11-29 10:58:58 -0500906PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
907PROMETHEUS_CADVISOR_TAG=latest
lavado9a8df7c2018-10-24 09:35:34 -0500908KEYSTONEDB_TAG=10
Benjamin Diazba2cca92018-11-08 21:07:15 -0300909OSM_DATABASE_COMMONKEY=
lavado53eb8f52018-11-16 12:58:23 -0500910ELASTIC_VERSION=6.4.2
lavado4e8662c2018-11-28 11:28:14 -0500911ELASTIC_CURATOR_VERSION=5.5.4
vijaynag8339ed22019-07-25 17:10:58 +0530912POD_NETWORK_CIDR=10.244.0.0/16
913K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
914RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
garciadeblas7f1e1042020-11-30 14:07:03 +0000915DOCKER_REGISTRY_URL=
916DOCKER_PROXY_URL=
917MODULE_DOCKER_TAG=
garciadeblas4d89c372021-11-25 11:57:18 +0100918OSM_INSTALLATION_TYPE="Default"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200919
garciadeblas0bc87522021-10-20 22:16:17 +0200920while getopts ":a:b:r:n:k:u:R:D:o:O:m:N:H:S:s:t:U:P:A:l:L:K:d:p:T:f:F:-: hy" o; do
garciadeblasd8bc5c32018-05-09 17:37:56 +0200921 case "${o}" in
garciadeblas0bc87522021-10-20 22:16:17 +0200922 a)
923 APT_PROXY_URL=${OPTARG}
924 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +0200925 b)
926 COMMIT_ID=${OPTARG}
garciadeblas0d45bc82018-11-19 14:25:13 +0100927 PULL_IMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +0200928 ;;
929 r)
Mike Marchettib8420852018-09-13 13:45:06 -0400930 REPOSITORY="${OPTARG}"
931 REPO_ARGS+=(-r "$REPOSITORY")
garciadeblasd8bc5c32018-05-09 17:37:56 +0200932 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +0200933 k)
Mike Marchettib8420852018-09-13 13:45:06 -0400934 REPOSITORY_KEY="${OPTARG}"
935 REPO_ARGS+=(-k "$REPOSITORY_KEY")
garciadeblasd8bc5c32018-05-09 17:37:56 +0200936 ;;
937 u)
Mike Marchettib8420852018-09-13 13:45:06 -0400938 REPOSITORY_BASE="${OPTARG}"
939 REPO_ARGS+=(-u "$REPOSITORY_BASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +0200940 ;;
garciadeblas25e87d22020-01-31 14:27:29 +0100941 R)
942 RELEASE="${OPTARG}"
943 REPO_ARGS+=(-R "$RELEASE")
garciadeblas0d45bc82018-11-19 14:25:13 +0100944 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +0200945 D)
946 OSM_DEVOPS="${OPTARG}"
947 ;;
garciadeblas6c66abf2018-05-16 14:46:19 +0200948 o)
949 INSTALL_ONLY="y"
garciadeblasb5a630f2020-03-05 18:32:16 +0000950 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +0200951 ;;
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200952 O)
953 INSTALL_TO_OPENSTACK="y"
954 if [ -n "${OPTARG}" ]; then
955 OPENSTACK_OPENRC_FILE_OR_CLOUD="${OPTARG}"
956 else
957 echo -e "Invalid argument for -O : ' $OPTARG'\n" >&2
958 usage && exit 1
959 fi
960 ;;
Antonio Marsico75a38c72020-12-21 17:29:42 +0100961 f)
962 OPENSTACK_SSH_KEY_FILE="${OPTARG}"
963 ;;
964 F)
965 OPENSTACK_USERDATA_FILE="${OPTARG}"
966 ;;
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200967 N)
968 OPENSTACK_PUBLIC_NET_NAME="${OPTARG}"
969 ;;
garciadeblas0e596bc2018-05-28 16:04:42 +0200970 m)
garciadeblas7f1e1042020-11-30 14:07:03 +0000971 [ "${OPTARG}" == "NG-UI" ] && TO_REBUILD="$TO_REBUILD NG-UI" && continue
govindappa79e51b92019-05-22 12:15:21 +0530972 [ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
973 [ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
974 [ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +0200975 [ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
govindappa79e51b92019-05-22 12:15:21 +0530976 [ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
garciadeblas7f1e1042020-11-30 14:07:03 +0000977 [ "${OPTARG}" == "PLA" ] && TO_REBUILD="$TO_REBUILD PLA" && continue
978 [ "${OPTARG}" == "osmclient" ] && TO_REBUILD="$TO_REBUILD osmclient" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +0200979 [ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
980 [ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
govindappa79e51b92019-05-22 12:15:21 +0530981 [ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
garciadeblasfc5bb142019-12-10 10:49:12 +0100982 [ "${OPTARG}" == "PROMETHEUS-CADVISOR" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS-CADVISOR" && continue
govindappa79e51b92019-05-22 12:15:21 +0530983 [ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
lavado6ad812e2019-11-29 10:58:58 -0500984 [ "${OPTARG}" == "GRAFANA" ] && TO_REBUILD="$TO_REBUILD GRAFANA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +0200985 [ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
986 ;;
garciadeblas25e87d22020-01-31 14:27:29 +0100987 H)
988 OSM_VCA_HOST="${OPTARG}"
989 ;;
990 S)
991 OSM_VCA_SECRET="${OPTARG}"
992 ;;
993 s)
garciadeblas0bc87522021-10-20 22:16:17 +0200994 OSM_STACK_NAME="${OPTARG}" && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0
garciadeblas25e87d22020-01-31 14:27:29 +0100995 ;;
996 t)
997 OSM_DOCKER_TAG="${OPTARG}"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200998 REPO_ARGS+=(-t "$OSM_DOCKER_TAG")
garciadeblas25e87d22020-01-31 14:27:29 +0100999 ;;
1000 U)
1001 DOCKER_USER="${OPTARG}"
1002 ;;
1003 P)
1004 OSM_VCA_PUBKEY=$(cat ${OPTARG})
1005 ;;
1006 A)
1007 OSM_VCA_APIPROXY="${OPTARG}"
1008 ;;
David Garcia79f4f532020-04-07 12:59:34 +02001009 l)
1010 LXD_CLOUD_FILE="${OPTARG}"
1011 ;;
1012 L)
1013 LXD_CRED_FILE="${OPTARG}"
1014 ;;
David Garcia404ae122020-04-28 11:47:55 +02001015 K)
1016 CONTROLLER_NAME="${OPTARG}"
1017 ;;
garciadeblas7f1e1042020-11-30 14:07:03 +00001018 d)
1019 DOCKER_REGISTRY_URL="${OPTARG}"
1020 ;;
1021 p)
1022 DOCKER_PROXY_URL="${OPTARG}"
1023 ;;
1024 T)
1025 MODULE_DOCKER_TAG="${OPTARG}"
1026 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001027 -)
1028 [ "${OPTARG}" == "help" ] && usage && exit 0
garciadeblas0d45bc82018-11-19 14:25:13 +01001029 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
garciadeblas0bc87522021-10-20 22:16:17 +02001030 [ "${OPTARG}" == "debug" ] && DEBUG_INSTALL="--debug" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001031 [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
1032 [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001033 [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
1034 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
1035 [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
1036 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
garciadeblasd41f5482018-05-25 10:25:06 +02001037 [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
garciadeblasa3e26612018-05-30 17:58:55 +02001038 [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001039 [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001040 [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
garciadeblas0bc87522021-10-20 22:16:17 +02001041 [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="--nojuju" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001042 [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
1043 [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
garciadeblas0d45bc82018-11-19 14:25:13 +01001044 [ "${OPTARG}" == "pullimages" ] && continue
garciadeblasb5a630f2020-03-05 18:32:16 +00001045 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
garciadeblas4d89c372021-11-25 11:57:18 +01001046 [ "${OPTARG}" == "charmed" ] && CHARMED="y" && OSM_INSTALLATION_TYPE="Charmed" && continue
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001047 [ "${OPTARG}" == "bundle" ] && continue
Dominik Fleischmann7a97a4c2020-06-04 10:52:05 +02001048 [ "${OPTARG}" == "k8s" ] && continue
1049 [ "${OPTARG}" == "lxd" ] && continue
1050 [ "${OPTARG}" == "lxd-cred" ] && continue
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001051 [ "${OPTARG}" == "microstack" ] && continue
David Garcia4bd2bf02021-05-05 19:01:43 +02001052 [ "${OPTARG}" == "overlay" ] && continue
David Garcia1bc71022021-05-03 18:27:18 +02001053 [ "${OPTARG}" == "only-vca" ] && continue
aticig5d19ac22022-05-06 13:46:22 +03001054 [ "${OPTARG}" == "small-profile" ] && continue
Dominik Fleischmannc63bed62020-09-25 12:17:54 +02001055 [ "${OPTARG}" == "vca" ] && continue
Dominik Fleischmannc57296f2020-06-09 11:45:08 +02001056 [ "${OPTARG}" == "ha" ] && continue
David Garcia69388c22020-05-07 12:14:19 +02001057 [ "${OPTARG}" == "tag" ] && continue
beierlmf2782c52020-11-05 17:04:05 -05001058 [ "${OPTARG}" == "registry" ] && continue
magnussonl1bbe9452020-02-25 13:43:17 +01001059 [ "${OPTARG}" == "pla" ] && INSTALL_PLA="y" && continue
Antonio Marsicof4ce57c2020-04-23 12:06:19 +02001060 [ "${OPTARG}" == "volume" ] && OPENSTACK_ATTACH_VOLUME="true" && continue
garciadeblas0bc87522021-10-20 22:16:17 +02001061 [ "${OPTARG}" == "nocachelxdimages" ] && continue
1062 [ "${OPTARG}" == "cachelxdimages" ] && INSTALL_CACHELXDIMAGES="--cachelxdimages" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001063 echo -e "Invalid option: '--$OPTARG'\n" >&2
1064 usage && exit 1
1065 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001066 :)
1067 echo "Option -$OPTARG requires an argument" >&2
1068 usage && exit 1
1069 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001070 \?)
1071 echo -e "Invalid option: '-$OPTARG'\n" >&2
1072 usage && exit 1
1073 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001074 h)
1075 usage && exit 0
1076 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001077 y)
1078 ASSUME_YES="y"
1079 ;;
1080 *)
1081 usage && exit 1
1082 ;;
1083 esac
1084done
1085
garciadeblas0bc87522021-10-20 22:16:17 +02001086source $OSM_DEVOPS/common/all_funcs
garciadeblas6c66abf2018-05-16 14:46:19 +02001087
garciadeblas0bc87522021-10-20 22:16:17 +02001088[ -z "${DEBUG_INSTALL}" ] || DEBUG Debug is on
1089[ -n "$SHOWOPTS" ] && dump_vars && exit 0
1090
1091# Uninstall if "--uninstall"
1092if [ -n "$UNINSTALL" ]; then
1093 if [ -n "$CHARMED" ]; then
garciadeblas4d89c372021-11-25 11:57:18 +01001094 ${OSM_DEVOPS}/installers/charmed_uninstall.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D $OSM_DEVOPS -t $DOCKER_TAG "$@" || \
1095 FATAL_TRACK charmed_uninstall "charmed_uninstall.sh failed"
garciadeblas0bc87522021-10-20 22:16:17 +02001096 else
garciadeblas4d89c372021-11-25 11:57:18 +01001097 ${OSM_DEVOPS}/installers/uninstall_osm.sh "$@" || \
1098 FATAL_TRACK community_uninstall "uninstall_osm.sh failed"
garciadeblas0bc87522021-10-20 22:16:17 +02001099 fi
1100 echo -e "\nDONE"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001101 exit 0
1102fi
1103
garciadeblas0bc87522021-10-20 22:16:17 +02001104# Charmed installation
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001105if [ -n "$CHARMED" ]; then
beierlmce7b4602022-04-13 08:19:40 -04001106 export OSM_TRACK_INSTALLATION_ID="$(date +%s)-$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)"
1107 track start release $RELEASE none none docker_tag $OSM_DOCKER_TAG none none installation_type $OSM_INSTALLATION_TYPE none none
1108 ${OSM_DEVOPS}/installers/charmed_install.sh --tag $OSM_DOCKER_TAG "$@" || \
garciadeblas4d89c372021-11-25 11:57:18 +01001109 FATAL_TRACK charmed_install "charmed_install.sh failed"
garciadeblas96155042022-06-22 16:26:22 +02001110 wget -q -O- https://osm-download.etsi.org/ftp/osm-12.0-twelve/README2.txt &> /dev/null
beierlmce7b4602022-04-13 08:19:40 -04001111 track end installation_type $OSM_INSTALLATION_TYPE
garciadeblas0bc87522021-10-20 22:16:17 +02001112 echo -e "\nDONE"
1113 exit 0
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001114fi
1115
garciadeblas0bc87522021-10-20 22:16:17 +02001116# Installation to Openstack
1117if [ -n "$INSTALL_TO_OPENSTACK" ]; then
1118 install_to_openstack $OPENSTACK_OPENRC_FILE_OR_CLOUD $OPENSTACK_PUBLIC_NET_NAME $OPENSTACK_ATTACH_VOLUME
1119 echo -e "\nDONE"
1120 exit 0
1121fi
1122
1123# Community_installer
1124[ -n "$DOCKER_REGISTRY_URL" ] && parse_docker_registry_url
1125[ -n "$TO_REBUILD" ] && [ "$TO_REBUILD" != " NONE" ] && echo $TO_REBUILD | grep -q NONE && FATAL "Incompatible option: -m NONE cannot be used with other -m options"
1126[ -n "$TO_REBUILD" ] && [ "$TO_REBUILD" == " PLA" ] && [ -z "$INSTALL_PLA" ] && FATAL "Incompatible option: -m PLA cannot be used without --pla option"
1127
garciadeblasd8bc5c32018-05-09 17:37:56 +02001128# if develop, we force master
1129[ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
1130
garciadeblas835088e2022-01-28 11:25:18 +01001131check_packages "git wget curl tar snapd"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +02001132
David Garcia404ae122020-04-28 11:47:55 +02001133sudo snap install jq
garciadeblasd8bc5c32018-05-09 17:37:56 +02001134if [ -z "$OSM_DEVOPS" ]; then
Michael Marchettiee374142018-08-02 22:47:16 +02001135 if [ -n "$TEST_INSTALLER" ]; then
1136 echo -e "\nUsing local devops repo for OSM installation"
1137 OSM_DEVOPS="$(dirname $(realpath $(dirname $0)))"
1138 else
1139 echo -e "\nCreating temporary dir for OSM installation"
1140 OSM_DEVOPS="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
1141 trap 'rm -rf "$OSM_DEVOPS"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001142
Michael Marchettiee374142018-08-02 22:47:16 +02001143 git clone https://osm.etsi.org/gerrit/osm/devops.git $OSM_DEVOPS
garciadeblasd8bc5c32018-05-09 17:37:56 +02001144
Michael Marchettiee374142018-08-02 22:47:16 +02001145 if [ -z "$COMMIT_ID" ]; then
1146 echo -e "\nGuessing the current stable release"
1147 LATEST_STABLE_DEVOPS=`git -C $OSM_DEVOPS tag -l v[0-9].* | sort -V | tail -n1`
1148 [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
1149
1150 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
1151 COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
1152 else
1153 echo -e "\nDEVOPS Using commit $COMMIT_ID"
1154 fi
1155 git -C $OSM_DEVOPS checkout $COMMIT_ID
garciadeblasd8bc5c32018-05-09 17:37:56 +02001156 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001157fi
1158
beierlma4a37f72020-06-26 12:55:01 -04001159[ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
garciadeblas0bc87522021-10-20 22:16:17 +02001160OSM_K8S_WORK_DIR="$OSM_DOCKER_WORK_DIR/osm_pods" && OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
garciadeblasb5a630f2020-03-05 18:32:16 +00001161[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_K8S_MONITOR" ] && install_k8s_monitoring
garciadeblas6c66abf2018-05-16 14:46:19 +02001162[ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
garciadeblasd8bc5c32018-05-09 17:37:56 +02001163
1164#Installation starts here
garciadeblas96155042022-06-22 16:26:22 +02001165wget -q -O- https://osm-download.etsi.org/ftp/osm-12.0-twelve/README.txt &> /dev/null
garciadeblas4d89c372021-11-25 11:57:18 +01001166export OSM_TRACK_INSTALLATION_ID="$(date +%s)-$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)"
garciadeblas0bc87522021-10-20 22:16:17 +02001167install_osm
garciadeblasd8bc5c32018-05-09 17:37:56 +02001168echo -e "\nDONE"
garciadeblas4d89c372021-11-25 11:57:18 +01001169exit 0