blob: 14cd58b2bab1368f79ef72cd752bb37f64ca66ca [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"
garciadeblasfc5bb142019-12-10 10:49:12 +010038 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, NONE)"
39 echo -e " -o <ADDON>: ONLY (un)installs one of the addons (vimemu, elk_stack)"
garciadeblase990f662018-05-18 11:43:39 +020040 echo -e " -D <devops path> use local devops installation path"
Mike Marchettib8420852018-09-13 13:45:06 -040041 echo -e " -w <work dir> Location to store runtime installation"
Mike Marchetti13d76c82018-09-19 15:00:36 -040042 echo -e " -t <docker tag> specify osm docker tag (default is latest)"
garciadeblasd41f5482018-05-25 10:25:06 +020043 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 +020044 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 -040045 echo -e " --nojuju: do not juju, assumes already installed"
46 echo -e " --nodockerbuild:do not build docker images (use existing locally cached images)"
47 echo -e " --nohostports: do not expose docker ports to host (useful for creating multiple instances of osm on the same host)"
48 echo -e " --nohostclient: do not install the osmclient"
garciadeblase990f662018-05-18 11:43:39 +020049 echo -e " --uninstall: uninstall OSM: remove the containers and delete NAT rules"
50 echo -e " --source: install OSM from source code using the latest stable tag"
garciadeblasd8bc5c32018-05-09 17:37:56 +020051 echo -e " --develop: (deprecated, use '-b master') install OSM from source code using the master branch"
garciadeblasd41f5482018-05-25 10:25:06 +020052 echo -e " --soui: install classic build of OSM (Rel THREE v3.1, based on LXD containers, with SO and UI)"
53 echo -e " --lxdimages: (only for Rel THREE with --soui) download lxd images from OSM repository instead of creating them from scratch"
Mike Marchettida8a9c42018-10-01 15:25:15 -040054 echo -e " --pullimages: pull/run osm images from docker.io/opensourcemano"
romeromonsere366b1a2019-11-19 19:49:26 +010055 echo -e " --k8s_monitor: install the OSM kubernetes moitoring with prometheus and grafana"
garciadeblasd41f5482018-05-25 10:25:06 +020056 echo -e " -l <lxd_repo>: (only for Rel THREE with --soui) use specified repository url for lxd images"
57 echo -e " -p <path>: (only for Rel THREE with --soui) use specified repository path for lxd images"
garciadeblasd8bc5c32018-05-09 17:37:56 +020058# echo -e " --reconfigure: reconfigure the modules (DO NOT change NAT rules)"
garciadeblasd41f5482018-05-25 10:25:06 +020059 echo -e " --nat: (only for Rel THREE with --soui) install only NAT rules"
60 echo -e " --noconfigure: (only for Rel THREE with --soui) DO NOT install osmclient, DO NOT install NAT rules, DO NOT configure modules"
garciadeblasd8bc5c32018-05-09 17:37:56 +020061# echo -e " --update: update to the latest stable release or to the latest commit if using a specific branch"
62 echo -e " --showopts: print chosen options and exit (only for debugging)"
63 echo -e " -y: do not prompt for confirmation, assumes yes"
garciadeblasd8bc5c32018-05-09 17:37:56 +020064 echo -e " -h / --help: print this help"
65}
66
67#Uninstall OSM: remove containers
68function uninstall(){
69 echo -e "\nUninstalling OSM"
70 if [ $RC_CLONE ] || [ -n "$TEST_INSTALLER" ]; then
71 $OSM_DEVOPS/jenkins/host/clean_container RO
72 $OSM_DEVOPS/jenkins/host/clean_container VCA
73 $OSM_DEVOPS/jenkins/host/clean_container MON
74 $OSM_DEVOPS/jenkins/host/clean_container SO
75 #$OSM_DEVOPS/jenkins/host/clean_container UI
76 else
77 lxc stop RO && lxc delete RO
78 lxc stop VCA && lxc delete VCA
79 lxc stop MON && lxc delete MON
80 lxc stop SO-ub && lxc delete SO-ub
81 fi
82 echo -e "\nDeleting imported lxd images if they exist"
83 lxc image show osm-ro &>/dev/null && lxc image delete osm-ro
84 lxc image show osm-vca &>/dev/null && lxc image delete osm-vca
85 lxc image show osm-soui &>/dev/null && lxc image delete osm-soui
86 return 0
87}
88
Mike Marchettib8420852018-09-13 13:45:06 -040089# takes a juju/accounts.yaml file and returns the password specific
Adam Israel8232e562018-11-21 16:47:45 -050090# for a controller. I wrote this using only bash tools to minimize
Mike Marchettib8420852018-09-13 13:45:06 -040091# additions of other packages
92function parse_juju_password {
93 password_file="${HOME}/.local/share/juju/accounts.yaml"
94 local controller_name=$1
95 local s='[[:space:]]*' w='[a-zA-Z0-9_-]*' fs=$(echo @|tr @ '\034')
96 sed -ne "s|^\($s\):|\1|" \
97 -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
98 -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $password_file |
99 awk -F$fs -v controller=$controller_name '{
100 indent = length($1)/2;
101 vname[indent] = $2;
102 for (i in vname) {if (i > indent) {delete vname[i]}}
103 if (length($3) > 0) {
104 vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
105 if (match(vn,controller) && match($2,"password")) {
106 printf("%s",$3);
107 }
108 }
109 }'
110}
111
Benjamin Diazba2cca92018-11-08 21:07:15 -0300112function generate_secret() {
113 head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32
114}
115
Mike Marchettib8420852018-09-13 13:45:06 -0400116function remove_volumes() {
vijaynag8339ed22019-07-25 17:10:58 +0530117 if [ -n "$KUBERNETES" ]; then
118 k8_volume=$1
119 echo "Removing ${k8_volume}"
120 $WORKDIR_SUDO rm -rf ${k8_volume}
121 else
122 stack=$1
garciadeblasac550f22019-12-11 11:17:06 +0100123 volumes="mongo_db mon_db osm_packages ro_db pol_db prom_db ro"
vijaynag8339ed22019-07-25 17:10:58 +0530124 for volume in $volumes; do
125 sg docker -c "docker volume rm ${stack}_${volume}"
126 done
127 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400128}
129
130function remove_network() {
131 stack=$1
132 sg docker -c "docker network rm net${stack}"
133}
134
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100135function remove_iptables() {
136 stack=$1
137 if [ -z "$OSM_VCA_HOST" ]; then
138 OSM_VCA_HOST=`sg lxd -c "juju show-controller ${stack}"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
139 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
140 fi
141
David Garcia26432d42019-12-11 12:22:35 +0100142 if [ -z "$DEFAULT_IP" ]; then
143 DEFAULT_IF=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
144 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
145 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
146 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
147 fi
148
149 if sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
150 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 +0100151 sudo netfilter-persistent save
152 fi
153}
154
garciadeblas5b857d32018-05-24 18:37:58 +0200155function remove_stack() {
156 stack=$1
garciadeblas5ef98212018-05-28 09:25:36 +0200157 if sg docker -c "docker stack ps ${stack}" ; then
garciadeblas5b857d32018-05-24 18:37:58 +0200158 echo -e "\nRemoving stack ${stack}" && sg docker -c "docker stack rm ${stack}"
159 COUNTER=0
160 result=1
161 while [ ${COUNTER} -lt 30 ]; do
162 result=$(sg docker -c "docker stack ps ${stack}" | wc -l)
163 #echo "Dockers running: $result"
164 if [ "${result}" == "0" ]; then
165 break
166 fi
167 let COUNTER=COUNTER+1
168 sleep 1
169 done
garciadeblasd8bc5c32018-05-09 17:37:56 +0200170 if [ "${result}" == "0" ]; then
garciadeblas5b857d32018-05-24 18:37:58 +0200171 echo "All dockers of the stack ${stack} were removed"
172 else
173 FATAL "Some dockers of the stack ${stack} could not be removed. Could not clean it."
garciadeblasd8bc5c32018-05-09 17:37:56 +0200174 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200175 sleep 5
garciadeblasd8bc5c32018-05-09 17:37:56 +0200176 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200177}
178
vijaynag8339ed22019-07-25 17:10:58 +0530179#removes osm deployments and services
180function remove_k8s_namespace() {
181 kubectl delete ns $1
182}
183
garciadeblas5b857d32018-05-24 18:37:58 +0200184#Uninstall lightweight OSM: remove dockers
185function uninstall_lightweight() {
garciadeblas282ff4e2018-07-10 09:16:30 +0200186 if [ -n "$INSTALL_ONLY" ]; then
187 if [ -n "$INSTALL_ELK" ]; then
188 echo -e "\nUninstalling OSM ELK stack"
189 remove_stack osm_elk
Mike Marchettib8420852018-09-13 13:45:06 -0400190 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas282ff4e2018-07-10 09:16:30 +0200191 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200192 else
193 echo -e "\nUninstalling OSM"
vijaynag8339ed22019-07-25 17:10:58 +0530194 if [ -n "$KUBERNETES" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +0100195 if [ -n "$K8S_MONITOR" ]; then
196 # uninstall OSM MONITORING
197 uninstall_k8s_monitoring
198 fi
vijaynag8339ed22019-07-25 17:10:58 +0530199 remove_k8s_namespace $OSM_STACK_NAME
200 else
Dominik4763cfe2019-11-27 12:15:50 +0100201
vijaynag8339ed22019-07-25 17:10:58 +0530202 remove_stack $OSM_STACK_NAME
203 remove_stack osm_elk
vijaynag8339ed22019-07-25 17:10:58 +0530204 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200205 echo "Now osm docker images and volumes will be deleted"
206 newgrp docker << EONG
lavado02ad4b02018-11-28 11:30:48 -0500207 docker image rm ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}
208 docker image rm ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}
209 docker image rm ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}
210 docker image rm ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}
211 docker image rm ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}
212 docker image rm ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}
213 docker image rm ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}
214 docker image rm ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}
garciadeblas83ca1322018-05-22 18:31:14 +0200215EONG
vijaynag8339ed22019-07-25 17:10:58 +0530216
217 if [ -n "$KUBERNETES" ]; then
218 OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
219 remove_volumes $OSM_NAMESPACE_VOL
220 else
221 remove_volumes $OSM_STACK_NAME
222 remove_network $OSM_STACK_NAME
223 fi
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100224 remove_iptables $OSM_STACK_NAME
Mike Marchettib8420852018-09-13 13:45:06 -0400225 echo "Removing $OSM_DOCKER_WORK_DIR"
226 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR
Adam Israel843764e2019-06-11 10:28:43 -0400227 sg lxd -c "juju destroy-controller --destroy-all-models --yes $OSM_STACK_NAME"
garciadeblas282ff4e2018-07-10 09:16:30 +0200228 fi
229 echo "Some docker images will be kept in case they are used by other docker stacks"
230 echo "To remove them, just run 'docker image prune' in a terminal"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200231 return 0
232}
233
234#Configure NAT rules, based on the current IP addresses of containers
235function nat(){
236 echo -e "\nChecking required packages: iptables-persistent"
237 dpkg -l iptables-persistent &>/dev/null || ! echo -e " Not installed.\nInstalling iptables-persistent requires root privileges" || \
garciadeblas7cc70222019-12-09 01:24:18 +0100238 sudo apt-get -yq install iptables-persistent
garciadeblasd8bc5c32018-05-09 17:37:56 +0200239 echo -e "\nConfiguring NAT rules"
240 echo -e " Required root privileges"
241 sudo $OSM_DEVOPS/installers/nat_osm
242}
243
244function FATAL(){
245 echo "FATAL error: Cannot install OSM due to \"$1\""
246 exit 1
247}
248
249#Update RO, SO and UI:
250function update(){
251 echo -e "\nUpdating components"
252
253 echo -e " Updating RO"
254 CONTAINER="RO"
255 MDG="RO"
256 INSTALL_FOLDER="/opt/openmano"
257 echo -e " Fetching the repo"
258 lxc exec $CONTAINER -- git -C $INSTALL_FOLDER fetch --all
259 BRANCH=""
260 BRANCH=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
261 [ -z "$BRANCH" ] && FATAL "Could not find the current branch in use in the '$MDG'"
262 CURRENT=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
263 CURRENT_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
264 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
265 # COMMIT_ID either was previously set with -b option, or is an empty string
266 CHECKOUT_ID=$COMMIT_ID
267 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID="tags/$LATEST_STABLE_DEVOPS"
268 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID="$BRANCH"
269 if [[ $CHECKOUT_ID == "tags/"* ]]; then
270 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
271 else
272 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
273 fi
274 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
275 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
276 echo " Nothing to be done."
277 else
278 echo " Update required."
279 lxc exec $CONTAINER -- service osm-ro stop
280 lxc exec $CONTAINER -- git -C /opt/openmano stash
281 lxc exec $CONTAINER -- git -C /opt/openmano pull --rebase
282 lxc exec $CONTAINER -- git -C /opt/openmano checkout $CHECKOUT_ID
283 lxc exec $CONTAINER -- git -C /opt/openmano stash pop
284 lxc exec $CONTAINER -- /opt/openmano/database_utils/migrate_mano_db.sh
285 lxc exec $CONTAINER -- service osm-ro start
286 fi
287 echo
288
289 echo -e " Updating SO and UI"
290 CONTAINER="SO-ub"
291 MDG="SO"
292 INSTALL_FOLDER="" # To be filled in
293 echo -e " Fetching the repo"
294 lxc exec $CONTAINER -- git -C $INSTALL_FOLDER fetch --all
295 BRANCH=""
296 BRANCH=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
297 [ -z "$BRANCH" ] && FATAL "Could not find the current branch in use in the '$MDG'"
298 CURRENT=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
299 CURRENT_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
300 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
301 # COMMIT_ID either was previously set with -b option, or is an empty string
302 CHECKOUT_ID=$COMMIT_ID
303 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID="tags/$LATEST_STABLE_DEVOPS"
304 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID="$BRANCH"
305 if [[ $CHECKOUT_ID == "tags/"* ]]; then
306 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
307 else
308 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
309 fi
310 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
311 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
312 echo " Nothing to be done."
313 else
314 echo " Update required."
315 # Instructions to be added
316 # lxc exec SO-ub -- ...
317 fi
318 echo
319 echo -e "Updating MON Container"
320 CONTAINER="MON"
321 MDG="MON"
322 INSTALL_FOLDER="/root/MON"
323 echo -e " Fetching the repo"
324 lxc exec $CONTAINER -- git -C $INSTALL_FOLDER fetch --all
325 BRANCH=""
326 BRANCH=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
327 [ -z "$BRANCH" ] && FATAL "Could not find the current branch in use in the '$MDG'"
328 CURRENT=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
329 CURRENT_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
330 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
331 # COMMIT_ID either was previously set with -b option, or is an empty string
332 CHECKOUT_ID=$COMMIT_ID
333 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID="tags/$LATEST_STABLE_DEVOPS"
334 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID="$BRANCH"
335 if [[ $CHECKOUT_ID == "tags/"* ]]; then
336 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
337 else
338 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
339 fi
340 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
341 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
342 echo " Nothing to be done."
343 else
344 echo " Update required."
345 fi
346 echo
347}
348
349function so_is_up() {
350 if [ -n "$1" ]; then
351 SO_IP=$1
352 else
353 SO_IP=`lxc list SO-ub -c 4|grep eth0 |awk '{print $2}'`
354 fi
355 time=0
356 step=5
357 timelength=300
358 while [ $time -le $timelength ]
359 do
360 if [[ `curl -k -X GET https://$SO_IP:8008/api/operational/vcs/info \
361 -H 'accept: application/vnd.yang.data+json' \
362 -H 'authorization: Basic YWRtaW46YWRtaW4=' \
363 -H 'cache-control: no-cache' 2> /dev/null | jq '.[].components.component_info[] | select(.component_name=="RW.Restconf")' 2>/dev/null | grep "RUNNING" | wc -l` -eq 1 ]]
364 then
365 echo "RW.Restconf running....SO is up"
366 return 0
367 fi
368
369 sleep $step
370 echo -n "."
371 time=$((time+step))
372 done
373
374 FATAL "OSM Failed to startup. SO failed to startup"
375}
376
377function vca_is_up() {
378 if [[ `lxc exec VCA -- juju status | grep "osm" | wc -l` -eq 1 ]]; then
379 echo "VCA is up and running"
380 return 0
381 fi
382
383 FATAL "OSM Failed to startup. VCA failed to startup"
384}
385
386function mon_is_up() {
387 if [[ `curl http://$RO_IP:9090/openmano/ | grep "works" | wc -l` -eq 1 ]]; then
388 echo "MON is up and running"
389 return 0
390 fi
391
392 FATAL "OSM Failed to startup. MON failed to startup"
393}
394
395function ro_is_up() {
396 if [ -n "$1" ]; then
397 RO_IP=$1
398 else
399 RO_IP=`lxc list RO -c 4|grep eth0 |awk '{print $2}'`
400 fi
401 time=0
402 step=2
403 timelength=20
404 while [ $time -le $timelength ]; do
405 if [[ `curl http://$RO_IP:9090/openmano/ | grep "works" | wc -l` -eq 1 ]]; then
406 echo "RO is up and running"
407 return 0
408 fi
409 sleep $step
410 echo -n "."
411 time=$((time+step))
412 done
413
414 FATAL "OSM Failed to startup. RO failed to startup"
415}
416
417
418function configure_RO(){
419 . $OSM_DEVOPS/installers/export_ips
420 echo -e " Configuring RO"
421 lxc exec RO -- sed -i -e "s/^\#\?log_socket_host:.*/log_socket_host: $SO_CONTAINER_IP/g" /etc/osm/openmanod.cfg
422 lxc exec RO -- service osm-ro restart
423
424 ro_is_up
425
426 lxc exec RO -- openmano tenant-delete -f osm >/dev/null
427 lxc exec RO -- openmano tenant-create osm > /dev/null
428 lxc exec RO -- sed -i '/export OPENMANO_TENANT=osm/d' .bashrc
429 lxc exec RO -- sed -i '$ i export OPENMANO_TENANT=osm' .bashrc
430 lxc exec RO -- sh -c 'echo "export OPENMANO_TENANT=osm" >> .bashrc'
431}
432
433function configure_VCA(){
434 echo -e " Configuring VCA"
Benjamin Diazba2cca92018-11-08 21:07:15 -0300435 JUJU_PASSWD=$(generate_secret)
garciadeblasd8bc5c32018-05-09 17:37:56 +0200436 echo -e "$JUJU_PASSWD\n$JUJU_PASSWD" | lxc exec VCA -- juju change-user-password
437}
438
439function configure_SOUI(){
440 . $OSM_DEVOPS/installers/export_ips
441 JUJU_CONTROLLER_IP=`lxc exec VCA -- lxc list -c 4 |grep eth0 |awk '{print $2}'`
442 RO_TENANT_ID=`lxc exec RO -- openmano tenant-list osm |awk '{print $1}'`
443
444 echo -e " Configuring MON"
445 #Information to be added about SO socket for logging
446
447 echo -e " Configuring SO"
448 sudo route add -host $JUJU_CONTROLLER_IP gw $VCA_CONTAINER_IP
garciadeblas818fa5a2018-05-10 13:39:10 +0200449 sudo ip route add 10.44.127.0/24 via $VCA_CONTAINER_IP
garciadeblasd8bc5c32018-05-09 17:37:56 +0200450 sudo sed -i "$ i route add -host $JUJU_CONTROLLER_IP gw $VCA_CONTAINER_IP" /etc/rc.local
garciadeblas818fa5a2018-05-10 13:39:10 +0200451 sudo sed -i "$ i ip route add 10.44.127.0/24 via $VCA_CONTAINER_IP" /etc/rc.local
garciadeblasd8bc5c32018-05-09 17:37:56 +0200452 # make journaling persistent
453 lxc exec SO-ub -- mkdir -p /var/log/journal
454 lxc exec SO-ub -- systemd-tmpfiles --create --prefix /var/log/journal
455 lxc exec SO-ub -- systemctl restart systemd-journald
456
457 echo RIFT_EXTERNAL_ADDRESS=$DEFAULT_IP | lxc exec SO-ub -- tee -a /usr/rift/etc/default/launchpad
458
459 lxc exec SO-ub -- systemctl restart launchpad
460
461 so_is_up $SO_CONTAINER_IP
462
463 #delete existing config agent (could be there on reconfigure)
464 curl -k --request DELETE \
465 --url https://$SO_CONTAINER_IP:8008/api/config/config-agent/account/osmjuju \
466 --header 'accept: application/vnd.yang.data+json' \
467 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
468 --header 'cache-control: no-cache' \
469 --header 'content-type: application/vnd.yang.data+json' &> /dev/null
470
471 result=$(curl -k --request POST \
472 --url https://$SO_CONTAINER_IP:8008/api/config/config-agent \
473 --header 'accept: application/vnd.yang.data+json' \
474 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
475 --header 'cache-control: no-cache' \
476 --header 'content-type: application/vnd.yang.data+json' \
477 --data '{"account": [ { "name": "osmjuju", "account-type": "juju", "juju": { "ip-address": "'$JUJU_CONTROLLER_IP'", "port": "17070", "user": "admin", "secret": "'$JUJU_PASSWD'" } } ]}')
478 [[ $result =~ .*success.* ]] || FATAL "Failed config-agent configuration: $result"
479
480 #R1/R2 config line
481 #result=$(curl -k --request PUT \
482 # --url https://$SO_CONTAINER_IP:8008/api/config/resource-orchestrator \
483 # --header 'accept: application/vnd.yang.data+json' \
484 # --header 'authorization: Basic YWRtaW46YWRtaW4=' \
485 # --header 'cache-control: no-cache' \
486 # --header 'content-type: application/vnd.yang.data+json' \
487 # --data '{ "openmano": { "host": "'$RO_CONTAINER_IP'", "port": "9090", "tenant-id": "'$RO_TENANT_ID'" }, "name": "osmopenmano", "account-type": "openmano" }')
488
489 result=$(curl -k --request PUT \
490 --url https://$SO_CONTAINER_IP:8008/api/config/project/default/ro-account/account \
491 --header 'accept: application/vnd.yang.data+json' \
492 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
493 --header 'cache-control: no-cache' \
494 --header 'content-type: application/vnd.yang.data+json' \
495 --data '{"rw-ro-account:account": [ { "openmano": { "host": "'$RO_CONTAINER_IP'", "port": "9090", "tenant-id": "'$RO_TENANT_ID'"}, "name": "osmopenmano", "ro-account-type": "openmano" }]}')
496 [[ $result =~ .*success.* ]] || FATAL "Failed resource-orchestrator configuration: $result"
497
498 result=$(curl -k --request PATCH \
499 --url https://$SO_CONTAINER_IP:8008/v2/api/config/openidc-provider-config/rw-ui-client/redirect-uri \
500 --header 'accept: application/vnd.yang.data+json' \
501 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
502 --header 'cache-control: no-cache' \
503 --header 'content-type: application/vnd.yang.data+json' \
504 --data '{"redirect-uri": "https://'$DEFAULT_IP':8443/callback" }')
505 [[ $result =~ .*success.* ]] || FATAL "Failed redirect-uri configuration: $result"
506
507 result=$(curl -k --request PATCH \
508 --url https://$SO_CONTAINER_IP:8008/v2/api/config/openidc-provider-config/rw-ui-client/post-logout-redirect-uri \
509 --header 'accept: application/vnd.yang.data+json' \
510 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
511 --header 'cache-control: no-cache' \
512 --header 'content-type: application/vnd.yang.data+json' \
513 --data '{"post-logout-redirect-uri": "https://'$DEFAULT_IP':8443/?api_server=https://'$DEFAULT_IP'" }')
514 [[ $result =~ .*success.* ]] || FATAL "Failed post-logout-redirect-uri configuration: $result"
515
516 lxc exec SO-ub -- tee /etc/network/interfaces.d/60-rift.cfg <<EOF
517auto lo:1
518iface lo:1 inet static
519 address $DEFAULT_IP
520 netmask 255.255.255.255
521EOF
522 lxc exec SO-ub ifup lo:1
523}
524
525#Configure RO, VCA, and SO with the initial configuration:
526# RO -> tenant:osm, logs to be sent to SO
527# VCA -> juju-password
528# SO -> route to Juju Controller, add RO account, add VCA account
529function configure(){
530 #Configure components
531 echo -e "\nConfiguring components"
532 configure_RO
533 configure_VCA
534 configure_SOUI
535}
536
537function install_lxd() {
538 sudo apt-get update
539 sudo apt-get install -y lxd
540 newgrp lxd
541 lxd init --auto
542 lxd waitready
543 lxc network create lxdbr0 ipv4.address=auto ipv4.nat=true ipv6.address=none ipv6.nat=false
544 DEFAULT_INTERFACE=$(route -n | awk '$1~/^0.0.0.0/ {print $8}')
545 DEFAULT_MTU=$(ip addr show $DEFAULT_INTERFACE | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
546 lxc profile device set default eth0 mtu $DEFAULT_MTU
547 #sudo systemctl stop lxd-bridge
548 #sudo systemctl --system daemon-reload
549 #sudo systemctl enable lxd-bridge
550 #sudo systemctl start lxd-bridge
551}
552
553function ask_user(){
554 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
555 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
556 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
557 read -e -p "$1" USER_CONFIRMATION
558 while true ; do
559 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
560 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
561 [ "${USER_CONFIRMATION,,}" == "yes" ] || [ "${USER_CONFIRMATION,,}" == "y" ] && return 0
562 [ "${USER_CONFIRMATION,,}" == "no" ] || [ "${USER_CONFIRMATION,,}" == "n" ] && return 1
563 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
564 done
565}
566
567function launch_container_from_lxd(){
568 export OSM_MDG=$1
569 OSM_load_config
570 export OSM_BASE_IMAGE=$2
571 if ! container_exists $OSM_BUILD_CONTAINER; then
572 CONTAINER_OPTS=""
573 [[ "$OSM_BUILD_CONTAINER_PRIVILEGED" == yes ]] && CONTAINER_OPTS="$CONTAINER_OPTS -c security.privileged=true"
574 [[ "$OSM_BUILD_CONTAINER_ALLOW_NESTED" == yes ]] && CONTAINER_OPTS="$CONTAINER_OPTS -c security.nesting=true"
575 create_container $OSM_BASE_IMAGE $OSM_BUILD_CONTAINER $CONTAINER_OPTS
576 wait_container_up $OSM_BUILD_CONTAINER
577 fi
578}
579
580function install_osmclient(){
581 CLIENT_RELEASE=${RELEASE#"-R "}
582 CLIENT_REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
583 CLIENT_REPOSITORY=${REPOSITORY#"-r "}
garciadeblasd8bc5c32018-05-09 17:37:56 +0200584 CLIENT_REPOSITORY_BASE=${REPOSITORY_BASE#"-u "}
585 key_location=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
586 curl $key_location | sudo apt-key add -
garciadeblas078f5982019-11-27 15:06:06 +0100587 sudo add-apt-repository -y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient IM"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200588 sudo apt-get update
garciadeblas078f5982019-11-27 15:06:06 +0100589 sudo apt-get install -y python3-pip
590 sudo -H LC_ALL=C python3 -m pip install -U pip
garciadeblas1c097b22019-11-29 14:17:12 +0100591 sudo -H LC_ALL=C python3 -m pip install -U python-magic pyangbind
garciadeblasda89ee72019-11-28 02:19:59 +0100592 sudo apt-get install -y python3-osm-im python3-osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +0200593 #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
594 #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
595 #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
596 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME=`lxc list | awk '($2=="SO-ub"){print $6}'`
597 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME=`lxc list | awk '($2=="RO"){print $6}'`
garciadeblasd8bc5c32018-05-09 17:37:56 +0200598 echo -e "\nOSM client installed"
garciadeblasc3226982018-11-27 11:32:47 +0100599 if [ -z "$INSTALL_LIGHTWEIGHT" ]; then
600 echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
601 echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
602 echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
603 else
604 echo -e "OSM client assumes that OSM host is running in localhost (127.0.0.1)."
605 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:"
606 echo " export OSM_HOSTNAME=<OSM_host>"
607 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +0200608 return 0
609}
610
lavado6ad812e2019-11-29 10:58:58 -0500611function install_prometheus_nodeexporter(){
lavadoc26d90b2019-12-06 18:11:36 -0500612 if (systemctl -q is-active node_exporter)
613 then
614 echo "Node Exporter is already running."
615 else
616 echo "Node Exporter is not active, installing..."
617 if getent passwd node_exporter > /dev/null 2>&1; then
618 echo "node_exporter user exists"
619 else
620 echo "Creating user node_exporter"
621 sudo useradd --no-create-home --shell /bin/false node_exporter
622 fi
623 sudo 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/
624 sudo tar -C /tmp -xf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz
625 sudo cp /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64/node_exporter /usr/local/bin
626 sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
627 sudo rm -rf node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64*
628 sudo cp ${OSM_DEVOPS}/installers/docker/files/node_exporter.service /etc/systemd/system/node_exporter.service
629 sudo systemctl daemon-reload
630 sudo systemctl restart node_exporter
631 sudo systemctl enable node_exporter
632 echo "Node Exporter has been activated in this host."
633 fi
lavado6ad812e2019-11-29 10:58:58 -0500634 return 0
635}
636
lavado1e4a88c2019-12-03 16:19:59 -0500637function uninstall_prometheus_nodeexporter(){
638 sudo systemctl stop node_exporter
639 sudo systemctl disable node_exporter
640 sudo rm /etc/systemd/system/node_exporter.service
641 sudo systemctl daemon-reload
642 sudo userdel node_exporter
643 sudo rm /usr/local/bin/node_exporter
644 return 0
645}
646
garciadeblasd8bc5c32018-05-09 17:37:56 +0200647function install_from_lxdimages(){
648 LXD_RELEASE=${RELEASE#"-R "}
649 if [ -n "$LXD_REPOSITORY_PATH" ]; then
650 LXD_IMAGE_DIR="$LXD_REPOSITORY_PATH"
651 else
652 LXD_IMAGE_DIR="$(mktemp -d -q --tmpdir "osmimages.XXXXXX")"
653 trap 'rm -rf "$LXD_IMAGE_DIR"' EXIT
654 fi
655 echo -e "\nDeleting previous lxd images if they exist"
656 lxc image show osm-ro &>/dev/null && lxc image delete osm-ro
657 lxc image show osm-vca &>/dev/null && lxc image delete osm-vca
658 lxc image show osm-soui &>/dev/null && lxc image delete osm-soui
659 echo -e "\nImporting osm-ro"
660 [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-ro.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-ro.tar.gz
661 lxc image import $LXD_IMAGE_DIR/osm-ro.tar.gz --alias osm-ro
662 rm -f $LXD_IMAGE_DIR/osm-ro.tar.gz
663 echo -e "\nImporting osm-vca"
664 [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-vca.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-vca.tar.gz
665 lxc image import $LXD_IMAGE_DIR/osm-vca.tar.gz --alias osm-vca
666 rm -f $LXD_IMAGE_DIR/osm-vca.tar.gz
667 echo -e "\nImporting osm-soui"
668 [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-soui.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-soui.tar.gz
669 lxc image import $LXD_IMAGE_DIR/osm-soui.tar.gz --alias osm-soui
670 rm -f $LXD_IMAGE_DIR/osm-soui.tar.gz
671 launch_container_from_lxd RO osm-ro
672 ro_is_up && track RO
673 launch_container_from_lxd VCA osm-vca
674 vca_is_up && track VCA
675 launch_container_from_lxd MON osm-mon
676 mon_is_up && track MON
677 launch_container_from_lxd SO osm-soui
678 #so_is_up && track SOUI
679 track SOUI
680}
681
682function install_docker_ce() {
683 # installs and configures Docker CE
684 echo "Installing Docker CE ..."
685 sudo apt-get -qq update
686 sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
687 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
688 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
689 sudo apt-get -qq update
690 sudo apt-get install -y docker-ce
691 echo "Adding user to group 'docker'"
692 sudo groupadd -f docker
693 sudo usermod -aG docker $USER
garciadeblasd8bc5c32018-05-09 17:37:56 +0200694 sleep 2
695 sudo service docker restart
696 echo "... restarted Docker service"
garciadeblas67ce97c2018-05-18 10:22:09 +0200697 sg docker -c "docker version" || FATAL "Docker installation failed"
698 echo "... Docker CE installation done"
699 return 0
garciadeblasd8bc5c32018-05-09 17:37:56 +0200700}
701
702function install_docker_compose() {
703 # installs and configures docker-compose
704 echo "Installing Docker Compose ..."
705 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
706 sudo chmod +x /usr/local/bin/docker-compose
707 echo "... Docker Compose installation done"
708}
709
710function install_juju() {
711 echo "Installing juju"
Adam Israel41587482019-11-06 10:45:43 -0500712 sudo snap install juju --classic
garciadeblasd41f5482018-05-25 10:25:06 +0200713 [ -z "$INSTALL_NOLXD" ] && sudo dpkg-reconfigure -p medium lxd
Dominik4763cfe2019-11-27 12:15:50 +0100714 [[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200715 echo "Finished installation of juju"
Mike Marchettib8420852018-09-13 13:45:06 -0400716 return 0
717}
718
719function juju_createcontroller() {
Adam Israel8232e562018-11-21 16:47:45 -0500720 if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then
Mike Marchettib8420852018-09-13 13:45:06 -0400721 # Not found created, create the controller
garciadeblas85bb41a2020-01-15 18:20:14 +0100722 sudo usermod -a -G lxd ${USER}
Mike Marchettib8420852018-09-13 13:45:06 -0400723 sg lxd -c "juju bootstrap --bootstrap-series=xenial localhost $OSM_STACK_NAME"
724 fi
Adam Israel8232e562018-11-21 16:47:45 -0500725 [ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200726}
727
Adam Israel5ddc97f2019-09-03 18:11:12 -0400728function juju_createproxy() {
Adam Israel43fb44d2019-11-06 10:37:25 -0500729 echo -e "\nChecking required packages: iptables-persistent"
730 dpkg -l iptables-persistent &>/dev/null || ! echo -e " Not installed.\nInstalling iptables-persistent requires root privileges" || \
garciadeblas7cc70222019-12-09 01:24:18 +0100731 sudo apt-get -yq install iptables-persistent
Adam Israel43fb44d2019-11-06 10:37:25 -0500732
David Garcia26432d42019-12-11 12:22:35 +0100733 if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
734 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 -0400735 sudo netfilter-persistent save
736 fi
737}
738
garciadeblasd8bc5c32018-05-09 17:37:56 +0200739function generate_docker_images() {
740 echo "Pulling and generating docker images"
Michael Marchettiee374142018-08-02 22:47:16 +0200741 _build_from=$COMMIT_ID
742 [ -z "$_build_from" ] && _build_from="master"
743
744 echo "OSM Docker images generated from $_build_from"
745
Mike Marchettib8420852018-09-13 13:45:06 -0400746 BUILD_ARGS+=(--build-arg REPOSITORY="$REPOSITORY")
747 BUILD_ARGS+=(--build-arg RELEASE="$RELEASE")
748 BUILD_ARGS+=(--build-arg REPOSITORY_KEY="$REPOSITORY_KEY")
749 BUILD_ARGS+=(--build-arg REPOSITORY_BASE="$REPOSITORY_BASE")
lavado60216242018-10-10 23:44:28 +0200750
garciadeblas0e596bc2018-05-28 16:04:42 +0200751 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q KAFKA ; then
752 sg docker -c "docker pull wurstmeister/zookeeper" || FATAL "cannot get zookeeper docker image"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300753 sg docker -c "docker pull wurstmeister/kafka:${KAFKA_TAG}" || FATAL "cannot get kafka docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200754 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400755
garciadeblas0e596bc2018-05-28 16:04:42 +0200756 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MONGO ; then
757 sg docker -c "docker pull mongo" || FATAL "cannot get mongo docker image"
758 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400759
lavado60216242018-10-10 23:44:28 +0200760 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
761 sg docker -c "docker pull prom/prometheus:${PROMETHEUS_TAG}" || FATAL "cannot get prometheus docker image"
762 fi
763
garciadeblasfc5bb142019-12-10 10:49:12 +0100764 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS-CADVISOR ; then
765 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
766 fi
767
lavado6ad812e2019-11-29 10:58:58 -0500768 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q GRAFANA ; then
769 sg docker -c "docker pull grafana/grafana:${GRAFANA_TAG}" || FATAL "cannot get grafana docker image"
garciadeblasfc5bb142019-12-10 10:49:12 +0100770 fi
lavado6ad812e2019-11-29 10:58:58 -0500771
garciadeblas4a83e6e2018-12-04 14:55:09 +0100772 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI || echo $TO_REBUILD | grep -q KEYSTONE-DB ; then
lavado9a8df7c2018-10-24 09:35:34 -0500773 sg docker -c "docker pull mariadb:${KEYSTONEDB_TAG}" || FATAL "cannot get keystone-db docker image"
774 fi
775
garciadeblas4a83e6e2018-12-04 14:55:09 +0100776 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
777 sg docker -c "docker pull mysql:5" || FATAL "cannot get mysql docker image"
778 fi
779
Mike Marchettida8a9c42018-10-01 15:25:15 -0400780 if [ -n "$PULL_IMAGES" ]; then
781 sg docker -c "docker pull ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}" || FATAL "cannot pull MON docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400782 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MON ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200783 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/MON
784 git -C ${LWTEMPDIR}/MON checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100785 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 -0500786 fi
787
788 if [ -n "$PULL_IMAGES" ]; then
789 sg docker -c "docker pull ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}" || FATAL "cannot pull POL docker image"
garciadeblas4a83e6e2018-12-04 14:55:09 +0100790 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q POL ; then
lavado9a8df7c2018-10-24 09:35:34 -0500791 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/POL
792 git -C ${LWTEMPDIR}/POL checkout ${COMMIT_ID}
garciadeblas4a83e6e2018-12-04 14:55:09 +0100793 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 +0200794 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400795
796 if [ -n "$PULL_IMAGES" ]; then
797 sg docker -c "docker pull ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}" || FATAL "cannot pull NBI docker image"
lavado9a8df7c2018-10-24 09:35:34 -0500798 sg docker -c "docker pull ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}" || FATAL "cannot pull KEYSTONE docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400799 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200800 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NBI
801 git -C ${LWTEMPDIR}/NBI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100802 sg docker -c "docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t ${DOCKER_USER}/nbi --no-cache" || FATAL "cannot build NBI docker image"
803 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 +0200804 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400805
806 if [ -n "$PULL_IMAGES" ]; then
807 sg docker -c "docker pull ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}" || FATAL "cannot pull RO docker image"
808 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200809 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/RO
810 git -C ${LWTEMPDIR}/RO checkout ${COMMIT_ID}
tierno5cc8ac32019-11-25 10:33:25 +0000811 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 +0200812 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400813
814 if [ -n "$PULL_IMAGES" ]; then
815 sg docker -c "docker pull ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}" || FATAL "cannot pull LCM RO docker image"
816 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LCM ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200817 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LCM
818 git -C ${LWTEMPDIR}/LCM checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100819 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 +0200820 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400821
822 if [ -n "$PULL_IMAGES" ]; then
823 sg docker -c "docker pull ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}" || FATAL "cannot pull light-ui docker image"
824 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-UI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200825 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LW-UI
826 git -C ${LWTEMPDIR}/LW-UI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100827 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 +0200828 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400829
830 if [ -n "$PULL_IMAGES" ]; then
831 sg docker -c "docker pull ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}" || FATAL "cannot pull osmclient docker image"
832 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-osmclient; then
garciadeblas0d45bc82018-11-19 14:25:13 +0100833 sg docker -c "docker build -t ${DOCKER_USER}/osmclient ${BUILD_ARGS[@]} -f $OSM_DEVOPS/docker/osmclient ."
Mike Marchettib8420852018-09-13 13:45:06 -0400834 fi
lavado6ad812e2019-11-29 10:58:58 -0500835
836 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
837 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
838 fi
839
garciadeblasd8bc5c32018-05-09 17:37:56 +0200840 echo "Finished generation of docker images"
841}
842
garciadeblas5b857d32018-05-24 18:37:58 +0200843function cmp_overwrite() {
844 file1="$1"
845 file2="$2"
846 if ! $(cmp "${file1}" "${file2}" >/dev/null 2>&1); then
847 if [ -f "${file2}" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400848 ask_user "The file ${file2} already exists. Overwrite (y/N)? " n && cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200849 else
Mike Marchettib8420852018-09-13 13:45:06 -0400850 cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200851 fi
852 fi
853}
854
garciadeblasd8bc5c32018-05-09 17:37:56 +0200855function generate_docker_env_files() {
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200856 echo "Doing a backup of existing env files"
857 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
858 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
859 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
860 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lwui.env{,~}
861 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
862 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
863 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
864 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
865 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
866
garciadeblasd8bc5c32018-05-09 17:37:56 +0200867 echo "Generating docker env files"
vijaynag8339ed22019-07-25 17:10:58 +0530868 if [ -n "$KUBERNETES" ]; then
869 #Kubernetes resources
870 $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
871 else
872 # Docker-compose
873 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200874
vijaynag8339ed22019-07-25 17:10:58 +0530875 # Prometheus
lavado6ad812e2019-11-29 10:58:58 -0500876 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/files/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus.yml
877
878 # Grafana & Prometheus Exporter files
879 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/files
880 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/files/* $OSM_DOCKER_WORK_DIR/files/
vijaynag8339ed22019-07-25 17:10:58 +0530881 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200882
Benjamin Diazba2cca92018-11-08 21:07:15 -0300883 # LCM
884 if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
885 echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
886 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400887
Benjamin Diazba2cca92018-11-08 21:07:15 -0300888 if ! grep -Fq "OSMLCM_VCA_HOST" $OSM_DOCKER_WORK_DIR/lcm.env; then
889 echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
890 else
891 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_HOST.*|OSMLCM_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/lcm.env
892 fi
893
894 if ! grep -Fq "OSMLCM_VCA_SECRET" $OSM_DOCKER_WORK_DIR/lcm.env; then
895 echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
896 else
897 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_SECRET.*|OSMLCM_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/lcm.env
898 fi
899
garciadeblasaa3ddf42019-04-04 19:04:32 +0200900 if ! grep -Fq "OSMLCM_VCA_PUBKEY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblasec537902019-12-10 14:13:40 +0100901 echo "OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasaa3ddf42019-04-04 19:04:32 +0200902 else
garciadeblasec537902019-12-10 14:13:40 +0100903 $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 +0200904 fi
905
Adam Israelbe7676a2019-10-02 16:10:53 -0400906 if ! grep -Fq "OSMLCM_VCA_CACERT" $OSM_DOCKER_WORK_DIR/lcm.env; then
907 echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
908 else
909 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CACERT.*|OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/lcm.env
910 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -0300911
Adam Israel5ddc97f2019-09-03 18:11:12 -0400912 if ! grep -Fq "OSMLCM_VCA_APIPROXY" $OSM_DOCKER_WORK_DIR/lcm.env; then
913 echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
914 else
915 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_APIPROXY.*|OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
916 fi
917
garciadeblasa2e41842019-12-18 11:05:24 +0100918 if ! grep -Fq "OSMLCM_VCA_ENABLEOSUPGRADE" $OSM_DOCKER_WORK_DIR/lcm.env; then
919 echo "# OSMLCM_VCA_ENABLEOSUPGRADE=false" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
920 fi
921
922 if ! grep -Fq "OSMLCM_VCA_APTMIRROR" $OSM_DOCKER_WORK_DIR/lcm.env; then
923 echo "# OSMLCM_VCA_APTMIRROR=http://archive.ubuntu.com/ubuntu/" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
924 fi
925
Benjamin Diazba2cca92018-11-08 21:07:15 -0300926 # RO
927 MYSQL_ROOT_PASSWORD=$(generate_secret)
Mike Marchettib8420852018-09-13 13:45:06 -0400928 if [ ! -f $OSM_DOCKER_WORK_DIR/ro-db.env ]; then
929 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro-db.env
garciadeblas5b857d32018-05-24 18:37:58 +0200930 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400931 if [ ! -f $OSM_DOCKER_WORK_DIR/ro.env ]; then
932 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro.env
garciadeblas5b857d32018-05-24 18:37:58 +0200933 fi
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100934
Benjamin Diazba2cca92018-11-08 21:07:15 -0300935 # Keystone
Benjamin Diazba2cca92018-11-08 21:07:15 -0300936 KEYSTONE_DB_PASSWORD=$(generate_secret)
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100937 SERVICE_PASSWORD=$(generate_secret)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100938 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone-db.env ]; then
939 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone-db.env
940 fi
941 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone.env ]; then
942 echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100943 echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100944 echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100945 fi
946
Benjamin Diazba2cca92018-11-08 21:07:15 -0300947 # NBI
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100948 if [ ! -f $OSM_DOCKER_WORK_DIR/nbi.env ]; then
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100949 echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/nbi.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300950 echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/nbi.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100951 fi
952
Benjamin Diazba2cca92018-11-08 21:07:15 -0300953 # MON
954 if [ ! -f $OSM_DOCKER_WORK_DIR/mon.env ]; then
955 echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diaz9261c662019-02-25 17:18:51 -0300956 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 -0300957 fi
958
959 if ! grep -Fq "OS_NOTIFIER_URI" $OSM_DOCKER_WORK_DIR/mon.env; then
960 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
961 else
962 $WORKDIR_SUDO sed -i "s|OS_NOTIFIER_URI.*|OS_NOTIFIER_URI=http://$DEFAULT_IP:8662|g" $OSM_DOCKER_WORK_DIR/mon.env
963 fi
964
965 if ! grep -Fq "OSMMON_VCA_HOST" $OSM_DOCKER_WORK_DIR/mon.env; then
966 echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
967 else
968 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_HOST.*|OSMMON_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/mon.env
969 fi
970
971 if ! grep -Fq "OSMMON_VCA_SECRET" $OSM_DOCKER_WORK_DIR/mon.env; then
972 echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
973 else
974 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_SECRET.*|OSMMON_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/mon.env
975 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400976
Adam Israel6d8adf32019-12-05 15:46:54 -0500977 if ! grep -Fq "OSMMON_VCA_CACERT" $OSM_DOCKER_WORK_DIR/mon.env; then
978 echo "OSMMON_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
979 else
980 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_CACERT.*|OSMMON_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/mon.env
981 fi
982
983
Benjamin Diaz04560882019-02-26 17:25:07 -0300984 # POL
985 if [ ! -f $OSM_DOCKER_WORK_DIR/pol.env ]; then
986 echo "OSMPOL_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/pol" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/pol.env
987 fi
988
Benjamin Diaz4088a9b2019-05-21 15:11:49 -0300989 # LW-UI
990 if [ ! -f $OSM_DOCKER_WORK_DIR/lwui.env ]; then
991 echo "OSMUI_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/lwui" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lwui.env
992 fi
993
garciadeblasd8bc5c32018-05-09 17:37:56 +0200994 echo "Finished generation of docker env files"
995}
996
Mike Marchettib8420852018-09-13 13:45:06 -0400997function generate_osmclient_script () {
Mike Marchetti46d6efe2018-10-23 16:20:16 -0400998 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 -0400999 $WORKDIR_SUDO chmod +x "$OSM_DOCKER_WORK_DIR/osm"
1000 echo "osmclient sidecar container can be found at: $OSM_DOCKER_WORK_DIR/osm"
1001}
1002
vijaynag8339ed22019-07-25 17:10:58 +05301003#installs kubernetes packages
1004function install_kube() {
1005 sudo apt-get update && sudo apt-get install -y apt-transport-https
1006 curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
1007 sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
1008 sudo apt-get update
1009 echo "Installing Kubernetes Packages ..."
1010 sudo apt-get install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
1011}
1012
1013#initializes kubernetes control plane
1014function init_kubeadm() {
1015 sudo swapoff -a
1016 sudo kubeadm init --config $1
1017 sleep 5
1018}
1019
1020function kube_config_dir() {
1021 [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes"
1022 mkdir -p $HOME/.kube
1023 sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
1024 sudo chown $(id -u):$(id -g) $HOME/.kube/config
1025}
1026
1027#deploys flannel as daemonsets
1028function deploy_cni_provider() {
1029 CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")"
1030 trap 'rm -rf "${CNI_DIR}"' EXIT
1031 wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR
1032 kubectl apply -f $CNI_DIR
1033 [ $? -ne 0 ] && FATAL "Cannot Install Flannel"
1034}
1035
1036#creates secrets from env files which will be used by containers
1037function kube_secrets(){
1038 kubectl create ns $OSM_STACK_NAME
1039 kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env
1040 kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env
1041 kubectl create secret generic nbi-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/nbi.env
1042 kubectl create secret generic ro-db-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro-db.env
1043 kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env
1044 kubectl create secret generic keystone-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/keystone.env
1045 kubectl create secret generic lwui-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lwui.env
1046 kubectl create secret generic pol-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/pol.env
1047}
1048
1049#deploys osm pods and services
1050function deploy_osm_services() {
1051 K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}')
1052 kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
1053 sleep 5
1054 kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR
1055}
1056
1057function parse_yaml() {
1058 osm_services="nbi lcm ro pol mon light-ui keystone"
1059 TAG=$1
1060 for osm in $osm_services; do
1061 $WORKDIR_SUDO sed -i "s/opensourcemano\/$osm:.*/opensourcemano\/$osm:$TAG/g" $OSM_K8S_WORK_DIR/$osm.yaml
1062 done
1063}
1064
1065function namespace_vol() {
1066 osm_services="nbi lcm ro pol mon kafka mongo mysql"
1067 for osm in $osm_services; do
1068 $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml
1069 done
1070}
1071
garciadeblasa3e26612018-05-30 17:58:55 +02001072function init_docker_swarm() {
garciadeblasd8bc5c32018-05-09 17:37:56 +02001073 if [ "${DEFAULT_MTU}" != "1500" ]; then
1074 DOCKER_NETS=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
1075 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";}'`
1076 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"
1077 fi
garciadeblas5b857d32018-05-24 18:37:58 +02001078 sg docker -c "docker swarm init --advertise-addr ${DEFAULT_IP}"
garciadeblasa3e26612018-05-30 17:58:55 +02001079 return 0
1080}
1081
Mike Marchettib8420852018-09-13 13:45:06 -04001082function create_docker_network() {
1083 echo "creating network"
1084 sg docker -c "docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} net${OSM_STACK_NAME}"
1085 echo "creating network DONE"
1086}
1087
garciadeblasa3e26612018-05-30 17:58:55 +02001088function deploy_lightweight() {
Mike Marchettib8420852018-09-13 13:45:06 -04001089
garciadeblasa3e26612018-05-30 17:58:55 +02001090 echo "Deploying lightweight build"
Mike Marchettib8420852018-09-13 13:45:06 -04001091 OSM_NBI_PORT=9999
1092 OSM_RO_PORT=9090
Eduardo Sousa09a1e972018-09-21 11:06:32 +01001093 OSM_KEYSTONE_PORT=5000
Mike Marchettib8420852018-09-13 13:45:06 -04001094 OSM_UI_PORT=80
lavadoafa54c72018-10-05 09:28:28 -05001095 OSM_MON_PORT=8662
lavado60216242018-10-10 23:44:28 +02001096 OSM_PROM_PORT=9090
garciadeblasa7b27dc2019-12-04 15:06:55 +01001097 OSM_PROM_CADVISOR_PORT=8080
lavado60216242018-10-10 23:44:28 +02001098 OSM_PROM_HOSTPORT=9091
lavado6ad812e2019-11-29 10:58:58 -05001099 OSM_GRAFANA_PORT=3000
Eduardo Sousae00c8f92018-10-08 10:36:17 +01001100 [ -n "$INSTALL_ELK" ] && OSM_ELK_PORT=5601
lavado6ad812e2019-11-29 10:58:58 -05001101 #[ -n "$INSTALL_PERFMON" ] && OSM_PM_PORT=3000
lavado60216242018-10-10 23:44:28 +02001102
Mike Marchettib8420852018-09-13 13:45:06 -04001103 if [ -n "$NO_HOST_PORTS" ]; then
1104 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT)
1105 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +01001106 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001107 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -05001108 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +02001109 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +01001110 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -05001111 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT)
1112 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +01001113 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001114 else
1115 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT:$OSM_NBI_PORT)
1116 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT:$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +01001117 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT:$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001118 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT:$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -05001119 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT:$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +02001120 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_HOSTPORT:$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +01001121 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT:$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -05001122 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT:$OSM_GRAFANA_PORT)
1123 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT:$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +01001124 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT:$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001125 fi
1126 echo "export ${OSM_PORTS[@]}" | $WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/osm_ports.sh
1127 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 -04001128 echo "export TAG=${OSM_DOCKER_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Mike Marchettida8a9c42018-10-01 15:25:15 -04001129 echo "export DOCKER_USER=${DOCKER_USER}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -03001130 echo "export KAFKA_TAG=${KAFKA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado60216242018-10-10 23:44:28 +02001131 echo "export PROMETHEUS_TAG=${PROMETHEUS_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado9a8df7c2018-10-24 09:35:34 -05001132 echo "export KEYSTONEDB_TAG=${KEYSTONEDB_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado6ad812e2019-11-29 10:58:58 -05001133 echo "export PROMETHEUS_CADVISOR_TAG=${PROMETHEUS_CADVISOR_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
1134 echo "export GRAFANA_TAG=${GRAFANA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -03001135
Mike Marchettib8420852018-09-13 13:45:06 -04001136 pushd $OSM_DOCKER_WORK_DIR
beierl63229a22019-05-30 14:42:04 -04001137 sg docker -c ". ./osm_ports.sh; docker stack deploy -c $OSM_DOCKER_WORK_DIR/docker-compose.yaml $OSM_STACK_NAME"
Mike Marchettib8420852018-09-13 13:45:06 -04001138 popd
1139
garciadeblasd8bc5c32018-05-09 17:37:56 +02001140 echo "Finished deployment of lightweight build"
1141}
1142
garciadeblas6c66abf2018-05-16 14:46:19 +02001143function deploy_elk() {
garciadeblase2aebfe2018-07-06 14:11:20 +02001144 echo "Pulling docker images for ELK"
lavado53eb8f52018-11-16 12:58:23 -05001145 sg docker -c "docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:${ELASTIC_VERSION}" || FATAL "cannot get elasticsearch docker image"
1146 sg docker -c "docker pull docker.elastic.co/beats/metricbeat:${ELASTIC_VERSION}" || FATAL "cannot get metricbeat docker image"
1147 sg docker -c "docker pull docker.elastic.co/beats/filebeat:${ELASTIC_VERSION}" || FATAL "cannot get filebeat docker image"
1148 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 -05001149 sg docker -c "docker pull bobrik/curator:${ELASTIC_CURATOR_VERSION}" || FATAL "cannot get curator docker image"
garciadeblase2aebfe2018-07-06 14:11:20 +02001150 echo "Finished pulling elk docker images"
Mike Marchettib8420852018-09-13 13:45:06 -04001151 $WORKDIR_SUDO mkdir -p "$OSM_DOCKER_WORK_DIR/osm_elk"
1152 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_elk/* $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas5b857d32018-05-24 18:37:58 +02001153 remove_stack osm_elk
garciadeblas6c66abf2018-05-16 14:46:19 +02001154 echo "Deploying ELK stack"
Mike Marchettib8420852018-09-13 13:45:06 -04001155 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 +02001156 echo "Waiting for ELK stack to be up and running"
1157 time=0
garciadeblase2aebfe2018-07-06 14:11:20 +02001158 step=5
1159 timelength=40
garciadeblas6c66abf2018-05-16 14:46:19 +02001160 elk_is_up=1
1161 while [ $time -le $timelength ]; do
garciadeblase2aebfe2018-07-06 14:11:20 +02001162 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 +02001163 elk_is_up=0
1164 break
1165 fi
1166 sleep $step
1167 time=$((time+step))
1168 done
1169 if [ $elk_is_up -eq 0 ]; then
1170 echo "ELK is up and running. Trying to create index pattern..."
1171 #Create index pattern
1172 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -05001173 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
1174 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001175 #Make it the default index
garciadeblase2aebfe2018-07-06 14:11:20 +02001176 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +02001177 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -05001178 -d"{\"value\":\"filebeat-*\"}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001179 else
1180 echo "Cannot connect to Kibana to create index pattern."
1181 echo "Once Kibana is running, you can use the following instructions to create index pattern:"
1182 echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -05001183 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
1184 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}"'
garciadeblas6c66abf2018-05-16 14:46:19 +02001185 echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +02001186 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -05001187 -d"{\"value\":\"filebeat-*\"}"'
garciadeblas6c66abf2018-05-16 14:46:19 +02001188 fi
1189 echo "Finished deployment of ELK stack"
1190 return 0
1191}
1192
garciadeblasd8bc5c32018-05-09 17:37:56 +02001193function install_lightweight() {
garciadeblas0d45bc82018-11-19 14:25:13 +01001194 [ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
vijaynag8339ed22019-07-25 17:10:58 +05301195 [ -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 -04001196 [ ! -d "$OSM_DOCKER_WORK_DIR" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR
vijaynag8339ed22019-07-25 17:10:58 +05301197 [ -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 -04001198
garciadeblas183e5802018-12-13 18:20:54 +01001199 track checkingroot
garciadeblasd13a8aa2018-05-18 15:24:51 +02001200 [ "$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 +01001201 track noroot
vijaynag8339ed22019-07-25 17:10:58 +05301202
1203 if [ -n "$KUBERNETES" ]; then
1204 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
1205 1. Install and configure LXD
1206 2. Install juju
1207 3. Install docker CE
1208 4. Disable swap space
1209 5. Install and initialize Kubernetes
1210 as pre-requirements.
1211 Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
1212
1213 else
1214 [ -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
1215 fi
garciadeblasfae5e972018-06-12 18:27:11 +02001216 track proceed
vijaynag8339ed22019-07-25 17:10:58 +05301217
garciadeblasd8bc5c32018-05-09 17:37:56 +02001218 echo "Installing lightweight build of OSM"
1219 LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
1220 trap 'rm -rf "${LWTEMPDIR}"' EXIT
1221 DEFAULT_IF=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
garciadeblas8cd60772018-06-02 08:38:17 +02001222 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001223 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
garciadeblas8cd60772018-06-02 08:38:17 +02001224 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001225 DEFAULT_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
Mike Marchettib8420852018-09-13 13:45:06 -04001226
1227 # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to
lavadoe07b1642018-10-25 10:58:34 -05001228 if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ]; then
garciadeblasbd925e42018-06-14 14:32:12 +02001229 need_packages_lw="lxd snapd"
garciadeblasd41f5482018-05-25 10:25:06 +02001230 echo -e "Checking required packages: $need_packages_lw"
1231 dpkg -l $need_packages_lw &>/dev/null \
1232 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1233 || sudo apt-get update \
1234 || FATAL "failed to run apt-get update"
1235 dpkg -l $need_packages_lw &>/dev/null \
1236 || ! echo -e "Installing $need_packages_lw requires root privileges." \
1237 || sudo apt-get install -y $need_packages_lw \
1238 || FATAL "failed to install $need_packages_lw"
1239 fi
garciadeblasfae5e972018-06-12 18:27:11 +02001240 track prereqok
Mike Marchettib8420852018-09-13 13:45:06 -04001241
vijaynag8339ed22019-07-25 17:10:58 +05301242 [ -z "$INSTALL_NOJUJU" ] && install_juju
garciadeblas183e5802018-12-13 18:20:54 +01001243 track juju_install
vijaynag8339ed22019-07-25 17:10:58 +05301244
lavadoe07b1642018-10-25 10:58:34 -05001245 if [ -z "$OSM_VCA_HOST" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -04001246 juju_createcontroller
lavadoe07b1642018-10-25 10:58:34 -05001247 OSM_VCA_HOST=`sg lxd -c "juju show-controller $OSM_STACK_NAME"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
1248 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
Mike Marchettib8420852018-09-13 13:45:06 -04001249 fi
garciadeblas183e5802018-12-13 18:20:54 +01001250 track juju_controller
vijaynag8339ed22019-07-25 17:10:58 +05301251
lavadoe07b1642018-10-25 10:58:34 -05001252 if [ -z "$OSM_VCA_SECRET" ]; then
1253 OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME)
1254 [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
Mike Marchettib8420852018-09-13 13:45:06 -04001255 fi
garciadeblasaa3ddf42019-04-04 19:04:32 +02001256 if [ -z "$OSM_VCA_PUBKEY" ]; then
1257 OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
1258 [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
1259 fi
garciadeblasfc5bb142019-12-10 10:49:12 +01001260 if [ -z "$OSM_VCA_CACERT" ]; then
1261 OSM_VCA_CACERT=$(juju controllers --format json | jq -r '.controllers["osm"]["ca-cert"]' | base64 | tr -d \\n)
1262 [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
1263 fi
Adam Israel5ddc97f2019-09-03 18:11:12 -04001264 if [ -z "$OSM_VCA_APIPROXY" ]; then
1265 OSM_VCA_APIPROXY=$DEFAULT_IP
1266 [ -z "$OSM_VCA_APIPROXY" ] && FATAL "Cannot obtain juju api proxy"
1267 fi
1268 juju_createproxy
garciadeblasfc5bb142019-12-10 10:49:12 +01001269 track juju
Adam Israel5ddc97f2019-09-03 18:11:12 -04001270
Benjamin Diazba2cca92018-11-08 21:07:15 -03001271 if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
1272 OSM_DATABASE_COMMONKEY=$(generate_secret)
1273 [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret"
1274 fi
vijaynag8339ed22019-07-25 17:10:58 +05301275
garciadeblasa3e26612018-05-30 17:58:55 +02001276 [ -n "$INSTALL_NODOCKER" ] || install_docker_ce
garciadeblas6c66abf2018-05-16 14:46:19 +02001277 track docker_ce
vijaynag8339ed22019-07-25 17:10:58 +05301278
1279 #Installs Kubernetes and deploys osm services
1280 if [ -n "$KUBERNETES" ]; then
1281 install_kube
1282 track install_k8s
1283 init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
1284 kube_config_dir
1285 track init_k8s
1286 else
1287 #install_docker_compose
1288 [ -n "$INSTALL_NODOCKER" ] || init_docker_swarm
1289 track docker_swarm
1290 fi
1291
Mike Marchettib8420852018-09-13 13:45:06 -04001292 [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
garciadeblas6c66abf2018-05-16 14:46:19 +02001293 track docker_build
vijaynag8339ed22019-07-25 17:10:58 +05301294
garciadeblasd8bc5c32018-05-09 17:37:56 +02001295 generate_docker_env_files
Mike Marchettib8420852018-09-13 13:45:06 -04001296
vijaynag8339ed22019-07-25 17:10:58 +05301297 if [ -n "$KUBERNETES" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +01001298 if [ -n "$K8S_MONITOR" ]; then
1299 # uninstall OSM MONITORING
1300 uninstall_k8s_monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +01001301 track uninstall_k8s_monitoring
romeromonsere366b1a2019-11-19 19:49:26 +01001302 fi
vijaynag8339ed22019-07-25 17:10:58 +05301303 #remove old namespace
1304 remove_k8s_namespace $OSM_STACK_NAME
1305 deploy_cni_provider
1306 kube_secrets
garciadeblasa7e128a2019-12-18 11:10:45 +01001307 [ ! $OSM_DOCKER_TAG == "7" ] && parse_yaml $OSM_DOCKER_TAG
vijaynag8339ed22019-07-25 17:10:58 +05301308 namespace_vol
1309 deploy_osm_services
1310 track deploy_osm_services_k8s
garciadeblasfc5bb142019-12-10 10:49:12 +01001311 if [ -n "$K8S_MONITOR" ]; then
1312 # install OSM MONITORING
1313 install_k8s_monitoring
1314 track install_k8s_monitoring
1315 fi
vijaynag8339ed22019-07-25 17:10:58 +05301316 else
1317 # remove old stack
1318 remove_stack $OSM_STACK_NAME
1319 create_docker_network
1320 deploy_lightweight
1321 generate_osmclient_script
1322 track docker_deploy
lavado6ad812e2019-11-29 10:58:58 -05001323 install_prometheus_nodeexporter
garciadeblasfc5bb142019-12-10 10:49:12 +01001324 track nodeexporter
vijaynag8339ed22019-07-25 17:10:58 +05301325 [ -n "$INSTALL_VIMEMU" ] && install_vimemu && track vimemu
1326 [ -n "$INSTALL_ELK" ] && deploy_elk && track elk
vijaynag8339ed22019-07-25 17:10:58 +05301327 fi
1328
Mike Marchettib8420852018-09-13 13:45:06 -04001329 [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
garciadeblas6c66abf2018-05-16 14:46:19 +02001330 track osmclient
vijaynag8339ed22019-07-25 17:10:58 +05301331
garciadeblas44c02192019-12-09 01:36:57 +01001332 wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001333 track end
garciadeblasd8bc5c32018-05-09 17:37:56 +02001334 return 0
1335}
1336
1337function install_vimemu() {
peusterm76353e42018-05-08 13:56:05 +02001338 echo "\nInstalling vim-emu"
1339 EMUTEMPDIR="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX")"
1340 trap 'rm -rf "${EMUTEMPDIR}"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001341 # clone vim-emu repository (attention: branch is currently master only)
1342 echo "Cloning vim-emu repository ..."
peusterm76353e42018-05-08 13:56:05 +02001343 git clone https://osm.etsi.org/gerrit/osm/vim-emu.git $EMUTEMPDIR
garciadeblasd8bc5c32018-05-09 17:37:56 +02001344 # build vim-emu docker
1345 echo "Building vim-emu Docker container..."
Mike Marchettib8420852018-09-13 13:45:06 -04001346
1347 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 +02001348 # start vim-emu container as daemon
1349 echo "Starting vim-emu Docker container 'vim-emu' ..."
peusterm76353e42018-05-08 13:56:05 +02001350 if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
1351 # in lightweight mode, the emulator needs to be attached to netOSM
Mike Marchettib8420852018-09-13 13:45:06 -04001352 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 +02001353 else
1354 # classic build mode
Mike Marchettib8420852018-09-13 13:45:06 -04001355 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 +02001356 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001357 echo "Waiting for 'vim-emu' container to start ..."
1358 sleep 5
Mike Marchettib8420852018-09-13 13:45:06 -04001359 export VIMEMU_HOSTNAME=$(sg docker -c "docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001360 echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
peusterm76353e42018-05-08 13:56:05 +02001361 # print vim-emu connection info
1362 echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001363 echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
peusterm76353e42018-05-08 13:56:05 +02001364 echo -e "To add the emulated VIM to OSM you should do:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001365 echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
1366}
1367
romeromonsere366b1a2019-11-19 19:49:26 +01001368function install_k8s_monitoring() {
1369 # install OSM monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +01001370 $WORKDIR_SUDO chmod +x $OSM_DEVOPS/installers/k8s/*.sh
romeromonsere366b1a2019-11-19 19:49:26 +01001371 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh
1372}
1373
1374function uninstall_k8s_monitoring() {
K Sai Kiran5e151f02019-12-11 14:50:09 +05301375 # uninstall OSM monitoring
romeromonsere366b1a2019-11-19 19:49:26 +01001376 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/uninstall_osm_k8s_monitoring.sh
1377}
1378
garciadeblasd8bc5c32018-05-09 17:37:56 +02001379function dump_vars(){
1380 echo "DEVELOP=$DEVELOP"
1381 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
1382 echo "UNINSTALL=$UNINSTALL"
1383 echo "NAT=$NAT"
1384 echo "UPDATE=$UPDATE"
1385 echo "RECONFIGURE=$RECONFIGURE"
1386 echo "TEST_INSTALLER=$TEST_INSTALLER"
1387 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
1388 echo "INSTALL_LXD=$INSTALL_LXD"
1389 echo "INSTALL_FROM_LXDIMAGES=$INSTALL_FROM_LXDIMAGES"
1390 echo "LXD_REPOSITORY_BASE=$LXD_REPOSITORY_BASE"
1391 echo "LXD_REPOSITORY_PATH=$LXD_REPOSITORY_PATH"
1392 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
garciadeblas6c66abf2018-05-16 14:46:19 +02001393 echo "INSTALL_ONLY=$INSTALL_ONLY"
1394 echo "INSTALL_ELK=$INSTALL_ELK"
lavado6ad812e2019-11-29 10:58:58 -05001395 #echo "INSTALL_PERFMON=$INSTALL_PERFMON"
garciadeblas0e596bc2018-05-28 16:04:42 +02001396 echo "TO_REBUILD=$TO_REBUILD"
garciadeblasd41f5482018-05-25 10:25:06 +02001397 echo "INSTALL_NOLXD=$INSTALL_NOLXD"
garciadeblasa3e26612018-05-30 17:58:55 +02001398 echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
garciadeblas0d45bc82018-11-19 14:25:13 +01001399 echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001400 echo "RELEASE=$RELEASE"
1401 echo "REPOSITORY=$REPOSITORY"
1402 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
1403 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
1404 echo "NOCONFIGURE=$NOCONFIGURE"
garciadeblas0d45bc82018-11-19 14:25:13 +01001405 echo "OSM_DEVOPS=$OSM_DEVOPS"
1406 echo "OSM_VCA_HOST=$OSM_VCA_HOST"
1407 echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
garciadeblasaa3ddf42019-04-04 19:04:32 +02001408 echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001409 echo "NO_HOST_PORTS=$NO_HOST_PORTS"
1410 echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
1411 echo "WORKDIR_SUDO=$WORKDIR_SUDO"
1412 echo "OSM_WORK_DIR=$OSM_STACK_NAME"
1413 echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
1414 echo "DOCKER_USER=$DOCKER_USER"
1415 echo "OSM_STACK_NAME=$OSM_STACK_NAME"
1416 echo "PULL_IMAGES=$PULL_IMAGES"
vijaynag8339ed22019-07-25 17:10:58 +05301417 echo "KUBERNETES=$KUBERNETES"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001418 echo "SHOWOPTS=$SHOWOPTS"
1419 echo "Install from specific refspec (-b): $COMMIT_ID"
1420}
1421
1422function track(){
1423 ctime=`date +%s`
1424 duration=$((ctime - SESSION_ID))
1425 url="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
1426 #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
1427 event_name="bin"
garciadeblas6c66abf2018-05-16 14:46:19 +02001428 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name="binsrc"
1429 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name="lxd"
1430 [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name="lw"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001431 event_name="${event_name}_$1"
1432 url="${url}&event=${event_name}&ce_duration=${duration}"
1433 wget -q -O /dev/null $url
1434}
1435
1436UNINSTALL=""
1437DEVELOP=""
1438NAT=""
1439UPDATE=""
1440RECONFIGURE=""
1441TEST_INSTALLER=""
1442INSTALL_LXD=""
1443SHOWOPTS=""
1444COMMIT_ID=""
1445ASSUME_YES=""
1446INSTALL_FROM_SOURCE=""
garciadeblasfc5bb142019-12-10 10:49:12 +01001447RELEASE="ReleaseSEVEN"
Mike Marchettib8420852018-09-13 13:45:06 -04001448REPOSITORY="stable"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001449INSTALL_VIMEMU=""
1450INSTALL_FROM_LXDIMAGES=""
1451LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
1452LXD_REPOSITORY_PATH=""
1453INSTALL_LIGHTWEIGHT="y"
garciadeblas6c66abf2018-05-16 14:46:19 +02001454INSTALL_ONLY=""
1455INSTALL_ELK=""
garciadeblas0e596bc2018-05-28 16:04:42 +02001456TO_REBUILD=""
garciadeblasd41f5482018-05-25 10:25:06 +02001457INSTALL_NOLXD=""
garciadeblasa3e26612018-05-30 17:58:55 +02001458INSTALL_NODOCKER=""
Mike Marchettib8420852018-09-13 13:45:06 -04001459INSTALL_NOJUJU=""
vijaynag8339ed22019-07-25 17:10:58 +05301460KUBERNETES=""
romeromonsere366b1a2019-11-19 19:49:26 +01001461K8S_MONITOR=""
garciadeblas0d45bc82018-11-19 14:25:13 +01001462INSTALL_NOHOSTCLIENT=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001463NOCONFIGURE=""
1464RELEASE_DAILY=""
1465SESSION_ID=`date +%s`
1466OSM_DEVOPS=
lavadoe07b1642018-10-25 10:58:34 -05001467OSM_VCA_HOST=
1468OSM_VCA_SECRET=
garciadeblasaa3ddf42019-04-04 19:04:32 +02001469OSM_VCA_PUBKEY=
Mike Marchettib8420852018-09-13 13:45:06 -04001470OSM_STACK_NAME=osm
1471NO_HOST_PORTS=""
1472DOCKER_NOBUILD=""
1473REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
garciadeblas870e60a2018-11-21 16:44:21 +01001474REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
Mike Marchettib8420852018-09-13 13:45:06 -04001475WORKDIR_SUDO=sudo
1476OSM_WORK_DIR="/etc/osm"
garciadeblas526f0fb2018-11-23 14:47:40 +01001477OSM_DOCKER_WORK_DIR="/etc/osm/docker"
vijaynag8339ed22019-07-25 17:10:58 +05301478OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
1479OSM_HOST_VOL="/var/lib/osm"
1480OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
Mike Marchetti13d76c82018-09-19 15:00:36 -04001481OSM_DOCKER_TAG=latest
garciadeblas0d45bc82018-11-19 14:25:13 +01001482DOCKER_USER=opensourcemano
1483PULL_IMAGES="y"
Benjamin Diazaa0af712018-10-04 14:02:34 -03001484KAFKA_TAG=2.11-1.0.2
lavado60216242018-10-10 23:44:28 +02001485PROMETHEUS_TAG=v2.4.3
lavado6ad812e2019-11-29 10:58:58 -05001486GRAFANA_TAG=latest
1487PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
1488PROMETHEUS_CADVISOR_TAG=latest
lavado9a8df7c2018-10-24 09:35:34 -05001489KEYSTONEDB_TAG=10
Benjamin Diazba2cca92018-11-08 21:07:15 -03001490OSM_DATABASE_COMMONKEY=
lavado53eb8f52018-11-16 12:58:23 -05001491ELASTIC_VERSION=6.4.2
lavado4e8662c2018-11-28 11:28:14 -05001492ELASTIC_CURATOR_VERSION=5.5.4
vijaynag8339ed22019-07-25 17:10:58 +05301493POD_NETWORK_CIDR=10.244.0.0/16
1494K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
1495RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
garciadeblasd8bc5c32018-05-09 17:37:56 +02001496
vijaynag8339ed22019-07-25 17:10:58 +05301497while getopts ":hy-:b:r:c:k:u:R:l:p:D:o:m:H:S:s:w:t:U:P:A:" o; do
garciadeblasd8bc5c32018-05-09 17:37:56 +02001498 case "${o}" in
1499 h)
1500 usage && exit 0
1501 ;;
1502 b)
1503 COMMIT_ID=${OPTARG}
garciadeblas0d45bc82018-11-19 14:25:13 +01001504 PULL_IMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001505 ;;
1506 r)
Mike Marchettib8420852018-09-13 13:45:06 -04001507 REPOSITORY="${OPTARG}"
1508 REPO_ARGS+=(-r "$REPOSITORY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001509 ;;
vijaynag8339ed22019-07-25 17:10:58 +05301510 c)
1511 [ "${OPTARG}" == "swarm" ] && continue
1512 [ "${OPTARG}" == "k8s" ] && KUBERNETES="y" && continue
1513 echo -e "Invalid argument for -i : ' $OPTARG'\n" >&2
1514 usage && exit 1
1515 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001516 R)
Mike Marchettib8420852018-09-13 13:45:06 -04001517 RELEASE="${OPTARG}"
1518 REPO_ARGS+=(-R "$RELEASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001519 ;;
1520 k)
Mike Marchettib8420852018-09-13 13:45:06 -04001521 REPOSITORY_KEY="${OPTARG}"
1522 REPO_ARGS+=(-k "$REPOSITORY_KEY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001523 ;;
1524 u)
Mike Marchettib8420852018-09-13 13:45:06 -04001525 REPOSITORY_BASE="${OPTARG}"
1526 REPO_ARGS+=(-u "$REPOSITORY_BASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001527 ;;
garciadeblas0d45bc82018-11-19 14:25:13 +01001528 U)
1529 DOCKER_USER="${OPTARG}"
1530 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001531 l)
1532 LXD_REPOSITORY_BASE="${OPTARG}"
1533 ;;
1534 p)
1535 LXD_REPOSITORY_PATH="${OPTARG}"
1536 ;;
1537 D)
1538 OSM_DEVOPS="${OPTARG}"
1539 ;;
Mike Marchettib8420852018-09-13 13:45:06 -04001540 s)
vijaynag8339ed22019-07-25 17:10:58 +05301541 OSM_STACK_NAME="${OPTARG}" && [ -n "$KUBERNETES" ] && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0
Mike Marchettib8420852018-09-13 13:45:06 -04001542 ;;
1543 H)
lavadoe07b1642018-10-25 10:58:34 -05001544 OSM_VCA_HOST="${OPTARG}"
Mike Marchettib8420852018-09-13 13:45:06 -04001545 ;;
1546 S)
lavadoe07b1642018-10-25 10:58:34 -05001547 OSM_VCA_SECRET="${OPTARG}"
Mike Marchettib8420852018-09-13 13:45:06 -04001548 ;;
garciadeblasaa3ddf42019-04-04 19:04:32 +02001549 P)
1550 OSM_VCA_PUBKEY=$(cat ${OPTARG})
1551 ;;
Adam Israel5ddc97f2019-09-03 18:11:12 -04001552 A)
1553 OSM_VCA_APIPROXY="${OPTARG}"
1554 ;;
Mike Marchettib8420852018-09-13 13:45:06 -04001555 w)
1556 # when specifying workdir, do not use sudo for access
1557 WORKDIR_SUDO=
1558 OSM_WORK_DIR="${OPTARG}"
1559 ;;
Mike Marchetti13d76c82018-09-19 15:00:36 -04001560 t)
1561 OSM_DOCKER_TAG="${OPTARG}"
1562 ;;
garciadeblas6c66abf2018-05-16 14:46:19 +02001563 o)
1564 INSTALL_ONLY="y"
1565 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
1566 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001567 ;;
garciadeblas0e596bc2018-05-28 16:04:42 +02001568 m)
garciadeblas0e596bc2018-05-28 16:04:42 +02001569 [ "${OPTARG}" == "LW-UI" ] && TO_REBUILD="$TO_REBUILD LW-UI" && continue
govindappa79e51b92019-05-22 12:15:21 +05301570 [ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
1571 [ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
1572 [ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001573 [ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
govindappa79e51b92019-05-22 12:15:21 +05301574 [ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001575 [ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
1576 [ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
govindappa79e51b92019-05-22 12:15:21 +05301577 [ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
garciadeblasfc5bb142019-12-10 10:49:12 +01001578 [ "${OPTARG}" == "PROMETHEUS-CADVISOR" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS-CADVISOR" && continue
govindappa79e51b92019-05-22 12:15:21 +05301579 [ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
lavado6ad812e2019-11-29 10:58:58 -05001580 [ "${OPTARG}" == "GRAFANA" ] && TO_REBUILD="$TO_REBUILD GRAFANA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001581 [ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
1582 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001583 -)
1584 [ "${OPTARG}" == "help" ] && usage && exit 0
garciadeblas0d45bc82018-11-19 14:25:13 +01001585 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001586 [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
1587 [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
1588 [ "${OPTARG}" == "nat" ] && NAT="y" && continue
1589 [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
1590 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
1591 [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
1592 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
garciadeblasd41f5482018-05-25 10:25:06 +02001593 [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
garciadeblasa3e26612018-05-30 17:58:55 +02001594 [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001595 [ "${OPTARG}" == "lxdimages" ] && INSTALL_FROM_LXDIMAGES="y" && continue
1596 [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT="y" && continue
garciadeblase990f662018-05-18 11:43:39 +02001597 [ "${OPTARG}" == "soui" ] && INSTALL_LIGHTWEIGHT="" && RELEASE="-R ReleaseTHREE" && REPOSITORY="-r stable" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001598 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001599 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001600 [ "${OPTARG}" == "noconfigure" ] && NOCONFIGURE="y" && continue
1601 [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
1602 [ "${OPTARG}" == "daily" ] && RELEASE_DAILY="y" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001603 [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
1604 [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
1605 [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
1606 [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
garciadeblas0d45bc82018-11-19 14:25:13 +01001607 [ "${OPTARG}" == "pullimages" ] && continue
romeromonsere366b1a2019-11-19 19:49:26 +01001608 [ "${OPTARG}" == "k8s_monitor" ] && K8S_MONITOR="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001609 echo -e "Invalid option: '--$OPTARG'\n" >&2
1610 usage && exit 1
1611 ;;
1612 \?)
1613 echo -e "Invalid option: '-$OPTARG'\n" >&2
1614 usage && exit 1
1615 ;;
1616 y)
1617 ASSUME_YES="y"
1618 ;;
1619 *)
1620 usage && exit 1
1621 ;;
1622 esac
1623done
1624
garciadeblas6c66abf2018-05-16 14:46:19 +02001625[ -n "$INSTALL_FROM_LXDIMAGES" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --lxd can only be used with --soui"
garciadeblase990f662018-05-18 11:43:39 +02001626[ -n "$NAT" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --nat can only be used with --soui"
1627[ -n "$NOCONFIGURE" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --noconfigure can only be used with --soui"
garciadeblasfb566272018-05-25 10:33:36 +02001628[ -n "$RELEASE_DAILY" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --daily can only be used with --soui"
garciadeblasd41f5482018-05-25 10:25:06 +02001629[ -n "$INSTALL_NOLXD" ] && [ -z "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible option: --nolxd cannot be used with --soui"
garciadeblasa3e26612018-05-30 17:58:55 +02001630[ -n "$INSTALL_NODOCKER" ] && [ -z "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible option: --nodocker cannot be used with --soui"
garciadeblas0e596bc2018-05-28 16:04:42 +02001631[ -n "$TO_REBUILD" ] && [ -z "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible option: -m cannot be used with --soui"
1632[ -n "$TO_REBUILD" ] && [ "$TO_REBUILD" != " NONE" ] && echo $TO_REBUILD | grep -q NONE && FATAL "Incompatible option: -m NONE cannot be used with other -m options"
garciadeblas6c66abf2018-05-16 14:46:19 +02001633
garciadeblasd8bc5c32018-05-09 17:37:56 +02001634if [ -n "$SHOWOPTS" ]; then
1635 dump_vars
1636 exit 0
1637fi
1638
1639[ -n "$RELEASE_DAILY" ] && echo -e "\nInstalling from daily build repo" && RELEASE="-R ReleaseTHREE-daily" && REPOSITORY="-r testing" && COMMIT_ID="master"
1640
1641# if develop, we force master
1642[ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
1643
garciadeblasd8bc5c32018-05-09 17:37:56 +02001644need_packages="git jq wget curl tar"
1645echo -e "Checking required packages: $need_packages"
1646dpkg -l $need_packages &>/dev/null \
1647 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1648 || sudo apt-get update \
1649 || FATAL "failed to run apt-get update"
1650dpkg -l $need_packages &>/dev/null \
1651 || ! echo -e "Installing $need_packages requires root privileges." \
1652 || sudo apt-get install -y $need_packages \
1653 || FATAL "failed to install $need_packages"
1654
1655if [ -z "$OSM_DEVOPS" ]; then
Michael Marchettiee374142018-08-02 22:47:16 +02001656 if [ -n "$TEST_INSTALLER" ]; then
1657 echo -e "\nUsing local devops repo for OSM installation"
1658 OSM_DEVOPS="$(dirname $(realpath $(dirname $0)))"
1659 else
1660 echo -e "\nCreating temporary dir for OSM installation"
1661 OSM_DEVOPS="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
1662 trap 'rm -rf "$OSM_DEVOPS"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001663
Michael Marchettiee374142018-08-02 22:47:16 +02001664 git clone https://osm.etsi.org/gerrit/osm/devops.git $OSM_DEVOPS
garciadeblasd8bc5c32018-05-09 17:37:56 +02001665
Michael Marchettiee374142018-08-02 22:47:16 +02001666 if [ -z "$COMMIT_ID" ]; then
1667 echo -e "\nGuessing the current stable release"
1668 LATEST_STABLE_DEVOPS=`git -C $OSM_DEVOPS tag -l v[0-9].* | sort -V | tail -n1`
1669 [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
1670
1671 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
1672 COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
1673 else
1674 echo -e "\nDEVOPS Using commit $COMMIT_ID"
1675 fi
1676 git -C $OSM_DEVOPS checkout $COMMIT_ID
garciadeblasd8bc5c32018-05-09 17:37:56 +02001677 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001678fi
1679
garciadeblas3c25fab2019-11-18 17:24:43 +01001680. $OSM_DEVOPS/common/all_funcs
garciadeblasd8bc5c32018-05-09 17:37:56 +02001681
1682[ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight && echo -e "\nDONE" && exit 0
1683[ -n "$UNINSTALL" ] && uninstall && echo -e "\nDONE" && exit 0
1684[ -n "$NAT" ] && nat && echo -e "\nDONE" && exit 0
1685[ -n "$UPDATE" ] && update && echo -e "\nDONE" && exit 0
1686[ -n "$RECONFIGURE" ] && configure && echo -e "\nDONE" && exit 0
garciadeblas6c66abf2018-05-16 14:46:19 +02001687[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
lavado6ad812e2019-11-29 10:58:58 -05001688#[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
garciadeblas6c66abf2018-05-16 14:46:19 +02001689[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
1690[ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
garciadeblasd8bc5c32018-05-09 17:37:56 +02001691
1692#Installation starts here
garciadeblas44c02192019-12-09 01:36:57 +01001693wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001694track start
1695
garciadeblasd8bc5c32018-05-09 17:37:56 +02001696[ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight && echo -e "\nDONE" && exit 0
1697echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
1698if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
1699 ! ask_user "The installation will take about 75-90 minutes. Continue (Y/n)? " y && echo "Cancelled!" && exit 1
1700fi
1701
1702echo -e "Checking required packages: lxd"
1703lxd --version &>/dev/null || FATAL "lxd not present, exiting."
1704[ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
1705
garciadeblasd8bc5c32018-05-09 17:37:56 +02001706# use local devops for containers
1707export OSM_USE_LOCAL_DEVOPS=true
1708if [ -n "$INSTALL_FROM_SOURCE" ]; then #install from source
1709 echo -e "\nCreating the containers and building from source ..."
1710 $OSM_DEVOPS/jenkins/host/start_build RO --notest checkout $COMMIT_ID || FATAL "RO container build failed (refspec: '$COMMIT_ID')"
1711 ro_is_up && track RO
1712 $OSM_DEVOPS/jenkins/host/start_build VCA || FATAL "VCA container build failed"
1713 vca_is_up && track VCA
1714 $OSM_DEVOPS/jenkins/host/start_build MON || FATAL "MON install failed"
1715 mon_is_up && track MON
1716 $OSM_DEVOPS/jenkins/host/start_build SO checkout $COMMIT_ID || FATAL "SO container build failed (refspec: '$COMMIT_ID')"
1717 $OSM_DEVOPS/jenkins/host/start_build UI checkout $COMMIT_ID || FATAL "UI container build failed (refspec: '$COMMIT_ID')"
1718 #so_is_up && track SOUI
1719 track SOUI
1720elif [ -n "$INSTALL_FROM_LXDIMAGES" ]; then #install from LXD images stored in OSM repo
1721 echo -e "\nInstalling from lxd images ..."
1722 install_from_lxdimages
1723else #install from binaries
1724 echo -e "\nCreating the containers and installing from binaries ..."
Mike Marchettib8420852018-09-13 13:45:06 -04001725 $OSM_DEVOPS/jenkins/host/install RO ${REPO_ARGS[@]} || FATAL "RO install failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001726 ro_is_up && track RO
1727 $OSM_DEVOPS/jenkins/host/start_build VCA || FATAL "VCA install failed"
1728 vca_is_up && track VCA
1729 $OSM_DEVOPS/jenkins/host/install MON || FATAL "MON build failed"
1730 mon_is_up && track MON
Mike Marchettib8420852018-09-13 13:45:06 -04001731 $OSM_DEVOPS/jenkins/host/install SO ${REPO_ARGS[@]} || FATAL "SO install failed"
1732 $OSM_DEVOPS/jenkins/host/install UI ${REPO_ARGS[@]} || FATAL "UI install failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001733 #so_is_up && track SOUI
1734 track SOUI
1735fi
1736
1737#Install iptables-persistent and configure NAT rules
1738[ -z "$NOCONFIGURE" ] && nat
1739
1740#Configure components
1741[ -z "$NOCONFIGURE" ] && configure
1742
1743#Install osmclient
1744[ -z "$NOCONFIGURE" ] && install_osmclient
1745
1746#Install vim-emu (optional)
peusterm76353e42018-05-08 13:56:05 +02001747[ -n "$INSTALL_VIMEMU" ] && install_docker_ce && install_vimemu
garciadeblasd8bc5c32018-05-09 17:37:56 +02001748
garciadeblas44c02192019-12-09 01:36:57 +01001749wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblasd8bc5c32018-05-09 17:37:56 +02001750track end
1751echo -e "\nDONE"