blob: eaf79d7c0f51342b0c61baa289d7c4522e2cccdc [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"
magnussonl1bbe9452020-02-25 13:43:17 +010038 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)"
garciadeblasfc5bb142019-12-10 10:49:12 +010040 echo -e " -o <ADDON>: ONLY (un)installs one of the addons (vimemu, elk_stack)"
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)"
David Garcia79f4f532020-04-07 12:59:34 +020044 echo -e " -l: LXD cloud yaml file"
45 echo -e " -L: LXD credentials yaml file"
David Garcia404ae122020-04-28 11:47:55 +020046 echo -e " -K: Specifies the name of the controller to use - The controller must be already bootstrapped"
David Garcia79f4f532020-04-07 12:59:34 +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"
romeromonsere366b1a2019-11-19 19:49:26 +010057 echo -e " --k8s_monitor: install the OSM kubernetes moitoring 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"
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +010063 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)"
David Garcia404ae122020-04-28 11:47:55 +020066 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)"
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +010069 echo -e " --microstack: Installs microstack as a vim. (--charmed option)"
David Garcia69388c22020-05-07 12:14:19 +020070 echo -e " --tag: Docker image tag"
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +010071
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
tierno7d8f12e2020-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
garciadeblas22385882020-05-08 10:40:20 +0000170#Uninstall osmclient
171function uninstall_osmclient() {
172 sudo apt-get remove --purge -y python-osmclient
173 sudo apt-get remove --purge -y python3-osmclient
174}
175
garciadeblas5b857d32018-05-24 18:37:58 +0200176#Uninstall lightweight OSM: remove dockers
177function uninstall_lightweight() {
garciadeblas282ff4e2018-07-10 09:16:30 +0200178 if [ -n "$INSTALL_ONLY" ]; then
179 if [ -n "$INSTALL_ELK" ]; then
180 echo -e "\nUninstalling OSM ELK stack"
181 remove_stack osm_elk
Mike Marchettib8420852018-09-13 13:45:06 -0400182 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas282ff4e2018-07-10 09:16:30 +0200183 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200184 else
185 echo -e "\nUninstalling OSM"
vijaynag8339ed22019-07-25 17:10:58 +0530186 if [ -n "$KUBERNETES" ]; then
garciadeblasb5a630f2020-03-05 18:32:16 +0000187 if [ -n "$INSTALL_K8S_MONITOR" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +0100188 # uninstall OSM MONITORING
189 uninstall_k8s_monitoring
190 fi
vijaynag8339ed22019-07-25 17:10:58 +0530191 remove_k8s_namespace $OSM_STACK_NAME
192 else
Dominik4763cfe2019-11-27 12:15:50 +0100193
vijaynag8339ed22019-07-25 17:10:58 +0530194 remove_stack $OSM_STACK_NAME
195 remove_stack osm_elk
vijaynag8339ed22019-07-25 17:10:58 +0530196 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200197 echo "Now osm docker images and volumes will be deleted"
198 newgrp docker << EONG
lavado02ad4b02018-11-28 11:30:48 -0500199 docker image rm ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}
200 docker image rm ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}
201 docker image rm ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}
202 docker image rm ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}
203 docker image rm ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}
204 docker image rm ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}
205 docker image rm ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}
magnussonl1bbe9452020-02-25 13:43:17 +0100206 docker image rm ${DOCKER_USER}/pla:${OSM_DOCKER_TAG}
lavado02ad4b02018-11-28 11:30:48 -0500207 docker image rm ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}
garciadeblas83ca1322018-05-22 18:31:14 +0200208EONG
vijaynag8339ed22019-07-25 17:10:58 +0530209
210 if [ -n "$KUBERNETES" ]; then
211 OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
212 remove_volumes $OSM_NAMESPACE_VOL
213 else
214 remove_volumes $OSM_STACK_NAME
215 remove_network $OSM_STACK_NAME
216 fi
David Garcia404ae122020-04-28 11:47:55 +0200217 [ -z "$CONTROLLER_NAME" ] && remove_iptables $OSM_STACK_NAME
Mike Marchettib8420852018-09-13 13:45:06 -0400218 echo "Removing $OSM_DOCKER_WORK_DIR"
219 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR
David Garcia404ae122020-04-28 11:47:55 +0200220 [ -z "$CONTROLLER_NAME" ] && sg lxd -c "juju destroy-controller --destroy-all-models --yes $OSM_STACK_NAME"
garciadeblas282ff4e2018-07-10 09:16:30 +0200221 fi
garciadeblas22385882020-05-08 10:40:20 +0000222 uninstall_osmclient
garciadeblas282ff4e2018-07-10 09:16:30 +0200223 echo "Some docker images will be kept in case they are used by other docker stacks"
224 echo "To remove them, just run 'docker image prune' in a terminal"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200225 return 0
226}
227
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100228#Safe unattended install of iptables-persistent
229function check_install_iptables_persistent(){
230 echo -e "\nChecking required packages: iptables-persistent"
231 if dpkg -l iptables-persistent &>/dev/null; then
232 echo -e " Not installed.\nInstalling iptables-persistent requires root privileges"
233 echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections
234 echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections
235 sudo apt-get -yq install iptables-persistent
236 fi
237}
238
garciadeblasd8bc5c32018-05-09 17:37:56 +0200239#Configure NAT rules, based on the current IP addresses of containers
240function nat(){
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100241 check_install_iptables_persistent
242
garciadeblasd8bc5c32018-05-09 17:37:56 +0200243 echo -e "\nConfiguring NAT rules"
244 echo -e " Required root privileges"
245 sudo $OSM_DEVOPS/installers/nat_osm
246}
247
248function FATAL(){
249 echo "FATAL error: Cannot install OSM due to \"$1\""
250 exit 1
251}
252
garciadeblasd8bc5c32018-05-09 17:37:56 +0200253function install_lxd() {
David Garcia50d786e2020-03-30 14:49:40 +0200254 # Apply sysctl production values for optimal performance
255 sudo cp /usr/share/osm-devops/installers/60-lxd-production.conf /etc/sysctl.d/60-lxd-production.conf
256 sudo sysctl --system
257
258 # Install LXD snap
259 sudo apt-get remove --purge -y liblxc1 lxc-common lxcfs lxd lxd-client
David Garcia42375212020-04-27 19:07:49 +0200260 sudo snap install lxd
David Garcia404ae122020-04-28 11:47:55 +0200261 sudo apt-get install zfsutils-linux -y
David Garcia50d786e2020-03-30 14:49:40 +0200262
263 # Configure LXD
264 sudo usermod -a -G lxd `whoami`
David Garcia404ae122020-04-28 11:47:55 +0200265 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"
David Garcia50d786e2020-03-30 14:49:40 +0200266 sg lxd -c "lxd waitready"
tierno7d8f12e2020-05-18 14:17:41 +0000267 DEFAULT_INTERFACE=$(ip route list|awk '$1=="default" {print $5; exit}')
268 [ -z "$DEFAULT_INTERFACE" ] && DEFAULT_INTERFACE=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}')
garciadeblasd8bc5c32018-05-09 17:37:56 +0200269 DEFAULT_MTU=$(ip addr show $DEFAULT_INTERFACE | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
David Garcia50d786e2020-03-30 14:49:40 +0200270 sg lxd -c "lxc profile device set default eth0 mtu $DEFAULT_MTU"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200271 #sudo systemctl stop lxd-bridge
272 #sudo systemctl --system daemon-reload
273 #sudo systemctl enable lxd-bridge
274 #sudo systemctl start lxd-bridge
275}
276
277function ask_user(){
278 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
279 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
280 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
281 read -e -p "$1" USER_CONFIRMATION
282 while true ; do
283 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
284 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
285 [ "${USER_CONFIRMATION,,}" == "yes" ] || [ "${USER_CONFIRMATION,,}" == "y" ] && return 0
286 [ "${USER_CONFIRMATION,,}" == "no" ] || [ "${USER_CONFIRMATION,,}" == "n" ] && return 1
287 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
288 done
289}
290
garciadeblasd8bc5c32018-05-09 17:37:56 +0200291function install_osmclient(){
292 CLIENT_RELEASE=${RELEASE#"-R "}
293 CLIENT_REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
294 CLIENT_REPOSITORY=${REPOSITORY#"-r "}
garciadeblasd8bc5c32018-05-09 17:37:56 +0200295 CLIENT_REPOSITORY_BASE=${REPOSITORY_BASE#"-u "}
296 key_location=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
297 curl $key_location | sudo apt-key add -
garciadeblas078f5982019-11-27 15:06:06 +0100298 sudo add-apt-repository -y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient IM"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200299 sudo apt-get update
garciadeblas078f5982019-11-27 15:06:06 +0100300 sudo apt-get install -y python3-pip
301 sudo -H LC_ALL=C python3 -m pip install -U pip
garciadeblasa9954892020-01-22 16:05:05 +0100302 sudo -H LC_ALL=C python3 -m pip install -U python-magic pyangbind verboselogs
garciadeblasda89ee72019-11-28 02:19:59 +0100303 sudo apt-get install -y python3-osm-im python3-osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +0200304 #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
305 #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
306 #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
307 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME=`lxc list | awk '($2=="SO-ub"){print $6}'`
308 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME=`lxc list | awk '($2=="RO"){print $6}'`
garciadeblasd8bc5c32018-05-09 17:37:56 +0200309 echo -e "\nOSM client installed"
garciadeblasc3226982018-11-27 11:32:47 +0100310 if [ -z "$INSTALL_LIGHTWEIGHT" ]; then
311 echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
312 echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
313 echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
314 else
315 echo -e "OSM client assumes that OSM host is running in localhost (127.0.0.1)."
316 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:"
317 echo " export OSM_HOSTNAME=<OSM_host>"
318 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +0200319 return 0
320}
321
lavado6ad812e2019-11-29 10:58:58 -0500322function install_prometheus_nodeexporter(){
lavadoc26d90b2019-12-06 18:11:36 -0500323 if (systemctl -q is-active node_exporter)
324 then
325 echo "Node Exporter is already running."
326 else
327 echo "Node Exporter is not active, installing..."
328 if getent passwd node_exporter > /dev/null 2>&1; then
329 echo "node_exporter user exists"
330 else
331 echo "Creating user node_exporter"
332 sudo useradd --no-create-home --shell /bin/false node_exporter
333 fi
garciadeblas82671062020-04-29 13:24:19 +0000334 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 -0500335 sudo tar -C /tmp -xf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz
336 sudo cp /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64/node_exporter /usr/local/bin
337 sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
garciadeblas82671062020-04-29 13:24:19 +0000338 sudo rm -rf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64*
lavado71906482020-04-13 17:02:00 -0500339 sudo cp ${OSM_DEVOPS}/installers/docker/prometheus/node_exporter.service /etc/systemd/system/node_exporter.service
lavadoc26d90b2019-12-06 18:11:36 -0500340 sudo systemctl daemon-reload
341 sudo systemctl restart node_exporter
342 sudo systemctl enable node_exporter
343 echo "Node Exporter has been activated in this host."
344 fi
lavado6ad812e2019-11-29 10:58:58 -0500345 return 0
346}
347
lavado1e4a88c2019-12-03 16:19:59 -0500348function uninstall_prometheus_nodeexporter(){
349 sudo systemctl stop node_exporter
350 sudo systemctl disable node_exporter
351 sudo rm /etc/systemd/system/node_exporter.service
352 sudo systemctl daemon-reload
353 sudo userdel node_exporter
354 sudo rm /usr/local/bin/node_exporter
355 return 0
356}
357
garciadeblasd8bc5c32018-05-09 17:37:56 +0200358function install_docker_ce() {
359 # installs and configures Docker CE
360 echo "Installing Docker CE ..."
361 sudo apt-get -qq update
362 sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
363 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
364 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
365 sudo apt-get -qq update
366 sudo apt-get install -y docker-ce
367 echo "Adding user to group 'docker'"
368 sudo groupadd -f docker
369 sudo usermod -aG docker $USER
garciadeblasd8bc5c32018-05-09 17:37:56 +0200370 sleep 2
371 sudo service docker restart
372 echo "... restarted Docker service"
garciadeblas67ce97c2018-05-18 10:22:09 +0200373 sg docker -c "docker version" || FATAL "Docker installation failed"
374 echo "... Docker CE installation done"
375 return 0
garciadeblasd8bc5c32018-05-09 17:37:56 +0200376}
377
378function install_docker_compose() {
379 # installs and configures docker-compose
380 echo "Installing Docker Compose ..."
381 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
382 sudo chmod +x /usr/local/bin/docker-compose
383 echo "... Docker Compose installation done"
384}
385
386function install_juju() {
387 echo "Installing juju"
Adam Israel41587482019-11-06 10:45:43 -0500388 sudo snap install juju --classic
Dominik4763cfe2019-11-27 12:15:50 +0100389 [[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200390 echo "Finished installation of juju"
Mike Marchettib8420852018-09-13 13:45:06 -0400391 return 0
392}
393
394function juju_createcontroller() {
Adam Israel8232e562018-11-21 16:47:45 -0500395 if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then
Mike Marchettib8420852018-09-13 13:45:06 -0400396 # Not found created, create the controller
garciadeblas85bb41a2020-01-15 18:20:14 +0100397 sudo usermod -a -G lxd ${USER}
David Garciaa2cf7d52020-05-18 18:20:43 +0200398 sg lxd -c "juju bootstrap --bootstrap-series=xenial $OSM_VCA_CLOUDNAME $OSM_STACK_NAME"
Mike Marchettib8420852018-09-13 13:45:06 -0400399 fi
Adam Israel8232e562018-11-21 16:47:45 -0500400 [ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200401}
402
Adam Israel5ddc97f2019-09-03 18:11:12 -0400403function juju_createproxy() {
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100404 check_install_iptables_persistent
Adam Israel43fb44d2019-11-06 10:37:25 -0500405
David Garcia26432d42019-12-11 12:22:35 +0100406 if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
407 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 -0400408 sudo netfilter-persistent save
409 fi
410}
411
garciadeblasd8bc5c32018-05-09 17:37:56 +0200412function generate_docker_images() {
413 echo "Pulling and generating docker images"
Michael Marchettiee374142018-08-02 22:47:16 +0200414 _build_from=$COMMIT_ID
415 [ -z "$_build_from" ] && _build_from="master"
416
417 echo "OSM Docker images generated from $_build_from"
418
Mike Marchettib8420852018-09-13 13:45:06 -0400419 BUILD_ARGS+=(--build-arg REPOSITORY="$REPOSITORY")
420 BUILD_ARGS+=(--build-arg RELEASE="$RELEASE")
421 BUILD_ARGS+=(--build-arg REPOSITORY_KEY="$REPOSITORY_KEY")
422 BUILD_ARGS+=(--build-arg REPOSITORY_BASE="$REPOSITORY_BASE")
lavado60216242018-10-10 23:44:28 +0200423
garciadeblas0e596bc2018-05-28 16:04:42 +0200424 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q KAFKA ; then
425 sg docker -c "docker pull wurstmeister/zookeeper" || FATAL "cannot get zookeeper docker image"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300426 sg docker -c "docker pull wurstmeister/kafka:${KAFKA_TAG}" || FATAL "cannot get kafka docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200427 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400428
garciadeblas0e596bc2018-05-28 16:04:42 +0200429 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MONGO ; then
430 sg docker -c "docker pull mongo" || FATAL "cannot get mongo docker image"
431 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400432
lavado60216242018-10-10 23:44:28 +0200433 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
434 sg docker -c "docker pull prom/prometheus:${PROMETHEUS_TAG}" || FATAL "cannot get prometheus docker image"
435 fi
436
garciadeblasfc5bb142019-12-10 10:49:12 +0100437 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS-CADVISOR ; then
438 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
439 fi
440
lavado6ad812e2019-11-29 10:58:58 -0500441 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q GRAFANA ; then
442 sg docker -c "docker pull grafana/grafana:${GRAFANA_TAG}" || FATAL "cannot get grafana docker image"
garciadeblasfc5bb142019-12-10 10:49:12 +0100443 fi
lavado6ad812e2019-11-29 10:58:58 -0500444
garciadeblas4a83e6e2018-12-04 14:55:09 +0100445 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI || echo $TO_REBUILD | grep -q KEYSTONE-DB ; then
lavado9a8df7c2018-10-24 09:35:34 -0500446 sg docker -c "docker pull mariadb:${KEYSTONEDB_TAG}" || FATAL "cannot get keystone-db docker image"
447 fi
448
garciadeblas4a83e6e2018-12-04 14:55:09 +0100449 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
450 sg docker -c "docker pull mysql:5" || FATAL "cannot get mysql docker image"
451 fi
452
Mike Marchettida8a9c42018-10-01 15:25:15 -0400453 if [ -n "$PULL_IMAGES" ]; then
454 sg docker -c "docker pull ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}" || FATAL "cannot pull MON docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400455 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MON ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200456 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/MON
457 git -C ${LWTEMPDIR}/MON checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100458 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 -0500459 fi
460
461 if [ -n "$PULL_IMAGES" ]; then
462 sg docker -c "docker pull ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}" || FATAL "cannot pull POL docker image"
garciadeblas4a83e6e2018-12-04 14:55:09 +0100463 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q POL ; then
lavado9a8df7c2018-10-24 09:35:34 -0500464 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/POL
465 git -C ${LWTEMPDIR}/POL checkout ${COMMIT_ID}
garciadeblas4a83e6e2018-12-04 14:55:09 +0100466 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 +0200467 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400468
magnussonl1bbe9452020-02-25 13:43:17 +0100469 if [ -n "$PULL_IMAGES" -a -n "$INSTALL_PLA" ]; then
470 sg docker -c "docker pull ${DOCKER_USER}/pla:${OSM_DOCKER_TAG}" || FATAL "cannot pull PLA docker image"
471 elif [ -z "$TO_REBUILD" -a -n "$INSTALL_PLA" ] || echo $TO_REBUILD | grep -q PLA ; then
472 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/PLA
473 git -C ${LWTEMPDIR}/PLA checkout ${COMMIT_ID}
474 sg docker -c "docker build ${LWTEMPDIR}/PLA -f ${LWTEMPDIR}/PLA/docker/Dockerfile -t ${DOCKER_USER}/pla --no-cache" || FATAL "cannot build PLA docker image"
475 fi
476
Mike Marchettida8a9c42018-10-01 15:25:15 -0400477 if [ -n "$PULL_IMAGES" ]; then
478 sg docker -c "docker pull ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}" || FATAL "cannot pull NBI docker image"
lavado9a8df7c2018-10-24 09:35:34 -0500479 sg docker -c "docker pull ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}" || FATAL "cannot pull KEYSTONE docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400480 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200481 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NBI
482 git -C ${LWTEMPDIR}/NBI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100483 sg docker -c "docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t ${DOCKER_USER}/nbi --no-cache" || FATAL "cannot build NBI docker image"
484 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 +0200485 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400486
487 if [ -n "$PULL_IMAGES" ]; then
488 sg docker -c "docker pull ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}" || FATAL "cannot pull RO docker image"
489 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200490 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/RO
491 git -C ${LWTEMPDIR}/RO checkout ${COMMIT_ID}
tierno5cc8ac32019-11-25 10:33:25 +0000492 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 +0200493 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400494
495 if [ -n "$PULL_IMAGES" ]; then
496 sg docker -c "docker pull ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}" || FATAL "cannot pull LCM RO docker image"
497 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LCM ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200498 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LCM
499 git -C ${LWTEMPDIR}/LCM checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100500 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 +0200501 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400502
503 if [ -n "$PULL_IMAGES" ]; then
504 sg docker -c "docker pull ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}" || FATAL "cannot pull light-ui docker image"
505 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-UI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200506 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LW-UI
507 git -C ${LWTEMPDIR}/LW-UI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100508 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 +0200509 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400510
511 if [ -n "$PULL_IMAGES" ]; then
512 sg docker -c "docker pull ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}" || FATAL "cannot pull osmclient docker image"
513 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-osmclient; then
garciadeblas0d45bc82018-11-19 14:25:13 +0100514 sg docker -c "docker build -t ${DOCKER_USER}/osmclient ${BUILD_ARGS[@]} -f $OSM_DEVOPS/docker/osmclient ."
Mike Marchettib8420852018-09-13 13:45:06 -0400515 fi
lavado6ad812e2019-11-29 10:58:58 -0500516
517 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
518 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
519 fi
520
garciadeblasd8bc5c32018-05-09 17:37:56 +0200521 echo "Finished generation of docker images"
522}
523
garciadeblas5b857d32018-05-24 18:37:58 +0200524function cmp_overwrite() {
525 file1="$1"
526 file2="$2"
527 if ! $(cmp "${file1}" "${file2}" >/dev/null 2>&1); then
528 if [ -f "${file2}" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400529 ask_user "The file ${file2} already exists. Overwrite (y/N)? " n && cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200530 else
Mike Marchettib8420852018-09-13 13:45:06 -0400531 cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200532 fi
533 fi
534}
535
garciadeblasd8bc5c32018-05-09 17:37:56 +0200536function generate_docker_env_files() {
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200537 echo "Doing a backup of existing env files"
538 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
539 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
540 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
541 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lwui.env{,~}
542 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
543 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
544 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
545 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
546 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
547
garciadeblasd8bc5c32018-05-09 17:37:56 +0200548 echo "Generating docker env files"
vijaynag8339ed22019-07-25 17:10:58 +0530549 if [ -n "$KUBERNETES" ]; then
550 #Kubernetes resources
551 $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
552 else
553 # Docker-compose
554 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
magnussonl1bbe9452020-02-25 13:43:17 +0100555 if [ -n "$INSTALL_PLA" ]; then
556 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_pla/docker-compose.yaml $OSM_DOCKER_WORK_DIR/osm_pla/docker-compose.yaml
557 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200558
lavado71906482020-04-13 17:02:00 -0500559 # Prometheus files
560 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/prometheus
561 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/prometheus/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus/prometheus.yml
lavado6ad812e2019-11-29 10:58:58 -0500562
lavado71906482020-04-13 17:02:00 -0500563 # Grafana files
564 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/grafana
565 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/dashboards-osm.yml $OSM_DOCKER_WORK_DIR/grafana/dashboards-osm.yml
566 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/datasource-prometheus.yml $OSM_DOCKER_WORK_DIR/grafana/datasource-prometheus.yml
567 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-sample-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-sample-dashboard.json
568 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-system-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-system-dashboard.json
569
570 # Prometheus Exporters files
571 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/prometheus_exporters
572 $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 +0530573 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200574
Benjamin Diazba2cca92018-11-08 21:07:15 -0300575 # LCM
576 if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
577 echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
578 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400579
Benjamin Diazba2cca92018-11-08 21:07:15 -0300580 if ! grep -Fq "OSMLCM_VCA_HOST" $OSM_DOCKER_WORK_DIR/lcm.env; then
581 echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
582 else
583 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_HOST.*|OSMLCM_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/lcm.env
584 fi
585
586 if ! grep -Fq "OSMLCM_VCA_SECRET" $OSM_DOCKER_WORK_DIR/lcm.env; then
587 echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
588 else
589 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_SECRET.*|OSMLCM_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/lcm.env
590 fi
591
garciadeblasaa3ddf42019-04-04 19:04:32 +0200592 if ! grep -Fq "OSMLCM_VCA_PUBKEY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblasec537902019-12-10 14:13:40 +0100593 echo "OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasaa3ddf42019-04-04 19:04:32 +0200594 else
garciadeblasec537902019-12-10 14:13:40 +0100595 $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 +0200596 fi
597
Adam Israelbe7676a2019-10-02 16:10:53 -0400598 if ! grep -Fq "OSMLCM_VCA_CACERT" $OSM_DOCKER_WORK_DIR/lcm.env; then
599 echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
600 else
601 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CACERT.*|OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/lcm.env
602 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -0300603
Adam Israel5ddc97f2019-09-03 18:11:12 -0400604 if ! grep -Fq "OSMLCM_VCA_APIPROXY" $OSM_DOCKER_WORK_DIR/lcm.env; then
605 echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
606 else
607 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_APIPROXY.*|OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
608 fi
609
garciadeblasa2e41842019-12-18 11:05:24 +0100610 if ! grep -Fq "OSMLCM_VCA_ENABLEOSUPGRADE" $OSM_DOCKER_WORK_DIR/lcm.env; then
611 echo "# OSMLCM_VCA_ENABLEOSUPGRADE=false" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
612 fi
613
614 if ! grep -Fq "OSMLCM_VCA_APTMIRROR" $OSM_DOCKER_WORK_DIR/lcm.env; then
615 echo "# OSMLCM_VCA_APTMIRROR=http://archive.ubuntu.com/ubuntu/" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
616 fi
617
David Garcia79f4f532020-04-07 12:59:34 +0200618 if ! grep -Fq "OSMLCM_VCA_CLOUD" $OSM_DOCKER_WORK_DIR/lcm.env; then
619 echo "OSMLCM_VCA_CLOUD=${OSM_VCA_CLOUDNAME}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
620 else
621 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CLOUD.*|OSMLCM_VCA_CLOUD=${OSM_VCA_CLOUDNAME}|g" $OSM_DOCKER_WORK_DIR/lcm.env
622 fi
623
Benjamin Diazba2cca92018-11-08 21:07:15 -0300624 # RO
625 MYSQL_ROOT_PASSWORD=$(generate_secret)
Mike Marchettib8420852018-09-13 13:45:06 -0400626 if [ ! -f $OSM_DOCKER_WORK_DIR/ro-db.env ]; then
627 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro-db.env
garciadeblas5b857d32018-05-24 18:37:58 +0200628 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400629 if [ ! -f $OSM_DOCKER_WORK_DIR/ro.env ]; then
630 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro.env
garciadeblas5b857d32018-05-24 18:37:58 +0200631 fi
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100632
Benjamin Diazba2cca92018-11-08 21:07:15 -0300633 # Keystone
Benjamin Diazba2cca92018-11-08 21:07:15 -0300634 KEYSTONE_DB_PASSWORD=$(generate_secret)
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100635 SERVICE_PASSWORD=$(generate_secret)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100636 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone-db.env ]; then
637 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone-db.env
638 fi
639 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone.env ]; then
640 echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100641 echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100642 echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100643 fi
644
Benjamin Diazba2cca92018-11-08 21:07:15 -0300645 # NBI
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100646 if [ ! -f $OSM_DOCKER_WORK_DIR/nbi.env ]; then
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100647 echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/nbi.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300648 echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/nbi.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100649 fi
650
Benjamin Diazba2cca92018-11-08 21:07:15 -0300651 # MON
652 if [ ! -f $OSM_DOCKER_WORK_DIR/mon.env ]; then
653 echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diaz9261c662019-02-25 17:18:51 -0300654 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 -0300655 fi
656
657 if ! grep -Fq "OS_NOTIFIER_URI" $OSM_DOCKER_WORK_DIR/mon.env; then
658 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
659 else
660 $WORKDIR_SUDO sed -i "s|OS_NOTIFIER_URI.*|OS_NOTIFIER_URI=http://$DEFAULT_IP:8662|g" $OSM_DOCKER_WORK_DIR/mon.env
661 fi
662
663 if ! grep -Fq "OSMMON_VCA_HOST" $OSM_DOCKER_WORK_DIR/mon.env; then
664 echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
665 else
666 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_HOST.*|OSMMON_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/mon.env
667 fi
668
669 if ! grep -Fq "OSMMON_VCA_SECRET" $OSM_DOCKER_WORK_DIR/mon.env; then
670 echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
671 else
672 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_SECRET.*|OSMMON_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/mon.env
673 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400674
Adam Israel6d8adf32019-12-05 15:46:54 -0500675 if ! grep -Fq "OSMMON_VCA_CACERT" $OSM_DOCKER_WORK_DIR/mon.env; then
676 echo "OSMMON_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
677 else
678 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_CACERT.*|OSMMON_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/mon.env
679 fi
680
681
Benjamin Diaz04560882019-02-26 17:25:07 -0300682 # POL
683 if [ ! -f $OSM_DOCKER_WORK_DIR/pol.env ]; then
684 echo "OSMPOL_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/pol" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/pol.env
685 fi
686
Benjamin Diaz4088a9b2019-05-21 15:11:49 -0300687 # LW-UI
688 if [ ! -f $OSM_DOCKER_WORK_DIR/lwui.env ]; then
689 echo "OSMUI_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/lwui" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lwui.env
690 fi
691
garciadeblasd8bc5c32018-05-09 17:37:56 +0200692 echo "Finished generation of docker env files"
693}
694
Mike Marchettib8420852018-09-13 13:45:06 -0400695function generate_osmclient_script () {
Mike Marchetti46d6efe2018-10-23 16:20:16 -0400696 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 -0400697 $WORKDIR_SUDO chmod +x "$OSM_DOCKER_WORK_DIR/osm"
698 echo "osmclient sidecar container can be found at: $OSM_DOCKER_WORK_DIR/osm"
699}
700
vijaynag8339ed22019-07-25 17:10:58 +0530701#installs kubernetes packages
702function install_kube() {
703 sudo apt-get update && sudo apt-get install -y apt-transport-https
704 curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
705 sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
706 sudo apt-get update
707 echo "Installing Kubernetes Packages ..."
708 sudo apt-get install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
709}
710
711#initializes kubernetes control plane
712function init_kubeadm() {
713 sudo swapoff -a
714 sudo kubeadm init --config $1
715 sleep 5
716}
717
718function kube_config_dir() {
719 [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes"
720 mkdir -p $HOME/.kube
721 sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
722 sudo chown $(id -u):$(id -g) $HOME/.kube/config
723}
724
725#deploys flannel as daemonsets
726function deploy_cni_provider() {
727 CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")"
728 trap 'rm -rf "${CNI_DIR}"' EXIT
729 wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR
730 kubectl apply -f $CNI_DIR
731 [ $? -ne 0 ] && FATAL "Cannot Install Flannel"
732}
733
734#creates secrets from env files which will be used by containers
735function kube_secrets(){
736 kubectl create ns $OSM_STACK_NAME
737 kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env
738 kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env
739 kubectl create secret generic nbi-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/nbi.env
740 kubectl create secret generic ro-db-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro-db.env
741 kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env
742 kubectl create secret generic keystone-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/keystone.env
743 kubectl create secret generic lwui-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lwui.env
744 kubectl create secret generic pol-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/pol.env
745}
746
747#deploys osm pods and services
748function deploy_osm_services() {
749 K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}')
750 kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
751 sleep 5
752 kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR
753}
754
magnussonl1bbe9452020-02-25 13:43:17 +0100755function deploy_osm_pla_service() {
756 # corresponding to parse_yaml
757 [ ! $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
758 # corresponding to namespace_vol
759 $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_DOCKER_WORK_DIR/osm_pla/pla.yaml
760 # corresponding to deploy_osm_services
761 kubectl apply -n $OSM_STACK_NAME -f $OSM_DOCKER_WORK_DIR/osm_pla
762}
763
vijaynag8339ed22019-07-25 17:10:58 +0530764function parse_yaml() {
765 osm_services="nbi lcm ro pol mon light-ui keystone"
766 TAG=$1
767 for osm in $osm_services; do
768 $WORKDIR_SUDO sed -i "s/opensourcemano\/$osm:.*/opensourcemano\/$osm:$TAG/g" $OSM_K8S_WORK_DIR/$osm.yaml
769 done
770}
771
772function namespace_vol() {
773 osm_services="nbi lcm ro pol mon kafka mongo mysql"
774 for osm in $osm_services; do
775 $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml
776 done
777}
778
garciadeblasa3e26612018-05-30 17:58:55 +0200779function init_docker_swarm() {
garciadeblasd8bc5c32018-05-09 17:37:56 +0200780 if [ "${DEFAULT_MTU}" != "1500" ]; then
781 DOCKER_NETS=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
782 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";}'`
783 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"
784 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200785 sg docker -c "docker swarm init --advertise-addr ${DEFAULT_IP}"
garciadeblasa3e26612018-05-30 17:58:55 +0200786 return 0
787}
788
Mike Marchettib8420852018-09-13 13:45:06 -0400789function create_docker_network() {
790 echo "creating network"
791 sg docker -c "docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} net${OSM_STACK_NAME}"
792 echo "creating network DONE"
793}
794
garciadeblasa3e26612018-05-30 17:58:55 +0200795function deploy_lightweight() {
Mike Marchettib8420852018-09-13 13:45:06 -0400796
garciadeblasa3e26612018-05-30 17:58:55 +0200797 echo "Deploying lightweight build"
Mike Marchettib8420852018-09-13 13:45:06 -0400798 OSM_NBI_PORT=9999
799 OSM_RO_PORT=9090
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100800 OSM_KEYSTONE_PORT=5000
Mike Marchettib8420852018-09-13 13:45:06 -0400801 OSM_UI_PORT=80
lavadoafa54c72018-10-05 09:28:28 -0500802 OSM_MON_PORT=8662
lavado60216242018-10-10 23:44:28 +0200803 OSM_PROM_PORT=9090
garciadeblasa7b27dc2019-12-04 15:06:55 +0100804 OSM_PROM_CADVISOR_PORT=8080
lavado60216242018-10-10 23:44:28 +0200805 OSM_PROM_HOSTPORT=9091
lavado6ad812e2019-11-29 10:58:58 -0500806 OSM_GRAFANA_PORT=3000
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100807 [ -n "$INSTALL_ELK" ] && OSM_ELK_PORT=5601
lavado6ad812e2019-11-29 10:58:58 -0500808 #[ -n "$INSTALL_PERFMON" ] && OSM_PM_PORT=3000
lavado60216242018-10-10 23:44:28 +0200809
Mike Marchettib8420852018-09-13 13:45:06 -0400810 if [ -n "$NO_HOST_PORTS" ]; then
811 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT)
812 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100813 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400814 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -0500815 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +0200816 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +0100817 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -0500818 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT)
819 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100820 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400821 else
822 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT:$OSM_NBI_PORT)
823 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT:$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100824 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT:$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400825 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT:$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -0500826 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT:$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +0200827 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_HOSTPORT:$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +0100828 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT:$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -0500829 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT:$OSM_GRAFANA_PORT)
830 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT:$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100831 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT:$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400832 fi
833 echo "export ${OSM_PORTS[@]}" | $WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/osm_ports.sh
834 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 -0400835 echo "export TAG=${OSM_DOCKER_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Mike Marchettida8a9c42018-10-01 15:25:15 -0400836 echo "export DOCKER_USER=${DOCKER_USER}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -0300837 echo "export KAFKA_TAG=${KAFKA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado60216242018-10-10 23:44:28 +0200838 echo "export PROMETHEUS_TAG=${PROMETHEUS_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado9a8df7c2018-10-24 09:35:34 -0500839 echo "export KEYSTONEDB_TAG=${KEYSTONEDB_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado6ad812e2019-11-29 10:58:58 -0500840 echo "export PROMETHEUS_CADVISOR_TAG=${PROMETHEUS_CADVISOR_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
841 echo "export GRAFANA_TAG=${GRAFANA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -0300842
Mike Marchettib8420852018-09-13 13:45:06 -0400843 pushd $OSM_DOCKER_WORK_DIR
magnussonl1bbe9452020-02-25 13:43:17 +0100844 if [ -n "$INSTALL_PLA" ]; then
845 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"
846 else
847 sg docker -c ". ./osm_ports.sh; docker stack deploy -c $OSM_DOCKER_WORK_DIR/docker-compose.yaml $OSM_STACK_NAME"
848 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400849 popd
850
garciadeblasd8bc5c32018-05-09 17:37:56 +0200851 echo "Finished deployment of lightweight build"
852}
853
garciadeblas6c66abf2018-05-16 14:46:19 +0200854function deploy_elk() {
garciadeblase2aebfe2018-07-06 14:11:20 +0200855 echo "Pulling docker images for ELK"
lavado53eb8f52018-11-16 12:58:23 -0500856 sg docker -c "docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:${ELASTIC_VERSION}" || FATAL "cannot get elasticsearch docker image"
857 sg docker -c "docker pull docker.elastic.co/beats/metricbeat:${ELASTIC_VERSION}" || FATAL "cannot get metricbeat docker image"
858 sg docker -c "docker pull docker.elastic.co/beats/filebeat:${ELASTIC_VERSION}" || FATAL "cannot get filebeat docker image"
859 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 -0500860 sg docker -c "docker pull bobrik/curator:${ELASTIC_CURATOR_VERSION}" || FATAL "cannot get curator docker image"
garciadeblase2aebfe2018-07-06 14:11:20 +0200861 echo "Finished pulling elk docker images"
Mike Marchettib8420852018-09-13 13:45:06 -0400862 $WORKDIR_SUDO mkdir -p "$OSM_DOCKER_WORK_DIR/osm_elk"
863 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_elk/* $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas5b857d32018-05-24 18:37:58 +0200864 remove_stack osm_elk
garciadeblas6c66abf2018-05-16 14:46:19 +0200865 echo "Deploying ELK stack"
Mike Marchettib8420852018-09-13 13:45:06 -0400866 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 +0200867 echo "Waiting for ELK stack to be up and running"
868 time=0
garciadeblase2aebfe2018-07-06 14:11:20 +0200869 step=5
870 timelength=40
garciadeblas6c66abf2018-05-16 14:46:19 +0200871 elk_is_up=1
872 while [ $time -le $timelength ]; do
garciadeblase2aebfe2018-07-06 14:11:20 +0200873 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 +0200874 elk_is_up=0
875 break
876 fi
877 sleep $step
878 time=$((time+step))
879 done
880 if [ $elk_is_up -eq 0 ]; then
881 echo "ELK is up and running. Trying to create index pattern..."
882 #Create index pattern
883 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -0500884 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
885 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200886 #Make it the default index
garciadeblase2aebfe2018-07-06 14:11:20 +0200887 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +0200888 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -0500889 -d"{\"value\":\"filebeat-*\"}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200890 else
891 echo "Cannot connect to Kibana to create index pattern."
892 echo "Once Kibana is running, you can use the following instructions to create index pattern:"
893 echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -0500894 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
895 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}"'
garciadeblas6c66abf2018-05-16 14:46:19 +0200896 echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +0200897 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -0500898 -d"{\"value\":\"filebeat-*\"}"'
garciadeblas6c66abf2018-05-16 14:46:19 +0200899 fi
900 echo "Finished deployment of ELK stack"
901 return 0
902}
903
garciadeblasd8bc5c32018-05-09 17:37:56 +0200904function install_lightweight() {
garciadeblas0d45bc82018-11-19 14:25:13 +0100905 [ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
vijaynag8339ed22019-07-25 17:10:58 +0530906 [ -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 -0400907 [ ! -d "$OSM_DOCKER_WORK_DIR" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR
magnussonl1bbe9452020-02-25 13:43:17 +0100908 [ ! -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 +0530909 [ -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 -0400910
garciadeblas183e5802018-12-13 18:20:54 +0100911 track checkingroot
garciadeblasd13a8aa2018-05-18 15:24:51 +0200912 [ "$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 +0100913 track noroot
vijaynag8339ed22019-07-25 17:10:58 +0530914
915 if [ -n "$KUBERNETES" ]; then
916 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
917 1. Install and configure LXD
918 2. Install juju
919 3. Install docker CE
920 4. Disable swap space
921 5. Install and initialize Kubernetes
922 as pre-requirements.
923 Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
924
925 else
926 [ -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
927 fi
garciadeblasfae5e972018-06-12 18:27:11 +0200928 track proceed
vijaynag8339ed22019-07-25 17:10:58 +0530929
garciadeblasd8bc5c32018-05-09 17:37:56 +0200930 echo "Installing lightweight build of OSM"
931 LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
932 trap 'rm -rf "${LWTEMPDIR}"' EXIT
tierno7d8f12e2020-05-18 14:17:41 +0000933 DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5; exit}')
934 [ -z "$DEFAULT_IF" ] && DEFAULT_IF=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}')
garciadeblas8cd60772018-06-02 08:38:17 +0200935 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
tierno7d8f12e2020-05-18 14:17:41 +0000936 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF} |awk '{split($4,a,"/"); print a[1]}'`
garciadeblas8cd60772018-06-02 08:38:17 +0200937 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200938 DEFAULT_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
Mike Marchettib8420852018-09-13 13:45:06 -0400939
940 # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to
David Garcia79f4f532020-04-07 12:59:34 +0200941 if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ] && [ -z "$LXD_CLOUD_FILE" ]; then
David Garcia50d786e2020-03-30 14:49:40 +0200942 need_packages_lw="snapd"
garciadeblasd41f5482018-05-25 10:25:06 +0200943 echo -e "Checking required packages: $need_packages_lw"
944 dpkg -l $need_packages_lw &>/dev/null \
945 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
946 || sudo apt-get update \
947 || FATAL "failed to run apt-get update"
948 dpkg -l $need_packages_lw &>/dev/null \
949 || ! echo -e "Installing $need_packages_lw requires root privileges." \
950 || sudo apt-get install -y $need_packages_lw \
951 || FATAL "failed to install $need_packages_lw"
David Garcia50d786e2020-03-30 14:49:40 +0200952 install_lxd
garciadeblasd41f5482018-05-25 10:25:06 +0200953 fi
David Garcia79f4f532020-04-07 12:59:34 +0200954
garciadeblasfae5e972018-06-12 18:27:11 +0200955 track prereqok
Mike Marchettib8420852018-09-13 13:45:06 -0400956
vijaynag8339ed22019-07-25 17:10:58 +0530957 [ -z "$INSTALL_NOJUJU" ] && install_juju
garciadeblas183e5802018-12-13 18:20:54 +0100958 track juju_install
vijaynag8339ed22019-07-25 17:10:58 +0530959
lavadoe07b1642018-10-25 10:58:34 -0500960 if [ -z "$OSM_VCA_HOST" ]; then
David Garcia404ae122020-04-28 11:47:55 +0200961 if [ -z "$CONTROLLER_NAME" ]; then
962 if [ -n "$LXD_CLOUD_FILE" ]; then
963 [ -z "$LXD_CRED_FILE" ] && FATAL "The installer needs the LXD credential yaml if the LXD is external"
964 OSM_VCA_CLOUDNAME="lxd-cloud"
965 juju add-cloud $OSM_VCA_CLOUDNAME $LXD_CLOUD_FILE --force || juju update-cloud $OSM_VCA_CLOUDNAME --client -f $LXD_CLOUD_FILE
966 juju add-credential $OSM_VCA_CLOUDNAME -f $LXD_CRED_FILE || juju update-credential $OSM_VCA_CLOUDNAME lxd-cloud-creds -f $LXD_CRED_FILE
967 fi
968 juju_createcontroller
969 else
970 OSM_VCA_CLOUDNAME="lxd-cloud"
971 if [ -n "$LXD_CLOUD_FILE" ]; then
972 [ -z "$LXD_CRED_FILE" ] && FATAL "The installer needs the LXD credential yaml if the LXD is external"
973 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
974 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
975 else
976 mkdir -p ~/.osm
977 cat << EOF > ~/.osm/lxd-cloud.yaml
978clouds:
979 lxd-cloud:
980 type: lxd
981 auth-types: [certificate]
982 endpoint: "https://$DEFAULT_IP:8443"
983 config:
984 ssl-hostname-verification: false
985EOF
986 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"
987 local server_cert=`cat /var/snap/lxd/common/lxd/server.crt | sed 's/^/ /'`
988 local client_cert=`cat ~/.osm/client.crt | sed 's/^/ /'`
989 local client_key=`cat ~/.osm/client.key | sed 's/^/ /'`
990 cat << EOF > ~/.osm/lxd-credentials.yaml
991credentials:
992 lxd-cloud:
993 lxd-cloud:
994 auth-type: certificate
995 server-cert: |
996$server_cert
997 client-cert: |
998$client_cert
999 client-key: |
1000$client_key
1001EOF
1002 lxc config trust add local: ~/.osm/client.crt
1003 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
1004 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
1005 fi
1006 fi
1007 [ -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}'`
1008 [ -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 -05001009 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
Mike Marchettib8420852018-09-13 13:45:06 -04001010 fi
garciadeblas183e5802018-12-13 18:20:54 +01001011 track juju_controller
vijaynag8339ed22019-07-25 17:10:58 +05301012
lavadoe07b1642018-10-25 10:58:34 -05001013 if [ -z "$OSM_VCA_SECRET" ]; then
David Garcia404ae122020-04-28 11:47:55 +02001014 [ -z "$CONTROLLER_NAME" ] && OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME)
1015 [ -n "$CONTROLLER_NAME" ] && OSM_VCA_SECRET=$(parse_juju_password $CONTROLLER_NAME)
lavadoe07b1642018-10-25 10:58:34 -05001016 [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
Mike Marchettib8420852018-09-13 13:45:06 -04001017 fi
garciadeblasaa3ddf42019-04-04 19:04:32 +02001018 if [ -z "$OSM_VCA_PUBKEY" ]; then
1019 OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
1020 [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
1021 fi
garciadeblasfc5bb142019-12-10 10:49:12 +01001022 if [ -z "$OSM_VCA_CACERT" ]; then
David Garcia404ae122020-04-28 11:47:55 +02001023 [ -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)
1024 [ -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 +01001025 [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
1026 fi
Adam Israel5ddc97f2019-09-03 18:11:12 -04001027 if [ -z "$OSM_VCA_APIPROXY" ]; then
1028 OSM_VCA_APIPROXY=$DEFAULT_IP
1029 [ -z "$OSM_VCA_APIPROXY" ] && FATAL "Cannot obtain juju api proxy"
1030 fi
1031 juju_createproxy
garciadeblasfc5bb142019-12-10 10:49:12 +01001032 track juju
Adam Israel5ddc97f2019-09-03 18:11:12 -04001033
Benjamin Diazba2cca92018-11-08 21:07:15 -03001034 if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
1035 OSM_DATABASE_COMMONKEY=$(generate_secret)
1036 [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret"
1037 fi
vijaynag8339ed22019-07-25 17:10:58 +05301038
garciadeblasa3e26612018-05-30 17:58:55 +02001039 [ -n "$INSTALL_NODOCKER" ] || install_docker_ce
garciadeblas6c66abf2018-05-16 14:46:19 +02001040 track docker_ce
vijaynag8339ed22019-07-25 17:10:58 +05301041
1042 #Installs Kubernetes and deploys osm services
1043 if [ -n "$KUBERNETES" ]; then
1044 install_kube
1045 track install_k8s
1046 init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
1047 kube_config_dir
1048 track init_k8s
1049 else
1050 #install_docker_compose
1051 [ -n "$INSTALL_NODOCKER" ] || init_docker_swarm
1052 track docker_swarm
1053 fi
1054
Mike Marchettib8420852018-09-13 13:45:06 -04001055 [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
garciadeblas6c66abf2018-05-16 14:46:19 +02001056 track docker_build
vijaynag8339ed22019-07-25 17:10:58 +05301057
garciadeblasd8bc5c32018-05-09 17:37:56 +02001058 generate_docker_env_files
Mike Marchettib8420852018-09-13 13:45:06 -04001059
vijaynag8339ed22019-07-25 17:10:58 +05301060 if [ -n "$KUBERNETES" ]; then
garciadeblasb5a630f2020-03-05 18:32:16 +00001061 if [ -n "$INSTALL_K8S_MONITOR" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +01001062 # uninstall OSM MONITORING
1063 uninstall_k8s_monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +01001064 track uninstall_k8s_monitoring
romeromonsere366b1a2019-11-19 19:49:26 +01001065 fi
vijaynag8339ed22019-07-25 17:10:58 +05301066 #remove old namespace
1067 remove_k8s_namespace $OSM_STACK_NAME
1068 deploy_cni_provider
1069 kube_secrets
garciadeblasa7e128a2019-12-18 11:10:45 +01001070 [ ! $OSM_DOCKER_TAG == "7" ] && parse_yaml $OSM_DOCKER_TAG
vijaynag8339ed22019-07-25 17:10:58 +05301071 namespace_vol
1072 deploy_osm_services
magnussonl1bbe9452020-02-25 13:43:17 +01001073 if [ -n "$INSTALL_PLA"]; then
1074 # optional PLA install
1075 deploy_osm_pla_service
1076 fi
vijaynag8339ed22019-07-25 17:10:58 +05301077 track deploy_osm_services_k8s
garciadeblasb5a630f2020-03-05 18:32:16 +00001078 if [ -n "$INSTALL_K8S_MONITOR" ]; then
garciadeblasfc5bb142019-12-10 10:49:12 +01001079 # install OSM MONITORING
1080 install_k8s_monitoring
1081 track install_k8s_monitoring
1082 fi
vijaynag8339ed22019-07-25 17:10:58 +05301083 else
1084 # remove old stack
1085 remove_stack $OSM_STACK_NAME
1086 create_docker_network
1087 deploy_lightweight
1088 generate_osmclient_script
1089 track docker_deploy
lavado6ad812e2019-11-29 10:58:58 -05001090 install_prometheus_nodeexporter
garciadeblasfc5bb142019-12-10 10:49:12 +01001091 track nodeexporter
vijaynag8339ed22019-07-25 17:10:58 +05301092 [ -n "$INSTALL_VIMEMU" ] && install_vimemu && track vimemu
1093 [ -n "$INSTALL_ELK" ] && deploy_elk && track elk
vijaynag8339ed22019-07-25 17:10:58 +05301094 fi
1095
Mike Marchettib8420852018-09-13 13:45:06 -04001096 [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
garciadeblas6c66abf2018-05-16 14:46:19 +02001097 track osmclient
vijaynag8339ed22019-07-25 17:10:58 +05301098
garciadeblas44c02192019-12-09 01:36:57 +01001099 wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001100 track end
garciadeblasd8bc5c32018-05-09 17:37:56 +02001101 return 0
1102}
1103
1104function install_vimemu() {
peusterm76353e42018-05-08 13:56:05 +02001105 echo "\nInstalling vim-emu"
1106 EMUTEMPDIR="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX")"
1107 trap 'rm -rf "${EMUTEMPDIR}"' EXIT
peusterma3a7d142020-02-07 10:12:29 +01001108 # install prerequisites (OVS is a must for the emulator to work)
1109 sudo apt-get install openvswitch-switch
garciadeblasd8bc5c32018-05-09 17:37:56 +02001110 # clone vim-emu repository (attention: branch is currently master only)
1111 echo "Cloning vim-emu repository ..."
peusterm76353e42018-05-08 13:56:05 +02001112 git clone https://osm.etsi.org/gerrit/osm/vim-emu.git $EMUTEMPDIR
garciadeblasd8bc5c32018-05-09 17:37:56 +02001113 # build vim-emu docker
1114 echo "Building vim-emu Docker container..."
Mike Marchettib8420852018-09-13 13:45:06 -04001115
1116 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 +02001117 # start vim-emu container as daemon
1118 echo "Starting vim-emu Docker container 'vim-emu' ..."
peusterm76353e42018-05-08 13:56:05 +02001119 if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
1120 # in lightweight mode, the emulator needs to be attached to netOSM
Mike Marchettib8420852018-09-13 13:45:06 -04001121 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 +02001122 else
1123 # classic build mode
Mike Marchettib8420852018-09-13 13:45:06 -04001124 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 +02001125 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001126 echo "Waiting for 'vim-emu' container to start ..."
1127 sleep 5
Mike Marchettib8420852018-09-13 13:45:06 -04001128 export VIMEMU_HOSTNAME=$(sg docker -c "docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001129 echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
peusterm76353e42018-05-08 13:56:05 +02001130 # print vim-emu connection info
1131 echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001132 echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
peusterm76353e42018-05-08 13:56:05 +02001133 echo -e "To add the emulated VIM to OSM you should do:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001134 echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
1135}
1136
romeromonsere366b1a2019-11-19 19:49:26 +01001137function install_k8s_monitoring() {
1138 # install OSM monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +01001139 $WORKDIR_SUDO chmod +x $OSM_DEVOPS/installers/k8s/*.sh
romeromonsere366b1a2019-11-19 19:49:26 +01001140 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh
1141}
1142
1143function uninstall_k8s_monitoring() {
K Sai Kiran5e151f02019-12-11 14:50:09 +05301144 # uninstall OSM monitoring
romeromonsere366b1a2019-11-19 19:49:26 +01001145 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/uninstall_osm_k8s_monitoring.sh
1146}
1147
garciadeblasd8bc5c32018-05-09 17:37:56 +02001148function dump_vars(){
1149 echo "DEVELOP=$DEVELOP"
1150 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
1151 echo "UNINSTALL=$UNINSTALL"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001152 echo "UPDATE=$UPDATE"
1153 echo "RECONFIGURE=$RECONFIGURE"
1154 echo "TEST_INSTALLER=$TEST_INSTALLER"
1155 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
magnussonl1bbe9452020-02-25 13:43:17 +01001156 echo "INSTALL_PLA=$INSTALL_PLA"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001157 echo "INSTALL_LXD=$INSTALL_LXD"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001158 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
garciadeblas6c66abf2018-05-16 14:46:19 +02001159 echo "INSTALL_ONLY=$INSTALL_ONLY"
1160 echo "INSTALL_ELK=$INSTALL_ELK"
lavado6ad812e2019-11-29 10:58:58 -05001161 #echo "INSTALL_PERFMON=$INSTALL_PERFMON"
garciadeblasb5a630f2020-03-05 18:32:16 +00001162 echo "INSTALL_K8S_MONITOR=$INSTALL_K8S_MONITOR"
garciadeblas0e596bc2018-05-28 16:04:42 +02001163 echo "TO_REBUILD=$TO_REBUILD"
garciadeblasd41f5482018-05-25 10:25:06 +02001164 echo "INSTALL_NOLXD=$INSTALL_NOLXD"
garciadeblasa3e26612018-05-30 17:58:55 +02001165 echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
garciadeblas0d45bc82018-11-19 14:25:13 +01001166 echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001167 echo "RELEASE=$RELEASE"
1168 echo "REPOSITORY=$REPOSITORY"
1169 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
1170 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001171 echo "OSM_DEVOPS=$OSM_DEVOPS"
1172 echo "OSM_VCA_HOST=$OSM_VCA_HOST"
1173 echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
garciadeblasaa3ddf42019-04-04 19:04:32 +02001174 echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001175 echo "NO_HOST_PORTS=$NO_HOST_PORTS"
1176 echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
1177 echo "WORKDIR_SUDO=$WORKDIR_SUDO"
1178 echo "OSM_WORK_DIR=$OSM_STACK_NAME"
1179 echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
1180 echo "DOCKER_USER=$DOCKER_USER"
1181 echo "OSM_STACK_NAME=$OSM_STACK_NAME"
1182 echo "PULL_IMAGES=$PULL_IMAGES"
vijaynag8339ed22019-07-25 17:10:58 +05301183 echo "KUBERNETES=$KUBERNETES"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001184 echo "SHOWOPTS=$SHOWOPTS"
1185 echo "Install from specific refspec (-b): $COMMIT_ID"
1186}
1187
1188function track(){
1189 ctime=`date +%s`
1190 duration=$((ctime - SESSION_ID))
1191 url="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
1192 #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
1193 event_name="bin"
garciadeblas6c66abf2018-05-16 14:46:19 +02001194 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name="binsrc"
1195 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name="lxd"
1196 [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name="lw"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001197 event_name="${event_name}_$1"
1198 url="${url}&event=${event_name}&ce_duration=${duration}"
1199 wget -q -O /dev/null $url
1200}
1201
1202UNINSTALL=""
1203DEVELOP=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001204UPDATE=""
1205RECONFIGURE=""
1206TEST_INSTALLER=""
1207INSTALL_LXD=""
1208SHOWOPTS=""
1209COMMIT_ID=""
1210ASSUME_YES=""
1211INSTALL_FROM_SOURCE=""
garciadeblasfc5bb142019-12-10 10:49:12 +01001212RELEASE="ReleaseSEVEN"
Mike Marchettib8420852018-09-13 13:45:06 -04001213REPOSITORY="stable"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001214INSTALL_VIMEMU=""
magnussonl1bbe9452020-02-25 13:43:17 +01001215INSTALL_PLA=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001216LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
1217LXD_REPOSITORY_PATH=""
1218INSTALL_LIGHTWEIGHT="y"
garciadeblas6c66abf2018-05-16 14:46:19 +02001219INSTALL_ONLY=""
1220INSTALL_ELK=""
garciadeblas0e596bc2018-05-28 16:04:42 +02001221TO_REBUILD=""
garciadeblasd41f5482018-05-25 10:25:06 +02001222INSTALL_NOLXD=""
garciadeblasa3e26612018-05-30 17:58:55 +02001223INSTALL_NODOCKER=""
Mike Marchettib8420852018-09-13 13:45:06 -04001224INSTALL_NOJUJU=""
vijaynag8339ed22019-07-25 17:10:58 +05301225KUBERNETES=""
garciadeblasb5a630f2020-03-05 18:32:16 +00001226INSTALL_K8S_MONITOR=""
garciadeblas0d45bc82018-11-19 14:25:13 +01001227INSTALL_NOHOSTCLIENT=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001228SESSION_ID=`date +%s`
1229OSM_DEVOPS=
lavadoe07b1642018-10-25 10:58:34 -05001230OSM_VCA_HOST=
1231OSM_VCA_SECRET=
garciadeblasaa3ddf42019-04-04 19:04:32 +02001232OSM_VCA_PUBKEY=
David Garcia79f4f532020-04-07 12:59:34 +02001233OSM_VCA_CLOUDNAME="localhost"
Mike Marchettib8420852018-09-13 13:45:06 -04001234OSM_STACK_NAME=osm
1235NO_HOST_PORTS=""
1236DOCKER_NOBUILD=""
1237REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
garciadeblas870e60a2018-11-21 16:44:21 +01001238REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
Mike Marchettib8420852018-09-13 13:45:06 -04001239WORKDIR_SUDO=sudo
1240OSM_WORK_DIR="/etc/osm"
garciadeblas526f0fb2018-11-23 14:47:40 +01001241OSM_DOCKER_WORK_DIR="/etc/osm/docker"
vijaynag8339ed22019-07-25 17:10:58 +05301242OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
1243OSM_HOST_VOL="/var/lib/osm"
1244OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
Mike Marchetti13d76c82018-09-19 15:00:36 -04001245OSM_DOCKER_TAG=latest
garciadeblas0d45bc82018-11-19 14:25:13 +01001246DOCKER_USER=opensourcemano
1247PULL_IMAGES="y"
Benjamin Diazaa0af712018-10-04 14:02:34 -03001248KAFKA_TAG=2.11-1.0.2
lavado60216242018-10-10 23:44:28 +02001249PROMETHEUS_TAG=v2.4.3
lavado6ad812e2019-11-29 10:58:58 -05001250GRAFANA_TAG=latest
1251PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
1252PROMETHEUS_CADVISOR_TAG=latest
lavado9a8df7c2018-10-24 09:35:34 -05001253KEYSTONEDB_TAG=10
Benjamin Diazba2cca92018-11-08 21:07:15 -03001254OSM_DATABASE_COMMONKEY=
lavado53eb8f52018-11-16 12:58:23 -05001255ELASTIC_VERSION=6.4.2
lavado4e8662c2018-11-28 11:28:14 -05001256ELASTIC_CURATOR_VERSION=5.5.4
vijaynag8339ed22019-07-25 17:10:58 +05301257POD_NETWORK_CIDR=10.244.0.0/16
1258K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
1259RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
garciadeblasd8bc5c32018-05-09 17:37:56 +02001260
David Garcia404ae122020-04-28 11:47:55 +02001261while 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 +02001262 case "${o}" in
garciadeblasd8bc5c32018-05-09 17:37:56 +02001263 b)
1264 COMMIT_ID=${OPTARG}
garciadeblas0d45bc82018-11-19 14:25:13 +01001265 PULL_IMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001266 ;;
1267 r)
Mike Marchettib8420852018-09-13 13:45:06 -04001268 REPOSITORY="${OPTARG}"
1269 REPO_ARGS+=(-r "$REPOSITORY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001270 ;;
vijaynag8339ed22019-07-25 17:10:58 +05301271 c)
1272 [ "${OPTARG}" == "swarm" ] && continue
1273 [ "${OPTARG}" == "k8s" ] && KUBERNETES="y" && continue
1274 echo -e "Invalid argument for -i : ' $OPTARG'\n" >&2
1275 usage && exit 1
1276 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001277 k)
Mike Marchettib8420852018-09-13 13:45:06 -04001278 REPOSITORY_KEY="${OPTARG}"
1279 REPO_ARGS+=(-k "$REPOSITORY_KEY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001280 ;;
1281 u)
Mike Marchettib8420852018-09-13 13:45:06 -04001282 REPOSITORY_BASE="${OPTARG}"
1283 REPO_ARGS+=(-u "$REPOSITORY_BASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001284 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001285 R)
1286 RELEASE="${OPTARG}"
1287 REPO_ARGS+=(-R "$RELEASE")
garciadeblas0d45bc82018-11-19 14:25:13 +01001288 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001289 D)
1290 OSM_DEVOPS="${OPTARG}"
1291 ;;
garciadeblas6c66abf2018-05-16 14:46:19 +02001292 o)
1293 INSTALL_ONLY="y"
1294 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
1295 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblasb5a630f2020-03-05 18:32:16 +00001296 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001297 ;;
garciadeblas0e596bc2018-05-28 16:04:42 +02001298 m)
garciadeblas0e596bc2018-05-28 16:04:42 +02001299 [ "${OPTARG}" == "LW-UI" ] && TO_REBUILD="$TO_REBUILD LW-UI" && continue
govindappa79e51b92019-05-22 12:15:21 +05301300 [ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
1301 [ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
1302 [ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001303 [ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
govindappa79e51b92019-05-22 12:15:21 +05301304 [ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001305 [ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
1306 [ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
govindappa79e51b92019-05-22 12:15:21 +05301307 [ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
garciadeblasfc5bb142019-12-10 10:49:12 +01001308 [ "${OPTARG}" == "PROMETHEUS-CADVISOR" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS-CADVISOR" && continue
govindappa79e51b92019-05-22 12:15:21 +05301309 [ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
lavado6ad812e2019-11-29 10:58:58 -05001310 [ "${OPTARG}" == "GRAFANA" ] && TO_REBUILD="$TO_REBUILD GRAFANA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001311 [ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
magnussonl1bbe9452020-02-25 13:43:17 +01001312 [ "${OPTARG}" == "PLA" ] && TO_REBUILD="$TO_REBUILD PLA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001313 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001314 H)
1315 OSM_VCA_HOST="${OPTARG}"
1316 ;;
1317 S)
1318 OSM_VCA_SECRET="${OPTARG}"
1319 ;;
1320 s)
1321 OSM_STACK_NAME="${OPTARG}" && [ -n "$KUBERNETES" ] && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0
1322 ;;
1323 w)
1324 # when specifying workdir, do not use sudo for access
1325 WORKDIR_SUDO=
1326 OSM_WORK_DIR="${OPTARG}"
1327 ;;
1328 t)
1329 OSM_DOCKER_TAG="${OPTARG}"
1330 ;;
1331 U)
1332 DOCKER_USER="${OPTARG}"
1333 ;;
1334 P)
1335 OSM_VCA_PUBKEY=$(cat ${OPTARG})
1336 ;;
1337 A)
1338 OSM_VCA_APIPROXY="${OPTARG}"
1339 ;;
David Garcia79f4f532020-04-07 12:59:34 +02001340 l)
1341 LXD_CLOUD_FILE="${OPTARG}"
1342 ;;
1343 L)
1344 LXD_CRED_FILE="${OPTARG}"
1345 ;;
David Garcia404ae122020-04-28 11:47:55 +02001346 K)
1347 CONTROLLER_NAME="${OPTARG}"
1348 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001349 -)
1350 [ "${OPTARG}" == "help" ] && usage && exit 0
garciadeblas0d45bc82018-11-19 14:25:13 +01001351 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001352 [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
1353 [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001354 [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
1355 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
1356 [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
1357 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
garciadeblasd41f5482018-05-25 10:25:06 +02001358 [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
garciadeblasa3e26612018-05-30 17:58:55 +02001359 [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001360 [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001361 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001362 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001363 [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001364 [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
1365 [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
1366 [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
1367 [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
garciadeblas0d45bc82018-11-19 14:25:13 +01001368 [ "${OPTARG}" == "pullimages" ] && continue
garciadeblasb5a630f2020-03-05 18:32:16 +00001369 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001370 [ "${OPTARG}" == "charmed" ] && CHARMED="y" && continue
1371 [ "${OPTARG}" == "bundle" ] && continue
1372 [ "${OPTARG}" == "kubeconfig" ] && continue
1373 [ "${OPTARG}" == "lxdendpoint" ] && continue
1374 [ "${OPTARG}" == "lxdcert" ] && continue
1375 [ "${OPTARG}" == "microstack" ] && continue
David Garcia69388c22020-05-07 12:14:19 +02001376 [ "${OPTARG}" == "tag" ] && continue
magnussonl1bbe9452020-02-25 13:43:17 +01001377 [ "${OPTARG}" == "pla" ] && INSTALL_PLA="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001378 echo -e "Invalid option: '--$OPTARG'\n" >&2
1379 usage && exit 1
1380 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001381 :)
1382 echo "Option -$OPTARG requires an argument" >&2
1383 usage && exit 1
1384 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001385 \?)
1386 echo -e "Invalid option: '-$OPTARG'\n" >&2
1387 usage && exit 1
1388 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001389 h)
1390 usage && exit 0
1391 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001392 y)
1393 ASSUME_YES="y"
1394 ;;
1395 *)
1396 usage && exit 1
1397 ;;
1398 esac
1399done
1400
garciadeblas0e596bc2018-05-28 16:04:42 +02001401[ -n "$TO_REBUILD" ] && [ "$TO_REBUILD" != " NONE" ] && echo $TO_REBUILD | grep -q NONE && FATAL "Incompatible option: -m NONE cannot be used with other -m options"
magnussonl1bbe9452020-02-25 13:43:17 +01001402[ -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 +02001403
garciadeblasd8bc5c32018-05-09 17:37:56 +02001404if [ -n "$SHOWOPTS" ]; then
1405 dump_vars
1406 exit 0
1407fi
1408
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001409if [ -n "$CHARMED" ]; then
1410 if [ -n "$UNINSTALL" ]; then
1411 /usr/share/osm-devops/installers/charmed_uninstall.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D /usr/share/osm-devops -t $DOCKER_TAG "$@"
1412 else
1413 /usr/share/osm-devops/installers/charmed_install.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D /usr/share/osm-devops -t $DOCKER_TAG "$@"
1414 fi
1415
1416 echo "Your installation is now complete, follow these steps for configuring the osmclient:"
1417 echo
1418 echo "1. Get the NBI IP with the following command:"
1419 echo
1420 echo "juju status --format yaml | yq r - applications.nbi-k8s.address"
1421 echo
1422 echo "2. Create the OSM_HOSTNAME environment variable with the NBI IP"
1423 echo
1424 echo "export OSM_HOSTNAME=<NBI-IP>"
1425 echo
1426 echo "3. Add the previous command to your .bashrc for other Shell sessions"
1427 echo
1428 echo "export OSM_HOSTNAME=<previous-IP> >> ~/.bashrc"
1429 echo
1430 echo "DONE"
1431
1432 exit 0
1433fi
1434
garciadeblasd8bc5c32018-05-09 17:37:56 +02001435# if develop, we force master
1436[ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
1437
David Garcia404ae122020-04-28 11:47:55 +02001438need_packages="git wget curl tar"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001439echo -e "Checking required packages: $need_packages"
1440dpkg -l $need_packages &>/dev/null \
1441 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1442 || sudo apt-get update \
1443 || FATAL "failed to run apt-get update"
1444dpkg -l $need_packages &>/dev/null \
1445 || ! echo -e "Installing $need_packages requires root privileges." \
1446 || sudo apt-get install -y $need_packages \
1447 || FATAL "failed to install $need_packages"
David Garcia404ae122020-04-28 11:47:55 +02001448sudo snap install jq
garciadeblasd8bc5c32018-05-09 17:37:56 +02001449if [ -z "$OSM_DEVOPS" ]; then
Michael Marchettiee374142018-08-02 22:47:16 +02001450 if [ -n "$TEST_INSTALLER" ]; then
1451 echo -e "\nUsing local devops repo for OSM installation"
1452 OSM_DEVOPS="$(dirname $(realpath $(dirname $0)))"
1453 else
1454 echo -e "\nCreating temporary dir for OSM installation"
1455 OSM_DEVOPS="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
1456 trap 'rm -rf "$OSM_DEVOPS"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001457
Michael Marchettiee374142018-08-02 22:47:16 +02001458 git clone https://osm.etsi.org/gerrit/osm/devops.git $OSM_DEVOPS
garciadeblasd8bc5c32018-05-09 17:37:56 +02001459
Michael Marchettiee374142018-08-02 22:47:16 +02001460 if [ -z "$COMMIT_ID" ]; then
1461 echo -e "\nGuessing the current stable release"
1462 LATEST_STABLE_DEVOPS=`git -C $OSM_DEVOPS tag -l v[0-9].* | sort -V | tail -n1`
1463 [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
1464
1465 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
1466 COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
1467 else
1468 echo -e "\nDEVOPS Using commit $COMMIT_ID"
1469 fi
1470 git -C $OSM_DEVOPS checkout $COMMIT_ID
garciadeblasd8bc5c32018-05-09 17:37:56 +02001471 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001472fi
1473
garciadeblas3c25fab2019-11-18 17:24:43 +01001474. $OSM_DEVOPS/common/all_funcs
garciadeblasd8bc5c32018-05-09 17:37:56 +02001475
1476[ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight && echo -e "\nDONE" && exit 0
garciadeblas6c66abf2018-05-16 14:46:19 +02001477[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
lavado6ad812e2019-11-29 10:58:58 -05001478#[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
garciadeblas6c66abf2018-05-16 14:46:19 +02001479[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
garciadeblasb5a630f2020-03-05 18:32:16 +00001480[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_K8S_MONITOR" ] && install_k8s_monitoring
garciadeblas6c66abf2018-05-16 14:46:19 +02001481[ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
garciadeblasd8bc5c32018-05-09 17:37:56 +02001482
1483#Installation starts here
garciadeblas44c02192019-12-09 01:36:57 +01001484wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001485track start
1486
garciadeblasd8bc5c32018-05-09 17:37:56 +02001487[ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight && echo -e "\nDONE" && exit 0
1488echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
1489if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
1490 ! ask_user "The installation will take about 75-90 minutes. Continue (Y/n)? " y && echo "Cancelled!" && exit 1
1491fi
1492
1493echo -e "Checking required packages: lxd"
1494lxd --version &>/dev/null || FATAL "lxd not present, exiting."
1495[ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
1496
garciadeblasd8bc5c32018-05-09 17:37:56 +02001497# use local devops for containers
1498export OSM_USE_LOCAL_DEVOPS=true
garciadeblasd8bc5c32018-05-09 17:37:56 +02001499
1500#Install osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +02001501
1502#Install vim-emu (optional)
peusterm76353e42018-05-08 13:56:05 +02001503[ -n "$INSTALL_VIMEMU" ] && install_docker_ce && install_vimemu
garciadeblasd8bc5c32018-05-09 17:37:56 +02001504
garciadeblas44c02192019-12-09 01:36:57 +01001505wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblasd8bc5c32018-05-09 17:37:56 +02001506track end
1507echo -e "\nDONE"
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001508