blob: fd9595fe6a5269b14299953cdfe57af22767c131 [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"
30 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 -040031 echo -e " -H <VCA host> use specific juju host controller IP"
32 echo -e " -S <VCA secret> use VCA/juju secret key"
garciadeblasaa3ddf42019-04-04 19:04:32 +020033 echo -e " -P <VCA pubkey> use VCA/juju public key file"
garciadeblas0c2f62b2019-05-29 15:23:19 +020034 echo -e " -C <VCA cacert> use VCA/juju CA certificate file"
Adam Israel5ddc97f2019-09-03 18:11:12 -040035 echo -e " -A <VCA apiproxy> use VCA/juju API proxy"
garciadeblas6c66abf2018-05-16 14:46:19 +020036 echo -e " --vimemu: additionally deploy the VIM emulator as a docker container"
37 echo -e " --elk_stack: additionally deploy an ELK docker stack for event logging"
beierlm107d16a2020-05-15 21:47:43 -040038 echo -e " --pla: install the PLA module for placement support"
39 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)"
romeromonserbeb92bb2020-03-06 10:23:29 +010040 echo -e " -o <ADDON>: ONLY (un)installs one of the addons (vimemu, elk_stack, k8s_monitor)"
garciadeblase990f662018-05-18 11:43:39 +020041 echo -e " -D <devops path> use local devops installation path"
Mike Marchettib8420852018-09-13 13:45:06 -040042 echo -e " -w <work dir> Location to store runtime installation"
Mike Marchetti13d76c82018-09-19 15:00:36 -040043 echo -e " -t <docker tag> specify osm docker tag (default is latest)"
beierlm107d16a2020-05-15 21:47:43 -040044 echo -e " -l: LXD cloud yaml file"
45 echo -e " -L: LXD credentials yaml file"
46 echo -e " -K: Specifies the name of the controller to use - The controller must be already bootstrapped"
garciadeblasd41f5482018-05-25 10:25:06 +020047 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 +020048 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 -040049 echo -e " --nojuju: do not juju, assumes already installed"
50 echo -e " --nodockerbuild:do not build docker images (use existing locally cached images)"
51 echo -e " --nohostports: do not expose docker ports to host (useful for creating multiple instances of osm on the same host)"
52 echo -e " --nohostclient: do not install the osmclient"
garciadeblase990f662018-05-18 11:43:39 +020053 echo -e " --uninstall: uninstall OSM: remove the containers and delete NAT rules"
54 echo -e " --source: install OSM from source code using the latest stable tag"
garciadeblasd8bc5c32018-05-09 17:37:56 +020055 echo -e " --develop: (deprecated, use '-b master') install OSM from source code using the master branch"
Mike Marchettida8a9c42018-10-01 15:25:15 -040056 echo -e " --pullimages: pull/run osm images from docker.io/opensourcemano"
romeromonserbeb92bb2020-03-06 10:23:29 +010057 echo -e " --k8s_monitor: install the OSM kubernetes monitoring with prometheus and grafana"
garciadeblasd8bc5c32018-05-09 17:37:56 +020058# echo -e " --reconfigure: reconfigure the modules (DO NOT change NAT rules)"
garciadeblasd8bc5c32018-05-09 17:37:56 +020059# echo -e " --update: update to the latest stable release or to the latest commit if using a specific branch"
60 echo -e " --showopts: print chosen options and exit (only for debugging)"
61 echo -e " -y: do not prompt for confirmation, assumes yes"
garciadeblasd8bc5c32018-05-09 17:37:56 +020062 echo -e " -h / --help: print this help"
beierlm107d16a2020-05-15 21:47:43 -040063 echo -e " --charmed: install OSM with charms"
64 echo -e " --bundle <bundle path>: Specify with which bundle to deploy OSM with charms (--charmed option)"
65 echo -e " --kubeconfig <kubeconfig path>: Specify with which kubernetes to deploy OSM with charms (--charmed option)"
66 echo -e " --controller <name>: Specifies the name of the controller to use - The controller must be already bootstrapped (--charmed option)"
67 echo -e " --lxd-cloud <yaml path>: Takes a YAML file as a parameter with the LXD Cloud information (--charmed option)"
68 echo -e " --lxd-credentials <yaml path>: Takes a YAML file as a parameter with the LXD Credentials information (--charmed option)"
69 echo -e " --microstack: Installs microstack as a vim. (--charmed option)"
70 echo -e " --tag: Docker image tag"
garciadeblasd8bc5c32018-05-09 17:37:56 +020071
garciadeblasd8bc5c32018-05-09 17:37:56 +020072}
73
Mike Marchettib8420852018-09-13 13:45:06 -040074# takes a juju/accounts.yaml file and returns the password specific
Adam Israel8232e562018-11-21 16:47:45 -050075# for a controller. I wrote this using only bash tools to minimize
Mike Marchettib8420852018-09-13 13:45:06 -040076# additions of other packages
77function parse_juju_password {
78 password_file="${HOME}/.local/share/juju/accounts.yaml"
79 local controller_name=$1
80 local s='[[:space:]]*' w='[a-zA-Z0-9_-]*' fs=$(echo @|tr @ '\034')
81 sed -ne "s|^\($s\):|\1|" \
82 -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
83 -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $password_file |
84 awk -F$fs -v controller=$controller_name '{
85 indent = length($1)/2;
86 vname[indent] = $2;
87 for (i in vname) {if (i > indent) {delete vname[i]}}
88 if (length($3) > 0) {
89 vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
90 if (match(vn,controller) && match($2,"password")) {
91 printf("%s",$3);
92 }
93 }
94 }'
95}
96
Benjamin Diazba2cca92018-11-08 21:07:15 -030097function generate_secret() {
98 head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32
99}
100
Mike Marchettib8420852018-09-13 13:45:06 -0400101function remove_volumes() {
vijaynag8339ed22019-07-25 17:10:58 +0530102 if [ -n "$KUBERNETES" ]; then
103 k8_volume=$1
104 echo "Removing ${k8_volume}"
105 $WORKDIR_SUDO rm -rf ${k8_volume}
106 else
107 stack=$1
garciadeblasac550f22019-12-11 11:17:06 +0100108 volumes="mongo_db mon_db osm_packages ro_db pol_db prom_db ro"
vijaynag8339ed22019-07-25 17:10:58 +0530109 for volume in $volumes; do
110 sg docker -c "docker volume rm ${stack}_${volume}"
111 done
112 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400113}
114
115function remove_network() {
116 stack=$1
117 sg docker -c "docker network rm net${stack}"
118}
119
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100120function remove_iptables() {
121 stack=$1
122 if [ -z "$OSM_VCA_HOST" ]; then
123 OSM_VCA_HOST=`sg lxd -c "juju show-controller ${stack}"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
124 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
125 fi
126
David Garcia26432d42019-12-11 12:22:35 +0100127 if [ -z "$DEFAULT_IP" ]; then
tierno67634782020-05-18 14:17:41 +0000128 DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5; exit}')
129 [ -z "$DEFAULT_IF" ] && DEFAULT_IF=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}')
David Garcia26432d42019-12-11 12:22:35 +0100130 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
131 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
132 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
133 fi
134
135 if sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
136 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 +0100137 sudo netfilter-persistent save
138 fi
139}
140
garciadeblas5b857d32018-05-24 18:37:58 +0200141function remove_stack() {
142 stack=$1
garciadeblas5ef98212018-05-28 09:25:36 +0200143 if sg docker -c "docker stack ps ${stack}" ; then
garciadeblas5b857d32018-05-24 18:37:58 +0200144 echo -e "\nRemoving stack ${stack}" && sg docker -c "docker stack rm ${stack}"
145 COUNTER=0
146 result=1
147 while [ ${COUNTER} -lt 30 ]; do
148 result=$(sg docker -c "docker stack ps ${stack}" | wc -l)
149 #echo "Dockers running: $result"
150 if [ "${result}" == "0" ]; then
151 break
152 fi
153 let COUNTER=COUNTER+1
154 sleep 1
155 done
garciadeblasd8bc5c32018-05-09 17:37:56 +0200156 if [ "${result}" == "0" ]; then
garciadeblas5b857d32018-05-24 18:37:58 +0200157 echo "All dockers of the stack ${stack} were removed"
158 else
159 FATAL "Some dockers of the stack ${stack} could not be removed. Could not clean it."
garciadeblasd8bc5c32018-05-09 17:37:56 +0200160 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200161 sleep 5
garciadeblasd8bc5c32018-05-09 17:37:56 +0200162 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200163}
164
vijaynag8339ed22019-07-25 17:10:58 +0530165#removes osm deployments and services
166function remove_k8s_namespace() {
167 kubectl delete ns $1
168}
169
romeromonserbeb92bb2020-03-06 10:23:29 +0100170#removes helm only if there is nothing deployed in helm
171function remove_helm() {
172 if [ "$(helm ls -q)" == "" ] ; then
173 sudo helm reset --force
174 kubectl delete --namespace kube-system serviceaccount tiller
175 kubectl delete clusterrolebinding tiller-cluster-rule
176 sudo rm /usr/local/bin/helm
177 rm -rf $HOME/.helm
178 fi
179}
180
beierlm107d16a2020-05-15 21:47:43 -0400181#Uninstall osmclient
182function uninstall_osmclient() {
183 sudo apt-get remove --purge -y python-osmclient
184 sudo apt-get remove --purge -y python3-osmclient
185}
186
garciadeblas5b857d32018-05-24 18:37:58 +0200187#Uninstall lightweight OSM: remove dockers
188function uninstall_lightweight() {
garciadeblas282ff4e2018-07-10 09:16:30 +0200189 if [ -n "$INSTALL_ONLY" ]; then
190 if [ -n "$INSTALL_ELK" ]; then
191 echo -e "\nUninstalling OSM ELK stack"
192 remove_stack osm_elk
Mike Marchettib8420852018-09-13 13:45:06 -0400193 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas282ff4e2018-07-10 09:16:30 +0200194 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200195 else
196 echo -e "\nUninstalling OSM"
vijaynag8339ed22019-07-25 17:10:58 +0530197 if [ -n "$KUBERNETES" ]; then
beierlm107d16a2020-05-15 21:47:43 -0400198 if [ -n "$INSTALL_K8S_MONITOR" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +0100199 # uninstall OSM MONITORING
200 uninstall_k8s_monitoring
201 fi
vijaynag8339ed22019-07-25 17:10:58 +0530202 remove_k8s_namespace $OSM_STACK_NAME
203 else
Dominik4763cfe2019-11-27 12:15:50 +0100204
vijaynag8339ed22019-07-25 17:10:58 +0530205 remove_stack $OSM_STACK_NAME
206 remove_stack osm_elk
vijaynag8339ed22019-07-25 17:10:58 +0530207 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200208 echo "Now osm docker images and volumes will be deleted"
209 newgrp docker << EONG
lavado02ad4b02018-11-28 11:30:48 -0500210 docker image rm ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}
211 docker image rm ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}
212 docker image rm ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}
213 docker image rm ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}
214 docker image rm ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}
215 docker image rm ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}
216 docker image rm ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}
beierlm107d16a2020-05-15 21:47:43 -0400217 docker image rm ${DOCKER_USER}/pla:${OSM_DOCKER_TAG}
lavado02ad4b02018-11-28 11:30:48 -0500218 docker image rm ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}
garciadeblas83ca1322018-05-22 18:31:14 +0200219EONG
vijaynag8339ed22019-07-25 17:10:58 +0530220
221 if [ -n "$KUBERNETES" ]; then
222 OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
223 remove_volumes $OSM_NAMESPACE_VOL
224 else
225 remove_volumes $OSM_STACK_NAME
226 remove_network $OSM_STACK_NAME
227 fi
beierlm107d16a2020-05-15 21:47:43 -0400228 [ -z "$CONTROLLER_NAME" ] && remove_iptables $OSM_STACK_NAME
Mike Marchettib8420852018-09-13 13:45:06 -0400229 echo "Removing $OSM_DOCKER_WORK_DIR"
230 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR
beierlm107d16a2020-05-15 21:47:43 -0400231 [ -z "$CONTROLLER_NAME" ] && sg lxd -c "juju destroy-controller --destroy-all-models --yes $OSM_STACK_NAME"
garciadeblas282ff4e2018-07-10 09:16:30 +0200232 fi
beierlm107d16a2020-05-15 21:47:43 -0400233 uninstall_osmclient
garciadeblas282ff4e2018-07-10 09:16:30 +0200234 echo "Some docker images will be kept in case they are used by other docker stacks"
235 echo "To remove them, just run 'docker image prune' in a terminal"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200236 return 0
237}
238
beierlm107d16a2020-05-15 21:47:43 -0400239#Safe unattended install of iptables-persistent
240function check_install_iptables_persistent(){
241 echo -e "\nChecking required packages: iptables-persistent"
242 if dpkg -l iptables-persistent &>/dev/null; then
243 echo -e " Not installed.\nInstalling iptables-persistent requires root privileges"
244 echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections
245 echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections
246 sudo apt-get -yq install iptables-persistent
247 fi
248}
249
garciadeblasd8bc5c32018-05-09 17:37:56 +0200250#Configure NAT rules, based on the current IP addresses of containers
251function nat(){
beierlm107d16a2020-05-15 21:47:43 -0400252 check_install_iptables_persistent
253
garciadeblasd8bc5c32018-05-09 17:37:56 +0200254 echo -e "\nConfiguring NAT rules"
255 echo -e " Required root privileges"
256 sudo $OSM_DEVOPS/installers/nat_osm
257}
258
259function FATAL(){
260 echo "FATAL error: Cannot install OSM due to \"$1\""
261 exit 1
262}
263
garciadeblasd8bc5c32018-05-09 17:37:56 +0200264function install_lxd() {
beierlm107d16a2020-05-15 21:47:43 -0400265 # Apply sysctl production values for optimal performance
266 sudo cp /usr/share/osm-devops/installers/60-lxd-production.conf /etc/sysctl.d/60-lxd-production.conf
267 sudo sysctl --system
268
269 # Install LXD snap
270 sudo apt-get remove --purge -y liblxc1 lxc-common lxcfs lxd lxd-client
271 sudo snap install lxd
272 sudo apt-get install zfsutils-linux -y
273
274 # Configure LXD
275 sudo usermod -a -G lxd `whoami`
276 cat /usr/share/osm-devops/installers/lxd-preseed.conf | sed 's/^config: {}/config:\n core.https_address: '$DEFAULT_IP':8443/' | sg lxd -c "lxd init --preseed"
277 sg lxd -c "lxd waitready"
tierno67634782020-05-18 14:17:41 +0000278 DEFAULT_INTERFACE=$(ip route list|awk '$1=="default" {print $5; exit}')
279 [ -z "$DEFAULT_INTERFACE" ] && DEFAULT_INTERFACE=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}')
garciadeblasd8bc5c32018-05-09 17:37:56 +0200280 DEFAULT_MTU=$(ip addr show $DEFAULT_INTERFACE | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
beierlm107d16a2020-05-15 21:47:43 -0400281 sg lxd -c "lxc profile device set default eth0 mtu $DEFAULT_MTU"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200282 #sudo systemctl stop lxd-bridge
283 #sudo systemctl --system daemon-reload
284 #sudo systemctl enable lxd-bridge
285 #sudo systemctl start lxd-bridge
286}
287
288function ask_user(){
289 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
290 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
291 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
292 read -e -p "$1" USER_CONFIRMATION
293 while true ; do
294 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
295 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
296 [ "${USER_CONFIRMATION,,}" == "yes" ] || [ "${USER_CONFIRMATION,,}" == "y" ] && return 0
297 [ "${USER_CONFIRMATION,,}" == "no" ] || [ "${USER_CONFIRMATION,,}" == "n" ] && return 1
298 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
299 done
300}
301
garciadeblasd8bc5c32018-05-09 17:37:56 +0200302function install_osmclient(){
303 CLIENT_RELEASE=${RELEASE#"-R "}
304 CLIENT_REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
305 CLIENT_REPOSITORY=${REPOSITORY#"-r "}
garciadeblasd8bc5c32018-05-09 17:37:56 +0200306 CLIENT_REPOSITORY_BASE=${REPOSITORY_BASE#"-u "}
307 key_location=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
308 curl $key_location | sudo apt-key add -
garciadeblas078f5982019-11-27 15:06:06 +0100309 sudo add-apt-repository -y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient IM"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200310 sudo apt-get update
garciadeblas078f5982019-11-27 15:06:06 +0100311 sudo apt-get install -y python3-pip
312 sudo -H LC_ALL=C python3 -m pip install -U pip
garciadeblasa9954892020-01-22 16:05:05 +0100313 sudo -H LC_ALL=C python3 -m pip install -U python-magic pyangbind verboselogs
garciadeblasda89ee72019-11-28 02:19:59 +0100314 sudo apt-get install -y python3-osm-im python3-osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +0200315 #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
316 #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
317 #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
318 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME=`lxc list | awk '($2=="SO-ub"){print $6}'`
319 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME=`lxc list | awk '($2=="RO"){print $6}'`
garciadeblasd8bc5c32018-05-09 17:37:56 +0200320 echo -e "\nOSM client installed"
garciadeblasc3226982018-11-27 11:32:47 +0100321 if [ -z "$INSTALL_LIGHTWEIGHT" ]; then
322 echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
323 echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
324 echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
325 else
326 echo -e "OSM client assumes that OSM host is running in localhost (127.0.0.1)."
327 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:"
328 echo " export OSM_HOSTNAME=<OSM_host>"
329 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +0200330 return 0
331}
332
lavado6ad812e2019-11-29 10:58:58 -0500333function install_prometheus_nodeexporter(){
lavadoc26d90b2019-12-06 18:11:36 -0500334 if (systemctl -q is-active node_exporter)
335 then
336 echo "Node Exporter is already running."
337 else
338 echo "Node Exporter is not active, installing..."
339 if getent passwd node_exporter > /dev/null 2>&1; then
340 echo "node_exporter user exists"
341 else
342 echo "Creating user node_exporter"
343 sudo useradd --no-create-home --shell /bin/false node_exporter
344 fi
beierlm107d16a2020-05-15 21:47:43 -0400345 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 -0500346 sudo tar -C /tmp -xf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz
347 sudo cp /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64/node_exporter /usr/local/bin
348 sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
beierlm107d16a2020-05-15 21:47:43 -0400349 sudo rm -rf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64*
350 sudo cp ${OSM_DEVOPS}/installers/docker/prometheus/node_exporter.service /etc/systemd/system/node_exporter.service
lavadoc26d90b2019-12-06 18:11:36 -0500351 sudo systemctl daemon-reload
352 sudo systemctl restart node_exporter
353 sudo systemctl enable node_exporter
354 echo "Node Exporter has been activated in this host."
355 fi
lavado6ad812e2019-11-29 10:58:58 -0500356 return 0
357}
358
lavado1e4a88c2019-12-03 16:19:59 -0500359function uninstall_prometheus_nodeexporter(){
360 sudo systemctl stop node_exporter
361 sudo systemctl disable node_exporter
362 sudo rm /etc/systemd/system/node_exporter.service
363 sudo systemctl daemon-reload
364 sudo userdel node_exporter
365 sudo rm /usr/local/bin/node_exporter
366 return 0
367}
368
garciadeblasd8bc5c32018-05-09 17:37:56 +0200369function install_docker_ce() {
370 # installs and configures Docker CE
371 echo "Installing Docker CE ..."
372 sudo apt-get -qq update
373 sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
374 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
375 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
376 sudo apt-get -qq update
377 sudo apt-get install -y docker-ce
378 echo "Adding user to group 'docker'"
379 sudo groupadd -f docker
380 sudo usermod -aG docker $USER
garciadeblasd8bc5c32018-05-09 17:37:56 +0200381 sleep 2
382 sudo service docker restart
383 echo "... restarted Docker service"
garciadeblas67ce97c2018-05-18 10:22:09 +0200384 sg docker -c "docker version" || FATAL "Docker installation failed"
385 echo "... Docker CE installation done"
386 return 0
garciadeblasd8bc5c32018-05-09 17:37:56 +0200387}
388
389function install_docker_compose() {
390 # installs and configures docker-compose
391 echo "Installing Docker Compose ..."
392 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
393 sudo chmod +x /usr/local/bin/docker-compose
394 echo "... Docker Compose installation done"
395}
396
397function install_juju() {
398 echo "Installing juju"
Adam Israel41587482019-11-06 10:45:43 -0500399 sudo snap install juju --classic
Dominik4763cfe2019-11-27 12:15:50 +0100400 [[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200401 echo "Finished installation of juju"
Mike Marchettib8420852018-09-13 13:45:06 -0400402 return 0
403}
404
405function juju_createcontroller() {
Adam Israel8232e562018-11-21 16:47:45 -0500406 if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then
Mike Marchettib8420852018-09-13 13:45:06 -0400407 # Not found created, create the controller
garciadeblas85bb41a2020-01-15 18:20:14 +0100408 sudo usermod -a -G lxd ${USER}
David Garcia7ca1ec62020-05-18 18:20:43 +0200409 sg lxd -c "juju bootstrap --bootstrap-series=xenial $OSM_VCA_CLOUDNAME $OSM_STACK_NAME"
Mike Marchettib8420852018-09-13 13:45:06 -0400410 fi
Adam Israel8232e562018-11-21 16:47:45 -0500411 [ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200412}
413
Adam Israel5ddc97f2019-09-03 18:11:12 -0400414function juju_createproxy() {
beierlm107d16a2020-05-15 21:47:43 -0400415 check_install_iptables_persistent
Adam Israel43fb44d2019-11-06 10:37:25 -0500416
David Garcia26432d42019-12-11 12:22:35 +0100417 if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
418 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 -0400419 sudo netfilter-persistent save
420 fi
421}
422
garciadeblasd8bc5c32018-05-09 17:37:56 +0200423function generate_docker_images() {
424 echo "Pulling and generating docker images"
Michael Marchettiee374142018-08-02 22:47:16 +0200425 _build_from=$COMMIT_ID
426 [ -z "$_build_from" ] && _build_from="master"
427
428 echo "OSM Docker images generated from $_build_from"
429
Mike Marchettib8420852018-09-13 13:45:06 -0400430 BUILD_ARGS+=(--build-arg REPOSITORY="$REPOSITORY")
431 BUILD_ARGS+=(--build-arg RELEASE="$RELEASE")
432 BUILD_ARGS+=(--build-arg REPOSITORY_KEY="$REPOSITORY_KEY")
433 BUILD_ARGS+=(--build-arg REPOSITORY_BASE="$REPOSITORY_BASE")
lavado60216242018-10-10 23:44:28 +0200434
garciadeblas0e596bc2018-05-28 16:04:42 +0200435 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q KAFKA ; then
436 sg docker -c "docker pull wurstmeister/zookeeper" || FATAL "cannot get zookeeper docker image"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300437 sg docker -c "docker pull wurstmeister/kafka:${KAFKA_TAG}" || FATAL "cannot get kafka docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200438 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400439
garciadeblas0e596bc2018-05-28 16:04:42 +0200440 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MONGO ; then
441 sg docker -c "docker pull mongo" || FATAL "cannot get mongo docker image"
442 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400443
lavado60216242018-10-10 23:44:28 +0200444 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
445 sg docker -c "docker pull prom/prometheus:${PROMETHEUS_TAG}" || FATAL "cannot get prometheus docker image"
446 fi
447
garciadeblasfc5bb142019-12-10 10:49:12 +0100448 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS-CADVISOR ; then
449 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
450 fi
451
lavado6ad812e2019-11-29 10:58:58 -0500452 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q GRAFANA ; then
453 sg docker -c "docker pull grafana/grafana:${GRAFANA_TAG}" || FATAL "cannot get grafana docker image"
garciadeblasfc5bb142019-12-10 10:49:12 +0100454 fi
lavado6ad812e2019-11-29 10:58:58 -0500455
garciadeblas4a83e6e2018-12-04 14:55:09 +0100456 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI || echo $TO_REBUILD | grep -q KEYSTONE-DB ; then
lavado9a8df7c2018-10-24 09:35:34 -0500457 sg docker -c "docker pull mariadb:${KEYSTONEDB_TAG}" || FATAL "cannot get keystone-db docker image"
458 fi
459
garciadeblas4a83e6e2018-12-04 14:55:09 +0100460 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
461 sg docker -c "docker pull mysql:5" || FATAL "cannot get mysql docker image"
462 fi
463
Mike Marchettida8a9c42018-10-01 15:25:15 -0400464 if [ -n "$PULL_IMAGES" ]; then
465 sg docker -c "docker pull ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}" || FATAL "cannot pull MON docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400466 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MON ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200467 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/MON
468 git -C ${LWTEMPDIR}/MON checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100469 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 -0500470 fi
471
472 if [ -n "$PULL_IMAGES" ]; then
473 sg docker -c "docker pull ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}" || FATAL "cannot pull POL docker image"
garciadeblas4a83e6e2018-12-04 14:55:09 +0100474 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q POL ; then
lavado9a8df7c2018-10-24 09:35:34 -0500475 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/POL
476 git -C ${LWTEMPDIR}/POL checkout ${COMMIT_ID}
garciadeblas4a83e6e2018-12-04 14:55:09 +0100477 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 +0200478 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400479
beierlm107d16a2020-05-15 21:47:43 -0400480 if [ -n "$PULL_IMAGES" -a -n "$INSTALL_PLA" ]; then
481 sg docker -c "docker pull ${DOCKER_USER}/pla:${OSM_DOCKER_TAG}" || FATAL "cannot pull PLA docker image"
482 elif [ -z "$TO_REBUILD" -a -n "$INSTALL_PLA" ] || echo $TO_REBUILD | grep -q PLA ; then
483 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/PLA
484 git -C ${LWTEMPDIR}/PLA checkout ${COMMIT_ID}
485 sg docker -c "docker build ${LWTEMPDIR}/PLA -f ${LWTEMPDIR}/PLA/docker/Dockerfile -t ${DOCKER_USER}/pla --no-cache" || FATAL "cannot build PLA docker image"
486 fi
487
Mike Marchettida8a9c42018-10-01 15:25:15 -0400488 if [ -n "$PULL_IMAGES" ]; then
489 sg docker -c "docker pull ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}" || FATAL "cannot pull NBI docker image"
lavado9a8df7c2018-10-24 09:35:34 -0500490 sg docker -c "docker pull ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}" || FATAL "cannot pull KEYSTONE docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400491 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200492 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NBI
493 git -C ${LWTEMPDIR}/NBI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100494 sg docker -c "docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t ${DOCKER_USER}/nbi --no-cache" || FATAL "cannot build NBI docker image"
495 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 +0200496 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400497
498 if [ -n "$PULL_IMAGES" ]; then
499 sg docker -c "docker pull ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}" || FATAL "cannot pull RO docker image"
500 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200501 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/RO
502 git -C ${LWTEMPDIR}/RO checkout ${COMMIT_ID}
tierno5cc8ac32019-11-25 10:33:25 +0000503 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 +0200504 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400505
506 if [ -n "$PULL_IMAGES" ]; then
507 sg docker -c "docker pull ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}" || FATAL "cannot pull LCM RO docker image"
508 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LCM ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200509 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LCM
510 git -C ${LWTEMPDIR}/LCM checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100511 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 +0200512 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400513
514 if [ -n "$PULL_IMAGES" ]; then
515 sg docker -c "docker pull ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}" || FATAL "cannot pull light-ui docker image"
516 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-UI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200517 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LW-UI
518 git -C ${LWTEMPDIR}/LW-UI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100519 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"
garciadeblas0e596bc2018-05-28 16:04:42 +0200520 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400521
522 if [ -n "$PULL_IMAGES" ]; then
523 sg docker -c "docker pull ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}" || FATAL "cannot pull osmclient docker image"
524 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-osmclient; then
garciadeblas0d45bc82018-11-19 14:25:13 +0100525 sg docker -c "docker build -t ${DOCKER_USER}/osmclient ${BUILD_ARGS[@]} -f $OSM_DEVOPS/docker/osmclient ."
Mike Marchettib8420852018-09-13 13:45:06 -0400526 fi
lavado6ad812e2019-11-29 10:58:58 -0500527
528 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
529 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
530 fi
531
garciadeblasd8bc5c32018-05-09 17:37:56 +0200532 echo "Finished generation of docker images"
533}
534
garciadeblas5b857d32018-05-24 18:37:58 +0200535function cmp_overwrite() {
536 file1="$1"
537 file2="$2"
538 if ! $(cmp "${file1}" "${file2}" >/dev/null 2>&1); then
539 if [ -f "${file2}" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400540 ask_user "The file ${file2} already exists. Overwrite (y/N)? " n && cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200541 else
Mike Marchettib8420852018-09-13 13:45:06 -0400542 cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200543 fi
544 fi
545}
546
garciadeblasd8bc5c32018-05-09 17:37:56 +0200547function generate_docker_env_files() {
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200548 echo "Doing a backup of existing env files"
549 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
550 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
551 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
552 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lwui.env{,~}
553 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
554 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
555 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
556 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
557 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
558
garciadeblasd8bc5c32018-05-09 17:37:56 +0200559 echo "Generating docker env files"
vijaynag8339ed22019-07-25 17:10:58 +0530560 if [ -n "$KUBERNETES" ]; then
561 #Kubernetes resources
562 $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
563 else
564 # Docker-compose
565 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
beierlm107d16a2020-05-15 21:47:43 -0400566 if [ -n "$INSTALL_PLA" ]; then
567 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_pla/docker-compose.yaml $OSM_DOCKER_WORK_DIR/osm_pla/docker-compose.yaml
568 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200569
beierlm107d16a2020-05-15 21:47:43 -0400570 # Prometheus files
571 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/prometheus
572 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/prometheus/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus/prometheus.yml
lavado6ad812e2019-11-29 10:58:58 -0500573
beierlm107d16a2020-05-15 21:47:43 -0400574 # Grafana files
575 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/grafana
576 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/dashboards-osm.yml $OSM_DOCKER_WORK_DIR/grafana/dashboards-osm.yml
577 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/datasource-prometheus.yml $OSM_DOCKER_WORK_DIR/grafana/datasource-prometheus.yml
578 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-sample-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-sample-dashboard.json
579 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-system-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-system-dashboard.json
580
581 # Prometheus Exporters files
582 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/prometheus_exporters
583 $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 +0530584 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200585
Benjamin Diazba2cca92018-11-08 21:07:15 -0300586 # LCM
587 if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
588 echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
589 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400590
Benjamin Diazba2cca92018-11-08 21:07:15 -0300591 if ! grep -Fq "OSMLCM_VCA_HOST" $OSM_DOCKER_WORK_DIR/lcm.env; then
592 echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
593 else
594 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_HOST.*|OSMLCM_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/lcm.env
595 fi
596
597 if ! grep -Fq "OSMLCM_VCA_SECRET" $OSM_DOCKER_WORK_DIR/lcm.env; then
598 echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
599 else
600 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_SECRET.*|OSMLCM_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/lcm.env
601 fi
602
garciadeblasaa3ddf42019-04-04 19:04:32 +0200603 if ! grep -Fq "OSMLCM_VCA_PUBKEY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblasec537902019-12-10 14:13:40 +0100604 echo "OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasaa3ddf42019-04-04 19:04:32 +0200605 else
garciadeblasec537902019-12-10 14:13:40 +0100606 $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 +0200607 fi
608
Adam Israelbe7676a2019-10-02 16:10:53 -0400609 if ! grep -Fq "OSMLCM_VCA_CACERT" $OSM_DOCKER_WORK_DIR/lcm.env; then
610 echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
611 else
612 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CACERT.*|OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/lcm.env
613 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -0300614
Adam Israel5ddc97f2019-09-03 18:11:12 -0400615 if ! grep -Fq "OSMLCM_VCA_APIPROXY" $OSM_DOCKER_WORK_DIR/lcm.env; then
616 echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
617 else
618 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_APIPROXY.*|OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
619 fi
620
garciadeblasa2e41842019-12-18 11:05:24 +0100621 if ! grep -Fq "OSMLCM_VCA_ENABLEOSUPGRADE" $OSM_DOCKER_WORK_DIR/lcm.env; then
622 echo "# OSMLCM_VCA_ENABLEOSUPGRADE=false" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
623 fi
624
625 if ! grep -Fq "OSMLCM_VCA_APTMIRROR" $OSM_DOCKER_WORK_DIR/lcm.env; then
626 echo "# OSMLCM_VCA_APTMIRROR=http://archive.ubuntu.com/ubuntu/" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
627 fi
628
beierlm107d16a2020-05-15 21:47:43 -0400629 if ! grep -Fq "OSMLCM_VCA_CLOUD" $OSM_DOCKER_WORK_DIR/lcm.env; then
630 echo "OSMLCM_VCA_CLOUD=${OSM_VCA_CLOUDNAME}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
631 else
632 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CLOUD.*|OSMLCM_VCA_CLOUD=${OSM_VCA_CLOUDNAME}|g" $OSM_DOCKER_WORK_DIR/lcm.env
633 fi
634
Benjamin Diazba2cca92018-11-08 21:07:15 -0300635 # RO
636 MYSQL_ROOT_PASSWORD=$(generate_secret)
Mike Marchettib8420852018-09-13 13:45:06 -0400637 if [ ! -f $OSM_DOCKER_WORK_DIR/ro-db.env ]; then
638 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro-db.env
garciadeblas5b857d32018-05-24 18:37:58 +0200639 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400640 if [ ! -f $OSM_DOCKER_WORK_DIR/ro.env ]; then
641 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro.env
garciadeblas5b857d32018-05-24 18:37:58 +0200642 fi
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100643
Benjamin Diazba2cca92018-11-08 21:07:15 -0300644 # Keystone
Benjamin Diazba2cca92018-11-08 21:07:15 -0300645 KEYSTONE_DB_PASSWORD=$(generate_secret)
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100646 SERVICE_PASSWORD=$(generate_secret)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100647 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone-db.env ]; then
648 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone-db.env
649 fi
650 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone.env ]; then
651 echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100652 echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100653 echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100654 fi
655
Benjamin Diazba2cca92018-11-08 21:07:15 -0300656 # NBI
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100657 if [ ! -f $OSM_DOCKER_WORK_DIR/nbi.env ]; then
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100658 echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/nbi.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300659 echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/nbi.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100660 fi
661
Benjamin Diazba2cca92018-11-08 21:07:15 -0300662 # MON
663 if [ ! -f $OSM_DOCKER_WORK_DIR/mon.env ]; then
664 echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diaz9261c662019-02-25 17:18:51 -0300665 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 -0300666 fi
667
668 if ! grep -Fq "OS_NOTIFIER_URI" $OSM_DOCKER_WORK_DIR/mon.env; then
669 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
670 else
671 $WORKDIR_SUDO sed -i "s|OS_NOTIFIER_URI.*|OS_NOTIFIER_URI=http://$DEFAULT_IP:8662|g" $OSM_DOCKER_WORK_DIR/mon.env
672 fi
673
674 if ! grep -Fq "OSMMON_VCA_HOST" $OSM_DOCKER_WORK_DIR/mon.env; then
675 echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
676 else
677 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_HOST.*|OSMMON_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/mon.env
678 fi
679
680 if ! grep -Fq "OSMMON_VCA_SECRET" $OSM_DOCKER_WORK_DIR/mon.env; then
681 echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
682 else
683 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_SECRET.*|OSMMON_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/mon.env
684 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400685
Adam Israel6d8adf32019-12-05 15:46:54 -0500686 if ! grep -Fq "OSMMON_VCA_CACERT" $OSM_DOCKER_WORK_DIR/mon.env; then
687 echo "OSMMON_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
688 else
689 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_CACERT.*|OSMMON_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/mon.env
690 fi
691
692
Benjamin Diaz04560882019-02-26 17:25:07 -0300693 # POL
694 if [ ! -f $OSM_DOCKER_WORK_DIR/pol.env ]; then
695 echo "OSMPOL_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/pol" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/pol.env
696 fi
697
Benjamin Diaz4088a9b2019-05-21 15:11:49 -0300698 # LW-UI
699 if [ ! -f $OSM_DOCKER_WORK_DIR/lwui.env ]; then
700 echo "OSMUI_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/lwui" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lwui.env
701 fi
702
garciadeblasd8bc5c32018-05-09 17:37:56 +0200703 echo "Finished generation of docker env files"
704}
705
Mike Marchettib8420852018-09-13 13:45:06 -0400706function generate_osmclient_script () {
Mike Marchetti46d6efe2018-10-23 16:20:16 -0400707 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 -0400708 $WORKDIR_SUDO chmod +x "$OSM_DOCKER_WORK_DIR/osm"
709 echo "osmclient sidecar container can be found at: $OSM_DOCKER_WORK_DIR/osm"
710}
711
vijaynag8339ed22019-07-25 17:10:58 +0530712#installs kubernetes packages
713function install_kube() {
714 sudo apt-get update && sudo apt-get install -y apt-transport-https
715 curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
716 sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
717 sudo apt-get update
718 echo "Installing Kubernetes Packages ..."
719 sudo apt-get install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
720}
721
722#initializes kubernetes control plane
723function init_kubeadm() {
724 sudo swapoff -a
725 sudo kubeadm init --config $1
726 sleep 5
727}
728
729function kube_config_dir() {
730 [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes"
731 mkdir -p $HOME/.kube
732 sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
733 sudo chown $(id -u):$(id -g) $HOME/.kube/config
734}
735
736#deploys flannel as daemonsets
737function deploy_cni_provider() {
738 CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")"
739 trap 'rm -rf "${CNI_DIR}"' EXIT
740 wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR
741 kubectl apply -f $CNI_DIR
742 [ $? -ne 0 ] && FATAL "Cannot Install Flannel"
743}
744
745#creates secrets from env files which will be used by containers
746function kube_secrets(){
747 kubectl create ns $OSM_STACK_NAME
748 kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env
749 kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env
750 kubectl create secret generic nbi-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/nbi.env
751 kubectl create secret generic ro-db-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro-db.env
752 kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env
753 kubectl create secret generic keystone-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/keystone.env
754 kubectl create secret generic lwui-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lwui.env
755 kubectl create secret generic pol-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/pol.env
756}
757
758#deploys osm pods and services
759function deploy_osm_services() {
760 K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}')
761 kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
762 sleep 5
763 kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR
764}
765
beierlm107d16a2020-05-15 21:47:43 -0400766function deploy_osm_pla_service() {
767 # corresponding to parse_yaml
768 [ ! $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
769 # corresponding to namespace_vol
770 $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_DOCKER_WORK_DIR/osm_pla/pla.yaml
771 # corresponding to deploy_osm_services
772 kubectl apply -n $OSM_STACK_NAME -f $OSM_DOCKER_WORK_DIR/osm_pla
773}
774
romeromonserbeb92bb2020-03-06 10:23:29 +0100775#Install helm and tiller
776function install_helm() {
777 helm > /dev/null 2>&1
778 if [ $? != 0 ] ; then
779 # Helm is not installed. Install helm
780 curl https://get.helm.sh/helm-v2.15.2-linux-amd64.tar.gz --output helm-v2.15.2.tar.gz
781 tar -zxvf helm-v2.15.2.tar.gz
782 sudo mv linux-amd64/helm /usr/local/bin/helm
783 rm -r linux-amd64
784 rm helm-v2.15.2.tar.gz
785 fi
786
787 # Checking if tiller has being configured
788 kubectl --namespace kube-system get serviceaccount tiller > /dev/null 2>&1
789 if [ $? == 1 ] ; then
790 # tiller account for kubernetes
791 kubectl --namespace kube-system create serviceaccount tiller
792 kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
793 # HELM initialization
794 helm init --service-account tiller
795
796 # Wait for Tiller to be up and running. If timeout expires, continue installing
797 tiller_timeout=120; counter=0
798 while (( counter < tiller_timeout ))
799 do
800 tiller_status=`kubectl -n kube-system get deployment.apps/tiller-deploy --no-headers | awk '{print $2'}`
801 ( [ ! -z "$tiller_status" ] && [ $tiller_status == "1/1" ] ) && break
802 num=$((counter + 2))
803 sleep 2
804 done
805 fi
806}
807
vijaynag8339ed22019-07-25 17:10:58 +0530808function parse_yaml() {
809 osm_services="nbi lcm ro pol mon light-ui keystone"
810 TAG=$1
811 for osm in $osm_services; do
812 $WORKDIR_SUDO sed -i "s/opensourcemano\/$osm:.*/opensourcemano\/$osm:$TAG/g" $OSM_K8S_WORK_DIR/$osm.yaml
813 done
814}
815
816function namespace_vol() {
817 osm_services="nbi lcm ro pol mon kafka mongo mysql"
818 for osm in $osm_services; do
819 $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml
820 done
821}
822
garciadeblasa3e26612018-05-30 17:58:55 +0200823function init_docker_swarm() {
garciadeblasd8bc5c32018-05-09 17:37:56 +0200824 if [ "${DEFAULT_MTU}" != "1500" ]; then
825 DOCKER_NETS=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
826 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";}'`
827 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"
828 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200829 sg docker -c "docker swarm init --advertise-addr ${DEFAULT_IP}"
garciadeblasa3e26612018-05-30 17:58:55 +0200830 return 0
831}
832
Mike Marchettib8420852018-09-13 13:45:06 -0400833function create_docker_network() {
834 echo "creating network"
835 sg docker -c "docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} net${OSM_STACK_NAME}"
836 echo "creating network DONE"
837}
838
garciadeblasa3e26612018-05-30 17:58:55 +0200839function deploy_lightweight() {
Mike Marchettib8420852018-09-13 13:45:06 -0400840
garciadeblasa3e26612018-05-30 17:58:55 +0200841 echo "Deploying lightweight build"
Mike Marchettib8420852018-09-13 13:45:06 -0400842 OSM_NBI_PORT=9999
843 OSM_RO_PORT=9090
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100844 OSM_KEYSTONE_PORT=5000
Mike Marchettib8420852018-09-13 13:45:06 -0400845 OSM_UI_PORT=80
lavadoafa54c72018-10-05 09:28:28 -0500846 OSM_MON_PORT=8662
lavado60216242018-10-10 23:44:28 +0200847 OSM_PROM_PORT=9090
garciadeblasa7b27dc2019-12-04 15:06:55 +0100848 OSM_PROM_CADVISOR_PORT=8080
lavado60216242018-10-10 23:44:28 +0200849 OSM_PROM_HOSTPORT=9091
lavado6ad812e2019-11-29 10:58:58 -0500850 OSM_GRAFANA_PORT=3000
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100851 [ -n "$INSTALL_ELK" ] && OSM_ELK_PORT=5601
lavado6ad812e2019-11-29 10:58:58 -0500852 #[ -n "$INSTALL_PERFMON" ] && OSM_PM_PORT=3000
lavado60216242018-10-10 23:44:28 +0200853
Mike Marchettib8420852018-09-13 13:45:06 -0400854 if [ -n "$NO_HOST_PORTS" ]; then
855 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT)
856 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100857 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400858 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -0500859 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +0200860 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +0100861 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -0500862 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT)
863 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100864 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400865 else
866 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT:$OSM_NBI_PORT)
867 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT:$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100868 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT:$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400869 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT:$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -0500870 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT:$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +0200871 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_HOSTPORT:$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +0100872 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT:$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -0500873 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT:$OSM_GRAFANA_PORT)
874 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT:$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100875 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT:$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400876 fi
877 echo "export ${OSM_PORTS[@]}" | $WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/osm_ports.sh
878 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 -0400879 echo "export TAG=${OSM_DOCKER_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Mike Marchettida8a9c42018-10-01 15:25:15 -0400880 echo "export DOCKER_USER=${DOCKER_USER}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -0300881 echo "export KAFKA_TAG=${KAFKA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado60216242018-10-10 23:44:28 +0200882 echo "export PROMETHEUS_TAG=${PROMETHEUS_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado9a8df7c2018-10-24 09:35:34 -0500883 echo "export KEYSTONEDB_TAG=${KEYSTONEDB_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado6ad812e2019-11-29 10:58:58 -0500884 echo "export PROMETHEUS_CADVISOR_TAG=${PROMETHEUS_CADVISOR_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
885 echo "export GRAFANA_TAG=${GRAFANA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -0300886
Mike Marchettib8420852018-09-13 13:45:06 -0400887 pushd $OSM_DOCKER_WORK_DIR
beierlm107d16a2020-05-15 21:47:43 -0400888 if [ -n "$INSTALL_PLA" ]; then
889 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"
890 else
891 sg docker -c ". ./osm_ports.sh; docker stack deploy -c $OSM_DOCKER_WORK_DIR/docker-compose.yaml $OSM_STACK_NAME"
892 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400893 popd
894
garciadeblasd8bc5c32018-05-09 17:37:56 +0200895 echo "Finished deployment of lightweight build"
896}
897
garciadeblas6c66abf2018-05-16 14:46:19 +0200898function deploy_elk() {
garciadeblase2aebfe2018-07-06 14:11:20 +0200899 echo "Pulling docker images for ELK"
lavado53eb8f52018-11-16 12:58:23 -0500900 sg docker -c "docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:${ELASTIC_VERSION}" || FATAL "cannot get elasticsearch docker image"
901 sg docker -c "docker pull docker.elastic.co/beats/metricbeat:${ELASTIC_VERSION}" || FATAL "cannot get metricbeat docker image"
902 sg docker -c "docker pull docker.elastic.co/beats/filebeat:${ELASTIC_VERSION}" || FATAL "cannot get filebeat docker image"
903 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 -0500904 sg docker -c "docker pull bobrik/curator:${ELASTIC_CURATOR_VERSION}" || FATAL "cannot get curator docker image"
garciadeblase2aebfe2018-07-06 14:11:20 +0200905 echo "Finished pulling elk docker images"
Mike Marchettib8420852018-09-13 13:45:06 -0400906 $WORKDIR_SUDO mkdir -p "$OSM_DOCKER_WORK_DIR/osm_elk"
907 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_elk/* $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas5b857d32018-05-24 18:37:58 +0200908 remove_stack osm_elk
garciadeblas6c66abf2018-05-16 14:46:19 +0200909 echo "Deploying ELK stack"
Mike Marchettib8420852018-09-13 13:45:06 -0400910 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 +0200911 echo "Waiting for ELK stack to be up and running"
912 time=0
garciadeblase2aebfe2018-07-06 14:11:20 +0200913 step=5
914 timelength=40
garciadeblas6c66abf2018-05-16 14:46:19 +0200915 elk_is_up=1
916 while [ $time -le $timelength ]; do
garciadeblase2aebfe2018-07-06 14:11:20 +0200917 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 +0200918 elk_is_up=0
919 break
920 fi
921 sleep $step
922 time=$((time+step))
923 done
924 if [ $elk_is_up -eq 0 ]; then
925 echo "ELK is up and running. Trying to create index pattern..."
926 #Create index pattern
927 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -0500928 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
929 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200930 #Make it the default index
garciadeblase2aebfe2018-07-06 14:11:20 +0200931 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +0200932 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -0500933 -d"{\"value\":\"filebeat-*\"}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200934 else
935 echo "Cannot connect to Kibana to create index pattern."
936 echo "Once Kibana is running, you can use the following instructions to create index pattern:"
937 echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -0500938 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
939 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}"'
garciadeblas6c66abf2018-05-16 14:46:19 +0200940 echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +0200941 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -0500942 -d"{\"value\":\"filebeat-*\"}"'
garciadeblas6c66abf2018-05-16 14:46:19 +0200943 fi
944 echo "Finished deployment of ELK stack"
945 return 0
946}
947
garciadeblasd8bc5c32018-05-09 17:37:56 +0200948function install_lightweight() {
garciadeblas0d45bc82018-11-19 14:25:13 +0100949 [ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
vijaynag8339ed22019-07-25 17:10:58 +0530950 [ -n "$KUBERNETES" ] && OSM_K8S_WORK_DIR="$OSM_DOCKER_WORK_DIR/osm_pods" && OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
Mike Marchettib8420852018-09-13 13:45:06 -0400951 [ ! -d "$OSM_DOCKER_WORK_DIR" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR
beierlm107d16a2020-05-15 21:47:43 -0400952 [ ! -d "$OSM_DOCKER_WORK_DIR/osm_pla" -a -n "$INSTALL_PLA" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/osm_pla
vijaynag8339ed22019-07-25 17:10:58 +0530953 [ -n "$KUBERNETES" ] && $WORKDIR_SUDO cp -b $OSM_DEVOPS/installers/docker/cluster-config.yaml $OSM_DOCKER_WORK_DIR/cluster-config.yaml
Mike Marchettib8420852018-09-13 13:45:06 -0400954
garciadeblas183e5802018-12-13 18:20:54 +0100955 track checkingroot
garciadeblasd13a8aa2018-05-18 15:24:51 +0200956 [ "$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 +0100957 track noroot
vijaynag8339ed22019-07-25 17:10:58 +0530958
959 if [ -n "$KUBERNETES" ]; then
960 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
961 1. Install and configure LXD
962 2. Install juju
963 3. Install docker CE
964 4. Disable swap space
965 5. Install and initialize Kubernetes
966 as pre-requirements.
967 Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
968
969 else
970 [ -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
971 fi
garciadeblasfae5e972018-06-12 18:27:11 +0200972 track proceed
vijaynag8339ed22019-07-25 17:10:58 +0530973
garciadeblasd8bc5c32018-05-09 17:37:56 +0200974 echo "Installing lightweight build of OSM"
975 LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
976 trap 'rm -rf "${LWTEMPDIR}"' EXIT
tierno67634782020-05-18 14:17:41 +0000977 DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5; exit}')
978 [ -z "$DEFAULT_IF" ] && DEFAULT_IF=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}')
garciadeblas8cd60772018-06-02 08:38:17 +0200979 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
tierno67634782020-05-18 14:17:41 +0000980 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF} |awk '{split($4,a,"/"); print a[1]}'`
garciadeblas8cd60772018-06-02 08:38:17 +0200981 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200982 DEFAULT_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
Mike Marchettib8420852018-09-13 13:45:06 -0400983
984 # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to
beierlm107d16a2020-05-15 21:47:43 -0400985 if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ] && [ -z "$LXD_CLOUD_FILE" ]; then
986 need_packages_lw="snapd"
garciadeblasd41f5482018-05-25 10:25:06 +0200987 echo -e "Checking required packages: $need_packages_lw"
988 dpkg -l $need_packages_lw &>/dev/null \
989 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
990 || sudo apt-get update \
991 || FATAL "failed to run apt-get update"
992 dpkg -l $need_packages_lw &>/dev/null \
993 || ! echo -e "Installing $need_packages_lw requires root privileges." \
994 || sudo apt-get install -y $need_packages_lw \
995 || FATAL "failed to install $need_packages_lw"
beierlm107d16a2020-05-15 21:47:43 -0400996 install_lxd
garciadeblasd41f5482018-05-25 10:25:06 +0200997 fi
beierlm107d16a2020-05-15 21:47:43 -0400998
garciadeblasfae5e972018-06-12 18:27:11 +0200999 track prereqok
Mike Marchettib8420852018-09-13 13:45:06 -04001000
vijaynag8339ed22019-07-25 17:10:58 +05301001 [ -z "$INSTALL_NOJUJU" ] && install_juju
garciadeblas183e5802018-12-13 18:20:54 +01001002 track juju_install
vijaynag8339ed22019-07-25 17:10:58 +05301003
lavadoe07b1642018-10-25 10:58:34 -05001004 if [ -z "$OSM_VCA_HOST" ]; then
beierlm107d16a2020-05-15 21:47:43 -04001005 if [ -z "$CONTROLLER_NAME" ]; then
1006 if [ -n "$LXD_CLOUD_FILE" ]; then
1007 [ -z "$LXD_CRED_FILE" ] && FATAL "The installer needs the LXD credential yaml if the LXD is external"
1008 OSM_VCA_CLOUDNAME="lxd-cloud"
1009 juju add-cloud $OSM_VCA_CLOUDNAME $LXD_CLOUD_FILE --force || juju update-cloud $OSM_VCA_CLOUDNAME --client -f $LXD_CLOUD_FILE
1010 juju add-credential $OSM_VCA_CLOUDNAME -f $LXD_CRED_FILE || juju update-credential $OSM_VCA_CLOUDNAME lxd-cloud-creds -f $LXD_CRED_FILE
1011 fi
1012 juju_createcontroller
1013 else
1014 OSM_VCA_CLOUDNAME="lxd-cloud"
1015 if [ -n "$LXD_CLOUD_FILE" ]; then
1016 [ -z "$LXD_CRED_FILE" ] && FATAL "The installer needs the LXD credential yaml if the LXD is external"
1017 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
1018 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
1019 else
1020 mkdir -p ~/.osm
1021 cat << EOF > ~/.osm/lxd-cloud.yaml
1022clouds:
1023 lxd-cloud:
1024 type: lxd
1025 auth-types: [certificate]
1026 endpoint: "https://$DEFAULT_IP:8443"
1027 config:
1028 ssl-hostname-verification: false
1029EOF
1030 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"
1031 local server_cert=`cat /var/snap/lxd/common/lxd/server.crt | sed 's/^/ /'`
1032 local client_cert=`cat ~/.osm/client.crt | sed 's/^/ /'`
1033 local client_key=`cat ~/.osm/client.key | sed 's/^/ /'`
1034 cat << EOF > ~/.osm/lxd-credentials.yaml
1035credentials:
1036 lxd-cloud:
1037 lxd-cloud:
1038 auth-type: certificate
1039 server-cert: |
1040$server_cert
1041 client-cert: |
1042$client_cert
1043 client-key: |
1044$client_key
1045EOF
1046 lxc config trust add local: ~/.osm/client.crt
1047 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
1048 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
1049 fi
1050 fi
1051 [ -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}'`
1052 [ -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 -05001053 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
Mike Marchettib8420852018-09-13 13:45:06 -04001054 fi
garciadeblas183e5802018-12-13 18:20:54 +01001055 track juju_controller
vijaynag8339ed22019-07-25 17:10:58 +05301056
lavadoe07b1642018-10-25 10:58:34 -05001057 if [ -z "$OSM_VCA_SECRET" ]; then
beierlm107d16a2020-05-15 21:47:43 -04001058 [ -z "$CONTROLLER_NAME" ] && OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME)
1059 [ -n "$CONTROLLER_NAME" ] && OSM_VCA_SECRET=$(parse_juju_password $CONTROLLER_NAME)
lavadoe07b1642018-10-25 10:58:34 -05001060 [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
Mike Marchettib8420852018-09-13 13:45:06 -04001061 fi
garciadeblasaa3ddf42019-04-04 19:04:32 +02001062 if [ -z "$OSM_VCA_PUBKEY" ]; then
1063 OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
1064 [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
1065 fi
garciadeblasfc5bb142019-12-10 10:49:12 +01001066 if [ -z "$OSM_VCA_CACERT" ]; then
beierlm107d16a2020-05-15 21:47:43 -04001067 [ -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)
1068 [ -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 +01001069 [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
1070 fi
Adam Israel5ddc97f2019-09-03 18:11:12 -04001071 if [ -z "$OSM_VCA_APIPROXY" ]; then
1072 OSM_VCA_APIPROXY=$DEFAULT_IP
1073 [ -z "$OSM_VCA_APIPROXY" ] && FATAL "Cannot obtain juju api proxy"
1074 fi
1075 juju_createproxy
garciadeblasfc5bb142019-12-10 10:49:12 +01001076 track juju
Adam Israel5ddc97f2019-09-03 18:11:12 -04001077
Benjamin Diazba2cca92018-11-08 21:07:15 -03001078 if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
1079 OSM_DATABASE_COMMONKEY=$(generate_secret)
1080 [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret"
1081 fi
vijaynag8339ed22019-07-25 17:10:58 +05301082
garciadeblasa3e26612018-05-30 17:58:55 +02001083 [ -n "$INSTALL_NODOCKER" ] || install_docker_ce
garciadeblas6c66abf2018-05-16 14:46:19 +02001084 track docker_ce
vijaynag8339ed22019-07-25 17:10:58 +05301085
1086 #Installs Kubernetes and deploys osm services
1087 if [ -n "$KUBERNETES" ]; then
1088 install_kube
1089 track install_k8s
1090 init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
1091 kube_config_dir
1092 track init_k8s
1093 else
1094 #install_docker_compose
1095 [ -n "$INSTALL_NODOCKER" ] || init_docker_swarm
1096 track docker_swarm
1097 fi
1098
Mike Marchettib8420852018-09-13 13:45:06 -04001099 [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
garciadeblas6c66abf2018-05-16 14:46:19 +02001100 track docker_build
vijaynag8339ed22019-07-25 17:10:58 +05301101
garciadeblasd8bc5c32018-05-09 17:37:56 +02001102 generate_docker_env_files
Mike Marchettib8420852018-09-13 13:45:06 -04001103
vijaynag8339ed22019-07-25 17:10:58 +05301104 if [ -n "$KUBERNETES" ]; then
beierlm107d16a2020-05-15 21:47:43 -04001105 if [ -n "$INSTALL_K8S_MONITOR" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +01001106 # uninstall OSM MONITORING
1107 uninstall_k8s_monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +01001108 track uninstall_k8s_monitoring
romeromonsere366b1a2019-11-19 19:49:26 +01001109 fi
vijaynag8339ed22019-07-25 17:10:58 +05301110 #remove old namespace
1111 remove_k8s_namespace $OSM_STACK_NAME
1112 deploy_cni_provider
1113 kube_secrets
garciadeblasa7e128a2019-12-18 11:10:45 +01001114 [ ! $OSM_DOCKER_TAG == "7" ] && parse_yaml $OSM_DOCKER_TAG
vijaynag8339ed22019-07-25 17:10:58 +05301115 namespace_vol
1116 deploy_osm_services
beierlm107d16a2020-05-15 21:47:43 -04001117 if [ -n "$INSTALL_PLA"]; then
1118 # optional PLA install
1119 deploy_osm_pla_service
1120 fi
vijaynag8339ed22019-07-25 17:10:58 +05301121 track deploy_osm_services_k8s
beierlm107d16a2020-05-15 21:47:43 -04001122 if [ -n "$INSTALL_K8S_MONITOR" ]; then
garciadeblasfc5bb142019-12-10 10:49:12 +01001123 # install OSM MONITORING
1124 install_k8s_monitoring
1125 track install_k8s_monitoring
1126 fi
vijaynag8339ed22019-07-25 17:10:58 +05301127 else
1128 # remove old stack
1129 remove_stack $OSM_STACK_NAME
1130 create_docker_network
1131 deploy_lightweight
1132 generate_osmclient_script
1133 track docker_deploy
lavado6ad812e2019-11-29 10:58:58 -05001134 install_prometheus_nodeexporter
garciadeblasfc5bb142019-12-10 10:49:12 +01001135 track nodeexporter
vijaynag8339ed22019-07-25 17:10:58 +05301136 [ -n "$INSTALL_VIMEMU" ] && install_vimemu && track vimemu
1137 [ -n "$INSTALL_ELK" ] && deploy_elk && track elk
vijaynag8339ed22019-07-25 17:10:58 +05301138 fi
1139
Mike Marchettib8420852018-09-13 13:45:06 -04001140 [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
garciadeblas6c66abf2018-05-16 14:46:19 +02001141 track osmclient
vijaynag8339ed22019-07-25 17:10:58 +05301142
garciadeblas44c02192019-12-09 01:36:57 +01001143 wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001144 track end
garciadeblasd8bc5c32018-05-09 17:37:56 +02001145 return 0
1146}
1147
1148function install_vimemu() {
peusterm76353e42018-05-08 13:56:05 +02001149 echo "\nInstalling vim-emu"
1150 EMUTEMPDIR="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX")"
1151 trap 'rm -rf "${EMUTEMPDIR}"' EXIT
beierlm107d16a2020-05-15 21:47:43 -04001152 # install prerequisites (OVS is a must for the emulator to work)
1153 sudo apt-get install openvswitch-switch
garciadeblasd8bc5c32018-05-09 17:37:56 +02001154 # clone vim-emu repository (attention: branch is currently master only)
1155 echo "Cloning vim-emu repository ..."
peusterm76353e42018-05-08 13:56:05 +02001156 git clone https://osm.etsi.org/gerrit/osm/vim-emu.git $EMUTEMPDIR
garciadeblasd8bc5c32018-05-09 17:37:56 +02001157 # build vim-emu docker
1158 echo "Building vim-emu Docker container..."
Mike Marchettib8420852018-09-13 13:45:06 -04001159
1160 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 +02001161 # start vim-emu container as daemon
1162 echo "Starting vim-emu Docker container 'vim-emu' ..."
peusterm76353e42018-05-08 13:56:05 +02001163 if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
1164 # in lightweight mode, the emulator needs to be attached to netOSM
Mike Marchettib8420852018-09-13 13:45:06 -04001165 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 +02001166 else
1167 # classic build mode
Mike Marchettib8420852018-09-13 13:45:06 -04001168 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 +02001169 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001170 echo "Waiting for 'vim-emu' container to start ..."
1171 sleep 5
Mike Marchettib8420852018-09-13 13:45:06 -04001172 export VIMEMU_HOSTNAME=$(sg docker -c "docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001173 echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
peusterm76353e42018-05-08 13:56:05 +02001174 # print vim-emu connection info
1175 echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001176 echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
peusterm76353e42018-05-08 13:56:05 +02001177 echo -e "To add the emulated VIM to OSM you should do:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001178 echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
1179}
1180
romeromonsere366b1a2019-11-19 19:49:26 +01001181function install_k8s_monitoring() {
1182 # install OSM monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +01001183 $WORKDIR_SUDO chmod +x $OSM_DEVOPS/installers/k8s/*.sh
romeromonsere366b1a2019-11-19 19:49:26 +01001184 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh
1185}
1186
1187function uninstall_k8s_monitoring() {
K Sai Kiran5e151f02019-12-11 14:50:09 +05301188 # uninstall OSM monitoring
romeromonsere366b1a2019-11-19 19:49:26 +01001189 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/uninstall_osm_k8s_monitoring.sh
1190}
1191
garciadeblasd8bc5c32018-05-09 17:37:56 +02001192function dump_vars(){
1193 echo "DEVELOP=$DEVELOP"
1194 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
1195 echo "UNINSTALL=$UNINSTALL"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001196 echo "UPDATE=$UPDATE"
1197 echo "RECONFIGURE=$RECONFIGURE"
1198 echo "TEST_INSTALLER=$TEST_INSTALLER"
1199 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
beierlm107d16a2020-05-15 21:47:43 -04001200 echo "INSTALL_PLA=$INSTALL_PLA"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001201 echo "INSTALL_LXD=$INSTALL_LXD"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001202 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
garciadeblas6c66abf2018-05-16 14:46:19 +02001203 echo "INSTALL_ONLY=$INSTALL_ONLY"
1204 echo "INSTALL_ELK=$INSTALL_ELK"
lavado6ad812e2019-11-29 10:58:58 -05001205 #echo "INSTALL_PERFMON=$INSTALL_PERFMON"
beierlm107d16a2020-05-15 21:47:43 -04001206 echo "INSTALL_K8S_MONITOR=$INSTALL_K8S_MONITOR"
garciadeblas0e596bc2018-05-28 16:04:42 +02001207 echo "TO_REBUILD=$TO_REBUILD"
garciadeblasd41f5482018-05-25 10:25:06 +02001208 echo "INSTALL_NOLXD=$INSTALL_NOLXD"
garciadeblasa3e26612018-05-30 17:58:55 +02001209 echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
garciadeblas0d45bc82018-11-19 14:25:13 +01001210 echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001211 echo "RELEASE=$RELEASE"
1212 echo "REPOSITORY=$REPOSITORY"
1213 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
1214 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001215 echo "OSM_DEVOPS=$OSM_DEVOPS"
1216 echo "OSM_VCA_HOST=$OSM_VCA_HOST"
1217 echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
garciadeblasaa3ddf42019-04-04 19:04:32 +02001218 echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001219 echo "NO_HOST_PORTS=$NO_HOST_PORTS"
1220 echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
1221 echo "WORKDIR_SUDO=$WORKDIR_SUDO"
1222 echo "OSM_WORK_DIR=$OSM_STACK_NAME"
1223 echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
1224 echo "DOCKER_USER=$DOCKER_USER"
1225 echo "OSM_STACK_NAME=$OSM_STACK_NAME"
1226 echo "PULL_IMAGES=$PULL_IMAGES"
vijaynag8339ed22019-07-25 17:10:58 +05301227 echo "KUBERNETES=$KUBERNETES"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001228 echo "SHOWOPTS=$SHOWOPTS"
1229 echo "Install from specific refspec (-b): $COMMIT_ID"
1230}
1231
1232function track(){
1233 ctime=`date +%s`
1234 duration=$((ctime - SESSION_ID))
1235 url="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
1236 #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
1237 event_name="bin"
garciadeblas6c66abf2018-05-16 14:46:19 +02001238 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name="binsrc"
1239 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name="lxd"
1240 [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name="lw"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001241 event_name="${event_name}_$1"
1242 url="${url}&event=${event_name}&ce_duration=${duration}"
1243 wget -q -O /dev/null $url
1244}
1245
1246UNINSTALL=""
1247DEVELOP=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001248UPDATE=""
1249RECONFIGURE=""
1250TEST_INSTALLER=""
1251INSTALL_LXD=""
1252SHOWOPTS=""
1253COMMIT_ID=""
1254ASSUME_YES=""
1255INSTALL_FROM_SOURCE=""
garciadeblasfc5bb142019-12-10 10:49:12 +01001256RELEASE="ReleaseSEVEN"
Mike Marchettib8420852018-09-13 13:45:06 -04001257REPOSITORY="stable"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001258INSTALL_VIMEMU=""
beierlm107d16a2020-05-15 21:47:43 -04001259INSTALL_PLA=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001260LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
1261LXD_REPOSITORY_PATH=""
1262INSTALL_LIGHTWEIGHT="y"
garciadeblas6c66abf2018-05-16 14:46:19 +02001263INSTALL_ONLY=""
1264INSTALL_ELK=""
garciadeblas0e596bc2018-05-28 16:04:42 +02001265TO_REBUILD=""
garciadeblasd41f5482018-05-25 10:25:06 +02001266INSTALL_NOLXD=""
garciadeblasa3e26612018-05-30 17:58:55 +02001267INSTALL_NODOCKER=""
Mike Marchettib8420852018-09-13 13:45:06 -04001268INSTALL_NOJUJU=""
vijaynag8339ed22019-07-25 17:10:58 +05301269KUBERNETES=""
beierlm107d16a2020-05-15 21:47:43 -04001270INSTALL_K8S_MONITOR=""
garciadeblas0d45bc82018-11-19 14:25:13 +01001271INSTALL_NOHOSTCLIENT=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001272SESSION_ID=`date +%s`
1273OSM_DEVOPS=
lavadoe07b1642018-10-25 10:58:34 -05001274OSM_VCA_HOST=
1275OSM_VCA_SECRET=
garciadeblasaa3ddf42019-04-04 19:04:32 +02001276OSM_VCA_PUBKEY=
beierlm107d16a2020-05-15 21:47:43 -04001277OSM_VCA_CLOUDNAME="localhost"
Mike Marchettib8420852018-09-13 13:45:06 -04001278OSM_STACK_NAME=osm
1279NO_HOST_PORTS=""
1280DOCKER_NOBUILD=""
1281REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
garciadeblas870e60a2018-11-21 16:44:21 +01001282REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
Mike Marchettib8420852018-09-13 13:45:06 -04001283WORKDIR_SUDO=sudo
1284OSM_WORK_DIR="/etc/osm"
garciadeblas526f0fb2018-11-23 14:47:40 +01001285OSM_DOCKER_WORK_DIR="/etc/osm/docker"
vijaynag8339ed22019-07-25 17:10:58 +05301286OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
1287OSM_HOST_VOL="/var/lib/osm"
1288OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
Mike Marchetti13d76c82018-09-19 15:00:36 -04001289OSM_DOCKER_TAG=latest
garciadeblas0d45bc82018-11-19 14:25:13 +01001290DOCKER_USER=opensourcemano
1291PULL_IMAGES="y"
Benjamin Diazaa0af712018-10-04 14:02:34 -03001292KAFKA_TAG=2.11-1.0.2
lavado60216242018-10-10 23:44:28 +02001293PROMETHEUS_TAG=v2.4.3
lavado6ad812e2019-11-29 10:58:58 -05001294GRAFANA_TAG=latest
1295PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
1296PROMETHEUS_CADVISOR_TAG=latest
lavado9a8df7c2018-10-24 09:35:34 -05001297KEYSTONEDB_TAG=10
Benjamin Diazba2cca92018-11-08 21:07:15 -03001298OSM_DATABASE_COMMONKEY=
lavado53eb8f52018-11-16 12:58:23 -05001299ELASTIC_VERSION=6.4.2
lavado4e8662c2018-11-28 11:28:14 -05001300ELASTIC_CURATOR_VERSION=5.5.4
vijaynag8339ed22019-07-25 17:10:58 +05301301POD_NETWORK_CIDR=10.244.0.0/16
1302K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
1303RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
garciadeblasd8bc5c32018-05-09 17:37:56 +02001304
beierlm107d16a2020-05-15 21:47:43 -04001305while getopts ":b:r:c:k:u:R:D:o:m:H:S:s:w:t:U:P:A:l:L:K:-: hy" o; do
garciadeblasd8bc5c32018-05-09 17:37:56 +02001306 case "${o}" in
garciadeblasd8bc5c32018-05-09 17:37:56 +02001307 b)
1308 COMMIT_ID=${OPTARG}
garciadeblas0d45bc82018-11-19 14:25:13 +01001309 PULL_IMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001310 ;;
1311 r)
Mike Marchettib8420852018-09-13 13:45:06 -04001312 REPOSITORY="${OPTARG}"
1313 REPO_ARGS+=(-r "$REPOSITORY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001314 ;;
vijaynag8339ed22019-07-25 17:10:58 +05301315 c)
1316 [ "${OPTARG}" == "swarm" ] && continue
1317 [ "${OPTARG}" == "k8s" ] && KUBERNETES="y" && continue
1318 echo -e "Invalid argument for -i : ' $OPTARG'\n" >&2
1319 usage && exit 1
1320 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001321 k)
Mike Marchettib8420852018-09-13 13:45:06 -04001322 REPOSITORY_KEY="${OPTARG}"
1323 REPO_ARGS+=(-k "$REPOSITORY_KEY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001324 ;;
1325 u)
Mike Marchettib8420852018-09-13 13:45:06 -04001326 REPOSITORY_BASE="${OPTARG}"
1327 REPO_ARGS+=(-u "$REPOSITORY_BASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001328 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001329 R)
1330 RELEASE="${OPTARG}"
1331 REPO_ARGS+=(-R "$RELEASE")
garciadeblas0d45bc82018-11-19 14:25:13 +01001332 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001333 D)
1334 OSM_DEVOPS="${OPTARG}"
1335 ;;
garciadeblas6c66abf2018-05-16 14:46:19 +02001336 o)
1337 INSTALL_ONLY="y"
1338 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
1339 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
beierlm107d16a2020-05-15 21:47:43 -04001340 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001341 ;;
garciadeblas0e596bc2018-05-28 16:04:42 +02001342 m)
garciadeblas0e596bc2018-05-28 16:04:42 +02001343 [ "${OPTARG}" == "LW-UI" ] && TO_REBUILD="$TO_REBUILD LW-UI" && continue
govindappa79e51b92019-05-22 12:15:21 +05301344 [ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
1345 [ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
1346 [ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001347 [ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
govindappa79e51b92019-05-22 12:15:21 +05301348 [ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001349 [ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
1350 [ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
govindappa79e51b92019-05-22 12:15:21 +05301351 [ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
garciadeblasfc5bb142019-12-10 10:49:12 +01001352 [ "${OPTARG}" == "PROMETHEUS-CADVISOR" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS-CADVISOR" && continue
govindappa79e51b92019-05-22 12:15:21 +05301353 [ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
lavado6ad812e2019-11-29 10:58:58 -05001354 [ "${OPTARG}" == "GRAFANA" ] && TO_REBUILD="$TO_REBUILD GRAFANA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001355 [ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
beierlm107d16a2020-05-15 21:47:43 -04001356 [ "${OPTARG}" == "PLA" ] && TO_REBUILD="$TO_REBUILD PLA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001357 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001358 H)
1359 OSM_VCA_HOST="${OPTARG}"
1360 ;;
1361 S)
1362 OSM_VCA_SECRET="${OPTARG}"
1363 ;;
1364 s)
1365 OSM_STACK_NAME="${OPTARG}" && [ -n "$KUBERNETES" ] && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0
1366 ;;
1367 w)
1368 # when specifying workdir, do not use sudo for access
1369 WORKDIR_SUDO=
1370 OSM_WORK_DIR="${OPTARG}"
1371 ;;
1372 t)
1373 OSM_DOCKER_TAG="${OPTARG}"
1374 ;;
1375 U)
1376 DOCKER_USER="${OPTARG}"
1377 ;;
1378 P)
1379 OSM_VCA_PUBKEY=$(cat ${OPTARG})
1380 ;;
1381 A)
1382 OSM_VCA_APIPROXY="${OPTARG}"
1383 ;;
beierlm107d16a2020-05-15 21:47:43 -04001384 l)
1385 LXD_CLOUD_FILE="${OPTARG}"
1386 ;;
1387 L)
1388 LXD_CRED_FILE="${OPTARG}"
1389 ;;
1390 K)
1391 CONTROLLER_NAME="${OPTARG}"
1392 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001393 -)
1394 [ "${OPTARG}" == "help" ] && usage && exit 0
garciadeblas0d45bc82018-11-19 14:25:13 +01001395 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001396 [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
1397 [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001398 [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
1399 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
1400 [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
1401 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
garciadeblasd41f5482018-05-25 10:25:06 +02001402 [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
garciadeblasa3e26612018-05-30 17:58:55 +02001403 [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001404 [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001405 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001406 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001407 [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001408 [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
1409 [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
1410 [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
1411 [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
garciadeblas0d45bc82018-11-19 14:25:13 +01001412 [ "${OPTARG}" == "pullimages" ] && continue
beierlm107d16a2020-05-15 21:47:43 -04001413 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
1414 [ "${OPTARG}" == "charmed" ] && CHARMED="y" && continue
1415 [ "${OPTARG}" == "bundle" ] && continue
1416 [ "${OPTARG}" == "kubeconfig" ] && continue
1417 [ "${OPTARG}" == "lxdendpoint" ] && continue
1418 [ "${OPTARG}" == "lxdcert" ] && continue
1419 [ "${OPTARG}" == "microstack" ] && continue
1420 [ "${OPTARG}" == "tag" ] && continue
1421 [ "${OPTARG}" == "pla" ] && INSTALL_PLA="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001422 echo -e "Invalid option: '--$OPTARG'\n" >&2
1423 usage && exit 1
1424 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001425 :)
1426 echo "Option -$OPTARG requires an argument" >&2
1427 usage && exit 1
1428 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001429 \?)
1430 echo -e "Invalid option: '-$OPTARG'\n" >&2
1431 usage && exit 1
1432 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001433 h)
1434 usage && exit 0
1435 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001436 y)
1437 ASSUME_YES="y"
1438 ;;
1439 *)
1440 usage && exit 1
1441 ;;
1442 esac
1443done
1444
garciadeblas0e596bc2018-05-28 16:04:42 +02001445[ -n "$TO_REBUILD" ] && [ "$TO_REBUILD" != " NONE" ] && echo $TO_REBUILD | grep -q NONE && FATAL "Incompatible option: -m NONE cannot be used with other -m options"
beierlm107d16a2020-05-15 21:47:43 -04001446[ -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 +02001447
garciadeblasd8bc5c32018-05-09 17:37:56 +02001448if [ -n "$SHOWOPTS" ]; then
1449 dump_vars
1450 exit 0
1451fi
1452
beierlm107d16a2020-05-15 21:47:43 -04001453if [ -n "$CHARMED" ]; then
1454 if [ -n "$UNINSTALL" ]; then
1455 /usr/share/osm-devops/installers/charmed_uninstall.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D /usr/share/osm-devops -t $DOCKER_TAG "$@"
1456 else
1457 /usr/share/osm-devops/installers/charmed_install.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D /usr/share/osm-devops -t $DOCKER_TAG "$@"
1458 fi
1459
1460 echo "Your installation is now complete, follow these steps for configuring the osmclient:"
1461 echo
1462 echo "1. Get the NBI IP with the following command:"
1463 echo
David Garciaac014002020-05-26 13:50:54 +02001464 echo "juju status --format yaml | yq -r '.applications[\"nbi-k8s\"].address'"
beierlm107d16a2020-05-15 21:47:43 -04001465 echo
1466 echo "2. Create the OSM_HOSTNAME environment variable with the NBI IP"
1467 echo
1468 echo "export OSM_HOSTNAME=<NBI-IP>"
1469 echo
1470 echo "3. Add the previous command to your .bashrc for other Shell sessions"
1471 echo
1472 echo "export OSM_HOSTNAME=<previous-IP> >> ~/.bashrc"
1473 echo
1474 echo "DONE"
1475
1476 exit 0
1477fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001478
1479# if develop, we force master
1480[ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
1481
beierlm107d16a2020-05-15 21:47:43 -04001482need_packages="git wget curl tar"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001483echo -e "Checking required packages: $need_packages"
1484dpkg -l $need_packages &>/dev/null \
1485 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1486 || sudo apt-get update \
1487 || FATAL "failed to run apt-get update"
1488dpkg -l $need_packages &>/dev/null \
1489 || ! echo -e "Installing $need_packages requires root privileges." \
1490 || sudo apt-get install -y $need_packages \
1491 || FATAL "failed to install $need_packages"
beierlm107d16a2020-05-15 21:47:43 -04001492sudo snap install jq
garciadeblasd8bc5c32018-05-09 17:37:56 +02001493if [ -z "$OSM_DEVOPS" ]; then
Michael Marchettiee374142018-08-02 22:47:16 +02001494 if [ -n "$TEST_INSTALLER" ]; then
1495 echo -e "\nUsing local devops repo for OSM installation"
1496 OSM_DEVOPS="$(dirname $(realpath $(dirname $0)))"
1497 else
1498 echo -e "\nCreating temporary dir for OSM installation"
1499 OSM_DEVOPS="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
1500 trap 'rm -rf "$OSM_DEVOPS"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001501
Michael Marchettiee374142018-08-02 22:47:16 +02001502 git clone https://osm.etsi.org/gerrit/osm/devops.git $OSM_DEVOPS
garciadeblasd8bc5c32018-05-09 17:37:56 +02001503
Michael Marchettiee374142018-08-02 22:47:16 +02001504 if [ -z "$COMMIT_ID" ]; then
1505 echo -e "\nGuessing the current stable release"
1506 LATEST_STABLE_DEVOPS=`git -C $OSM_DEVOPS tag -l v[0-9].* | sort -V | tail -n1`
1507 [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
1508
1509 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
1510 COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
1511 else
1512 echo -e "\nDEVOPS Using commit $COMMIT_ID"
1513 fi
1514 git -C $OSM_DEVOPS checkout $COMMIT_ID
garciadeblasd8bc5c32018-05-09 17:37:56 +02001515 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001516fi
1517
garciadeblas3c25fab2019-11-18 17:24:43 +01001518. $OSM_DEVOPS/common/all_funcs
garciadeblasd8bc5c32018-05-09 17:37:56 +02001519
1520[ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight && echo -e "\nDONE" && exit 0
garciadeblas6c66abf2018-05-16 14:46:19 +02001521[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
lavado6ad812e2019-11-29 10:58:58 -05001522#[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
garciadeblas6c66abf2018-05-16 14:46:19 +02001523[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
beierlm107d16a2020-05-15 21:47:43 -04001524[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_K8S_MONITOR" ] && install_k8s_monitoring
garciadeblas6c66abf2018-05-16 14:46:19 +02001525[ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
garciadeblasd8bc5c32018-05-09 17:37:56 +02001526
1527#Installation starts here
garciadeblas44c02192019-12-09 01:36:57 +01001528wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001529track start
1530
garciadeblasd8bc5c32018-05-09 17:37:56 +02001531[ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight && echo -e "\nDONE" && exit 0
1532echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
1533if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
1534 ! ask_user "The installation will take about 75-90 minutes. Continue (Y/n)? " y && echo "Cancelled!" && exit 1
1535fi
1536
1537echo -e "Checking required packages: lxd"
1538lxd --version &>/dev/null || FATAL "lxd not present, exiting."
1539[ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
1540
garciadeblasd8bc5c32018-05-09 17:37:56 +02001541# use local devops for containers
1542export OSM_USE_LOCAL_DEVOPS=true
garciadeblasd8bc5c32018-05-09 17:37:56 +02001543
1544#Install osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +02001545
1546#Install vim-emu (optional)
peusterm76353e42018-05-08 13:56:05 +02001547[ -n "$INSTALL_VIMEMU" ] && install_docker_ce && install_vimemu
garciadeblasd8bc5c32018-05-09 17:37:56 +02001548
garciadeblas44c02192019-12-09 01:36:57 +01001549wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblasd8bc5c32018-05-09 17:37:56 +02001550track end
1551echo -e "\nDONE"
beierlm107d16a2020-05-15 21:47:43 -04001552
romeromonserbeb92bb2020-03-06 10:23:29 +01001553