blob: f268618dc7c282503d26b0ba08dac117a41870ad [file] [log] [blame]
garciadeblasd8bc5c32018-05-09 17:37:56 +02001#!/bin/bash
2# Copyright 2016 Telefónica Investigación y Desarrollo S.A.U.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16function usage(){
17 echo -e "usage: $0 [OPTIONS]"
18 echo -e "Install OSM from binaries or source code (by default, from binaries)"
19 echo -e " OPTIONS"
garciadeblasd8bc5c32018-05-09 17:37:56 +020020 echo -e " -r <repo>: use specified repository name for osm packages"
21 echo -e " -R <release>: use specified release for osm binaries (deb packages, lxd images, ...)"
22 echo -e " -u <repo base>: use specified repository url for osm packages"
23 echo -e " -k <repo key>: use specified repository public key url"
24 echo -e " -b <refspec>: install OSM from source code using a specific branch (master, v2.0, ...) or tag"
25 echo -e " -b master (main dev branch)"
26 echo -e " -b v2.0 (v2.0 branch)"
27 echo -e " -b tags/v1.1.0 (a specific tag)"
28 echo -e " ..."
vijaynag8339ed22019-07-25 17:10:58 +053029 echo -e " -c <orchestrator> deploy osm services using container <orchestrator>. Valid values are <k8s> or <swarm>. If -c is not used then osm will be deployed using default orchestrator. When used with --uninstall, osm services deployed by the orchestrator will be uninstalled"
vijaynag4b57d462020-06-08 14:23:10 +000030 echo -e " -n <ui> install OSM with Next Gen UI. Valid values are <lwui> or <ngui>. If -n is not specified osm will be installed with light-ui. When used with uninstall, osm along with the UI specified will be uninstalled"
vijaynag8339ed22019-07-25 17:10:58 +053031 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 -040032 echo -e " -H <VCA host> use specific juju host controller IP"
33 echo -e " -S <VCA secret> use VCA/juju secret key"
garciadeblasaa3ddf42019-04-04 19:04:32 +020034 echo -e " -P <VCA pubkey> use VCA/juju public key file"
garciadeblas0c2f62b2019-05-29 15:23:19 +020035 echo -e " -C <VCA cacert> use VCA/juju CA certificate file"
Adam Israel5ddc97f2019-09-03 18:11:12 -040036 echo -e " -A <VCA apiproxy> use VCA/juju API proxy"
garciadeblas6c66abf2018-05-16 14:46:19 +020037 echo -e " --vimemu: additionally deploy the VIM emulator as a docker container"
38 echo -e " --elk_stack: additionally deploy an ELK docker stack for event logging"
magnussonl1bbe9452020-02-25 13:43:17 +010039 echo -e " --pla: install the PLA module for placement support"
40 echo -e " -m <MODULE>: install OSM but only rebuild the specified docker images (LW-UI, NBI, LCM, RO, MON, POL, KAFKA, MONGO, PROMETHEUS, PROMETHEUS-CADVISOR, KEYSTONE-DB, PLA, NONE)"
romeromonser599d5e22020-03-06 10:23:29 +010041 echo -e " -o <ADDON>: ONLY (un)installs one of the addons (vimemu, elk_stack, k8s_monitor)"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +020042 echo -e " -O <openrc file/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/"
43 echo -e " -N <openstack public network name/ID>: Public network name required to setup OSM to OpenStack"
garciadeblase990f662018-05-18 11:43:39 +020044 echo -e " -D <devops path> use local devops installation path"
Mike Marchettib8420852018-09-13 13:45:06 -040045 echo -e " -w <work dir> Location to store runtime installation"
Mike Marchetti13d76c82018-09-19 15:00:36 -040046 echo -e " -t <docker tag> specify osm docker tag (default is latest)"
David Garcia79f4f532020-04-07 12:59:34 +020047 echo -e " -l: LXD cloud yaml file"
48 echo -e " -L: LXD credentials yaml file"
David Garcia404ae122020-04-28 11:47:55 +020049 echo -e " -K: Specifies the name of the controller to use - The controller must be already bootstrapped"
David Garcia79f4f532020-04-07 12:59:34 +020050 echo -e " --nolxd: do not install and configure LXD, allowing unattended installations (assumes LXD is already installed and confifured)"
garciadeblasa3e26612018-05-30 17:58:55 +020051 echo -e " --nodocker: do not install docker, do not initialize a swarm (assumes docker is already installed and a swarm has been initialized)"
Mike Marchettib8420852018-09-13 13:45:06 -040052 echo -e " --nojuju: do not juju, assumes already installed"
53 echo -e " --nodockerbuild:do not build docker images (use existing locally cached images)"
54 echo -e " --nohostports: do not expose docker ports to host (useful for creating multiple instances of osm on the same host)"
55 echo -e " --nohostclient: do not install the osmclient"
garciadeblase990f662018-05-18 11:43:39 +020056 echo -e " --uninstall: uninstall OSM: remove the containers and delete NAT rules"
57 echo -e " --source: install OSM from source code using the latest stable tag"
garciadeblasd8bc5c32018-05-09 17:37:56 +020058 echo -e " --develop: (deprecated, use '-b master') install OSM from source code using the master branch"
Mike Marchettida8a9c42018-10-01 15:25:15 -040059 echo -e " --pullimages: pull/run osm images from docker.io/opensourcemano"
romeromonser599d5e22020-03-06 10:23:29 +010060 echo -e " --k8s_monitor: install the OSM kubernetes monitoring with prometheus and grafana"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +020061 echo -e " --volume: create a VM volume when installing to OpenStack"
garciadeblasd8bc5c32018-05-09 17:37:56 +020062# echo -e " --reconfigure: reconfigure the modules (DO NOT change NAT rules)"
garciadeblasd8bc5c32018-05-09 17:37:56 +020063# echo -e " --update: update to the latest stable release or to the latest commit if using a specific branch"
64 echo -e " --showopts: print chosen options and exit (only for debugging)"
65 echo -e " -y: do not prompt for confirmation, assumes yes"
garciadeblasd8bc5c32018-05-09 17:37:56 +020066 echo -e " -h / --help: print this help"
Dominik Fleischmann7a97a4c2020-06-04 10:52:05 +020067 echo -e " --charmed: Deploy and operate OSM with Charms on k8s"
68 echo -e " [--bundle <bundle path>]: Specify with which bundle to deploy OSM with charms (--charmed option)"
69 echo -e " [--k8s <kubeconfig path>]: Specify with which kubernetes to deploy OSM with charms (--charmed option)"
Dominik Fleischmannc57296f2020-06-09 11:45:08 +020070 echo -e " [--vca <name>]: Specifies the name of the controller to use - The controller must be already bootstrapped (--charmed option)"
71 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 +020072 echo -e " [--lxd-cred <yaml path>]: Takes a YAML file as a parameter with the LXD Credentials information (--charmed option)"
73 echo -e " [--microstack]: Installs microstack as a vim. (--charmed option)"
Dominik Fleischmannc57296f2020-06-09 11:45:08 +020074 echo -e " [--ha]: Installs High Availability bundle. (--charmed option)"
Dominik Fleischmann7a97a4c2020-06-04 10:52:05 +020075 echo -e " [--tag]: Docker image tag"
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +010076
garciadeblasd8bc5c32018-05-09 17:37:56 +020077}
78
Mike Marchettib8420852018-09-13 13:45:06 -040079# takes a juju/accounts.yaml file and returns the password specific
Adam Israel8232e562018-11-21 16:47:45 -050080# for a controller. I wrote this using only bash tools to minimize
Mike Marchettib8420852018-09-13 13:45:06 -040081# additions of other packages
82function parse_juju_password {
83 password_file="${HOME}/.local/share/juju/accounts.yaml"
84 local controller_name=$1
85 local s='[[:space:]]*' w='[a-zA-Z0-9_-]*' fs=$(echo @|tr @ '\034')
86 sed -ne "s|^\($s\):|\1|" \
87 -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
88 -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $password_file |
89 awk -F$fs -v controller=$controller_name '{
90 indent = length($1)/2;
91 vname[indent] = $2;
92 for (i in vname) {if (i > indent) {delete vname[i]}}
93 if (length($3) > 0) {
94 vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
95 if (match(vn,controller) && match($2,"password")) {
96 printf("%s",$3);
97 }
98 }
99 }'
100}
101
Benjamin Diazba2cca92018-11-08 21:07:15 -0300102function generate_secret() {
103 head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32
104}
105
Mike Marchettib8420852018-09-13 13:45:06 -0400106function remove_volumes() {
vijaynag8339ed22019-07-25 17:10:58 +0530107 if [ -n "$KUBERNETES" ]; then
108 k8_volume=$1
109 echo "Removing ${k8_volume}"
110 $WORKDIR_SUDO rm -rf ${k8_volume}
111 else
112 stack=$1
garciadeblasac550f22019-12-11 11:17:06 +0100113 volumes="mongo_db mon_db osm_packages ro_db pol_db prom_db ro"
vijaynag8339ed22019-07-25 17:10:58 +0530114 for volume in $volumes; do
115 sg docker -c "docker volume rm ${stack}_${volume}"
116 done
117 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400118}
119
120function remove_network() {
121 stack=$1
122 sg docker -c "docker network rm net${stack}"
123}
124
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100125function remove_iptables() {
126 stack=$1
127 if [ -z "$OSM_VCA_HOST" ]; then
128 OSM_VCA_HOST=`sg lxd -c "juju show-controller ${stack}"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
129 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
130 fi
131
David Garcia26432d42019-12-11 12:22:35 +0100132 if [ -z "$DEFAULT_IP" ]; then
tierno7d8f12e2020-05-18 14:17:41 +0000133 DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5; exit}')
134 [ -z "$DEFAULT_IF" ] && DEFAULT_IF=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}')
David Garcia26432d42019-12-11 12:22:35 +0100135 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
136 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
137 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
138 fi
139
140 if sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
141 sudo iptables -t nat -D PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100142 sudo netfilter-persistent save
143 fi
144}
145
garciadeblas5b857d32018-05-24 18:37:58 +0200146function remove_stack() {
147 stack=$1
garciadeblas5ef98212018-05-28 09:25:36 +0200148 if sg docker -c "docker stack ps ${stack}" ; then
garciadeblas5b857d32018-05-24 18:37:58 +0200149 echo -e "\nRemoving stack ${stack}" && sg docker -c "docker stack rm ${stack}"
150 COUNTER=0
151 result=1
152 while [ ${COUNTER} -lt 30 ]; do
153 result=$(sg docker -c "docker stack ps ${stack}" | wc -l)
154 #echo "Dockers running: $result"
155 if [ "${result}" == "0" ]; then
156 break
157 fi
158 let COUNTER=COUNTER+1
159 sleep 1
160 done
garciadeblasd8bc5c32018-05-09 17:37:56 +0200161 if [ "${result}" == "0" ]; then
garciadeblas5b857d32018-05-24 18:37:58 +0200162 echo "All dockers of the stack ${stack} were removed"
163 else
164 FATAL "Some dockers of the stack ${stack} could not be removed. Could not clean it."
garciadeblasd8bc5c32018-05-09 17:37:56 +0200165 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200166 sleep 5
garciadeblasd8bc5c32018-05-09 17:37:56 +0200167 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200168}
169
vijaynag8339ed22019-07-25 17:10:58 +0530170#removes osm deployments and services
171function remove_k8s_namespace() {
172 kubectl delete ns $1
173}
174
romeromonser599d5e22020-03-06 10:23:29 +0100175#removes helm only if there is nothing deployed in helm
176function remove_helm() {
177 if [ "$(helm ls -q)" == "" ] ; then
178 sudo helm reset --force
179 kubectl delete --namespace kube-system serviceaccount tiller
180 kubectl delete clusterrolebinding tiller-cluster-rule
181 sudo rm /usr/local/bin/helm
182 rm -rf $HOME/.helm
183 fi
184}
185
garciadeblas22385882020-05-08 10:40:20 +0000186#Uninstall osmclient
187function uninstall_osmclient() {
188 sudo apt-get remove --purge -y python-osmclient
189 sudo apt-get remove --purge -y python3-osmclient
190}
191
garciadeblas5b857d32018-05-24 18:37:58 +0200192#Uninstall lightweight OSM: remove dockers
193function uninstall_lightweight() {
garciadeblas282ff4e2018-07-10 09:16:30 +0200194 if [ -n "$INSTALL_ONLY" ]; then
195 if [ -n "$INSTALL_ELK" ]; then
196 echo -e "\nUninstalling OSM ELK stack"
197 remove_stack osm_elk
Mike Marchettib8420852018-09-13 13:45:06 -0400198 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas282ff4e2018-07-10 09:16:30 +0200199 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200200 else
201 echo -e "\nUninstalling OSM"
vijaynag8339ed22019-07-25 17:10:58 +0530202 if [ -n "$KUBERNETES" ]; then
garciadeblasb5a630f2020-03-05 18:32:16 +0000203 if [ -n "$INSTALL_K8S_MONITOR" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +0100204 # uninstall OSM MONITORING
205 uninstall_k8s_monitoring
206 fi
vijaynag8339ed22019-07-25 17:10:58 +0530207 remove_k8s_namespace $OSM_STACK_NAME
208 else
209 remove_stack $OSM_STACK_NAME
210 remove_stack osm_elk
vijaynag8339ed22019-07-25 17:10:58 +0530211 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200212 echo "Now osm docker images and volumes will be deleted"
213 newgrp docker << EONG
lavado02ad4b02018-11-28 11:30:48 -0500214 docker image rm ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}
215 docker image rm ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}
lavado02ad4b02018-11-28 11:30:48 -0500216 docker image rm ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}
217 docker image rm ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}
218 docker image rm ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}
219 docker image rm ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}
magnussonl1bbe9452020-02-25 13:43:17 +0100220 docker image rm ${DOCKER_USER}/pla:${OSM_DOCKER_TAG}
lavado02ad4b02018-11-28 11:30:48 -0500221 docker image rm ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}
garciadeblas83ca1322018-05-22 18:31:14 +0200222EONG
vijaynag8339ed22019-07-25 17:10:58 +0530223
vijaynag4b57d462020-06-08 14:23:10 +0000224 if [ -n "$NGUI" ]; then
garciadeblasb1862b12020-07-09 14:20:47 +0000225 sg docker -c "docker image rm ${DOCKER_USER}/ng-ui:${OSM_DOCKER_TAG}"
vijaynag4b57d462020-06-08 14:23:10 +0000226 else
garciadeblasb1862b12020-07-09 14:20:47 +0000227 sg docker -c "docker image rm ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}"
228 fi
vijaynag4b57d462020-06-08 14:23:10 +0000229
vijaynag8339ed22019-07-25 17:10:58 +0530230 if [ -n "$KUBERNETES" ]; then
231 OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
232 remove_volumes $OSM_NAMESPACE_VOL
233 else
234 remove_volumes $OSM_STACK_NAME
235 remove_network $OSM_STACK_NAME
236 fi
David Garcia404ae122020-04-28 11:47:55 +0200237 [ -z "$CONTROLLER_NAME" ] && remove_iptables $OSM_STACK_NAME
Mike Marchettib8420852018-09-13 13:45:06 -0400238 echo "Removing $OSM_DOCKER_WORK_DIR"
239 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR
David Garcia404ae122020-04-28 11:47:55 +0200240 [ -z "$CONTROLLER_NAME" ] && sg lxd -c "juju destroy-controller --destroy-all-models --yes $OSM_STACK_NAME"
garciadeblas282ff4e2018-07-10 09:16:30 +0200241 fi
garciadeblasb1862b12020-07-09 14:20:47 +0000242 [ -z "$INSTALL_NOHOSTCLIENT" ] && uninstall_osmclient
garciadeblas282ff4e2018-07-10 09:16:30 +0200243 echo "Some docker images will be kept in case they are used by other docker stacks"
244 echo "To remove them, just run 'docker image prune' in a terminal"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200245 return 0
246}
247
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100248#Safe unattended install of iptables-persistent
249function check_install_iptables_persistent(){
250 echo -e "\nChecking required packages: iptables-persistent"
garciadeblas96b4cc22020-07-06 15:15:03 +0000251 if ! dpkg -l iptables-persistent &>/dev/null; then
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100252 echo -e " Not installed.\nInstalling iptables-persistent requires root privileges"
253 echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections
254 echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections
255 sudo apt-get -yq install iptables-persistent
256 fi
257}
258
garciadeblasd8bc5c32018-05-09 17:37:56 +0200259#Configure NAT rules, based on the current IP addresses of containers
260function nat(){
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100261 check_install_iptables_persistent
Dominik Fleischmannc57296f2020-06-09 11:45:08 +0200262
garciadeblasd8bc5c32018-05-09 17:37:56 +0200263 echo -e "\nConfiguring NAT rules"
264 echo -e " Required root privileges"
265 sudo $OSM_DEVOPS/installers/nat_osm
266}
267
268function FATAL(){
269 echo "FATAL error: Cannot install OSM due to \"$1\""
270 exit 1
271}
272
garciadeblasd8bc5c32018-05-09 17:37:56 +0200273function install_lxd() {
David Garcia50d786e2020-03-30 14:49:40 +0200274 # Apply sysctl production values for optimal performance
garciadeblascd0c6ea2020-07-04 07:38:49 +0000275 sudo cp ${OSM_DEVOPS}/installers/60-lxd-production.conf /etc/sysctl.d/60-lxd-production.conf
David Garcia50d786e2020-03-30 14:49:40 +0200276 sudo sysctl --system
277
278 # Install LXD snap
279 sudo apt-get remove --purge -y liblxc1 lxc-common lxcfs lxd lxd-client
David Garcia42375212020-04-27 19:07:49 +0200280 sudo snap install lxd
David Garcia404ae122020-04-28 11:47:55 +0200281 sudo apt-get install zfsutils-linux -y
David Garcia50d786e2020-03-30 14:49:40 +0200282
283 # Configure LXD
284 sudo usermod -a -G lxd `whoami`
garciadeblascd0c6ea2020-07-04 07:38:49 +0000285 cat ${OSM_DEVOPS}/installers/lxd-preseed.conf | sed 's/^config: {}/config:\n core.https_address: '$DEFAULT_IP':8443/' | sg lxd -c "lxd init --preseed"
David Garcia50d786e2020-03-30 14:49:40 +0200286 sg lxd -c "lxd waitready"
tierno7d8f12e2020-05-18 14:17:41 +0000287 DEFAULT_INTERFACE=$(ip route list|awk '$1=="default" {print $5; exit}')
288 [ -z "$DEFAULT_INTERFACE" ] && DEFAULT_INTERFACE=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}')
garciadeblasd8bc5c32018-05-09 17:37:56 +0200289 DEFAULT_MTU=$(ip addr show $DEFAULT_INTERFACE | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
David Garcia50d786e2020-03-30 14:49:40 +0200290 sg lxd -c "lxc profile device set default eth0 mtu $DEFAULT_MTU"
David Garciad00e49c2020-06-19 10:33:37 +0200291 sg lxd -c "lxc network set lxdbr0 bridge.mtu $DEFAULT_MTU"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200292 #sudo systemctl stop lxd-bridge
293 #sudo systemctl --system daemon-reload
294 #sudo systemctl enable lxd-bridge
295 #sudo systemctl start lxd-bridge
296}
297
298function ask_user(){
299 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
300 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
301 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
302 read -e -p "$1" USER_CONFIRMATION
303 while true ; do
304 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
305 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
306 [ "${USER_CONFIRMATION,,}" == "yes" ] || [ "${USER_CONFIRMATION,,}" == "y" ] && return 0
307 [ "${USER_CONFIRMATION,,}" == "no" ] || [ "${USER_CONFIRMATION,,}" == "n" ] && return 1
308 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
309 done
310}
311
garciadeblasd8bc5c32018-05-09 17:37:56 +0200312function install_osmclient(){
313 CLIENT_RELEASE=${RELEASE#"-R "}
314 CLIENT_REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
315 CLIENT_REPOSITORY=${REPOSITORY#"-r "}
garciadeblasd8bc5c32018-05-09 17:37:56 +0200316 CLIENT_REPOSITORY_BASE=${REPOSITORY_BASE#"-u "}
317 key_location=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
318 curl $key_location | sudo apt-key add -
garciadeblas078f5982019-11-27 15:06:06 +0100319 sudo add-apt-repository -y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient IM"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200320 sudo apt-get update
garciadeblas078f5982019-11-27 15:06:06 +0100321 sudo apt-get install -y python3-pip
322 sudo -H LC_ALL=C python3 -m pip install -U pip
garciadeblasa9954892020-01-22 16:05:05 +0100323 sudo -H LC_ALL=C python3 -m pip install -U python-magic pyangbind verboselogs
garciadeblasda89ee72019-11-28 02:19:59 +0100324 sudo apt-get install -y python3-osm-im python3-osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +0200325 #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
326 #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
327 #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
328 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME=`lxc list | awk '($2=="SO-ub"){print $6}'`
329 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME=`lxc list | awk '($2=="RO"){print $6}'`
garciadeblasd8bc5c32018-05-09 17:37:56 +0200330 echo -e "\nOSM client installed"
garciadeblasc3226982018-11-27 11:32:47 +0100331 if [ -z "$INSTALL_LIGHTWEIGHT" ]; then
332 echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
333 echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
334 echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
335 else
336 echo -e "OSM client assumes that OSM host is running in localhost (127.0.0.1)."
337 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:"
338 echo " export OSM_HOSTNAME=<OSM_host>"
339 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +0200340 return 0
341}
342
lavado6ad812e2019-11-29 10:58:58 -0500343function install_prometheus_nodeexporter(){
lavadoc26d90b2019-12-06 18:11:36 -0500344 if (systemctl -q is-active node_exporter)
345 then
346 echo "Node Exporter is already running."
347 else
348 echo "Node Exporter is not active, installing..."
349 if getent passwd node_exporter > /dev/null 2>&1; then
350 echo "node_exporter user exists"
351 else
352 echo "Creating user node_exporter"
353 sudo useradd --no-create-home --shell /bin/false node_exporter
354 fi
garciadeblas82671062020-04-29 13:24:19 +0000355 wget -q https://github.com/prometheus/node_exporter/releases/download/v$PROMETHEUS_NODE_EXPORTER_TAG/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz -P /tmp/
lavadoc26d90b2019-12-06 18:11:36 -0500356 sudo tar -C /tmp -xf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz
357 sudo cp /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64/node_exporter /usr/local/bin
358 sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
garciadeblas82671062020-04-29 13:24:19 +0000359 sudo rm -rf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64*
garciadeblas8bf31632020-06-30 14:18:12 +0000360 sudo cp ${OSM_DEVOPS}/installers/docker/prometheus_exporters/node_exporter.service /etc/systemd/system/node_exporter.service
lavadoc26d90b2019-12-06 18:11:36 -0500361 sudo systemctl daemon-reload
362 sudo systemctl restart node_exporter
363 sudo systemctl enable node_exporter
364 echo "Node Exporter has been activated in this host."
365 fi
lavado6ad812e2019-11-29 10:58:58 -0500366 return 0
367}
368
lavado1e4a88c2019-12-03 16:19:59 -0500369function uninstall_prometheus_nodeexporter(){
370 sudo systemctl stop node_exporter
371 sudo systemctl disable node_exporter
372 sudo rm /etc/systemd/system/node_exporter.service
373 sudo systemctl daemon-reload
374 sudo userdel node_exporter
375 sudo rm /usr/local/bin/node_exporter
376 return 0
377}
378
garciadeblasd8bc5c32018-05-09 17:37:56 +0200379function install_docker_ce() {
380 # installs and configures Docker CE
381 echo "Installing Docker CE ..."
382 sudo apt-get -qq update
383 sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
384 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
385 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
386 sudo apt-get -qq update
387 sudo apt-get install -y docker-ce
388 echo "Adding user to group 'docker'"
389 sudo groupadd -f docker
390 sudo usermod -aG docker $USER
garciadeblasd8bc5c32018-05-09 17:37:56 +0200391 sleep 2
392 sudo service docker restart
393 echo "... restarted Docker service"
garciadeblas67ce97c2018-05-18 10:22:09 +0200394 sg docker -c "docker version" || FATAL "Docker installation failed"
395 echo "... Docker CE installation done"
396 return 0
garciadeblasd8bc5c32018-05-09 17:37:56 +0200397}
398
399function install_docker_compose() {
400 # installs and configures docker-compose
401 echo "Installing Docker Compose ..."
402 sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
403 sudo chmod +x /usr/local/bin/docker-compose
404 echo "... Docker Compose installation done"
405}
406
407function install_juju() {
408 echo "Installing juju"
Dominik Fleischmann71997c12020-06-30 14:25:19 +0200409 sudo snap install juju --classic --channel=2.8/stable
Dominik4763cfe2019-11-27 12:15:50 +0100410 [[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200411 echo "Finished installation of juju"
Mike Marchettib8420852018-09-13 13:45:06 -0400412 return 0
413}
414
415function juju_createcontroller() {
Adam Israel8232e562018-11-21 16:47:45 -0500416 if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then
Mike Marchettib8420852018-09-13 13:45:06 -0400417 # Not found created, create the controller
garciadeblas85bb41a2020-01-15 18:20:14 +0100418 sudo usermod -a -G lxd ${USER}
David Garciaa2cf7d52020-05-18 18:20:43 +0200419 sg lxd -c "juju bootstrap --bootstrap-series=xenial $OSM_VCA_CLOUDNAME $OSM_STACK_NAME"
Mike Marchettib8420852018-09-13 13:45:06 -0400420 fi
Adam Israel8232e562018-11-21 16:47:45 -0500421 [ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed"
Dominik Fleischmann71997c12020-06-30 14:25:19 +0200422 juju controller-config features=[k8s-operators]
garciadeblasd8bc5c32018-05-09 17:37:56 +0200423}
424
garciadeblas162a5342020-07-06 15:03:39 +0000425function juju_addk8s() {
garciadeblasf45f52a2020-07-08 11:28:12 +0000426 cat .kube/config | juju add-k8s $OSM_VCA_K8S_CLOUDNAME --controller $OSM_STACK_NAME --storage openebs-hostpath
garciadeblas162a5342020-07-06 15:03:39 +0000427}
428
Adam Israel5ddc97f2019-09-03 18:11:12 -0400429function juju_createproxy() {
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100430 check_install_iptables_persistent
Adam Israel43fb44d2019-11-06 10:37:25 -0500431
David Garcia26432d42019-12-11 12:22:35 +0100432 if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
433 sudo iptables -t nat -A PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
Adam Israel5ddc97f2019-09-03 18:11:12 -0400434 sudo netfilter-persistent save
435 fi
436}
437
garciadeblasd8bc5c32018-05-09 17:37:56 +0200438function generate_docker_images() {
439 echo "Pulling and generating docker images"
Michael Marchettiee374142018-08-02 22:47:16 +0200440 _build_from=$COMMIT_ID
441 [ -z "$_build_from" ] && _build_from="master"
442
443 echo "OSM Docker images generated from $_build_from"
444
Mike Marchettib8420852018-09-13 13:45:06 -0400445 BUILD_ARGS+=(--build-arg REPOSITORY="$REPOSITORY")
446 BUILD_ARGS+=(--build-arg RELEASE="$RELEASE")
447 BUILD_ARGS+=(--build-arg REPOSITORY_KEY="$REPOSITORY_KEY")
448 BUILD_ARGS+=(--build-arg REPOSITORY_BASE="$REPOSITORY_BASE")
lavado60216242018-10-10 23:44:28 +0200449
garciadeblas0e596bc2018-05-28 16:04:42 +0200450 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q KAFKA ; then
451 sg docker -c "docker pull wurstmeister/zookeeper" || FATAL "cannot get zookeeper docker image"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300452 sg docker -c "docker pull wurstmeister/kafka:${KAFKA_TAG}" || FATAL "cannot get kafka docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200453 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400454
garciadeblas0e596bc2018-05-28 16:04:42 +0200455 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MONGO ; then
456 sg docker -c "docker pull mongo" || FATAL "cannot get mongo docker image"
457 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400458
lavado60216242018-10-10 23:44:28 +0200459 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
460 sg docker -c "docker pull prom/prometheus:${PROMETHEUS_TAG}" || FATAL "cannot get prometheus docker image"
461 fi
462
garciadeblasfc5bb142019-12-10 10:49:12 +0100463 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS-CADVISOR ; then
464 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
465 fi
466
lavado6ad812e2019-11-29 10:58:58 -0500467 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q GRAFANA ; then
468 sg docker -c "docker pull grafana/grafana:${GRAFANA_TAG}" || FATAL "cannot get grafana docker image"
garciadeblasfc5bb142019-12-10 10:49:12 +0100469 fi
lavado6ad812e2019-11-29 10:58:58 -0500470
garciadeblas4a83e6e2018-12-04 14:55:09 +0100471 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI || echo $TO_REBUILD | grep -q KEYSTONE-DB ; then
lavado9a8df7c2018-10-24 09:35:34 -0500472 sg docker -c "docker pull mariadb:${KEYSTONEDB_TAG}" || FATAL "cannot get keystone-db docker image"
473 fi
474
garciadeblas4a83e6e2018-12-04 14:55:09 +0100475 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
476 sg docker -c "docker pull mysql:5" || FATAL "cannot get mysql docker image"
477 fi
478
Mike Marchettida8a9c42018-10-01 15:25:15 -0400479 if [ -n "$PULL_IMAGES" ]; then
480 sg docker -c "docker pull ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}" || FATAL "cannot pull MON docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400481 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MON ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200482 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/MON
483 git -C ${LWTEMPDIR}/MON checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100484 sg docker -c "docker build ${LWTEMPDIR}/MON -f ${LWTEMPDIR}/MON/docker/Dockerfile -t ${DOCKER_USER}/mon --no-cache" || FATAL "cannot build MON docker image"
lavado9a8df7c2018-10-24 09:35:34 -0500485 fi
486
487 if [ -n "$PULL_IMAGES" ]; then
488 sg docker -c "docker pull ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}" || FATAL "cannot pull POL docker image"
garciadeblas4a83e6e2018-12-04 14:55:09 +0100489 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q POL ; then
lavado9a8df7c2018-10-24 09:35:34 -0500490 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/POL
491 git -C ${LWTEMPDIR}/POL checkout ${COMMIT_ID}
garciadeblas4a83e6e2018-12-04 14:55:09 +0100492 sg docker -c "docker build ${LWTEMPDIR}/POL -f ${LWTEMPDIR}/POL/docker/Dockerfile -t ${DOCKER_USER}/pol --no-cache" || FATAL "cannot build POL docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200493 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400494
magnussonl1bbe9452020-02-25 13:43:17 +0100495 if [ -n "$PULL_IMAGES" -a -n "$INSTALL_PLA" ]; then
496 sg docker -c "docker pull ${DOCKER_USER}/pla:${OSM_DOCKER_TAG}" || FATAL "cannot pull PLA docker image"
497 elif [ -z "$TO_REBUILD" -a -n "$INSTALL_PLA" ] || echo $TO_REBUILD | grep -q PLA ; then
498 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/PLA
499 git -C ${LWTEMPDIR}/PLA checkout ${COMMIT_ID}
500 sg docker -c "docker build ${LWTEMPDIR}/PLA -f ${LWTEMPDIR}/PLA/docker/Dockerfile -t ${DOCKER_USER}/pla --no-cache" || FATAL "cannot build PLA docker image"
501 fi
502
Mike Marchettida8a9c42018-10-01 15:25:15 -0400503 if [ -n "$PULL_IMAGES" ]; then
504 sg docker -c "docker pull ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}" || FATAL "cannot pull NBI docker image"
lavado9a8df7c2018-10-24 09:35:34 -0500505 sg docker -c "docker pull ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}" || FATAL "cannot pull KEYSTONE docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400506 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200507 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NBI
508 git -C ${LWTEMPDIR}/NBI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100509 sg docker -c "docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t ${DOCKER_USER}/nbi --no-cache" || FATAL "cannot build NBI docker image"
510 sg docker -c "docker build ${LWTEMPDIR}/NBI/keystone -f ${LWTEMPDIR}/NBI/keystone/Dockerfile -t ${DOCKER_USER}/keystone --no-cache" || FATAL "cannot build KEYSTONE docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200511 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400512
513 if [ -n "$PULL_IMAGES" ]; then
514 sg docker -c "docker pull ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}" || FATAL "cannot pull RO docker image"
515 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200516 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/RO
517 git -C ${LWTEMPDIR}/RO checkout ${COMMIT_ID}
tierno5cc8ac32019-11-25 10:33:25 +0000518 sg docker -c "docker build ${LWTEMPDIR}/RO -f ${LWTEMPDIR}/RO/Dockerfile-local -t ${DOCKER_USER}/ro --no-cache" || FATAL "cannot build RO docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200519 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400520
521 if [ -n "$PULL_IMAGES" ]; then
522 sg docker -c "docker pull ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}" || FATAL "cannot pull LCM RO docker image"
523 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LCM ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200524 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LCM
525 git -C ${LWTEMPDIR}/LCM checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100526 sg docker -c "docker build ${LWTEMPDIR}/LCM -f ${LWTEMPDIR}/LCM/Dockerfile.local -t ${DOCKER_USER}/lcm --no-cache" || FATAL "cannot build LCM docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200527 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400528
vijaynag4b57d462020-06-08 14:23:10 +0000529 if [ -n "$NGUI" ]; then
530 if [ -n "$PULL_IMAGES" ]; then
531 sg docker -c "docker pull ${DOCKER_USER}/ng-ui:${OSM_DOCKER_TAG}" || FATAL "cannot pull ng-ui docker image"
532 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NG-UI ; then
533 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NG-UI
534 git -C ${LWTEMPDIR}/NG-UI checkout ${COMMIT_ID}
535 sg docker -c "docker build ${LWTEMPDIR}/NG-UI -f ${LWTEMPDIR}/NG-UI/docker/Dockerfile -t ${DOCKER_USER}/ng-ui --no-cache" || FATAL "cannot build NG-UI docker image"
536 fi
537 else
538 if [ -n "$PULL_IMAGES" ]; then
539 sg docker -c "docker pull ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}" || FATAL "cannot pull light-ui docker image"
540 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-UI ; then
541 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LW-UI
542 git -C ${LWTEMPDIR}/LW-UI checkout ${COMMIT_ID}
543 sg docker -c "docker build ${LWTEMPDIR}/LW-UI -f ${LWTEMPDIR}/LW-UI/docker/Dockerfile -t ${DOCKER_USER}/light-ui --no-cache" || FATAL "cannot build LW-UI docker image"
544 fi
545 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400546
547 if [ -n "$PULL_IMAGES" ]; then
548 sg docker -c "docker pull ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}" || FATAL "cannot pull osmclient docker image"
549 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-osmclient; then
garciadeblas0d45bc82018-11-19 14:25:13 +0100550 sg docker -c "docker build -t ${DOCKER_USER}/osmclient ${BUILD_ARGS[@]} -f $OSM_DEVOPS/docker/osmclient ."
Mike Marchettib8420852018-09-13 13:45:06 -0400551 fi
lavado6ad812e2019-11-29 10:58:58 -0500552
553 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
554 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
Dominik Fleischmannc57296f2020-06-09 11:45:08 +0200555 fi
lavado6ad812e2019-11-29 10:58:58 -0500556
garciadeblasd8bc5c32018-05-09 17:37:56 +0200557 echo "Finished generation of docker images"
558}
559
garciadeblas5b857d32018-05-24 18:37:58 +0200560function cmp_overwrite() {
561 file1="$1"
562 file2="$2"
563 if ! $(cmp "${file1}" "${file2}" >/dev/null 2>&1); then
564 if [ -f "${file2}" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400565 ask_user "The file ${file2} already exists. Overwrite (y/N)? " n && cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200566 else
Mike Marchettib8420852018-09-13 13:45:06 -0400567 cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200568 fi
569 fi
570}
571
garciadeblasd8bc5c32018-05-09 17:37:56 +0200572function generate_docker_env_files() {
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200573 echo "Doing a backup of existing env files"
574 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
575 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
576 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
577 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lwui.env{,~}
578 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
579 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
580 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
581 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
582 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
583
garciadeblasd8bc5c32018-05-09 17:37:56 +0200584 echo "Generating docker env files"
vijaynag8339ed22019-07-25 17:10:58 +0530585 if [ -n "$KUBERNETES" ]; then
586 #Kubernetes resources
587 $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
vijaynag4b57d462020-06-08 14:23:10 +0000588 [ -n "$NGUI" ] && $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_pods/ng-ui.yaml $OSM_K8S_WORK_DIR/ng-ui.yaml && $WORKDIR_SUDO rm $OSM_K8S_WORK_DIR/light-ui.yaml
vijaynag8339ed22019-07-25 17:10:58 +0530589 else
vijaynag4b57d462020-06-08 14:23:10 +0000590 if [ -n "$NGUI" ]; then
591 # For NG-UI
592 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose-ngui.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
593 else
594 # Docker-compose
595 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
596 fi
magnussonl1bbe9452020-02-25 13:43:17 +0100597 if [ -n "$INSTALL_PLA" ]; then
598 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_pla/docker-compose.yaml $OSM_DOCKER_WORK_DIR/osm_pla/docker-compose.yaml
599 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200600
lavado71906482020-04-13 17:02:00 -0500601 # Prometheus files
602 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/prometheus
603 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/prometheus/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus/prometheus.yml
lavado6ad812e2019-11-29 10:58:58 -0500604
lavado71906482020-04-13 17:02:00 -0500605 # Grafana files
606 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/grafana
607 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/dashboards-osm.yml $OSM_DOCKER_WORK_DIR/grafana/dashboards-osm.yml
608 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/datasource-prometheus.yml $OSM_DOCKER_WORK_DIR/grafana/datasource-prometheus.yml
609 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-sample-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-sample-dashboard.json
610 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-system-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-system-dashboard.json
611
612 # Prometheus Exporters files
613 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/prometheus_exporters
614 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/prometheus_exporters/node_exporter.service $OSM_DOCKER_WORK_DIR/prometheus_exporters/node_exporter.service
vijaynag8339ed22019-07-25 17:10:58 +0530615 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200616
Benjamin Diazba2cca92018-11-08 21:07:15 -0300617 # LCM
618 if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
619 echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
620 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400621
Benjamin Diazba2cca92018-11-08 21:07:15 -0300622 if ! grep -Fq "OSMLCM_VCA_HOST" $OSM_DOCKER_WORK_DIR/lcm.env; then
623 echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
624 else
625 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_HOST.*|OSMLCM_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/lcm.env
626 fi
627
628 if ! grep -Fq "OSMLCM_VCA_SECRET" $OSM_DOCKER_WORK_DIR/lcm.env; then
629 echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
630 else
631 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_SECRET.*|OSMLCM_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/lcm.env
632 fi
633
garciadeblasaa3ddf42019-04-04 19:04:32 +0200634 if ! grep -Fq "OSMLCM_VCA_PUBKEY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblasec537902019-12-10 14:13:40 +0100635 echo "OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasaa3ddf42019-04-04 19:04:32 +0200636 else
garciadeblasec537902019-12-10 14:13:40 +0100637 $WORKDIR_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 +0200638 fi
639
Adam Israelbe7676a2019-10-02 16:10:53 -0400640 if ! grep -Fq "OSMLCM_VCA_CACERT" $OSM_DOCKER_WORK_DIR/lcm.env; then
641 echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
642 else
643 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CACERT.*|OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/lcm.env
644 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -0300645
Adam Israel5ddc97f2019-09-03 18:11:12 -0400646 if ! grep -Fq "OSMLCM_VCA_APIPROXY" $OSM_DOCKER_WORK_DIR/lcm.env; then
647 echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
648 else
649 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_APIPROXY.*|OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
650 fi
651
garciadeblasa2e41842019-12-18 11:05:24 +0100652 if ! grep -Fq "OSMLCM_VCA_ENABLEOSUPGRADE" $OSM_DOCKER_WORK_DIR/lcm.env; then
653 echo "# OSMLCM_VCA_ENABLEOSUPGRADE=false" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
654 fi
655
656 if ! grep -Fq "OSMLCM_VCA_APTMIRROR" $OSM_DOCKER_WORK_DIR/lcm.env; then
657 echo "# OSMLCM_VCA_APTMIRROR=http://archive.ubuntu.com/ubuntu/" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
658 fi
659
David Garcia79f4f532020-04-07 12:59:34 +0200660 if ! grep -Fq "OSMLCM_VCA_CLOUD" $OSM_DOCKER_WORK_DIR/lcm.env; then
661 echo "OSMLCM_VCA_CLOUD=${OSM_VCA_CLOUDNAME}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
662 else
663 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CLOUD.*|OSMLCM_VCA_CLOUD=${OSM_VCA_CLOUDNAME}|g" $OSM_DOCKER_WORK_DIR/lcm.env
664 fi
665
Dominik Fleischmann71997c12020-06-30 14:25:19 +0200666 if ! grep -Fq "OSMLCM_VCA_K8S_CLOUD" $OSM_DOCKER_WORK_DIR/lcm.env; then
667 echo "OSMLCM_VCA_K8S_CLOUD=${OSM_VCA_K8S_CLOUDNAME}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
668 else
669 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_K8S_CLOUD.*|OSMLCM_VCA_K8S_CLOUD=${OSM_VCA_K8S_CLOUDNAME}|g" $OSM_DOCKER_WORK_DIR/lcm.env
670 fi
671
Benjamin Diazba2cca92018-11-08 21:07:15 -0300672 # RO
673 MYSQL_ROOT_PASSWORD=$(generate_secret)
Mike Marchettib8420852018-09-13 13:45:06 -0400674 if [ ! -f $OSM_DOCKER_WORK_DIR/ro-db.env ]; then
675 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro-db.env
garciadeblas5b857d32018-05-24 18:37:58 +0200676 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400677 if [ ! -f $OSM_DOCKER_WORK_DIR/ro.env ]; then
678 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro.env
garciadeblas5b857d32018-05-24 18:37:58 +0200679 fi
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100680
Benjamin Diazba2cca92018-11-08 21:07:15 -0300681 # Keystone
Benjamin Diazba2cca92018-11-08 21:07:15 -0300682 KEYSTONE_DB_PASSWORD=$(generate_secret)
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100683 SERVICE_PASSWORD=$(generate_secret)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100684 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone-db.env ]; then
685 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone-db.env
686 fi
687 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone.env ]; then
688 echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100689 echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100690 echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100691 fi
692
Benjamin Diazba2cca92018-11-08 21:07:15 -0300693 # NBI
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100694 if [ ! -f $OSM_DOCKER_WORK_DIR/nbi.env ]; then
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100695 echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/nbi.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300696 echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/nbi.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100697 fi
698
Benjamin Diazba2cca92018-11-08 21:07:15 -0300699 # MON
700 if [ ! -f $OSM_DOCKER_WORK_DIR/mon.env ]; then
701 echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diaz9261c662019-02-25 17:18:51 -0300702 echo "OSMMON_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/mon" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300703 fi
704
705 if ! grep -Fq "OS_NOTIFIER_URI" $OSM_DOCKER_WORK_DIR/mon.env; then
706 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
707 else
708 $WORKDIR_SUDO sed -i "s|OS_NOTIFIER_URI.*|OS_NOTIFIER_URI=http://$DEFAULT_IP:8662|g" $OSM_DOCKER_WORK_DIR/mon.env
709 fi
710
711 if ! grep -Fq "OSMMON_VCA_HOST" $OSM_DOCKER_WORK_DIR/mon.env; then
712 echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
713 else
714 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_HOST.*|OSMMON_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/mon.env
715 fi
716
717 if ! grep -Fq "OSMMON_VCA_SECRET" $OSM_DOCKER_WORK_DIR/mon.env; then
718 echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
719 else
720 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_SECRET.*|OSMMON_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/mon.env
721 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400722
Adam Israel6d8adf32019-12-05 15:46:54 -0500723 if ! grep -Fq "OSMMON_VCA_CACERT" $OSM_DOCKER_WORK_DIR/mon.env; then
724 echo "OSMMON_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
725 else
726 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_CACERT.*|OSMMON_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/mon.env
727 fi
728
729
Benjamin Diaz04560882019-02-26 17:25:07 -0300730 # POL
731 if [ ! -f $OSM_DOCKER_WORK_DIR/pol.env ]; then
732 echo "OSMPOL_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/pol" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/pol.env
733 fi
734
Benjamin Diaz4088a9b2019-05-21 15:11:49 -0300735 # LW-UI
736 if [ ! -f $OSM_DOCKER_WORK_DIR/lwui.env ]; then
737 echo "OSMUI_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/lwui" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lwui.env
738 fi
739
garciadeblasd8bc5c32018-05-09 17:37:56 +0200740 echo "Finished generation of docker env files"
741}
742
Mike Marchettib8420852018-09-13 13:45:06 -0400743function generate_osmclient_script () {
Mike Marchetti46d6efe2018-10-23 16:20:16 -0400744 echo "docker run -ti --network net${OSM_STACK_NAME} ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}" | $WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/osm
Mike Marchettib8420852018-09-13 13:45:06 -0400745 $WORKDIR_SUDO chmod +x "$OSM_DOCKER_WORK_DIR/osm"
746 echo "osmclient sidecar container can be found at: $OSM_DOCKER_WORK_DIR/osm"
747}
748
vijaynag8339ed22019-07-25 17:10:58 +0530749#installs kubernetes packages
750function install_kube() {
751 sudo apt-get update && sudo apt-get install -y apt-transport-https
752 curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
753 sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
754 sudo apt-get update
755 echo "Installing Kubernetes Packages ..."
756 sudo apt-get install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
757}
758
759#initializes kubernetes control plane
760function init_kubeadm() {
761 sudo swapoff -a
762 sudo kubeadm init --config $1
763 sleep 5
764}
765
766function kube_config_dir() {
767 [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes"
768 mkdir -p $HOME/.kube
769 sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
770 sudo chown $(id -u):$(id -g) $HOME/.kube/config
771}
772
Dominik Fleischmann71997c12020-06-30 14:25:19 +0200773function install_k8s_storageclass() {
774 kubectl apply -f https://openebs.github.io/charts/openebs-operator-1.6.0.yaml
775 kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
776}
777
vijaynag8339ed22019-07-25 17:10:58 +0530778#deploys flannel as daemonsets
779function deploy_cni_provider() {
780 CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")"
781 trap 'rm -rf "${CNI_DIR}"' EXIT
782 wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR
783 kubectl apply -f $CNI_DIR
784 [ $? -ne 0 ] && FATAL "Cannot Install Flannel"
785}
786
787#creates secrets from env files which will be used by containers
788function kube_secrets(){
789 kubectl create ns $OSM_STACK_NAME
790 kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env
791 kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env
792 kubectl create secret generic nbi-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/nbi.env
793 kubectl create secret generic ro-db-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro-db.env
794 kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env
795 kubectl create secret generic keystone-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/keystone.env
796 kubectl create secret generic lwui-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lwui.env
797 kubectl create secret generic pol-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/pol.env
798}
799
garciadeblasf7d00302020-07-08 14:30:29 +0000800#taints K8s master node
801function taint_master_node() {
vijaynag8339ed22019-07-25 17:10:58 +0530802 K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}')
803 kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
804 sleep 5
garciadeblasf7d00302020-07-08 14:30:29 +0000805}
806
807#deploys osm pods and services
808function deploy_osm_services() {
vijaynag8339ed22019-07-25 17:10:58 +0530809 kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR
810}
811
magnussonl1bbe9452020-02-25 13:43:17 +0100812function deploy_osm_pla_service() {
813 # corresponding to parse_yaml
814 [ ! $OSM_DOCKER_TAG == "7" ] && $WORKDIR_SUDO sed -i "s/opensourcemano\/pla:.*/opensourcemano\/pla:$OSM_DOCKER_TAG/g" $OSM_DOCKER_WORK_DIR/osm_pla/pla.yaml
815 # corresponding to namespace_vol
816 $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_DOCKER_WORK_DIR/osm_pla/pla.yaml
817 # corresponding to deploy_osm_services
818 kubectl apply -n $OSM_STACK_NAME -f $OSM_DOCKER_WORK_DIR/osm_pla
819}
820
romeromonser599d5e22020-03-06 10:23:29 +0100821#Install helm and tiller
822function install_helm() {
823 helm > /dev/null 2>&1
824 if [ $? != 0 ] ; then
825 # Helm is not installed. Install helm
garciadeblas3235e6b2020-07-08 11:38:29 +0000826 echo "Helm is not installed, installing ..."
romeromonser599d5e22020-03-06 10:23:29 +0100827 curl https://get.helm.sh/helm-v2.15.2-linux-amd64.tar.gz --output helm-v2.15.2.tar.gz
828 tar -zxvf helm-v2.15.2.tar.gz
829 sudo mv linux-amd64/helm /usr/local/bin/helm
830 rm -r linux-amd64
831 rm helm-v2.15.2.tar.gz
832 fi
833
834 # Checking if tiller has being configured
835 kubectl --namespace kube-system get serviceaccount tiller > /dev/null 2>&1
836 if [ $? == 1 ] ; then
837 # tiller account for kubernetes
838 kubectl --namespace kube-system create serviceaccount tiller
839 kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
840 # HELM initialization
841 helm init --service-account tiller
842
843 # Wait for Tiller to be up and running. If timeout expires, continue installing
garciadeblas3235e6b2020-07-08 11:38:29 +0000844 tiller_timeout=120;
845 counter=0;
846 tiller_status=""
romeromonser599d5e22020-03-06 10:23:29 +0100847 while (( counter < tiller_timeout ))
848 do
849 tiller_status=`kubectl -n kube-system get deployment.apps/tiller-deploy --no-headers | awk '{print $2'}`
garciadeblas3235e6b2020-07-08 11:38:29 +0000850 ( [ ! -z "$tiller_status" ] && [ $tiller_status == "1/1" ] ) && echo "Tiller ready" && break
851 counter=$((counter + 5))
852 sleep 5
romeromonser599d5e22020-03-06 10:23:29 +0100853 done
garciadeblas3235e6b2020-07-08 11:38:29 +0000854 [ "$tiller_status" != "1/1" ] && echo "Tiller is NOT READY YET. Installation will continue"
romeromonser599d5e22020-03-06 10:23:29 +0100855 fi
856}
857
vijaynag8339ed22019-07-25 17:10:58 +0530858function parse_yaml() {
vijaynag4b57d462020-06-08 14:23:10 +0000859 osm_services="nbi lcm ro pol mon light-ui ng-ui keystone"
vijaynag8339ed22019-07-25 17:10:58 +0530860 TAG=$1
861 for osm in $osm_services; do
vijaynag4b57d462020-06-08 14:23:10 +0000862 $WORKDIR_SUDO sed -i "s/opensourcemano\/$osm:.*/$DOCKER_USER\/$osm:$TAG/g" $OSM_K8S_WORK_DIR/$osm.yaml
vijaynag8339ed22019-07-25 17:10:58 +0530863 done
864}
865
866function namespace_vol() {
867 osm_services="nbi lcm ro pol mon kafka mongo mysql"
868 for osm in $osm_services; do
garciadeblasd32b7872020-07-03 15:32:05 +0000869 $WORKDIR_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 +0530870 done
871}
872
garciadeblasa3e26612018-05-30 17:58:55 +0200873function init_docker_swarm() {
garciadeblasd8bc5c32018-05-09 17:37:56 +0200874 if [ "${DEFAULT_MTU}" != "1500" ]; then
875 DOCKER_NETS=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
876 DOCKER_GW_NET=`sg docker -c "docker network inspect ${DOCKER_NETS}" | grep Subnet | awk -F\" '{print $4}' | egrep "^172" | sort -u | tail -1 | awk -F\. '{if ($2 != 255) print $1"."$2+1"."$3"."$4; else print "-1";}'`
877 sg docker -c "docker network create --subnet ${DOCKER_GW_NET} --opt com.docker.network.bridge.name=docker_gwbridge --opt com.docker.network.bridge.enable_icc=false --opt com.docker.network.bridge.enable_ip_masquerade=true --opt com.docker.network.driver.mtu=${DEFAULT_MTU} docker_gwbridge"
878 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200879 sg docker -c "docker swarm init --advertise-addr ${DEFAULT_IP}"
garciadeblasa3e26612018-05-30 17:58:55 +0200880 return 0
881}
882
Mike Marchettib8420852018-09-13 13:45:06 -0400883function create_docker_network() {
884 echo "creating network"
885 sg docker -c "docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} net${OSM_STACK_NAME}"
886 echo "creating network DONE"
887}
888
garciadeblasa3e26612018-05-30 17:58:55 +0200889function deploy_lightweight() {
Mike Marchettib8420852018-09-13 13:45:06 -0400890
garciadeblasa3e26612018-05-30 17:58:55 +0200891 echo "Deploying lightweight build"
Mike Marchettib8420852018-09-13 13:45:06 -0400892 OSM_NBI_PORT=9999
893 OSM_RO_PORT=9090
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100894 OSM_KEYSTONE_PORT=5000
Mike Marchettib8420852018-09-13 13:45:06 -0400895 OSM_UI_PORT=80
lavadoafa54c72018-10-05 09:28:28 -0500896 OSM_MON_PORT=8662
lavado60216242018-10-10 23:44:28 +0200897 OSM_PROM_PORT=9090
garciadeblasa7b27dc2019-12-04 15:06:55 +0100898 OSM_PROM_CADVISOR_PORT=8080
lavado60216242018-10-10 23:44:28 +0200899 OSM_PROM_HOSTPORT=9091
lavado6ad812e2019-11-29 10:58:58 -0500900 OSM_GRAFANA_PORT=3000
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100901 [ -n "$INSTALL_ELK" ] && OSM_ELK_PORT=5601
lavado6ad812e2019-11-29 10:58:58 -0500902 #[ -n "$INSTALL_PERFMON" ] && OSM_PM_PORT=3000
lavado60216242018-10-10 23:44:28 +0200903
Mike Marchettib8420852018-09-13 13:45:06 -0400904 if [ -n "$NO_HOST_PORTS" ]; then
905 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT)
906 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100907 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400908 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -0500909 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +0200910 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +0100911 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -0500912 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT)
913 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100914 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400915 else
916 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT:$OSM_NBI_PORT)
917 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT:$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100918 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT:$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400919 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT:$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -0500920 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT:$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +0200921 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_HOSTPORT:$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +0100922 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT:$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -0500923 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT:$OSM_GRAFANA_PORT)
924 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT:$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100925 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT:$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400926 fi
927 echo "export ${OSM_PORTS[@]}" | $WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/osm_ports.sh
928 echo "export OSM_NETWORK=net${OSM_STACK_NAME}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Mike Marchetti13d76c82018-09-19 15:00:36 -0400929 echo "export TAG=${OSM_DOCKER_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Mike Marchettida8a9c42018-10-01 15:25:15 -0400930 echo "export DOCKER_USER=${DOCKER_USER}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -0300931 echo "export KAFKA_TAG=${KAFKA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado60216242018-10-10 23:44:28 +0200932 echo "export PROMETHEUS_TAG=${PROMETHEUS_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado9a8df7c2018-10-24 09:35:34 -0500933 echo "export KEYSTONEDB_TAG=${KEYSTONEDB_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado6ad812e2019-11-29 10:58:58 -0500934 echo "export PROMETHEUS_CADVISOR_TAG=${PROMETHEUS_CADVISOR_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
935 echo "export GRAFANA_TAG=${GRAFANA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -0300936
Mike Marchettib8420852018-09-13 13:45:06 -0400937 pushd $OSM_DOCKER_WORK_DIR
magnussonl1bbe9452020-02-25 13:43:17 +0100938 if [ -n "$INSTALL_PLA" ]; then
939 sg docker -c ". ./osm_ports.sh; docker stack deploy -c $OSM_DOCKER_WORK_DIR/docker-compose.yaml -c $OSM_DOCKER_WORK_DIR/osm_pla/docker-compose.yaml $OSM_STACK_NAME"
940 else
941 sg docker -c ". ./osm_ports.sh; docker stack deploy -c $OSM_DOCKER_WORK_DIR/docker-compose.yaml $OSM_STACK_NAME"
942 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400943 popd
944
garciadeblasd8bc5c32018-05-09 17:37:56 +0200945 echo "Finished deployment of lightweight build"
946}
947
garciadeblas6c66abf2018-05-16 14:46:19 +0200948function deploy_elk() {
garciadeblase2aebfe2018-07-06 14:11:20 +0200949 echo "Pulling docker images for ELK"
lavado53eb8f52018-11-16 12:58:23 -0500950 sg docker -c "docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:${ELASTIC_VERSION}" || FATAL "cannot get elasticsearch docker image"
951 sg docker -c "docker pull docker.elastic.co/beats/metricbeat:${ELASTIC_VERSION}" || FATAL "cannot get metricbeat docker image"
952 sg docker -c "docker pull docker.elastic.co/beats/filebeat:${ELASTIC_VERSION}" || FATAL "cannot get filebeat docker image"
953 sg docker -c "docker pull docker.elastic.co/kibana/kibana-oss:${ELASTIC_VERSION}" || FATAL "cannot get kibana docker image"
lavado4e8662c2018-11-28 11:28:14 -0500954 sg docker -c "docker pull bobrik/curator:${ELASTIC_CURATOR_VERSION}" || FATAL "cannot get curator docker image"
garciadeblase2aebfe2018-07-06 14:11:20 +0200955 echo "Finished pulling elk docker images"
Mike Marchettib8420852018-09-13 13:45:06 -0400956 $WORKDIR_SUDO mkdir -p "$OSM_DOCKER_WORK_DIR/osm_elk"
957 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_elk/* $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas5b857d32018-05-24 18:37:58 +0200958 remove_stack osm_elk
garciadeblas6c66abf2018-05-16 14:46:19 +0200959 echo "Deploying ELK stack"
Mike Marchettib8420852018-09-13 13:45:06 -0400960 sg docker -c "OSM_NETWORK=net${OSM_STACK_NAME} docker stack deploy -c $OSM_DOCKER_WORK_DIR/osm_elk/docker-compose.yml osm_elk"
garciadeblas6c66abf2018-05-16 14:46:19 +0200961 echo "Waiting for ELK stack to be up and running"
962 time=0
garciadeblase2aebfe2018-07-06 14:11:20 +0200963 step=5
964 timelength=40
garciadeblas6c66abf2018-05-16 14:46:19 +0200965 elk_is_up=1
966 while [ $time -le $timelength ]; do
garciadeblase2aebfe2018-07-06 14:11:20 +0200967 if [[ $(curl -f -XGET http://127.0.0.1:5601/status -I 2>/dev/null | grep "HTTP/1.1 200 OK" | wc -l ) -eq 1 ]]; then
garciadeblas6c66abf2018-05-16 14:46:19 +0200968 elk_is_up=0
969 break
970 fi
971 sleep $step
972 time=$((time+step))
973 done
974 if [ $elk_is_up -eq 0 ]; then
975 echo "ELK is up and running. Trying to create index pattern..."
976 #Create index pattern
977 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -0500978 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
979 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200980 #Make it the default index
garciadeblase2aebfe2018-07-06 14:11:20 +0200981 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +0200982 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -0500983 -d"{\"value\":\"filebeat-*\"}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200984 else
985 echo "Cannot connect to Kibana to create index pattern."
986 echo "Once Kibana is running, you can use the following instructions to create index pattern:"
987 echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -0500988 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
989 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}"'
garciadeblas6c66abf2018-05-16 14:46:19 +0200990 echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +0200991 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -0500992 -d"{\"value\":\"filebeat-*\"}"'
garciadeblas6c66abf2018-05-16 14:46:19 +0200993 fi
994 echo "Finished deployment of ELK stack"
995 return 0
996}
997
garciadeblasfaa45852020-07-03 16:24:23 +0000998function add_local_k8scluster() {
999 /usr/bin/osm --all-projects vim-create \
1000 --name _system-osm-vim \
1001 --account_type dummy \
1002 --auth_url http://dummy \
1003 --user osm --password osm --tenant osm \
1004 --description "dummy" \
1005 --config '{management_network_name: mgmt}'
1006 /usr/bin/osm --all-projects k8scluster-add \
1007 --creds ${HOME}/.kube/config \
1008 --vim _system-osm-vim \
1009 --k8s-nets '{"net1": null}' \
1010 --version '1.15' \
1011 --description "OSM Internal Cluster" \
1012 _system-osm-k8s
1013}
1014
garciadeblasd8bc5c32018-05-09 17:37:56 +02001015function install_lightweight() {
garciadeblas183e5802018-12-13 18:20:54 +01001016 track checkingroot
garciadeblasd13a8aa2018-05-18 15:24:51 +02001017 [ "$USER" == "root" ] && FATAL "You are running the installer as root. The installer is prepared to be executed as a normal user with sudo privileges."
garciadeblas183e5802018-12-13 18:20:54 +01001018 track noroot
vijaynag8339ed22019-07-25 17:10:58 +05301019
1020 if [ -n "$KUBERNETES" ]; then
1021 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
1022 1. Install and configure LXD
1023 2. Install juju
1024 3. Install docker CE
1025 4. Disable swap space
1026 5. Install and initialize Kubernetes
1027 as pre-requirements.
1028 Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
1029
1030 else
1031 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will configure LXD, install juju, install docker CE and init a docker swarm, as pre-requirements. Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
1032 fi
garciadeblasfae5e972018-06-12 18:27:11 +02001033 track proceed
vijaynag8339ed22019-07-25 17:10:58 +05301034
garciadeblasd8bc5c32018-05-09 17:37:56 +02001035 echo "Installing lightweight build of OSM"
1036 LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
1037 trap 'rm -rf "${LWTEMPDIR}"' EXIT
tierno7d8f12e2020-05-18 14:17:41 +00001038 DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5; exit}')
1039 [ -z "$DEFAULT_IF" ] && DEFAULT_IF=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}')
garciadeblas8cd60772018-06-02 08:38:17 +02001040 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
tierno7d8f12e2020-05-18 14:17:41 +00001041 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF} |awk '{split($4,a,"/"); print a[1]}'`
garciadeblas8cd60772018-06-02 08:38:17 +02001042 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001043 DEFAULT_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
Mike Marchettib8420852018-09-13 13:45:06 -04001044
1045 # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to
David Garcia79f4f532020-04-07 12:59:34 +02001046 if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ] && [ -z "$LXD_CLOUD_FILE" ]; then
David Garcia50d786e2020-03-30 14:49:40 +02001047 need_packages_lw="snapd"
garciadeblasd41f5482018-05-25 10:25:06 +02001048 echo -e "Checking required packages: $need_packages_lw"
1049 dpkg -l $need_packages_lw &>/dev/null \
1050 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1051 || sudo apt-get update \
1052 || FATAL "failed to run apt-get update"
1053 dpkg -l $need_packages_lw &>/dev/null \
1054 || ! echo -e "Installing $need_packages_lw requires root privileges." \
1055 || sudo apt-get install -y $need_packages_lw \
1056 || FATAL "failed to install $need_packages_lw"
David Garcia50d786e2020-03-30 14:49:40 +02001057 install_lxd
garciadeblasd41f5482018-05-25 10:25:06 +02001058 fi
David Garcia79f4f532020-04-07 12:59:34 +02001059
garciadeblasfae5e972018-06-12 18:27:11 +02001060 track prereqok
Mike Marchettib8420852018-09-13 13:45:06 -04001061
vijaynag8339ed22019-07-25 17:10:58 +05301062 [ -z "$INSTALL_NOJUJU" ] && install_juju
garciadeblas183e5802018-12-13 18:20:54 +01001063 track juju_install
vijaynag8339ed22019-07-25 17:10:58 +05301064
lavadoe07b1642018-10-25 10:58:34 -05001065 if [ -z "$OSM_VCA_HOST" ]; then
David Garcia404ae122020-04-28 11:47:55 +02001066 if [ -z "$CONTROLLER_NAME" ]; then
1067 if [ -n "$LXD_CLOUD_FILE" ]; then
1068 [ -z "$LXD_CRED_FILE" ] && FATAL "The installer needs the LXD credential yaml if the LXD is external"
1069 OSM_VCA_CLOUDNAME="lxd-cloud"
1070 juju add-cloud $OSM_VCA_CLOUDNAME $LXD_CLOUD_FILE --force || juju update-cloud $OSM_VCA_CLOUDNAME --client -f $LXD_CLOUD_FILE
1071 juju add-credential $OSM_VCA_CLOUDNAME -f $LXD_CRED_FILE || juju update-credential $OSM_VCA_CLOUDNAME lxd-cloud-creds -f $LXD_CRED_FILE
1072 fi
1073 juju_createcontroller
1074 else
1075 OSM_VCA_CLOUDNAME="lxd-cloud"
1076 if [ -n "$LXD_CLOUD_FILE" ]; then
1077 [ -z "$LXD_CRED_FILE" ] && FATAL "The installer needs the LXD credential yaml if the LXD is external"
1078 juju add-cloud -c $CONTROLLER_NAME $OSM_VCA_CLOUDNAME $LXD_CLOUD_FILE --force || juju update-cloud lxd-cloud -c $CONTROLLER_NAME -f $LXD_CLOUD_FILE
1079 juju add-credential -c $CONTROLLER_NAME $OSM_VCA_CLOUDNAME -f $LXD_CRED_FILE || juju update-credential lxd-cloud -c $CONTROLLER_NAME -f $LXD_CRED_FILE
1080 else
1081 mkdir -p ~/.osm
1082 cat << EOF > ~/.osm/lxd-cloud.yaml
1083clouds:
1084 lxd-cloud:
1085 type: lxd
1086 auth-types: [certificate]
1087 endpoint: "https://$DEFAULT_IP:8443"
1088 config:
1089 ssl-hostname-verification: false
1090EOF
1091 openssl req -nodes -new -x509 -keyout ~/.osm/client.key -out ~/.osm/client.crt -days 365 -subj "/C=FR/ST=Nice/L=Nice/O=ETSI/OU=OSM/CN=osm.etsi.org"
1092 local server_cert=`cat /var/snap/lxd/common/lxd/server.crt | sed 's/^/ /'`
1093 local client_cert=`cat ~/.osm/client.crt | sed 's/^/ /'`
1094 local client_key=`cat ~/.osm/client.key | sed 's/^/ /'`
1095 cat << EOF > ~/.osm/lxd-credentials.yaml
1096credentials:
1097 lxd-cloud:
1098 lxd-cloud:
1099 auth-type: certificate
1100 server-cert: |
1101$server_cert
1102 client-cert: |
1103$client_cert
1104 client-key: |
1105$client_key
1106EOF
1107 lxc config trust add local: ~/.osm/client.crt
1108 juju add-cloud -c $CONTROLLER_NAME $OSM_VCA_CLOUDNAME ~/.osm/lxd-cloud.yaml --force || juju update-cloud lxd-cloud -c $CONTROLLER_NAME -f ~/.osm/lxd-cloud.yaml
1109 juju add-credential -c $CONTROLLER_NAME $OSM_VCA_CLOUDNAME -f ~/.osm/lxd-credentials.yaml || juju update-credential lxd-cloud -c $CONTROLLER_NAME -f ~/.osm/lxd-credentials.yaml
1110 fi
1111 fi
1112 [ -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}'`
1113 [ -n "$CONTROLLER_NAME" ] && OSM_VCA_HOST=`juju show-controller $CONTROLLER_NAME |grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
lavadoe07b1642018-10-25 10:58:34 -05001114 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
Mike Marchettib8420852018-09-13 13:45:06 -04001115 fi
garciadeblas183e5802018-12-13 18:20:54 +01001116 track juju_controller
vijaynag8339ed22019-07-25 17:10:58 +05301117
lavadoe07b1642018-10-25 10:58:34 -05001118 if [ -z "$OSM_VCA_SECRET" ]; then
David Garcia404ae122020-04-28 11:47:55 +02001119 [ -z "$CONTROLLER_NAME" ] && OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME)
1120 [ -n "$CONTROLLER_NAME" ] && OSM_VCA_SECRET=$(parse_juju_password $CONTROLLER_NAME)
lavadoe07b1642018-10-25 10:58:34 -05001121 [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
Mike Marchettib8420852018-09-13 13:45:06 -04001122 fi
garciadeblasaa3ddf42019-04-04 19:04:32 +02001123 if [ -z "$OSM_VCA_PUBKEY" ]; then
1124 OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
1125 [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
1126 fi
garciadeblasfc5bb142019-12-10 10:49:12 +01001127 if [ -z "$OSM_VCA_CACERT" ]; then
David Garcia404ae122020-04-28 11:47:55 +02001128 [ -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)
1129 [ -n "$CONTROLLER_NAME" ] && OSM_VCA_CACERT=$(juju controllers --format json | jq -r --arg controller $CONTROLLER_NAME '.controllers[$controller]["ca-cert"]' | base64 | tr -d \\n)
garciadeblasfc5bb142019-12-10 10:49:12 +01001130 [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
1131 fi
Adam Israel5ddc97f2019-09-03 18:11:12 -04001132 if [ -z "$OSM_VCA_APIPROXY" ]; then
1133 OSM_VCA_APIPROXY=$DEFAULT_IP
1134 [ -z "$OSM_VCA_APIPROXY" ] && FATAL "Cannot obtain juju api proxy"
1135 fi
1136 juju_createproxy
garciadeblasfc5bb142019-12-10 10:49:12 +01001137 track juju
Adam Israel5ddc97f2019-09-03 18:11:12 -04001138
Benjamin Diazba2cca92018-11-08 21:07:15 -03001139 if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
1140 OSM_DATABASE_COMMONKEY=$(generate_secret)
1141 [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret"
1142 fi
vijaynag8339ed22019-07-25 17:10:58 +05301143
garciadeblasa3e26612018-05-30 17:58:55 +02001144 [ -n "$INSTALL_NODOCKER" ] || install_docker_ce
garciadeblas6c66abf2018-05-16 14:46:19 +02001145 track docker_ce
vijaynag8339ed22019-07-25 17:10:58 +05301146
garciadeblasb1862b12020-07-09 14:20:47 +00001147 echo "Creating folders for installation"
1148 [ ! -d "$OSM_DOCKER_WORK_DIR" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR
1149 [ ! -d "$OSM_DOCKER_WORK_DIR/osm_pla" -a -n "$INSTALL_PLA" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/osm_pla
1150 [ -n "$KUBERNETES" ] && $WORKDIR_SUDO cp -b $OSM_DEVOPS/installers/docker/cluster-config.yaml $OSM_DOCKER_WORK_DIR/cluster-config.yaml
1151
vijaynag8339ed22019-07-25 17:10:58 +05301152 #Installs Kubernetes and deploys osm services
1153 if [ -n "$KUBERNETES" ]; then
1154 install_kube
1155 track install_k8s
1156 init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
1157 kube_config_dir
1158 track init_k8s
1159 else
1160 #install_docker_compose
1161 [ -n "$INSTALL_NODOCKER" ] || init_docker_swarm
1162 track docker_swarm
1163 fi
1164
Mike Marchettib8420852018-09-13 13:45:06 -04001165 [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
garciadeblas6c66abf2018-05-16 14:46:19 +02001166 track docker_build
vijaynag8339ed22019-07-25 17:10:58 +05301167
garciadeblasd8bc5c32018-05-09 17:37:56 +02001168 generate_docker_env_files
Mike Marchettib8420852018-09-13 13:45:06 -04001169
vijaynag8339ed22019-07-25 17:10:58 +05301170 if [ -n "$KUBERNETES" ]; then
garciadeblasb5a630f2020-03-05 18:32:16 +00001171 if [ -n "$INSTALL_K8S_MONITOR" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +01001172 # uninstall OSM MONITORING
1173 uninstall_k8s_monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +01001174 track uninstall_k8s_monitoring
romeromonsere366b1a2019-11-19 19:49:26 +01001175 fi
vijaynag8339ed22019-07-25 17:10:58 +05301176 #remove old namespace
1177 remove_k8s_namespace $OSM_STACK_NAME
1178 deploy_cni_provider
1179 kube_secrets
garciadeblasa7e128a2019-12-18 11:10:45 +01001180 [ ! $OSM_DOCKER_TAG == "7" ] && parse_yaml $OSM_DOCKER_TAG
vijaynag8339ed22019-07-25 17:10:58 +05301181 namespace_vol
garciadeblasf7d00302020-07-08 14:30:29 +00001182 taint_master_node
vijaynag8339ed22019-07-25 17:10:58 +05301183 deploy_osm_services
magnussonl1bbe9452020-02-25 13:43:17 +01001184 if [ -n "$INSTALL_PLA"]; then
1185 # optional PLA install
1186 deploy_osm_pla_service
1187 fi
vijaynag8339ed22019-07-25 17:10:58 +05301188 track deploy_osm_services_k8s
garciadeblasac5bd332020-07-08 14:13:40 +00001189 install_k8s_storageclass
1190 track k8s_storageclass
1191 juju_addk8s
1192 track juju_addk8s
1193 install_helm
1194 track install_helm
garciadeblasb5a630f2020-03-05 18:32:16 +00001195 if [ -n "$INSTALL_K8S_MONITOR" ]; then
garciadeblasfc5bb142019-12-10 10:49:12 +01001196 # install OSM MONITORING
1197 install_k8s_monitoring
1198 track install_k8s_monitoring
1199 fi
vijaynag8339ed22019-07-25 17:10:58 +05301200 else
1201 # remove old stack
1202 remove_stack $OSM_STACK_NAME
1203 create_docker_network
1204 deploy_lightweight
1205 generate_osmclient_script
1206 track docker_deploy
lavado6ad812e2019-11-29 10:58:58 -05001207 install_prometheus_nodeexporter
garciadeblasfc5bb142019-12-10 10:49:12 +01001208 track nodeexporter
vijaynag8339ed22019-07-25 17:10:58 +05301209 [ -n "$INSTALL_VIMEMU" ] && install_vimemu && track vimemu
1210 [ -n "$INSTALL_ELK" ] && deploy_elk && track elk
vijaynag8339ed22019-07-25 17:10:58 +05301211 fi
1212
Mike Marchettib8420852018-09-13 13:45:06 -04001213 [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
garciadeblas6c66abf2018-05-16 14:46:19 +02001214 track osmclient
garciadeblasd32b7872020-07-03 15:32:05 +00001215
1216 echo -e "Checking OSM health state..."
1217 if [ -n "$KUBERNETES" ]; then
1218 $OSM_DEVOPS/installers/osm_health.sh -s ${OSM_STACK_NAME} -k || \
1219 echo -e "OSM is not healthy, but will probably converge to a healthy state soon." && \
1220 echo -e "Check OSM status with: kubectl -n ${OSM_STACK_NAME} get all" && \
1221 track osm_unhealthy
1222 else
1223 $OSM_DEVOPS/installers/osm_health.sh -s ${OSM_STACK_NAME} || \
1224 echo -e "OSM is not healthy, but will probably converge to a healthy state soon." && \
1225 echo -e "Check OSM status with: docker service ls; docker stack ps ${OSM_STACK_NAME}" && \
1226 track osm_unhealthy
1227 fi
1228 track after_healthcheck
vijaynag8339ed22019-07-25 17:10:58 +05301229
garciadeblasfaa45852020-07-03 16:24:23 +00001230 [ -n "$KUBERNETES" ] && add_local_k8scluster
1231 track add_local_k8scluster
1232
garciadeblas7cebea82020-07-03 15:33:36 +00001233 wget -q -O- https://osm-download.etsi.org/ftp/osm-8.0-eight/README2.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001234 track end
garciadeblasd8bc5c32018-05-09 17:37:56 +02001235 return 0
1236}
1237
Antonio Marsicof4ce57c2020-04-23 12:06:19 +02001238function install_to_openstack() {
1239
1240 if [ -z "$2" ]; then
1241 FATAL "OpenStack installer requires a valid external network name"
1242 fi
1243
1244 # Install Pip for Python3
1245 $WORKDIR_SUDO apt install -y python3-pip
1246 $WORKDIR_SUDO -H LC_ALL=C python3 -m pip install -U pip
1247
1248 # Install Ansible, OpenStack client and SDK
1249 $WORKDIR_SUDO -H LC_ALL=C python3 -m pip install -U python-openstackclient "openstacksdk<1" "ansible>=2.9,<3"
1250
1251 export ANSIBLE_CONFIG="$OSM_DEVOPS/installers/openstack/ansible.cfg"
1252
1253 OSM_INSTALLER_ARGS="${REPO_ARGS[@]}"
1254
1255 # Execute the Ansible playbook based on openrc or clouds.yaml
1256 if [ -e "$1" ]; then
1257 . $1
1258 ansible-playbook -e external_network_name=$2 -e installer_args="\"$OSM_INSTALLER_ARGS\"" \
1259 -e setup_volume=$3 $OSM_DEVOPS/installers/openstack/site.yml
1260 else
1261 ansible-playbook -e external_network_name=$2 -e installer_args="\"$OSM_INSTALLER_ARGS\"" \
1262 -e setup_volume=$3 -e cloud_name=$1 $OSM_DEVOPS/installers/openstack/site.yml
1263 fi
1264
1265 return 0
1266}
1267
garciadeblasd8bc5c32018-05-09 17:37:56 +02001268function install_vimemu() {
peusterm76353e42018-05-08 13:56:05 +02001269 echo "\nInstalling vim-emu"
1270 EMUTEMPDIR="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX")"
1271 trap 'rm -rf "${EMUTEMPDIR}"' EXIT
peusterma3a7d142020-02-07 10:12:29 +01001272 # install prerequisites (OVS is a must for the emulator to work)
1273 sudo apt-get install openvswitch-switch
garciadeblasd8bc5c32018-05-09 17:37:56 +02001274 # clone vim-emu repository (attention: branch is currently master only)
1275 echo "Cloning vim-emu repository ..."
peusterm76353e42018-05-08 13:56:05 +02001276 git clone https://osm.etsi.org/gerrit/osm/vim-emu.git $EMUTEMPDIR
garciadeblasd8bc5c32018-05-09 17:37:56 +02001277 # build vim-emu docker
1278 echo "Building vim-emu Docker container..."
Mike Marchettib8420852018-09-13 13:45:06 -04001279
1280 sg docker -c "docker build -t vim-emu-img -f $EMUTEMPDIR/Dockerfile --no-cache $EMUTEMPDIR/" || FATAL "cannot build vim-emu-img docker image"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001281 # start vim-emu container as daemon
1282 echo "Starting vim-emu Docker container 'vim-emu' ..."
peusterm76353e42018-05-08 13:56:05 +02001283 if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
1284 # in lightweight mode, the emulator needs to be attached to netOSM
Mike Marchettib8420852018-09-13 13:45:06 -04001285 sg docker -c "docker run --name vim-emu -t -d --restart always --privileged --pid='host' --network=net${OSM_STACK_NAME} -v /var/run/docker.sock:/var/run/docker.sock vim-emu-img python examples/osm_default_daemon_topology_2_pop.py"
peusterm76353e42018-05-08 13:56:05 +02001286 else
1287 # classic build mode
Mike Marchettib8420852018-09-13 13:45:06 -04001288 sg docker -c "docker run --name vim-emu -t -d --restart always --privileged --pid='host' -v /var/run/docker.sock:/var/run/docker.sock vim-emu-img python examples/osm_default_daemon_topology_2_pop.py"
peusterm76353e42018-05-08 13:56:05 +02001289 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001290 echo "Waiting for 'vim-emu' container to start ..."
1291 sleep 5
Mike Marchettib8420852018-09-13 13:45:06 -04001292 export VIMEMU_HOSTNAME=$(sg docker -c "docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001293 echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
peusterm76353e42018-05-08 13:56:05 +02001294 # print vim-emu connection info
1295 echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001296 echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
peusterm76353e42018-05-08 13:56:05 +02001297 echo -e "To add the emulated VIM to OSM you should do:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001298 echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
1299}
1300
romeromonsere366b1a2019-11-19 19:49:26 +01001301function install_k8s_monitoring() {
1302 # install OSM monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +01001303 $WORKDIR_SUDO chmod +x $OSM_DEVOPS/installers/k8s/*.sh
romeromonsere366b1a2019-11-19 19:49:26 +01001304 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh
1305}
1306
1307function uninstall_k8s_monitoring() {
K Sai Kiran5e151f02019-12-11 14:50:09 +05301308 # uninstall OSM monitoring
romeromonsere366b1a2019-11-19 19:49:26 +01001309 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/uninstall_osm_k8s_monitoring.sh
1310}
1311
garciadeblasd8bc5c32018-05-09 17:37:56 +02001312function dump_vars(){
1313 echo "DEVELOP=$DEVELOP"
1314 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
1315 echo "UNINSTALL=$UNINSTALL"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001316 echo "UPDATE=$UPDATE"
1317 echo "RECONFIGURE=$RECONFIGURE"
1318 echo "TEST_INSTALLER=$TEST_INSTALLER"
1319 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
magnussonl1bbe9452020-02-25 13:43:17 +01001320 echo "INSTALL_PLA=$INSTALL_PLA"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001321 echo "INSTALL_LXD=$INSTALL_LXD"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001322 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
garciadeblas6c66abf2018-05-16 14:46:19 +02001323 echo "INSTALL_ONLY=$INSTALL_ONLY"
1324 echo "INSTALL_ELK=$INSTALL_ELK"
lavado6ad812e2019-11-29 10:58:58 -05001325 #echo "INSTALL_PERFMON=$INSTALL_PERFMON"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +02001326 echo "INSTALL_TO_OPENSTACK=$INSTALL_TO_OPENSTACK"
1327 echo "OPENSTACK_PUBLIC_NET_NAME=$OPENSTACK_PUBLIC_NET_NAME"
1328 echo "OPENSTACK_OPENRC_FILE_OR_CLOUD=$OPENSTACK_OPENRC_FILE_OR_CLOUD"
1329 echo "OPENSTACK_ATTACH_VOLUME=$OPENSTACK_ATTACH_VOLUME"
garciadeblasb5a630f2020-03-05 18:32:16 +00001330 echo "INSTALL_K8S_MONITOR=$INSTALL_K8S_MONITOR"
garciadeblas0e596bc2018-05-28 16:04:42 +02001331 echo "TO_REBUILD=$TO_REBUILD"
garciadeblasd41f5482018-05-25 10:25:06 +02001332 echo "INSTALL_NOLXD=$INSTALL_NOLXD"
garciadeblasa3e26612018-05-30 17:58:55 +02001333 echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
garciadeblas0d45bc82018-11-19 14:25:13 +01001334 echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001335 echo "RELEASE=$RELEASE"
1336 echo "REPOSITORY=$REPOSITORY"
1337 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
1338 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001339 echo "OSM_DEVOPS=$OSM_DEVOPS"
1340 echo "OSM_VCA_HOST=$OSM_VCA_HOST"
1341 echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
garciadeblasaa3ddf42019-04-04 19:04:32 +02001342 echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001343 echo "NO_HOST_PORTS=$NO_HOST_PORTS"
1344 echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
1345 echo "WORKDIR_SUDO=$WORKDIR_SUDO"
1346 echo "OSM_WORK_DIR=$OSM_STACK_NAME"
1347 echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
1348 echo "DOCKER_USER=$DOCKER_USER"
1349 echo "OSM_STACK_NAME=$OSM_STACK_NAME"
1350 echo "PULL_IMAGES=$PULL_IMAGES"
vijaynag8339ed22019-07-25 17:10:58 +05301351 echo "KUBERNETES=$KUBERNETES"
vijaynag4b57d462020-06-08 14:23:10 +00001352 echo "NGUI=$NGUI"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001353 echo "SHOWOPTS=$SHOWOPTS"
1354 echo "Install from specific refspec (-b): $COMMIT_ID"
1355}
1356
1357function track(){
1358 ctime=`date +%s`
1359 duration=$((ctime - SESSION_ID))
1360 url="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
1361 #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
1362 event_name="bin"
garciadeblas6c66abf2018-05-16 14:46:19 +02001363 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name="binsrc"
1364 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name="lxd"
1365 [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name="lw"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001366 event_name="${event_name}_$1"
1367 url="${url}&event=${event_name}&ce_duration=${duration}"
1368 wget -q -O /dev/null $url
1369}
1370
1371UNINSTALL=""
1372DEVELOP=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001373UPDATE=""
1374RECONFIGURE=""
1375TEST_INSTALLER=""
1376INSTALL_LXD=""
1377SHOWOPTS=""
1378COMMIT_ID=""
1379ASSUME_YES=""
1380INSTALL_FROM_SOURCE=""
garciadeblas7cebea82020-07-03 15:33:36 +00001381RELEASE="ReleaseEIGHT"
Mike Marchettib8420852018-09-13 13:45:06 -04001382REPOSITORY="stable"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001383INSTALL_VIMEMU=""
magnussonl1bbe9452020-02-25 13:43:17 +01001384INSTALL_PLA=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001385LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
1386LXD_REPOSITORY_PATH=""
1387INSTALL_LIGHTWEIGHT="y"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +02001388INSTALL_TO_OPENSTACK=""
1389OPENSTACK_OPENRC_FILE_OR_CLOUD=""
1390OPENSTACK_PUBLIC_NET_NAME=""
1391OPENSTACK_ATTACH_VOLUME="false"
garciadeblas6c66abf2018-05-16 14:46:19 +02001392INSTALL_ONLY=""
1393INSTALL_ELK=""
garciadeblas0e596bc2018-05-28 16:04:42 +02001394TO_REBUILD=""
garciadeblasd41f5482018-05-25 10:25:06 +02001395INSTALL_NOLXD=""
garciadeblasa3e26612018-05-30 17:58:55 +02001396INSTALL_NODOCKER=""
Mike Marchettib8420852018-09-13 13:45:06 -04001397INSTALL_NOJUJU=""
vijaynag8339ed22019-07-25 17:10:58 +05301398KUBERNETES=""
vijaynag4b57d462020-06-08 14:23:10 +00001399NGUI=""
garciadeblasb5a630f2020-03-05 18:32:16 +00001400INSTALL_K8S_MONITOR=""
garciadeblas0d45bc82018-11-19 14:25:13 +01001401INSTALL_NOHOSTCLIENT=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001402SESSION_ID=`date +%s`
1403OSM_DEVOPS=
lavadoe07b1642018-10-25 10:58:34 -05001404OSM_VCA_HOST=
1405OSM_VCA_SECRET=
garciadeblasaa3ddf42019-04-04 19:04:32 +02001406OSM_VCA_PUBKEY=
David Garcia79f4f532020-04-07 12:59:34 +02001407OSM_VCA_CLOUDNAME="localhost"
Dominik Fleischmann71997c12020-06-30 14:25:19 +02001408OSM_VCA_K8S_CLOUDNAME="k8scloud"
Mike Marchettib8420852018-09-13 13:45:06 -04001409OSM_STACK_NAME=osm
1410NO_HOST_PORTS=""
1411DOCKER_NOBUILD=""
1412REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
garciadeblas870e60a2018-11-21 16:44:21 +01001413REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
Mike Marchettib8420852018-09-13 13:45:06 -04001414WORKDIR_SUDO=sudo
1415OSM_WORK_DIR="/etc/osm"
garciadeblas526f0fb2018-11-23 14:47:40 +01001416OSM_DOCKER_WORK_DIR="/etc/osm/docker"
vijaynag8339ed22019-07-25 17:10:58 +05301417OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
1418OSM_HOST_VOL="/var/lib/osm"
1419OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
Mike Marchetti13d76c82018-09-19 15:00:36 -04001420OSM_DOCKER_TAG=latest
garciadeblas0d45bc82018-11-19 14:25:13 +01001421DOCKER_USER=opensourcemano
1422PULL_IMAGES="y"
Benjamin Diazaa0af712018-10-04 14:02:34 -03001423KAFKA_TAG=2.11-1.0.2
lavado60216242018-10-10 23:44:28 +02001424PROMETHEUS_TAG=v2.4.3
lavado6ad812e2019-11-29 10:58:58 -05001425GRAFANA_TAG=latest
1426PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
1427PROMETHEUS_CADVISOR_TAG=latest
lavado9a8df7c2018-10-24 09:35:34 -05001428KEYSTONEDB_TAG=10
Benjamin Diazba2cca92018-11-08 21:07:15 -03001429OSM_DATABASE_COMMONKEY=
lavado53eb8f52018-11-16 12:58:23 -05001430ELASTIC_VERSION=6.4.2
lavado4e8662c2018-11-28 11:28:14 -05001431ELASTIC_CURATOR_VERSION=5.5.4
vijaynag8339ed22019-07-25 17:10:58 +05301432POD_NETWORK_CIDR=10.244.0.0/16
1433K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
1434RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
garciadeblasd8bc5c32018-05-09 17:37:56 +02001435
vijaynag4b57d462020-06-08 14:23:10 +00001436while getopts ":b:r:c:n:k:u:R:D:o:O:m:N:H:S:s:w:t:U:P:A:l:L:K:-: hy" o; do
garciadeblasd8bc5c32018-05-09 17:37:56 +02001437 case "${o}" in
garciadeblasd8bc5c32018-05-09 17:37:56 +02001438 b)
1439 COMMIT_ID=${OPTARG}
garciadeblas0d45bc82018-11-19 14:25:13 +01001440 PULL_IMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001441 ;;
1442 r)
Mike Marchettib8420852018-09-13 13:45:06 -04001443 REPOSITORY="${OPTARG}"
1444 REPO_ARGS+=(-r "$REPOSITORY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001445 ;;
vijaynag8339ed22019-07-25 17:10:58 +05301446 c)
1447 [ "${OPTARG}" == "swarm" ] && continue
1448 [ "${OPTARG}" == "k8s" ] && KUBERNETES="y" && continue
1449 echo -e "Invalid argument for -i : ' $OPTARG'\n" >&2
1450 usage && exit 1
1451 ;;
vijaynag4b57d462020-06-08 14:23:10 +00001452 n)
1453 [ "${OPTARG}" == "lwui" ] && continue
1454 [ "${OPTARG}" == "ngui" ] && NGUI="y" && continue
1455 echo -e "Invalid argument for -n : ' $OPTARG'\n" >&2
1456 usage && exit 1
1457 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001458 k)
Mike Marchettib8420852018-09-13 13:45:06 -04001459 REPOSITORY_KEY="${OPTARG}"
1460 REPO_ARGS+=(-k "$REPOSITORY_KEY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001461 ;;
1462 u)
Mike Marchettib8420852018-09-13 13:45:06 -04001463 REPOSITORY_BASE="${OPTARG}"
1464 REPO_ARGS+=(-u "$REPOSITORY_BASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001465 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001466 R)
1467 RELEASE="${OPTARG}"
1468 REPO_ARGS+=(-R "$RELEASE")
garciadeblas0d45bc82018-11-19 14:25:13 +01001469 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001470 D)
1471 OSM_DEVOPS="${OPTARG}"
1472 ;;
garciadeblas6c66abf2018-05-16 14:46:19 +02001473 o)
1474 INSTALL_ONLY="y"
1475 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
1476 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblasb5a630f2020-03-05 18:32:16 +00001477 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001478 ;;
Antonio Marsicof4ce57c2020-04-23 12:06:19 +02001479 O)
1480 INSTALL_TO_OPENSTACK="y"
1481 if [ -n "${OPTARG}" ]; then
1482 OPENSTACK_OPENRC_FILE_OR_CLOUD="${OPTARG}"
1483 else
1484 echo -e "Invalid argument for -O : ' $OPTARG'\n" >&2
1485 usage && exit 1
1486 fi
1487 ;;
1488 N)
1489 OPENSTACK_PUBLIC_NET_NAME="${OPTARG}"
1490 ;;
garciadeblas0e596bc2018-05-28 16:04:42 +02001491 m)
garciadeblas0e596bc2018-05-28 16:04:42 +02001492 [ "${OPTARG}" == "LW-UI" ] && TO_REBUILD="$TO_REBUILD LW-UI" && continue
govindappa79e51b92019-05-22 12:15:21 +05301493 [ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
1494 [ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
1495 [ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001496 [ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
govindappa79e51b92019-05-22 12:15:21 +05301497 [ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001498 [ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
1499 [ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
govindappa79e51b92019-05-22 12:15:21 +05301500 [ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
garciadeblasfc5bb142019-12-10 10:49:12 +01001501 [ "${OPTARG}" == "PROMETHEUS-CADVISOR" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS-CADVISOR" && continue
govindappa79e51b92019-05-22 12:15:21 +05301502 [ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
lavado6ad812e2019-11-29 10:58:58 -05001503 [ "${OPTARG}" == "GRAFANA" ] && TO_REBUILD="$TO_REBUILD GRAFANA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001504 [ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
magnussonl1bbe9452020-02-25 13:43:17 +01001505 [ "${OPTARG}" == "PLA" ] && TO_REBUILD="$TO_REBUILD PLA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001506 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001507 H)
1508 OSM_VCA_HOST="${OPTARG}"
1509 ;;
1510 S)
1511 OSM_VCA_SECRET="${OPTARG}"
1512 ;;
1513 s)
1514 OSM_STACK_NAME="${OPTARG}" && [ -n "$KUBERNETES" ] && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0
1515 ;;
1516 w)
1517 # when specifying workdir, do not use sudo for access
1518 WORKDIR_SUDO=
1519 OSM_WORK_DIR="${OPTARG}"
1520 ;;
1521 t)
1522 OSM_DOCKER_TAG="${OPTARG}"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +02001523 REPO_ARGS+=(-t "$OSM_DOCKER_TAG")
garciadeblas25e87d22020-01-31 14:27:29 +01001524 ;;
1525 U)
1526 DOCKER_USER="${OPTARG}"
1527 ;;
1528 P)
1529 OSM_VCA_PUBKEY=$(cat ${OPTARG})
1530 ;;
1531 A)
1532 OSM_VCA_APIPROXY="${OPTARG}"
1533 ;;
David Garcia79f4f532020-04-07 12:59:34 +02001534 l)
1535 LXD_CLOUD_FILE="${OPTARG}"
1536 ;;
1537 L)
1538 LXD_CRED_FILE="${OPTARG}"
1539 ;;
David Garcia404ae122020-04-28 11:47:55 +02001540 K)
1541 CONTROLLER_NAME="${OPTARG}"
1542 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001543 -)
1544 [ "${OPTARG}" == "help" ] && usage && exit 0
garciadeblas0d45bc82018-11-19 14:25:13 +01001545 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001546 [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
1547 [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001548 [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
1549 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
1550 [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
1551 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
garciadeblasd41f5482018-05-25 10:25:06 +02001552 [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
garciadeblasa3e26612018-05-30 17:58:55 +02001553 [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001554 [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001555 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001556 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001557 [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001558 [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
1559 [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
1560 [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
1561 [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
garciadeblas0d45bc82018-11-19 14:25:13 +01001562 [ "${OPTARG}" == "pullimages" ] && continue
garciadeblasb5a630f2020-03-05 18:32:16 +00001563 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001564 [ "${OPTARG}" == "charmed" ] && CHARMED="y" && continue
1565 [ "${OPTARG}" == "bundle" ] && continue
Dominik Fleischmann7a97a4c2020-06-04 10:52:05 +02001566 [ "${OPTARG}" == "k8s" ] && continue
1567 [ "${OPTARG}" == "lxd" ] && continue
1568 [ "${OPTARG}" == "lxd-cred" ] && continue
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001569 [ "${OPTARG}" == "microstack" ] && continue
Dominik Fleischmannc57296f2020-06-09 11:45:08 +02001570 [ "${OPTARG}" == "ha" ] && continue
David Garcia69388c22020-05-07 12:14:19 +02001571 [ "${OPTARG}" == "tag" ] && continue
magnussonl1bbe9452020-02-25 13:43:17 +01001572 [ "${OPTARG}" == "pla" ] && INSTALL_PLA="y" && continue
Antonio Marsicof4ce57c2020-04-23 12:06:19 +02001573 [ "${OPTARG}" == "volume" ] && OPENSTACK_ATTACH_VOLUME="true" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001574 echo -e "Invalid option: '--$OPTARG'\n" >&2
1575 usage && exit 1
1576 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001577 :)
1578 echo "Option -$OPTARG requires an argument" >&2
1579 usage && exit 1
1580 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001581 \?)
1582 echo -e "Invalid option: '-$OPTARG'\n" >&2
1583 usage && exit 1
1584 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001585 h)
1586 usage && exit 0
1587 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001588 y)
1589 ASSUME_YES="y"
1590 ;;
1591 *)
1592 usage && exit 1
1593 ;;
1594 esac
1595done
1596
garciadeblas0e596bc2018-05-28 16:04:42 +02001597[ -n "$TO_REBUILD" ] && [ "$TO_REBUILD" != " NONE" ] && echo $TO_REBUILD | grep -q NONE && FATAL "Incompatible option: -m NONE cannot be used with other -m options"
magnussonl1bbe9452020-02-25 13:43:17 +01001598[ -n "$TO_REBUILD" ] && [ "$TO_REBUILD" == " PLA" ] && [ -z "$INSTALL_PLA" ] && FATAL "Incompatible option: -m PLA cannot be used without --pla option"
garciadeblas6c66abf2018-05-16 14:46:19 +02001599
garciadeblasd8bc5c32018-05-09 17:37:56 +02001600if [ -n "$SHOWOPTS" ]; then
1601 dump_vars
1602 exit 0
1603fi
1604
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001605if [ -n "$CHARMED" ]; then
1606 if [ -n "$UNINSTALL" ]; then
garciadeblascd0c6ea2020-07-04 07:38:49 +00001607 ${OSM_DEVOPS}/installers/charmed_uninstall.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D /usr/share/osm-devops -t $DOCKER_TAG "$@"
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001608 else
garciadeblascd0c6ea2020-07-04 07:38:49 +00001609 ${OSM_DEVOPS}/installers/charmed_install.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D /usr/share/osm-devops -t $DOCKER_TAG "$@"
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001610
Dominik Fleischmannc57296f2020-06-09 11:45:08 +02001611 echo "Your installation is now complete, follow these steps for configuring the osmclient:"
1612 echo
1613 echo "1. Get the NBI IP with the following command:"
1614 echo
1615 echo NBI_IP='`juju status --format json | jq -rc '"'"'.applications."nbi-k8s".address'"'"'`'
1616 echo
1617 echo "2. Create the OSM_HOSTNAME environment variable with the NBI IP"
1618 echo
1619 echo "export OSM_HOSTNAME=\$NBI_IP"
1620 echo
1621 echo "3. Add the previous command to your .bashrc for other Shell sessions"
1622 echo
1623 echo "echo \"export OSM_HOSTNAME=\$NBI_IP\" >> ~/.bashrc"
1624 echo
1625 echo "DONE"
1626 fi
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001627
1628 exit 0
1629fi
1630
garciadeblasd8bc5c32018-05-09 17:37:56 +02001631# if develop, we force master
1632[ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
1633
David Garcia404ae122020-04-28 11:47:55 +02001634need_packages="git wget curl tar"
Antonio Marsicof4ce57c2020-04-23 12:06:19 +02001635
1636[ -n "$INSTALL_TO_OPENSTACK" ] && install_to_openstack $OPENSTACK_OPENRC_FILE_OR_CLOUD $OPENSTACK_PUBLIC_NET_NAME $OPENSTACK_ATTACH_VOLUME && echo -e "\nDONE" && exit 0
1637
garciadeblasd8bc5c32018-05-09 17:37:56 +02001638echo -e "Checking required packages: $need_packages"
1639dpkg -l $need_packages &>/dev/null \
1640 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1641 || sudo apt-get update \
1642 || FATAL "failed to run apt-get update"
1643dpkg -l $need_packages &>/dev/null \
1644 || ! echo -e "Installing $need_packages requires root privileges." \
1645 || sudo apt-get install -y $need_packages \
1646 || FATAL "failed to install $need_packages"
David Garcia404ae122020-04-28 11:47:55 +02001647sudo snap install jq
garciadeblasd8bc5c32018-05-09 17:37:56 +02001648if [ -z "$OSM_DEVOPS" ]; then
Michael Marchettiee374142018-08-02 22:47:16 +02001649 if [ -n "$TEST_INSTALLER" ]; then
1650 echo -e "\nUsing local devops repo for OSM installation"
1651 OSM_DEVOPS="$(dirname $(realpath $(dirname $0)))"
1652 else
1653 echo -e "\nCreating temporary dir for OSM installation"
1654 OSM_DEVOPS="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
1655 trap 'rm -rf "$OSM_DEVOPS"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001656
Michael Marchettiee374142018-08-02 22:47:16 +02001657 git clone https://osm.etsi.org/gerrit/osm/devops.git $OSM_DEVOPS
garciadeblasd8bc5c32018-05-09 17:37:56 +02001658
Michael Marchettiee374142018-08-02 22:47:16 +02001659 if [ -z "$COMMIT_ID" ]; then
1660 echo -e "\nGuessing the current stable release"
1661 LATEST_STABLE_DEVOPS=`git -C $OSM_DEVOPS tag -l v[0-9].* | sort -V | tail -n1`
1662 [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
1663
1664 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
1665 COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
1666 else
1667 echo -e "\nDEVOPS Using commit $COMMIT_ID"
1668 fi
1669 git -C $OSM_DEVOPS checkout $COMMIT_ID
garciadeblasd8bc5c32018-05-09 17:37:56 +02001670 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001671fi
1672
garciadeblas3c25fab2019-11-18 17:24:43 +01001673. $OSM_DEVOPS/common/all_funcs
garciadeblasd8bc5c32018-05-09 17:37:56 +02001674
garciadeblasb1862b12020-07-09 14:20:47 +00001675[ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
1676[ -n "$KUBERNETES" ] && OSM_K8S_WORK_DIR="$OSM_DOCKER_WORK_DIR/osm_pods" && OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001677[ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight && echo -e "\nDONE" && exit 0
garciadeblas6c66abf2018-05-16 14:46:19 +02001678[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
lavado6ad812e2019-11-29 10:58:58 -05001679#[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
garciadeblas6c66abf2018-05-16 14:46:19 +02001680[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
garciadeblasb5a630f2020-03-05 18:32:16 +00001681[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_K8S_MONITOR" ] && install_k8s_monitoring
garciadeblas6c66abf2018-05-16 14:46:19 +02001682[ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
garciadeblasd8bc5c32018-05-09 17:37:56 +02001683
1684#Installation starts here
garciadeblas7cebea82020-07-03 15:33:36 +00001685wget -q -O- https://osm-download.etsi.org/ftp/osm-8.0-eight/README.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001686track start
1687
garciadeblasd8bc5c32018-05-09 17:37:56 +02001688[ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight && echo -e "\nDONE" && exit 0
1689echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
1690if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
1691 ! ask_user "The installation will take about 75-90 minutes. Continue (Y/n)? " y && echo "Cancelled!" && exit 1
1692fi
1693
1694echo -e "Checking required packages: lxd"
1695lxd --version &>/dev/null || FATAL "lxd not present, exiting."
1696[ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
1697
garciadeblasd8bc5c32018-05-09 17:37:56 +02001698# use local devops for containers
1699export OSM_USE_LOCAL_DEVOPS=true
garciadeblasd8bc5c32018-05-09 17:37:56 +02001700
1701#Install osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +02001702
1703#Install vim-emu (optional)
peusterm76353e42018-05-08 13:56:05 +02001704[ -n "$INSTALL_VIMEMU" ] && install_docker_ce && install_vimemu
garciadeblasd8bc5c32018-05-09 17:37:56 +02001705
garciadeblas7cebea82020-07-03 15:33:36 +00001706wget -q -O- https://osm-download.etsi.org/ftp/osm-8.0-eight/README2.txt &> /dev/null
garciadeblasd8bc5c32018-05-09 17:37:56 +02001707track end
1708echo -e "\nDONE"
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001709
romeromonser599d5e22020-03-06 10:23:29 +01001710