blob: 9f9fb051803113775f439ddce905f58954bd26c1 [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
garciadeblas0bc87522021-10-20 22:16:17 +0200313 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
beierlma4a37f72020-06-26 12:55:01 -0400314}
315
316function generate_prometheus_grafana_files() {
garciadeblas0bc87522021-10-20 22:16:17 +0200317 #this only works with docker swarm
318 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
beierlma4a37f72020-06-26 12:55:01 -0400319 # Prometheus files
garciadeblas0bc87522021-10-20 22:16:17 +0200320 sudo mkdir -p $OSM_DOCKER_WORK_DIR/prometheus
321 sudo cp -b ${OSM_DEVOPS}/installers/docker/prometheus/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus/prometheus.yml
beierlma4a37f72020-06-26 12:55:01 -0400322
323 # Grafana files
garciadeblas0bc87522021-10-20 22:16:17 +0200324 sudo mkdir -p $OSM_DOCKER_WORK_DIR/grafana
325 sudo cp -b ${OSM_DEVOPS}/installers/docker/grafana/dashboards-osm.yml $OSM_DOCKER_WORK_DIR/grafana/dashboards-osm.yml
326 sudo cp -b ${OSM_DEVOPS}/installers/docker/grafana/datasource-prometheus.yml $OSM_DOCKER_WORK_DIR/grafana/datasource-prometheus.yml
327 sudo cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-sample-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-sample-dashboard.json
328 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 -0400329
330 # Prometheus Exporters files
garciadeblas0bc87522021-10-20 22:16:17 +0200331 sudo mkdir -p $OSM_DOCKER_WORK_DIR/prometheus_exporters
332 sudo cp -b ${OSM_DEVOPS}/installers/docker/prometheus_exporters/node_exporter.service $OSM_DOCKER_WORK_DIR/prometheus_exporters/node_exporter.service
333 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
beierlma4a37f72020-06-26 12:55:01 -0400334}
335
garciadeblasd8bc5c32018-05-09 17:37:56 +0200336function generate_docker_env_files() {
garciadeblas0bc87522021-10-20 22:16:17 +0200337 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200338 echo "Doing a backup of existing env files"
garciadeblas0bc87522021-10-20 22:16:17 +0200339 sudo cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
340 sudo cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
341 sudo cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
342 sudo cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
343 sudo cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
344 sudo cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
345 sudo cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
346 sudo cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200347
garciadeblasd8bc5c32018-05-09 17:37:56 +0200348 echo "Generating docker env files"
Benjamin Diazba2cca92018-11-08 21:07:15 -0300349 # LCM
350 if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
garciadeblas0bc87522021-10-20 22:16:17 +0200351 echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300352 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400353
Benjamin Diazba2cca92018-11-08 21:07:15 -0300354 if ! grep -Fq "OSMLCM_VCA_HOST" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200355 echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300356 else
garciadeblas0bc87522021-10-20 22:16:17 +0200357 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 -0300358 fi
359
360 if ! grep -Fq "OSMLCM_VCA_SECRET" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200361 echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300362 else
garciadeblas0bc87522021-10-20 22:16:17 +0200363 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 -0300364 fi
365
garciadeblasaa3ddf42019-04-04 19:04:32 +0200366 if ! grep -Fq "OSMLCM_VCA_PUBKEY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200367 echo "OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasaa3ddf42019-04-04 19:04:32 +0200368 else
garciadeblas0bc87522021-10-20 22:16:17 +0200369 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 +0200370 fi
371
Adam Israelbe7676a2019-10-02 16:10:53 -0400372 if ! grep -Fq "OSMLCM_VCA_CACERT" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200373 echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
Adam Israelbe7676a2019-10-02 16:10:53 -0400374 else
garciadeblas0bc87522021-10-20 22:16:17 +0200375 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 -0400376 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -0300377
David Garcia6cbfee12020-10-23 10:40:20 +0200378 if [ -n "$OSM_VCA_APIPROXY" ]; then
379 if ! grep -Fq "OSMLCM_VCA_APIPROXY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200380 echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
David Garcia6cbfee12020-10-23 10:40:20 +0200381 else
garciadeblas0bc87522021-10-20 22:16:17 +0200382 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 +0200383 fi
Adam Israel5ddc97f2019-09-03 18:11:12 -0400384 fi
385
garciadeblasa2e41842019-12-18 11:05:24 +0100386 if ! grep -Fq "OSMLCM_VCA_ENABLEOSUPGRADE" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200387 echo "# OSMLCM_VCA_ENABLEOSUPGRADE=false" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasa2e41842019-12-18 11:05:24 +0100388 fi
389
390 if ! grep -Fq "OSMLCM_VCA_APTMIRROR" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200391 echo "# OSMLCM_VCA_APTMIRROR=http://archive.ubuntu.com/ubuntu/" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasa2e41842019-12-18 11:05:24 +0100392 fi
393
David Garcia79f4f532020-04-07 12:59:34 +0200394 if ! grep -Fq "OSMLCM_VCA_CLOUD" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200395 echo "OSMLCM_VCA_CLOUD=${OSM_VCA_CLOUDNAME}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
David Garcia79f4f532020-04-07 12:59:34 +0200396 else
garciadeblas0bc87522021-10-20 22:16:17 +0200397 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 +0200398 fi
399
beierlma4a37f72020-06-26 12:55:01 -0400400 if ! grep -Fq "OSMLCM_VCA_K8S_CLOUD" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200401 echo "OSMLCM_VCA_K8S_CLOUD=${OSM_VCA_K8S_CLOUDNAME}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
beierlma4a37f72020-06-26 12:55:01 -0400402 else
garciadeblas0bc87522021-10-20 22:16:17 +0200403 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 -0400404 fi
405
Benjamin Diazba2cca92018-11-08 21:07:15 -0300406 # RO
407 MYSQL_ROOT_PASSWORD=$(generate_secret)
Mike Marchettib8420852018-09-13 13:45:06 -0400408 if [ ! -f $OSM_DOCKER_WORK_DIR/ro-db.env ]; then
garciadeblas0bc87522021-10-20 22:16:17 +0200409 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo tee $OSM_DOCKER_WORK_DIR/ro-db.env
garciadeblas5b857d32018-05-24 18:37:58 +0200410 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400411 if [ ! -f $OSM_DOCKER_WORK_DIR/ro.env ]; then
garciadeblas0bc87522021-10-20 22:16:17 +0200412 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo tee $OSM_DOCKER_WORK_DIR/ro.env
garciadeblas5b857d32018-05-24 18:37:58 +0200413 fi
tierno9ec1fe92020-11-25 13:16:51 +0000414 if ! grep -Fq "OSMRO_DATABASE_COMMONKEY" $OSM_DOCKER_WORK_DIR/ro.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200415 echo "OSMRO_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/ro.env
tierno9ec1fe92020-11-25 13:16:51 +0000416 fi
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100417
Benjamin Diazba2cca92018-11-08 21:07:15 -0300418 # Keystone
Benjamin Diazba2cca92018-11-08 21:07:15 -0300419 KEYSTONE_DB_PASSWORD=$(generate_secret)
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100420 SERVICE_PASSWORD=$(generate_secret)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100421 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone-db.env ]; then
garciadeblas0bc87522021-10-20 22:16:17 +0200422 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo tee $OSM_DOCKER_WORK_DIR/keystone-db.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100423 fi
424 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone.env ]; then
garciadeblas0bc87522021-10-20 22:16:17 +0200425 echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo tee $OSM_DOCKER_WORK_DIR/keystone.env
426 echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |sudo tee -a $OSM_DOCKER_WORK_DIR/keystone.env
427 echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |sudo tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100428 fi
429
Benjamin Diazba2cca92018-11-08 21:07:15 -0300430 # NBI
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100431 if [ ! -f $OSM_DOCKER_WORK_DIR/nbi.env ]; then
garciadeblas0bc87522021-10-20 22:16:17 +0200432 echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |sudo tee $OSM_DOCKER_WORK_DIR/nbi.env
433 echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/nbi.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100434 fi
435
Benjamin Diazba2cca92018-11-08 21:07:15 -0300436 # MON
437 if [ ! -f $OSM_DOCKER_WORK_DIR/mon.env ]; then
garciadeblas0bc87522021-10-20 22:16:17 +0200438 echo "OSMMON_KEYSTONE_SERVICE_PASSWORD=${SERVICE_PASSWORD}" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
439 echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
440 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 -0300441 fi
442
443 if ! grep -Fq "OS_NOTIFIER_URI" $OSM_DOCKER_WORK_DIR/mon.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200444 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300445 else
garciadeblas0bc87522021-10-20 22:16:17 +0200446 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 -0300447 fi
448
449 if ! grep -Fq "OSMMON_VCA_HOST" $OSM_DOCKER_WORK_DIR/mon.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200450 echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300451 else
garciadeblas0bc87522021-10-20 22:16:17 +0200452 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 -0300453 fi
454
455 if ! grep -Fq "OSMMON_VCA_SECRET" $OSM_DOCKER_WORK_DIR/mon.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200456 echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300457 else
garciadeblas0bc87522021-10-20 22:16:17 +0200458 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 -0300459 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400460
Adam Israel6d8adf32019-12-05 15:46:54 -0500461 if ! grep -Fq "OSMMON_VCA_CACERT" $OSM_DOCKER_WORK_DIR/mon.env; then
garciadeblas0bc87522021-10-20 22:16:17 +0200462 echo "OSMMON_VCA_CACERT=${OSM_VCA_CACERT}" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
Adam Israel6d8adf32019-12-05 15:46:54 -0500463 else
garciadeblas0bc87522021-10-20 22:16:17 +0200464 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 -0500465 fi
466
467
Benjamin Diaz04560882019-02-26 17:25:07 -0300468 # POL
469 if [ ! -f $OSM_DOCKER_WORK_DIR/pol.env ]; then
garciadeblas0bc87522021-10-20 22:16:17 +0200470 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 -0300471 fi
472
garciadeblasd8bc5c32018-05-09 17:37:56 +0200473 echo "Finished generation of docker env files"
garciadeblas0bc87522021-10-20 22:16:17 +0200474 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
vijaynag8339ed22019-07-25 17:10:58 +0530475}
476
477#creates secrets from env files which will be used by containers
478function kube_secrets(){
garciadeblas0bc87522021-10-20 22:16:17 +0200479 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
vijaynag8339ed22019-07-25 17:10:58 +0530480 kubectl create ns $OSM_STACK_NAME
481 kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env
482 kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env
483 kubectl create secret generic nbi-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/nbi.env
484 kubectl create secret generic ro-db-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro-db.env
485 kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env
486 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 +0530487 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 +0200488 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblasf6ed60c2020-07-08 14:30:29 +0000489}
490
491#deploys osm pods and services
492function deploy_osm_services() {
garciadeblas0bc87522021-10-20 22:16:17 +0200493 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
vijaynag8339ed22019-07-25 17:10:58 +0530494 kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR
garciadeblas0bc87522021-10-20 22:16:17 +0200495 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
vijaynag8339ed22019-07-25 17:10:58 +0530496}
497
David Garciaa1376012020-10-19 15:42:42 +0200498#deploy charmed services
499function deploy_charmed_services() {
garciadeblas0bc87522021-10-20 22:16:17 +0200500 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
David Garciaa1376012020-10-19 15:42:42 +0200501 juju add-model $OSM_STACK_NAME $OSM_VCA_K8S_CLOUDNAME
David Garciad68e0b42021-06-28 16:50:42 +0200502 juju deploy ch:mongodb-k8s -m $OSM_STACK_NAME
garciadeblas0bc87522021-10-20 22:16:17 +0200503 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
David Garciaa1376012020-10-19 15:42:42 +0200504}
505
magnussonl1bbe9452020-02-25 13:43:17 +0100506function deploy_osm_pla_service() {
garciadeblas0bc87522021-10-20 22:16:17 +0200507 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
magnussonl1bbe9452020-02-25 13:43:17 +0100508 # corresponding to namespace_vol
garciadeblas0bc87522021-10-20 22:16:17 +0200509 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 +0100510 # corresponding to deploy_osm_services
511 kubectl apply -n $OSM_STACK_NAME -f $OSM_DOCKER_WORK_DIR/osm_pla
garciadeblas0bc87522021-10-20 22:16:17 +0200512 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
romeromonser599d5e22020-03-06 10:23:29 +0100513}
514
vijaynag8339ed22019-07-25 17:10:58 +0530515function parse_yaml() {
garciadeblas0bc87522021-10-20 22:16:17 +0200516 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
vijaynag8339ed22019-07-25 17:10:58 +0530517 TAG=$1
garciadeblas7f1e1042020-11-30 14:07:03 +0000518 shift
519 services=$@
520 for module in $services; do
521 if [ "$module" == "pla" ]; then
522 if [ -n "$INSTALL_PLA" ]; then
523 echo "Updating K8s manifest file from opensourcemano\/${module}:.* to ${DOCKER_REGISTRY_URL}${DOCKER_USER}\/${module}:${TAG}"
garciadeblas0bc87522021-10-20 22:16:17 +0200524 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 +0000525 fi
526 else
527 echo "Updating K8s manifest file from opensourcemano\/${module}:.* to ${DOCKER_REGISTRY_URL}${DOCKER_USER}\/${module}:${TAG}"
garciadeblas0bc87522021-10-20 22:16:17 +0200528 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 +0000529 fi
vijaynag8339ed22019-07-25 17:10:58 +0530530 done
garciadeblas0bc87522021-10-20 22:16:17 +0200531 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblas7f1e1042020-11-30 14:07:03 +0000532}
533
534function update_manifest_files() {
bravofc973b572020-10-21 16:58:50 -0300535 osm_services="nbi lcm ro pol mon ng-ui keystone pla prometheus"
garciadeblas7f1e1042020-11-30 14:07:03 +0000536 list_of_services=""
537 for module in $osm_services; do
538 module_upper="${module^^}"
garciadeblas7f1e1042020-11-30 14:07:03 +0000539 if ! echo $TO_REBUILD | grep -q $module_upper ; then
540 list_of_services="$list_of_services $module"
541 fi
542 done
garciadeblas96155042022-06-22 16:26:22 +0200543 if [ ! "$OSM_DOCKER_TAG" == "12" ]; then
garciadeblas7f1e1042020-11-30 14:07:03 +0000544 parse_yaml $OSM_DOCKER_TAG $list_of_services
545 fi
546 if [ -n "$MODULE_DOCKER_TAG" ]; then
547 parse_yaml $MODULE_DOCKER_TAG $list_of_services_to_rebuild
548 fi
garciadeblas0bc87522021-10-20 22:16:17 +0200549 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
vijaynag8339ed22019-07-25 17:10:58 +0530550}
551
552function namespace_vol() {
garciadeblas0bc87522021-10-20 22:16:17 +0200553 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
David Garciaa1376012020-10-19 15:42:42 +0200554 osm_services="nbi lcm ro pol mon kafka mysql prometheus"
vijaynag8339ed22019-07-25 17:10:58 +0530555 for osm in $osm_services; do
garciadeblas0bc87522021-10-20 22:16:17 +0200556 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 +0530557 done
garciadeblas0bc87522021-10-20 22:16:17 +0200558 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblas6c66abf2018-05-16 14:46:19 +0200559}
560
garciadeblase92a18d2020-07-03 16:24:23 +0000561function add_local_k8scluster() {
garciadeblas0bc87522021-10-20 22:16:17 +0200562 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblase92a18d2020-07-03 16:24:23 +0000563 /usr/bin/osm --all-projects vim-create \
564 --name _system-osm-vim \
565 --account_type dummy \
566 --auth_url http://dummy \
567 --user osm --password osm --tenant osm \
568 --description "dummy" \
569 --config '{management_network_name: mgmt}'
570 /usr/bin/osm --all-projects k8scluster-add \
571 --creds ${HOME}/.kube/config \
572 --vim _system-osm-vim \
573 --k8s-nets '{"net1": null}' \
574 --version '1.15' \
575 --description "OSM Internal Cluster" \
576 _system-osm-k8s
garciadeblas0bc87522021-10-20 22:16:17 +0200577 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblase92a18d2020-07-03 16:24:23 +0000578}
579
garciadeblas0bc87522021-10-20 22:16:17 +0200580function configure_apt_proxy() {
581 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
582 OSM_APT_PROXY=$1
583 OSM_APT_PROXY_FILE="/etc/apt/apt.conf.d/osm-apt"
584 echo "Configuring apt proxy in file ${OSM_APT_PROXY_FILE}"
585 if [ ! -f ${OSM_APT_PROXY_FILE} ]; then
586 sudo bash -c "cat <<EOF > ${OSM_APT_PROXY}
587Acquire::http { Proxy \"${OSM_APT_PROXY}\"; }
588EOF"
589 else
590 sudo sed -i "s|Proxy.*|Proxy \"${OSM_APT_PROXY}\"; }|" ${OSM_APT_PROXY_FILE}
591 fi
592 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 +0100593 track prereq apt_proxy_configured_ok
garciadeblas0bc87522021-10-20 22:16:17 +0200594 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
595}
596
597function install_osm() {
598 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblasadcf95e2022-01-28 17:15:39 +0100599
600 trap ctrl_c INT
601 track start release $RELEASE none none docker_tag $OSM_DOCKER_TAG none none installation_type $OSM_INSTALLATION_TYPE none none
602
garciadeblas4d89c372021-11-25 11:57:18 +0100603 track checks checkingroot_ok
garciadeblasd13a8aa2018-05-18 15:24:51 +0200604 [ "$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 +0100605 track checks noroot_ok
vijaynag8339ed22019-07-25 17:10:58 +0530606
garciadeblas0bc87522021-10-20 22:16:17 +0200607 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
608 1. Install and configure LXD
609 2. Install juju
610 3. Install docker CE
611 4. Disable swap space
612 5. Install and initialize Kubernetes
613 as pre-requirements.
614 Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
garciadeblas4d89c372021-11-25 11:57:18 +0100615 track checks proceed_ok
vijaynag8339ed22019-07-25 17:10:58 +0530616
garciadeblas0bc87522021-10-20 22:16:17 +0200617 echo "Installing OSM"
618
619 echo "Determining IP address of the interface with the default route"
tierno7d8f12e2020-05-18 14:17:41 +0000620 DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5; exit}')
621 [ -z "$DEFAULT_IF" ] && DEFAULT_IF=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}')
garciadeblas8cd60772018-06-02 08:38:17 +0200622 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
beierlm4aad47b2021-12-07 16:15:53 -0500623 DEFAULT_IP=`ip -o -4 a s ${DEFAULT_IF} |awk '{split($4,a,"/"); print a[1]; exit}'`
garciadeblas8cd60772018-06-02 08:38:17 +0200624 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
garciadeblas0bc87522021-10-20 22:16:17 +0200625
626 # configure apt proxy
627 [ -n "$APT_PROXY_URL" ] && configure_apt_proxy $APT_PROXY_URL
Mike Marchettib8420852018-09-13 13:45:06 -0400628
629 # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to
David Garcia79f4f532020-04-07 12:59:34 +0200630 if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ] && [ -z "$LXD_CLOUD_FILE" ]; then
garciadeblas8fed1082022-08-29 11:25:02 +0200631 LXD_INSTALL_OPTS="-D ${OSM_DEVOPS} -i ${DEFAULT_IP} ${DEBUG_INSTALL}"
632 $OSM_DEVOPS/installers/install_lxd.sh ${LXD_INSTALL_OPTS} || FATAL_TRACK lxd "install_lxd.sh failed"
garciadeblasd41f5482018-05-25 10:25:06 +0200633 fi
David Garcia79f4f532020-04-07 12:59:34 +0200634
garciadeblas4d89c372021-11-25 11:57:18 +0100635 track prereq prereqok_ok
Mike Marchettib8420852018-09-13 13:45:06 -0400636
garciadeblas95804f82021-11-08 23:02:01 +0100637 if [ ! -n "$INSTALL_NODOCKER" ]; then
638 DOCKER_CE_OPTS="-D ${OSM_DEVOPS} ${DEBUG_INSTALL}"
639 [ -n "${DOCKER_PROXY_URL}" ] && DOCKER_CE_OPTS="${DOCKER_CE_OPTS} -p ${DOCKER_PROXY_URL}"
garciadeblas4d89c372021-11-25 11:57:18 +0100640 $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 +0100641 fi
garciadeblas0bc87522021-10-20 22:16:17 +0200642
garciadeblas4d89c372021-11-25 11:57:18 +0100643 track docker_ce docker_ce_ok
David Garcia6cbfee12020-10-23 10:40:20 +0200644
645 echo "Creating folders for installation"
garciadeblas0bc87522021-10-20 22:16:17 +0200646 [ ! -d "$OSM_DOCKER_WORK_DIR" ] && sudo mkdir -p $OSM_DOCKER_WORK_DIR
647 [ ! -d "$OSM_DOCKER_WORK_DIR/osm_pla" -a -n "$INSTALL_PLA" ] && sudo mkdir -p $OSM_DOCKER_WORK_DIR/osm_pla
648 sudo cp -b $OSM_DEVOPS/installers/docker/cluster-config.yaml $OSM_DOCKER_WORK_DIR/cluster-config.yaml
David Garcia6cbfee12020-10-23 10:40:20 +0200649
garciadeblas4d89c372021-11-25 11:57:18 +0100650 $OSM_DEVOPS/installers/install_kubeadm_cluster.sh -i ${DEFAULT_IP} -d ${OSM_DOCKER_WORK_DIR} -D ${OSM_DEVOPS} ${DEBUG_INSTALL} || \
651 FATAL_TRACK k8scluster "install_kubeadm_cluster.sh failed"
652 track k8scluster k8scluster_ok
David Garcia6cbfee12020-10-23 10:40:20 +0200653
garciadeblas0bc87522021-10-20 22:16:17 +0200654 JUJU_OPTS="-D ${OSM_DEVOPS} -s ${OSM_STACK_NAME} -i ${DEFAULT_IP} ${DEBUG_INSTALL} ${INSTALL_NOJUJU} ${INSTALL_CACHELXDIMAGES}"
655 [ -n "${OSM_VCA_HOST}" ] && JUJU_OPTS="$JUJU_OPTS -H ${OSM_VCA_HOST}"
656 [ -n "${LXD_CLOUD_FILE}" ] && JUJU_OPTS="$JUJU_OPTS -l ${LXD_CLOUD_FILE}"
657 [ -n "${LXD_CRED_FILE}" ] && JUJU_OPTS="$JUJU_OPTS -L ${LXD_CRED_FILE}"
658 [ -n "${CONTROLLER_NAME}" ] && JUJU_OPTS="$JUJU_OPTS -K ${CONTROLLER_NAME}"
garciadeblas4d89c372021-11-25 11:57:18 +0100659 $OSM_DEVOPS/installers/install_juju.sh ${JUJU_OPTS} || FATAL_TRACK juju "install_juju.sh failed"
garciadeblas0bc87522021-10-20 22:16:17 +0200660 set_vca_variables
garciadeblas4d89c372021-11-25 11:57:18 +0100661 track juju juju_ok
Adam Israel5ddc97f2019-09-03 18:11:12 -0400662
Benjamin Diazba2cca92018-11-08 21:07:15 -0300663 if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
664 OSM_DATABASE_COMMONKEY=$(generate_secret)
665 [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret"
666 fi
vijaynag8339ed22019-07-25 17:10:58 +0530667
David Garcia6cbfee12020-10-23 10:40:20 +0200668 # Deploy OSM services
Mike Marchettib8420852018-09-13 13:45:06 -0400669 [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
garciadeblas4d89c372021-11-25 11:57:18 +0100670 track docker_images docker_images_ok
vijaynag8339ed22019-07-25 17:10:58 +0530671
garciadeblas0bc87522021-10-20 22:16:17 +0200672 generate_k8s_manifest_files
garciadeblas4d89c372021-11-25 11:57:18 +0100673 track osm_files manifest_files_ok
garciadeblasd8bc5c32018-05-09 17:37:56 +0200674 generate_docker_env_files
garciadeblas4d89c372021-11-25 11:57:18 +0100675 track osm_files env_files_ok
Mike Marchettib8420852018-09-13 13:45:06 -0400676
garciadeblas0bc87522021-10-20 22:16:17 +0200677 deploy_charmed_services
garciadeblas4d89c372021-11-25 11:57:18 +0100678 track deploy_osm deploy_charmed_services_ok
garciadeblas0bc87522021-10-20 22:16:17 +0200679 kube_secrets
garciadeblas4d89c372021-11-25 11:57:18 +0100680 track deploy_osm kube_secrets_ok
garciadeblas0bc87522021-10-20 22:16:17 +0200681 update_manifest_files
garciadeblas4d89c372021-11-25 11:57:18 +0100682 track deploy_osm update_manifest_files_ok
garciadeblas0bc87522021-10-20 22:16:17 +0200683 namespace_vol
garciadeblas4d89c372021-11-25 11:57:18 +0100684 track deploy_osm namespace_vol_ok
garciadeblas0bc87522021-10-20 22:16:17 +0200685 deploy_osm_services
garciadeblas4d89c372021-11-25 11:57:18 +0100686 track deploy_osm deploy_osm_services_k8s_ok
garciadeblas0bc87522021-10-20 22:16:17 +0200687 if [ -n "$INSTALL_PLA"]; then
688 # optional PLA install
689 deploy_osm_pla_service
garciadeblas4d89c372021-11-25 11:57:18 +0100690 track deploy_osm deploy_osm_pla_ok
garciadeblas0bc87522021-10-20 22:16:17 +0200691 fi
garciadeblas0bc87522021-10-20 22:16:17 +0200692 if [ -n "$INSTALL_K8S_MONITOR" ]; then
693 # install OSM MONITORING
694 install_k8s_monitoring
garciadeblas4d89c372021-11-25 11:57:18 +0100695 track deploy_osm install_k8s_monitoring_ok
vijaynag8339ed22019-07-25 17:10:58 +0530696 fi
697
Mike Marchettib8420852018-09-13 13:45:06 -0400698 [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
garciadeblas4d89c372021-11-25 11:57:18 +0100699 track osmclient osmclient_ok
beierlma4a37f72020-06-26 12:55:01 -0400700
garciadeblas4a9adcd2020-07-03 15:32:05 +0000701 echo -e "Checking OSM health state..."
garciadeblas0bc87522021-10-20 22:16:17 +0200702 $OSM_DEVOPS/installers/osm_health.sh -s ${OSM_STACK_NAME} -k || \
garciadeblasf4f0e0f2021-12-03 11:37:40 +0100703 (echo -e "OSM is not healthy, but will probably converge to a healthy state soon." && \
garciadeblas0bc87522021-10-20 22:16:17 +0200704 echo -e "Check OSM status with: kubectl -n ${OSM_STACK_NAME} get all" && \
garciadeblasf4f0e0f2021-12-03 11:37:40 +0100705 track healthchecks osm_unhealthy didnotconverge)
garciadeblas4d89c372021-11-25 11:57:18 +0100706 track healthchecks after_healthcheck_ok
vijaynag8339ed22019-07-25 17:10:58 +0530707
garciadeblas0bc87522021-10-20 22:16:17 +0200708 add_local_k8scluster
garciadeblas4d89c372021-11-25 11:57:18 +0100709 track final_ops add_local_k8scluster_ok
garciadeblase92a18d2020-07-03 16:24:23 +0000710
garciadeblas96155042022-06-22 16:26:22 +0200711 wget -q -O- https://osm-download.etsi.org/ftp/osm-12.0-twelve/README2.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200712 track end
garciadeblas0bc87522021-10-20 22:16:17 +0200713 sudo find /etc/osm
714 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblasd8bc5c32018-05-09 17:37:56 +0200715 return 0
716}
717
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200718function install_to_openstack() {
garciadeblas0bc87522021-10-20 22:16:17 +0200719 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200720
721 if [ -z "$2" ]; then
722 FATAL "OpenStack installer requires a valid external network name"
723 fi
724
725 # Install Pip for Python3
garciadeblas0bc87522021-10-20 22:16:17 +0200726 sudo apt install -y python3-pip python3-venv
727 sudo -H LC_ALL=C python3 -m pip install -U pip
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200728
Antonio Marsico75a38c72020-12-21 17:29:42 +0100729 # Create a venv to avoid conflicts with the host installation
730 python3 -m venv $OPENSTACK_PYTHON_VENV
731
732 source $OPENSTACK_PYTHON_VENV/bin/activate
733
Antonio Marsicoef3b2362021-03-19 18:54:57 +0100734 # Install Ansible, OpenStack client and SDK, latest openstack version supported is Train
Antonio Marsico75a38c72020-12-21 17:29:42 +0100735 python -m pip install -U wheel
Antonio Marsicoef3b2362021-03-19 18:54:57 +0100736 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 +0100737
738 # Install the Openstack cloud module (ansible>=2.10)
739 ansible-galaxy collection install openstack.cloud
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200740
741 export ANSIBLE_CONFIG="$OSM_DEVOPS/installers/openstack/ansible.cfg"
742
743 OSM_INSTALLER_ARGS="${REPO_ARGS[@]}"
744
Antonio Marsico75a38c72020-12-21 17:29:42 +0100745 ANSIBLE_VARS="external_network_name=$2 setup_volume=$3 server_name=$OPENSTACK_VM_NAME"
746
747 if [ -n "$OPENSTACK_SSH_KEY_FILE" ]; then
748 ANSIBLE_VARS+=" key_file=$OPENSTACK_SSH_KEY_FILE"
749 fi
750
751 if [ -n "$OPENSTACK_USERDATA_FILE" ]; then
752 ANSIBLE_VARS+=" userdata_file=$OPENSTACK_USERDATA_FILE"
753 fi
754
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200755 # Execute the Ansible playbook based on openrc or clouds.yaml
756 if [ -e "$1" ]; then
757 . $1
Antonio Marsico75a38c72020-12-21 17:29:42 +0100758 ansible-playbook -e installer_args="\"$OSM_INSTALLER_ARGS\"" -e "$ANSIBLE_VARS" \
759 $OSM_DEVOPS/installers/openstack/site.yml
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200760 else
Antonio Marsico75a38c72020-12-21 17:29:42 +0100761 ansible-playbook -e installer_args="\"$OSM_INSTALLER_ARGS\"" -e "$ANSIBLE_VARS" \
762 -e cloud_name=$1 $OSM_DEVOPS/installers/openstack/site.yml
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200763 fi
764
Antonio Marsico75a38c72020-12-21 17:29:42 +0100765 # Exit from venv
766 deactivate
767
garciadeblas0bc87522021-10-20 22:16:17 +0200768 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200769 return 0
770}
771
romeromonsere366b1a2019-11-19 19:49:26 +0100772function install_k8s_monitoring() {
garciadeblas0bc87522021-10-20 22:16:17 +0200773 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
romeromonsere366b1a2019-11-19 19:49:26 +0100774 # install OSM monitoring
garciadeblas0bc87522021-10-20 22:16:17 +0200775 sudo chmod +x $OSM_DEVOPS/installers/k8s/*.sh
garciadeblas4d89c372021-11-25 11:57:18 +0100776 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 +0200777 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
romeromonsere366b1a2019-11-19 19:49:26 +0100778}
779
garciadeblasd8bc5c32018-05-09 17:37:56 +0200780function dump_vars(){
garciadeblas0bc87522021-10-20 22:16:17 +0200781 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
782 echo "APT_PROXY_URL=$APT_PROXY_URL"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200783 echo "DEVELOP=$DEVELOP"
garciadeblas0bc87522021-10-20 22:16:17 +0200784 echo "DEBUG_INSTALL=$DEBUG_INSTALL"
785 echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
786 echo "DOCKER_PROXY_URL=$DOCKER_PROXY_URL"
787 echo "DOCKER_REGISTRY_URL=$DOCKER_REGISTRY_URL"
788 echo "DOCKER_USER=$DOCKER_USER"
789 echo "INSTALL_CACHELXDIMAGES=$INSTALL_CACHELXDIMAGES"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200790 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
garciadeblas0bc87522021-10-20 22:16:17 +0200791 echo "INSTALL_K8S_MONITOR=$INSTALL_K8S_MONITOR"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200792 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
garciadeblas0bc87522021-10-20 22:16:17 +0200793 echo "INSTALL_LXD=$INSTALL_LXD"
794 echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
795 echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
796 echo "INSTALL_NOLXD=$INSTALL_NOLXD"
garciadeblas6c66abf2018-05-16 14:46:19 +0200797 echo "INSTALL_ONLY=$INSTALL_ONLY"
garciadeblas0bc87522021-10-20 22:16:17 +0200798 echo "INSTALL_PLA=$INSTALL_PLA"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200799 echo "INSTALL_TO_OPENSTACK=$INSTALL_TO_OPENSTACK"
garciadeblas0bc87522021-10-20 22:16:17 +0200800 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
801 echo "NO_HOST_PORTS=$NO_HOST_PORTS"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200802 echo "OPENSTACK_PUBLIC_NET_NAME=$OPENSTACK_PUBLIC_NET_NAME"
803 echo "OPENSTACK_OPENRC_FILE_OR_CLOUD=$OPENSTACK_OPENRC_FILE_OR_CLOUD"
804 echo "OPENSTACK_ATTACH_VOLUME=$OPENSTACK_ATTACH_VOLUME"
Antonio Marsico75a38c72020-12-21 17:29:42 +0100805 echo "OPENSTACK_SSH_KEY_FILE"="$OPENSTACK_SSH_KEY_FILE"
806 echo "OPENSTACK_USERDATA_FILE"="$OPENSTACK_USERDATA_FILE"
807 echo "OPENSTACK_VM_NAME"="$OPENSTACK_VM_NAME"
garciadeblas0bc87522021-10-20 22:16:17 +0200808 echo "OSM_DEVOPS=$OSM_DEVOPS"
809 echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
garciadeblas0cd9b882022-02-10 03:11:50 +0100810 echo "OSM_DOCKER_WORK_DIR=$OSM_DOCKER_WORK_DIR"
811 echo "OSM_K8S_WORK_DIR=$OSM_K8S_WORK_DIR"
garciadeblas0bc87522021-10-20 22:16:17 +0200812 echo "OSM_STACK_NAME=$OSM_STACK_NAME"
813 echo "OSM_VCA_HOST=$OSM_VCA_HOST"
814 echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
815 echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
816 echo "OSM_WORK_DIR=$OSM_WORK_DIR"
817 echo "PULL_IMAGES=$PULL_IMAGES"
818 echo "RECONFIGURE=$RECONFIGURE"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200819 echo "RELEASE=$RELEASE"
820 echo "REPOSITORY=$REPOSITORY"
821 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
822 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200823 echo "SHOWOPTS=$SHOWOPTS"
garciadeblas0bc87522021-10-20 22:16:17 +0200824 echo "TEST_INSTALLER=$TEST_INSTALLER"
825 echo "TO_REBUILD=$TO_REBUILD"
826 echo "UNINSTALL=$UNINSTALL"
827 echo "UPDATE=$UPDATE"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200828 echo "Install from specific refspec (-b): $COMMIT_ID"
garciadeblas0bc87522021-10-20 22:16:17 +0200829 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblasd8bc5c32018-05-09 17:37:56 +0200830}
831
garciadeblas453d4582020-12-16 19:03:10 +0100832function parse_docker_registry_url() {
garciadeblas0bc87522021-10-20 22:16:17 +0200833 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
garciadeblas453d4582020-12-16 19:03:10 +0100834 DOCKER_REGISTRY_USER=$(echo "$DOCKER_REGISTRY_URL" | awk '{split($1,a,"@"); split(a[1],b,":"); print b[1]}')
835 DOCKER_REGISTRY_PASSWORD=$(echo "$DOCKER_REGISTRY_URL" | awk '{split($1,a,"@"); split(a[1],b,":"); print b[2]}')
836 DOCKER_REGISTRY_URL=$(echo "$DOCKER_REGISTRY_URL" | awk '{split($1,a,"@"); print a[2]}')
garciadeblas0bc87522021-10-20 22:16:17 +0200837 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
garciadeblas453d4582020-12-16 19:03:10 +0100838}
839
garciadeblasadcf95e2022-01-28 17:15:39 +0100840function ctrl_c() {
841 [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
842 echo "** Trapped CTRL-C"
843 FATAL "User stopped the installation"
844 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
845}
846
garciadeblasd8bc5c32018-05-09 17:37:56 +0200847UNINSTALL=""
848DEVELOP=""
garciadeblasd8bc5c32018-05-09 17:37:56 +0200849UPDATE=""
850RECONFIGURE=""
851TEST_INSTALLER=""
852INSTALL_LXD=""
853SHOWOPTS=""
854COMMIT_ID=""
855ASSUME_YES=""
garciadeblas0bc87522021-10-20 22:16:17 +0200856APT_PROXY_URL=""
garciadeblasd8bc5c32018-05-09 17:37:56 +0200857INSTALL_FROM_SOURCE=""
garciadeblas0bc87522021-10-20 22:16:17 +0200858DEBUG_INSTALL=""
garciadeblas00627272021-05-26 16:54:05 +0200859RELEASE="ReleaseTEN"
Mike Marchettib8420852018-09-13 13:45:06 -0400860REPOSITORY="stable"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200861INSTALL_VIMEMU=""
magnussonl1bbe9452020-02-25 13:43:17 +0100862INSTALL_PLA=""
garciadeblasd8bc5c32018-05-09 17:37:56 +0200863LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
864LXD_REPOSITORY_PATH=""
865INSTALL_LIGHTWEIGHT="y"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200866INSTALL_TO_OPENSTACK=""
867OPENSTACK_OPENRC_FILE_OR_CLOUD=""
868OPENSTACK_PUBLIC_NET_NAME=""
869OPENSTACK_ATTACH_VOLUME="false"
Antonio Marsico75a38c72020-12-21 17:29:42 +0100870OPENSTACK_SSH_KEY_FILE=""
871OPENSTACK_USERDATA_FILE=""
872OPENSTACK_VM_NAME="server-osm"
873OPENSTACK_PYTHON_VENV="$HOME/.virtual-envs/osm"
garciadeblas6c66abf2018-05-16 14:46:19 +0200874INSTALL_ONLY=""
garciadeblas0e596bc2018-05-28 16:04:42 +0200875TO_REBUILD=""
garciadeblasd41f5482018-05-25 10:25:06 +0200876INSTALL_NOLXD=""
garciadeblasa3e26612018-05-30 17:58:55 +0200877INSTALL_NODOCKER=""
Mike Marchettib8420852018-09-13 13:45:06 -0400878INSTALL_NOJUJU=""
garciadeblasb5a630f2020-03-05 18:32:16 +0000879INSTALL_K8S_MONITOR=""
garciadeblas0d45bc82018-11-19 14:25:13 +0100880INSTALL_NOHOSTCLIENT=""
garciadeblas0bc87522021-10-20 22:16:17 +0200881INSTALL_CACHELXDIMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +0200882OSM_DEVOPS=
lavadoe07b1642018-10-25 10:58:34 -0500883OSM_VCA_HOST=
884OSM_VCA_SECRET=
garciadeblasaa3ddf42019-04-04 19:04:32 +0200885OSM_VCA_PUBKEY=
David Garcia79f4f532020-04-07 12:59:34 +0200886OSM_VCA_CLOUDNAME="localhost"
beierlma4a37f72020-06-26 12:55:01 -0400887OSM_VCA_K8S_CLOUDNAME="k8scloud"
Mike Marchettib8420852018-09-13 13:45:06 -0400888OSM_STACK_NAME=osm
889NO_HOST_PORTS=""
890DOCKER_NOBUILD=""
891REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
garciadeblas870e60a2018-11-21 16:44:21 +0100892REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
Mike Marchettib8420852018-09-13 13:45:06 -0400893OSM_WORK_DIR="/etc/osm"
garciadeblas526f0fb2018-11-23 14:47:40 +0100894OSM_DOCKER_WORK_DIR="/etc/osm/docker"
vijaynag8339ed22019-07-25 17:10:58 +0530895OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
896OSM_HOST_VOL="/var/lib/osm"
897OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
Mike Marchetti13d76c82018-09-19 15:00:36 -0400898OSM_DOCKER_TAG=latest
garciadeblas0d45bc82018-11-19 14:25:13 +0100899DOCKER_USER=opensourcemano
900PULL_IMAGES="y"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300901KAFKA_TAG=2.11-1.0.2
garciadeblas0ab16612022-02-22 14:23:57 +0100902KIWIGRID_K8S_SIDECAR_TAG="1.15.6"
903PROMETHEUS_TAG=v2.28.1
904GRAFANA_TAG=8.1.1
lavado6ad812e2019-11-29 10:58:58 -0500905PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
906PROMETHEUS_CADVISOR_TAG=latest
lavado9a8df7c2018-10-24 09:35:34 -0500907KEYSTONEDB_TAG=10
Benjamin Diazba2cca92018-11-08 21:07:15 -0300908OSM_DATABASE_COMMONKEY=
lavado53eb8f52018-11-16 12:58:23 -0500909ELASTIC_VERSION=6.4.2
lavado4e8662c2018-11-28 11:28:14 -0500910ELASTIC_CURATOR_VERSION=5.5.4
vijaynag8339ed22019-07-25 17:10:58 +0530911POD_NETWORK_CIDR=10.244.0.0/16
912K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
913RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
garciadeblas7f1e1042020-11-30 14:07:03 +0000914DOCKER_REGISTRY_URL=
915DOCKER_PROXY_URL=
916MODULE_DOCKER_TAG=
garciadeblas4d89c372021-11-25 11:57:18 +0100917OSM_INSTALLATION_TYPE="Default"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200918
garciadeblas0bc87522021-10-20 22:16:17 +0200919while 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 +0200920 case "${o}" in
garciadeblas0bc87522021-10-20 22:16:17 +0200921 a)
922 APT_PROXY_URL=${OPTARG}
923 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +0200924 b)
925 COMMIT_ID=${OPTARG}
garciadeblas0d45bc82018-11-19 14:25:13 +0100926 PULL_IMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +0200927 ;;
928 r)
Mike Marchettib8420852018-09-13 13:45:06 -0400929 REPOSITORY="${OPTARG}"
930 REPO_ARGS+=(-r "$REPOSITORY")
garciadeblasd8bc5c32018-05-09 17:37:56 +0200931 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +0200932 k)
Mike Marchettib8420852018-09-13 13:45:06 -0400933 REPOSITORY_KEY="${OPTARG}"
934 REPO_ARGS+=(-k "$REPOSITORY_KEY")
garciadeblasd8bc5c32018-05-09 17:37:56 +0200935 ;;
936 u)
Mike Marchettib8420852018-09-13 13:45:06 -0400937 REPOSITORY_BASE="${OPTARG}"
938 REPO_ARGS+=(-u "$REPOSITORY_BASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +0200939 ;;
garciadeblas25e87d22020-01-31 14:27:29 +0100940 R)
941 RELEASE="${OPTARG}"
942 REPO_ARGS+=(-R "$RELEASE")
garciadeblas0d45bc82018-11-19 14:25:13 +0100943 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +0200944 D)
945 OSM_DEVOPS="${OPTARG}"
946 ;;
garciadeblas6c66abf2018-05-16 14:46:19 +0200947 o)
948 INSTALL_ONLY="y"
garciadeblasb5a630f2020-03-05 18:32:16 +0000949 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +0200950 ;;
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200951 O)
952 INSTALL_TO_OPENSTACK="y"
953 if [ -n "${OPTARG}" ]; then
954 OPENSTACK_OPENRC_FILE_OR_CLOUD="${OPTARG}"
955 else
956 echo -e "Invalid argument for -O : ' $OPTARG'\n" >&2
957 usage && exit 1
958 fi
959 ;;
Antonio Marsico75a38c72020-12-21 17:29:42 +0100960 f)
961 OPENSTACK_SSH_KEY_FILE="${OPTARG}"
962 ;;
963 F)
964 OPENSTACK_USERDATA_FILE="${OPTARG}"
965 ;;
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200966 N)
967 OPENSTACK_PUBLIC_NET_NAME="${OPTARG}"
968 ;;
garciadeblas0e596bc2018-05-28 16:04:42 +0200969 m)
garciadeblas7f1e1042020-11-30 14:07:03 +0000970 [ "${OPTARG}" == "NG-UI" ] && TO_REBUILD="$TO_REBUILD NG-UI" && continue
govindappa79e51b92019-05-22 12:15:21 +0530971 [ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
972 [ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
973 [ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +0200974 [ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
govindappa79e51b92019-05-22 12:15:21 +0530975 [ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
garciadeblas7f1e1042020-11-30 14:07:03 +0000976 [ "${OPTARG}" == "PLA" ] && TO_REBUILD="$TO_REBUILD PLA" && continue
977 [ "${OPTARG}" == "osmclient" ] && TO_REBUILD="$TO_REBUILD osmclient" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +0200978 [ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
979 [ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
govindappa79e51b92019-05-22 12:15:21 +0530980 [ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
garciadeblasfc5bb142019-12-10 10:49:12 +0100981 [ "${OPTARG}" == "PROMETHEUS-CADVISOR" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS-CADVISOR" && continue
govindappa79e51b92019-05-22 12:15:21 +0530982 [ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
lavado6ad812e2019-11-29 10:58:58 -0500983 [ "${OPTARG}" == "GRAFANA" ] && TO_REBUILD="$TO_REBUILD GRAFANA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +0200984 [ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
985 ;;
garciadeblas25e87d22020-01-31 14:27:29 +0100986 H)
987 OSM_VCA_HOST="${OPTARG}"
988 ;;
989 S)
990 OSM_VCA_SECRET="${OPTARG}"
991 ;;
992 s)
garciadeblas0bc87522021-10-20 22:16:17 +0200993 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 +0100994 ;;
995 t)
996 OSM_DOCKER_TAG="${OPTARG}"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +0200997 REPO_ARGS+=(-t "$OSM_DOCKER_TAG")
garciadeblas25e87d22020-01-31 14:27:29 +0100998 ;;
999 U)
1000 DOCKER_USER="${OPTARG}"
1001 ;;
1002 P)
1003 OSM_VCA_PUBKEY=$(cat ${OPTARG})
1004 ;;
1005 A)
1006 OSM_VCA_APIPROXY="${OPTARG}"
1007 ;;
David Garcia79f4f532020-04-07 12:59:34 +02001008 l)
1009 LXD_CLOUD_FILE="${OPTARG}"
1010 ;;
1011 L)
1012 LXD_CRED_FILE="${OPTARG}"
1013 ;;
David Garcia404ae122020-04-28 11:47:55 +02001014 K)
1015 CONTROLLER_NAME="${OPTARG}"
1016 ;;
garciadeblas7f1e1042020-11-30 14:07:03 +00001017 d)
1018 DOCKER_REGISTRY_URL="${OPTARG}"
1019 ;;
1020 p)
1021 DOCKER_PROXY_URL="${OPTARG}"
1022 ;;
1023 T)
1024 MODULE_DOCKER_TAG="${OPTARG}"
1025 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001026 -)
1027 [ "${OPTARG}" == "help" ] && usage && exit 0
garciadeblas0d45bc82018-11-19 14:25:13 +01001028 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
garciadeblas0bc87522021-10-20 22:16:17 +02001029 [ "${OPTARG}" == "debug" ] && DEBUG_INSTALL="--debug" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001030 [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
1031 [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001032 [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
1033 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
1034 [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
1035 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
garciadeblasd41f5482018-05-25 10:25:06 +02001036 [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
garciadeblasa3e26612018-05-30 17:58:55 +02001037 [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001038 [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001039 [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
garciadeblas0bc87522021-10-20 22:16:17 +02001040 [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="--nojuju" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001041 [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
1042 [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
garciadeblas0d45bc82018-11-19 14:25:13 +01001043 [ "${OPTARG}" == "pullimages" ] && continue
garciadeblasb5a630f2020-03-05 18:32:16 +00001044 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
garciadeblas4d89c372021-11-25 11:57:18 +01001045 [ "${OPTARG}" == "charmed" ] && CHARMED="y" && OSM_INSTALLATION_TYPE="Charmed" && continue
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001046 [ "${OPTARG}" == "bundle" ] && continue
Dominik Fleischmann7a97a4c2020-06-04 10:52:05 +02001047 [ "${OPTARG}" == "k8s" ] && continue
1048 [ "${OPTARG}" == "lxd" ] && continue
1049 [ "${OPTARG}" == "lxd-cred" ] && continue
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001050 [ "${OPTARG}" == "microstack" ] && continue
David Garcia4bd2bf02021-05-05 19:01:43 +02001051 [ "${OPTARG}" == "overlay" ] && continue
David Garcia1bc71022021-05-03 18:27:18 +02001052 [ "${OPTARG}" == "only-vca" ] && continue
aticig5d19ac22022-05-06 13:46:22 +03001053 [ "${OPTARG}" == "small-profile" ] && continue
Dominik Fleischmannc63bed62020-09-25 12:17:54 +02001054 [ "${OPTARG}" == "vca" ] && continue
Dominik Fleischmannc57296f2020-06-09 11:45:08 +02001055 [ "${OPTARG}" == "ha" ] && continue
David Garcia69388c22020-05-07 12:14:19 +02001056 [ "${OPTARG}" == "tag" ] && continue
beierlmf2782c52020-11-05 17:04:05 -05001057 [ "${OPTARG}" == "registry" ] && continue
magnussonl1bbe9452020-02-25 13:43:17 +01001058 [ "${OPTARG}" == "pla" ] && INSTALL_PLA="y" && continue
Antonio Marsicof4ce57c2020-04-23 12:06:19 +02001059 [ "${OPTARG}" == "volume" ] && OPENSTACK_ATTACH_VOLUME="true" && continue
garciadeblas0bc87522021-10-20 22:16:17 +02001060 [ "${OPTARG}" == "nocachelxdimages" ] && continue
1061 [ "${OPTARG}" == "cachelxdimages" ] && INSTALL_CACHELXDIMAGES="--cachelxdimages" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001062 echo -e "Invalid option: '--$OPTARG'\n" >&2
1063 usage && exit 1
1064 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001065 :)
1066 echo "Option -$OPTARG requires an argument" >&2
1067 usage && exit 1
1068 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001069 \?)
1070 echo -e "Invalid option: '-$OPTARG'\n" >&2
1071 usage && exit 1
1072 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001073 h)
1074 usage && exit 0
1075 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001076 y)
1077 ASSUME_YES="y"
1078 ;;
1079 *)
1080 usage && exit 1
1081 ;;
1082 esac
1083done
1084
garciadeblas0bc87522021-10-20 22:16:17 +02001085source $OSM_DEVOPS/common/all_funcs
garciadeblas6c66abf2018-05-16 14:46:19 +02001086
garciadeblas0bc87522021-10-20 22:16:17 +02001087[ -z "${DEBUG_INSTALL}" ] || DEBUG Debug is on
1088[ -n "$SHOWOPTS" ] && dump_vars && exit 0
1089
1090# Uninstall if "--uninstall"
1091if [ -n "$UNINSTALL" ]; then
1092 if [ -n "$CHARMED" ]; then
garciadeblas4d89c372021-11-25 11:57:18 +01001093 ${OSM_DEVOPS}/installers/charmed_uninstall.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D $OSM_DEVOPS -t $DOCKER_TAG "$@" || \
1094 FATAL_TRACK charmed_uninstall "charmed_uninstall.sh failed"
garciadeblas0bc87522021-10-20 22:16:17 +02001095 else
garciadeblas4d89c372021-11-25 11:57:18 +01001096 ${OSM_DEVOPS}/installers/uninstall_osm.sh "$@" || \
1097 FATAL_TRACK community_uninstall "uninstall_osm.sh failed"
garciadeblas0bc87522021-10-20 22:16:17 +02001098 fi
1099 echo -e "\nDONE"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001100 exit 0
1101fi
1102
garciadeblas0bc87522021-10-20 22:16:17 +02001103# Charmed installation
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001104if [ -n "$CHARMED" ]; then
beierlmce7b4602022-04-13 08:19:40 -04001105 export OSM_TRACK_INSTALLATION_ID="$(date +%s)-$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)"
1106 track start release $RELEASE none none docker_tag $OSM_DOCKER_TAG none none installation_type $OSM_INSTALLATION_TYPE none none
1107 ${OSM_DEVOPS}/installers/charmed_install.sh --tag $OSM_DOCKER_TAG "$@" || \
garciadeblas4d89c372021-11-25 11:57:18 +01001108 FATAL_TRACK charmed_install "charmed_install.sh failed"
garciadeblas96155042022-06-22 16:26:22 +02001109 wget -q -O- https://osm-download.etsi.org/ftp/osm-12.0-twelve/README2.txt &> /dev/null
beierlmce7b4602022-04-13 08:19:40 -04001110 track end installation_type $OSM_INSTALLATION_TYPE
garciadeblas0bc87522021-10-20 22:16:17 +02001111 echo -e "\nDONE"
1112 exit 0
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001113fi
1114
garciadeblas0bc87522021-10-20 22:16:17 +02001115# Installation to Openstack
1116if [ -n "$INSTALL_TO_OPENSTACK" ]; then
1117 install_to_openstack $OPENSTACK_OPENRC_FILE_OR_CLOUD $OPENSTACK_PUBLIC_NET_NAME $OPENSTACK_ATTACH_VOLUME
1118 echo -e "\nDONE"
1119 exit 0
1120fi
1121
1122# Community_installer
1123[ -n "$DOCKER_REGISTRY_URL" ] && parse_docker_registry_url
1124[ -n "$TO_REBUILD" ] && [ "$TO_REBUILD" != " NONE" ] && echo $TO_REBUILD | grep -q NONE && FATAL "Incompatible option: -m NONE cannot be used with other -m options"
1125[ -n "$TO_REBUILD" ] && [ "$TO_REBUILD" == " PLA" ] && [ -z "$INSTALL_PLA" ] && FATAL "Incompatible option: -m PLA cannot be used without --pla option"
1126
garciadeblasd8bc5c32018-05-09 17:37:56 +02001127# if develop, we force master
1128[ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
1129
garciadeblas835088e2022-01-28 11:25:18 +01001130check_packages "git wget curl tar snapd"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +02001131
David Garcia404ae122020-04-28 11:47:55 +02001132sudo snap install jq
garciadeblasd8bc5c32018-05-09 17:37:56 +02001133if [ -z "$OSM_DEVOPS" ]; then
Michael Marchettiee374142018-08-02 22:47:16 +02001134 if [ -n "$TEST_INSTALLER" ]; then
1135 echo -e "\nUsing local devops repo for OSM installation"
1136 OSM_DEVOPS="$(dirname $(realpath $(dirname $0)))"
1137 else
1138 echo -e "\nCreating temporary dir for OSM installation"
1139 OSM_DEVOPS="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
1140 trap 'rm -rf "$OSM_DEVOPS"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001141
Michael Marchettiee374142018-08-02 22:47:16 +02001142 git clone https://osm.etsi.org/gerrit/osm/devops.git $OSM_DEVOPS
garciadeblasd8bc5c32018-05-09 17:37:56 +02001143
Michael Marchettiee374142018-08-02 22:47:16 +02001144 if [ -z "$COMMIT_ID" ]; then
1145 echo -e "\nGuessing the current stable release"
1146 LATEST_STABLE_DEVOPS=`git -C $OSM_DEVOPS tag -l v[0-9].* | sort -V | tail -n1`
1147 [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
1148
1149 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
1150 COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
1151 else
1152 echo -e "\nDEVOPS Using commit $COMMIT_ID"
1153 fi
1154 git -C $OSM_DEVOPS checkout $COMMIT_ID
garciadeblasd8bc5c32018-05-09 17:37:56 +02001155 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001156fi
1157
beierlma4a37f72020-06-26 12:55:01 -04001158[ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
garciadeblas0bc87522021-10-20 22:16:17 +02001159OSM_K8S_WORK_DIR="$OSM_DOCKER_WORK_DIR/osm_pods" && OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
garciadeblasb5a630f2020-03-05 18:32:16 +00001160[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_K8S_MONITOR" ] && install_k8s_monitoring
garciadeblas6c66abf2018-05-16 14:46:19 +02001161[ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
garciadeblasd8bc5c32018-05-09 17:37:56 +02001162
1163#Installation starts here
garciadeblas96155042022-06-22 16:26:22 +02001164wget -q -O- https://osm-download.etsi.org/ftp/osm-12.0-twelve/README.txt &> /dev/null
garciadeblas4d89c372021-11-25 11:57:18 +01001165export OSM_TRACK_INSTALLATION_ID="$(date +%s)-$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)"
garciadeblas0bc87522021-10-20 22:16:17 +02001166install_osm
garciadeblasd8bc5c32018-05-09 17:37:56 +02001167echo -e "\nDONE"
garciadeblas4d89c372021-11-25 11:57:18 +01001168exit 0