blob: b88fc47fb8fbae7a59bc8f0fc6ba876f65113215 [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
142 if sudo iptables -t nat -C PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
143 sudo iptables -t nat -D PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
144 sudo netfilter-persistent save
145 fi
146}
147
garciadeblas5b857d32018-05-24 18:37:58 +0200148function remove_stack() {
149 stack=$1
garciadeblas5ef98212018-05-28 09:25:36 +0200150 if sg docker -c "docker stack ps ${stack}" ; then
garciadeblas5b857d32018-05-24 18:37:58 +0200151 echo -e "\nRemoving stack ${stack}" && sg docker -c "docker stack rm ${stack}"
152 COUNTER=0
153 result=1
154 while [ ${COUNTER} -lt 30 ]; do
155 result=$(sg docker -c "docker stack ps ${stack}" | wc -l)
156 #echo "Dockers running: $result"
157 if [ "${result}" == "0" ]; then
158 break
159 fi
160 let COUNTER=COUNTER+1
161 sleep 1
162 done
garciadeblasd8bc5c32018-05-09 17:37:56 +0200163 if [ "${result}" == "0" ]; then
garciadeblas5b857d32018-05-24 18:37:58 +0200164 echo "All dockers of the stack ${stack} were removed"
165 else
166 FATAL "Some dockers of the stack ${stack} could not be removed. Could not clean it."
garciadeblasd8bc5c32018-05-09 17:37:56 +0200167 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200168 sleep 5
garciadeblasd8bc5c32018-05-09 17:37:56 +0200169 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200170}
171
vijaynag8339ed22019-07-25 17:10:58 +0530172#removes osm deployments and services
173function remove_k8s_namespace() {
174 kubectl delete ns $1
175}
176
garciadeblas5b857d32018-05-24 18:37:58 +0200177#Uninstall lightweight OSM: remove dockers
178function uninstall_lightweight() {
garciadeblas282ff4e2018-07-10 09:16:30 +0200179 if [ -n "$INSTALL_ONLY" ]; then
180 if [ -n "$INSTALL_ELK" ]; then
181 echo -e "\nUninstalling OSM ELK stack"
182 remove_stack osm_elk
Mike Marchettib8420852018-09-13 13:45:06 -0400183 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas282ff4e2018-07-10 09:16:30 +0200184 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200185 else
186 echo -e "\nUninstalling OSM"
vijaynag8339ed22019-07-25 17:10:58 +0530187 if [ -n "$KUBERNETES" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +0100188 if [ -n "$K8S_MONITOR" ]; then
189 # uninstall OSM MONITORING
190 uninstall_k8s_monitoring
191 fi
vijaynag8339ed22019-07-25 17:10:58 +0530192 remove_k8s_namespace $OSM_STACK_NAME
193 else
Dominik4763cfe2019-11-27 12:15:50 +0100194
vijaynag8339ed22019-07-25 17:10:58 +0530195 remove_stack $OSM_STACK_NAME
196 remove_stack osm_elk
vijaynag8339ed22019-07-25 17:10:58 +0530197 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200198 echo "Now osm docker images and volumes will be deleted"
199 newgrp docker << EONG
lavado02ad4b02018-11-28 11:30:48 -0500200 docker image rm ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}
201 docker image rm ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}
202 docker image rm ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}
203 docker image rm ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}
204 docker image rm ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}
205 docker image rm ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}
206 docker image rm ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}
207 docker image rm ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}
garciadeblas83ca1322018-05-22 18:31:14 +0200208EONG
vijaynag8339ed22019-07-25 17:10:58 +0530209
210 if [ -n "$KUBERNETES" ]; then
211 OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
212 remove_volumes $OSM_NAMESPACE_VOL
213 else
214 remove_volumes $OSM_STACK_NAME
215 remove_network $OSM_STACK_NAME
216 fi
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100217 remove_iptables $OSM_STACK_NAME
Mike Marchettib8420852018-09-13 13:45:06 -0400218 echo "Removing $OSM_DOCKER_WORK_DIR"
219 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR
Adam Israel843764e2019-06-11 10:28:43 -0400220 sg lxd -c "juju destroy-controller --destroy-all-models --yes $OSM_STACK_NAME"
garciadeblas282ff4e2018-07-10 09:16:30 +0200221 fi
222 echo "Some docker images will be kept in case they are used by other docker stacks"
223 echo "To remove them, just run 'docker image prune' in a terminal"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200224 return 0
225}
226
227#Configure NAT rules, based on the current IP addresses of containers
228function nat(){
229 echo -e "\nChecking required packages: iptables-persistent"
230 dpkg -l iptables-persistent &>/dev/null || ! echo -e " Not installed.\nInstalling iptables-persistent requires root privileges" || \
garciadeblas7cc70222019-12-09 01:24:18 +0100231 sudo apt-get -yq install iptables-persistent
garciadeblasd8bc5c32018-05-09 17:37:56 +0200232 echo -e "\nConfiguring NAT rules"
233 echo -e " Required root privileges"
234 sudo $OSM_DEVOPS/installers/nat_osm
235}
236
237function FATAL(){
238 echo "FATAL error: Cannot install OSM due to \"$1\""
239 exit 1
240}
241
242#Update RO, SO and UI:
243function update(){
244 echo -e "\nUpdating components"
245
246 echo -e " Updating RO"
247 CONTAINER="RO"
248 MDG="RO"
249 INSTALL_FOLDER="/opt/openmano"
250 echo -e " Fetching the repo"
251 lxc exec $CONTAINER -- git -C $INSTALL_FOLDER fetch --all
252 BRANCH=""
253 BRANCH=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
254 [ -z "$BRANCH" ] && FATAL "Could not find the current branch in use in the '$MDG'"
255 CURRENT=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
256 CURRENT_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
257 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
258 # COMMIT_ID either was previously set with -b option, or is an empty string
259 CHECKOUT_ID=$COMMIT_ID
260 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID="tags/$LATEST_STABLE_DEVOPS"
261 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID="$BRANCH"
262 if [[ $CHECKOUT_ID == "tags/"* ]]; then
263 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
264 else
265 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
266 fi
267 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
268 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
269 echo " Nothing to be done."
270 else
271 echo " Update required."
272 lxc exec $CONTAINER -- service osm-ro stop
273 lxc exec $CONTAINER -- git -C /opt/openmano stash
274 lxc exec $CONTAINER -- git -C /opt/openmano pull --rebase
275 lxc exec $CONTAINER -- git -C /opt/openmano checkout $CHECKOUT_ID
276 lxc exec $CONTAINER -- git -C /opt/openmano stash pop
277 lxc exec $CONTAINER -- /opt/openmano/database_utils/migrate_mano_db.sh
278 lxc exec $CONTAINER -- service osm-ro start
279 fi
280 echo
281
282 echo -e " Updating SO and UI"
283 CONTAINER="SO-ub"
284 MDG="SO"
285 INSTALL_FOLDER="" # To be filled in
286 echo -e " Fetching the repo"
287 lxc exec $CONTAINER -- git -C $INSTALL_FOLDER fetch --all
288 BRANCH=""
289 BRANCH=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
290 [ -z "$BRANCH" ] && FATAL "Could not find the current branch in use in the '$MDG'"
291 CURRENT=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
292 CURRENT_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
293 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
294 # COMMIT_ID either was previously set with -b option, or is an empty string
295 CHECKOUT_ID=$COMMIT_ID
296 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID="tags/$LATEST_STABLE_DEVOPS"
297 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID="$BRANCH"
298 if [[ $CHECKOUT_ID == "tags/"* ]]; then
299 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
300 else
301 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
302 fi
303 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
304 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
305 echo " Nothing to be done."
306 else
307 echo " Update required."
308 # Instructions to be added
309 # lxc exec SO-ub -- ...
310 fi
311 echo
312 echo -e "Updating MON Container"
313 CONTAINER="MON"
314 MDG="MON"
315 INSTALL_FOLDER="/root/MON"
316 echo -e " Fetching the repo"
317 lxc exec $CONTAINER -- git -C $INSTALL_FOLDER fetch --all
318 BRANCH=""
319 BRANCH=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
320 [ -z "$BRANCH" ] && FATAL "Could not find the current branch in use in the '$MDG'"
321 CURRENT=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
322 CURRENT_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
323 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
324 # COMMIT_ID either was previously set with -b option, or is an empty string
325 CHECKOUT_ID=$COMMIT_ID
326 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID="tags/$LATEST_STABLE_DEVOPS"
327 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID="$BRANCH"
328 if [[ $CHECKOUT_ID == "tags/"* ]]; then
329 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
330 else
331 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
332 fi
333 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
334 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
335 echo " Nothing to be done."
336 else
337 echo " Update required."
338 fi
339 echo
340}
341
342function so_is_up() {
343 if [ -n "$1" ]; then
344 SO_IP=$1
345 else
346 SO_IP=`lxc list SO-ub -c 4|grep eth0 |awk '{print $2}'`
347 fi
348 time=0
349 step=5
350 timelength=300
351 while [ $time -le $timelength ]
352 do
353 if [[ `curl -k -X GET https://$SO_IP:8008/api/operational/vcs/info \
354 -H 'accept: application/vnd.yang.data+json' \
355 -H 'authorization: Basic YWRtaW46YWRtaW4=' \
356 -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 ]]
357 then
358 echo "RW.Restconf running....SO is up"
359 return 0
360 fi
361
362 sleep $step
363 echo -n "."
364 time=$((time+step))
365 done
366
367 FATAL "OSM Failed to startup. SO failed to startup"
368}
369
370function vca_is_up() {
371 if [[ `lxc exec VCA -- juju status | grep "osm" | wc -l` -eq 1 ]]; then
372 echo "VCA is up and running"
373 return 0
374 fi
375
376 FATAL "OSM Failed to startup. VCA failed to startup"
377}
378
379function mon_is_up() {
380 if [[ `curl http://$RO_IP:9090/openmano/ | grep "works" | wc -l` -eq 1 ]]; then
381 echo "MON is up and running"
382 return 0
383 fi
384
385 FATAL "OSM Failed to startup. MON failed to startup"
386}
387
388function ro_is_up() {
389 if [ -n "$1" ]; then
390 RO_IP=$1
391 else
392 RO_IP=`lxc list RO -c 4|grep eth0 |awk '{print $2}'`
393 fi
394 time=0
395 step=2
396 timelength=20
397 while [ $time -le $timelength ]; do
398 if [[ `curl http://$RO_IP:9090/openmano/ | grep "works" | wc -l` -eq 1 ]]; then
399 echo "RO is up and running"
400 return 0
401 fi
402 sleep $step
403 echo -n "."
404 time=$((time+step))
405 done
406
407 FATAL "OSM Failed to startup. RO failed to startup"
408}
409
410
411function configure_RO(){
412 . $OSM_DEVOPS/installers/export_ips
413 echo -e " Configuring RO"
414 lxc exec RO -- sed -i -e "s/^\#\?log_socket_host:.*/log_socket_host: $SO_CONTAINER_IP/g" /etc/osm/openmanod.cfg
415 lxc exec RO -- service osm-ro restart
416
417 ro_is_up
418
419 lxc exec RO -- openmano tenant-delete -f osm >/dev/null
420 lxc exec RO -- openmano tenant-create osm > /dev/null
421 lxc exec RO -- sed -i '/export OPENMANO_TENANT=osm/d' .bashrc
422 lxc exec RO -- sed -i '$ i export OPENMANO_TENANT=osm' .bashrc
423 lxc exec RO -- sh -c 'echo "export OPENMANO_TENANT=osm" >> .bashrc'
424}
425
426function configure_VCA(){
427 echo -e " Configuring VCA"
Benjamin Diazba2cca92018-11-08 21:07:15 -0300428 JUJU_PASSWD=$(generate_secret)
garciadeblasd8bc5c32018-05-09 17:37:56 +0200429 echo -e "$JUJU_PASSWD\n$JUJU_PASSWD" | lxc exec VCA -- juju change-user-password
430}
431
432function configure_SOUI(){
433 . $OSM_DEVOPS/installers/export_ips
434 JUJU_CONTROLLER_IP=`lxc exec VCA -- lxc list -c 4 |grep eth0 |awk '{print $2}'`
435 RO_TENANT_ID=`lxc exec RO -- openmano tenant-list osm |awk '{print $1}'`
436
437 echo -e " Configuring MON"
438 #Information to be added about SO socket for logging
439
440 echo -e " Configuring SO"
441 sudo route add -host $JUJU_CONTROLLER_IP gw $VCA_CONTAINER_IP
garciadeblas818fa5a2018-05-10 13:39:10 +0200442 sudo ip route add 10.44.127.0/24 via $VCA_CONTAINER_IP
garciadeblasd8bc5c32018-05-09 17:37:56 +0200443 sudo sed -i "$ i route add -host $JUJU_CONTROLLER_IP gw $VCA_CONTAINER_IP" /etc/rc.local
garciadeblas818fa5a2018-05-10 13:39:10 +0200444 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 +0200445 # make journaling persistent
446 lxc exec SO-ub -- mkdir -p /var/log/journal
447 lxc exec SO-ub -- systemd-tmpfiles --create --prefix /var/log/journal
448 lxc exec SO-ub -- systemctl restart systemd-journald
449
450 echo RIFT_EXTERNAL_ADDRESS=$DEFAULT_IP | lxc exec SO-ub -- tee -a /usr/rift/etc/default/launchpad
451
452 lxc exec SO-ub -- systemctl restart launchpad
453
454 so_is_up $SO_CONTAINER_IP
455
456 #delete existing config agent (could be there on reconfigure)
457 curl -k --request DELETE \
458 --url https://$SO_CONTAINER_IP:8008/api/config/config-agent/account/osmjuju \
459 --header 'accept: application/vnd.yang.data+json' \
460 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
461 --header 'cache-control: no-cache' \
462 --header 'content-type: application/vnd.yang.data+json' &> /dev/null
463
464 result=$(curl -k --request POST \
465 --url https://$SO_CONTAINER_IP:8008/api/config/config-agent \
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' \
470 --data '{"account": [ { "name": "osmjuju", "account-type": "juju", "juju": { "ip-address": "'$JUJU_CONTROLLER_IP'", "port": "17070", "user": "admin", "secret": "'$JUJU_PASSWD'" } } ]}')
471 [[ $result =~ .*success.* ]] || FATAL "Failed config-agent configuration: $result"
472
473 #R1/R2 config line
474 #result=$(curl -k --request PUT \
475 # --url https://$SO_CONTAINER_IP:8008/api/config/resource-orchestrator \
476 # --header 'accept: application/vnd.yang.data+json' \
477 # --header 'authorization: Basic YWRtaW46YWRtaW4=' \
478 # --header 'cache-control: no-cache' \
479 # --header 'content-type: application/vnd.yang.data+json' \
480 # --data '{ "openmano": { "host": "'$RO_CONTAINER_IP'", "port": "9090", "tenant-id": "'$RO_TENANT_ID'" }, "name": "osmopenmano", "account-type": "openmano" }')
481
482 result=$(curl -k --request PUT \
483 --url https://$SO_CONTAINER_IP:8008/api/config/project/default/ro-account/account \
484 --header 'accept: application/vnd.yang.data+json' \
485 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
486 --header 'cache-control: no-cache' \
487 --header 'content-type: application/vnd.yang.data+json' \
488 --data '{"rw-ro-account:account": [ { "openmano": { "host": "'$RO_CONTAINER_IP'", "port": "9090", "tenant-id": "'$RO_TENANT_ID'"}, "name": "osmopenmano", "ro-account-type": "openmano" }]}')
489 [[ $result =~ .*success.* ]] || FATAL "Failed resource-orchestrator configuration: $result"
490
491 result=$(curl -k --request PATCH \
492 --url https://$SO_CONTAINER_IP:8008/v2/api/config/openidc-provider-config/rw-ui-client/redirect-uri \
493 --header 'accept: application/vnd.yang.data+json' \
494 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
495 --header 'cache-control: no-cache' \
496 --header 'content-type: application/vnd.yang.data+json' \
497 --data '{"redirect-uri": "https://'$DEFAULT_IP':8443/callback" }')
498 [[ $result =~ .*success.* ]] || FATAL "Failed redirect-uri configuration: $result"
499
500 result=$(curl -k --request PATCH \
501 --url https://$SO_CONTAINER_IP:8008/v2/api/config/openidc-provider-config/rw-ui-client/post-logout-redirect-uri \
502 --header 'accept: application/vnd.yang.data+json' \
503 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
504 --header 'cache-control: no-cache' \
505 --header 'content-type: application/vnd.yang.data+json' \
506 --data '{"post-logout-redirect-uri": "https://'$DEFAULT_IP':8443/?api_server=https://'$DEFAULT_IP'" }')
507 [[ $result =~ .*success.* ]] || FATAL "Failed post-logout-redirect-uri configuration: $result"
508
509 lxc exec SO-ub -- tee /etc/network/interfaces.d/60-rift.cfg <<EOF
510auto lo:1
511iface lo:1 inet static
512 address $DEFAULT_IP
513 netmask 255.255.255.255
514EOF
515 lxc exec SO-ub ifup lo:1
516}
517
518#Configure RO, VCA, and SO with the initial configuration:
519# RO -> tenant:osm, logs to be sent to SO
520# VCA -> juju-password
521# SO -> route to Juju Controller, add RO account, add VCA account
522function configure(){
523 #Configure components
524 echo -e "\nConfiguring components"
525 configure_RO
526 configure_VCA
527 configure_SOUI
528}
529
530function install_lxd() {
531 sudo apt-get update
532 sudo apt-get install -y lxd
533 newgrp lxd
534 lxd init --auto
535 lxd waitready
536 lxc network create lxdbr0 ipv4.address=auto ipv4.nat=true ipv6.address=none ipv6.nat=false
537 DEFAULT_INTERFACE=$(route -n | awk '$1~/^0.0.0.0/ {print $8}')
538 DEFAULT_MTU=$(ip addr show $DEFAULT_INTERFACE | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
539 lxc profile device set default eth0 mtu $DEFAULT_MTU
540 #sudo systemctl stop lxd-bridge
541 #sudo systemctl --system daemon-reload
542 #sudo systemctl enable lxd-bridge
543 #sudo systemctl start lxd-bridge
544}
545
546function ask_user(){
547 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
548 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
549 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
550 read -e -p "$1" USER_CONFIRMATION
551 while true ; do
552 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
553 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
554 [ "${USER_CONFIRMATION,,}" == "yes" ] || [ "${USER_CONFIRMATION,,}" == "y" ] && return 0
555 [ "${USER_CONFIRMATION,,}" == "no" ] || [ "${USER_CONFIRMATION,,}" == "n" ] && return 1
556 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
557 done
558}
559
560function launch_container_from_lxd(){
561 export OSM_MDG=$1
562 OSM_load_config
563 export OSM_BASE_IMAGE=$2
564 if ! container_exists $OSM_BUILD_CONTAINER; then
565 CONTAINER_OPTS=""
566 [[ "$OSM_BUILD_CONTAINER_PRIVILEGED" == yes ]] && CONTAINER_OPTS="$CONTAINER_OPTS -c security.privileged=true"
567 [[ "$OSM_BUILD_CONTAINER_ALLOW_NESTED" == yes ]] && CONTAINER_OPTS="$CONTAINER_OPTS -c security.nesting=true"
568 create_container $OSM_BASE_IMAGE $OSM_BUILD_CONTAINER $CONTAINER_OPTS
569 wait_container_up $OSM_BUILD_CONTAINER
570 fi
571}
572
573function install_osmclient(){
574 CLIENT_RELEASE=${RELEASE#"-R "}
575 CLIENT_REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
576 CLIENT_REPOSITORY=${REPOSITORY#"-r "}
garciadeblasd8bc5c32018-05-09 17:37:56 +0200577 CLIENT_REPOSITORY_BASE=${REPOSITORY_BASE#"-u "}
578 key_location=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
579 curl $key_location | sudo apt-key add -
garciadeblas078f5982019-11-27 15:06:06 +0100580 sudo add-apt-repository -y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient IM"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200581 sudo apt-get update
garciadeblas078f5982019-11-27 15:06:06 +0100582 sudo apt-get install -y python3-pip
583 sudo -H LC_ALL=C python3 -m pip install -U pip
garciadeblas1c097b22019-11-29 14:17:12 +0100584 sudo -H LC_ALL=C python3 -m pip install -U python-magic pyangbind
garciadeblasda89ee72019-11-28 02:19:59 +0100585 sudo apt-get install -y python3-osm-im python3-osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +0200586 #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
587 #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
588 #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
589 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME=`lxc list | awk '($2=="SO-ub"){print $6}'`
590 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME=`lxc list | awk '($2=="RO"){print $6}'`
garciadeblasd8bc5c32018-05-09 17:37:56 +0200591 echo -e "\nOSM client installed"
garciadeblasc3226982018-11-27 11:32:47 +0100592 if [ -z "$INSTALL_LIGHTWEIGHT" ]; then
593 echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
594 echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
595 echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
596 else
597 echo -e "OSM client assumes that OSM host is running in localhost (127.0.0.1)."
598 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:"
599 echo " export OSM_HOSTNAME=<OSM_host>"
600 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +0200601 return 0
602}
603
lavado6ad812e2019-11-29 10:58:58 -0500604function install_prometheus_nodeexporter(){
lavadoc26d90b2019-12-06 18:11:36 -0500605 if (systemctl -q is-active node_exporter)
606 then
607 echo "Node Exporter is already running."
608 else
609 echo "Node Exporter is not active, installing..."
610 if getent passwd node_exporter > /dev/null 2>&1; then
611 echo "node_exporter user exists"
612 else
613 echo "Creating user node_exporter"
614 sudo useradd --no-create-home --shell /bin/false node_exporter
615 fi
616 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/
617 sudo tar -C /tmp -xf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz
618 sudo cp /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64/node_exporter /usr/local/bin
619 sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
620 sudo rm -rf node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64*
621 sudo cp ${OSM_DEVOPS}/installers/docker/files/node_exporter.service /etc/systemd/system/node_exporter.service
622 sudo systemctl daemon-reload
623 sudo systemctl restart node_exporter
624 sudo systemctl enable node_exporter
625 echo "Node Exporter has been activated in this host."
626 fi
lavado6ad812e2019-11-29 10:58:58 -0500627 return 0
628}
629
lavado1e4a88c2019-12-03 16:19:59 -0500630function uninstall_prometheus_nodeexporter(){
631 sudo systemctl stop node_exporter
632 sudo systemctl disable node_exporter
633 sudo rm /etc/systemd/system/node_exporter.service
634 sudo systemctl daemon-reload
635 sudo userdel node_exporter
636 sudo rm /usr/local/bin/node_exporter
637 return 0
638}
639
garciadeblasd8bc5c32018-05-09 17:37:56 +0200640function install_from_lxdimages(){
641 LXD_RELEASE=${RELEASE#"-R "}
642 if [ -n "$LXD_REPOSITORY_PATH" ]; then
643 LXD_IMAGE_DIR="$LXD_REPOSITORY_PATH"
644 else
645 LXD_IMAGE_DIR="$(mktemp -d -q --tmpdir "osmimages.XXXXXX")"
646 trap 'rm -rf "$LXD_IMAGE_DIR"' EXIT
647 fi
648 echo -e "\nDeleting previous lxd images if they exist"
649 lxc image show osm-ro &>/dev/null && lxc image delete osm-ro
650 lxc image show osm-vca &>/dev/null && lxc image delete osm-vca
651 lxc image show osm-soui &>/dev/null && lxc image delete osm-soui
652 echo -e "\nImporting osm-ro"
653 [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-ro.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-ro.tar.gz
654 lxc image import $LXD_IMAGE_DIR/osm-ro.tar.gz --alias osm-ro
655 rm -f $LXD_IMAGE_DIR/osm-ro.tar.gz
656 echo -e "\nImporting osm-vca"
657 [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-vca.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-vca.tar.gz
658 lxc image import $LXD_IMAGE_DIR/osm-vca.tar.gz --alias osm-vca
659 rm -f $LXD_IMAGE_DIR/osm-vca.tar.gz
660 echo -e "\nImporting osm-soui"
661 [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-soui.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-soui.tar.gz
662 lxc image import $LXD_IMAGE_DIR/osm-soui.tar.gz --alias osm-soui
663 rm -f $LXD_IMAGE_DIR/osm-soui.tar.gz
664 launch_container_from_lxd RO osm-ro
665 ro_is_up && track RO
666 launch_container_from_lxd VCA osm-vca
667 vca_is_up && track VCA
668 launch_container_from_lxd MON osm-mon
669 mon_is_up && track MON
670 launch_container_from_lxd SO osm-soui
671 #so_is_up && track SOUI
672 track SOUI
673}
674
675function install_docker_ce() {
676 # installs and configures Docker CE
677 echo "Installing Docker CE ..."
678 sudo apt-get -qq update
679 sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
680 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
681 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
682 sudo apt-get -qq update
683 sudo apt-get install -y docker-ce
684 echo "Adding user to group 'docker'"
685 sudo groupadd -f docker
686 sudo usermod -aG docker $USER
garciadeblasd8bc5c32018-05-09 17:37:56 +0200687 sleep 2
688 sudo service docker restart
689 echo "... restarted Docker service"
garciadeblas67ce97c2018-05-18 10:22:09 +0200690 sg docker -c "docker version" || FATAL "Docker installation failed"
691 echo "... Docker CE installation done"
692 return 0
garciadeblasd8bc5c32018-05-09 17:37:56 +0200693}
694
695function install_docker_compose() {
696 # installs and configures docker-compose
697 echo "Installing Docker Compose ..."
698 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
699 sudo chmod +x /usr/local/bin/docker-compose
700 echo "... Docker Compose installation done"
701}
702
703function install_juju() {
704 echo "Installing juju"
Adam Israel41587482019-11-06 10:45:43 -0500705 sudo snap install juju --classic
garciadeblasd41f5482018-05-25 10:25:06 +0200706 [ -z "$INSTALL_NOLXD" ] && sudo dpkg-reconfigure -p medium lxd
Dominik4763cfe2019-11-27 12:15:50 +0100707 [[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200708 echo "Finished installation of juju"
Mike Marchettib8420852018-09-13 13:45:06 -0400709 return 0
710}
711
712function juju_createcontroller() {
Adam Israel8232e562018-11-21 16:47:45 -0500713 if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then
Mike Marchettib8420852018-09-13 13:45:06 -0400714 # Not found created, create the controller
715 sg lxd -c "juju bootstrap --bootstrap-series=xenial localhost $OSM_STACK_NAME"
716 fi
Adam Israel8232e562018-11-21 16:47:45 -0500717 [ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200718}
719
Adam Israel5ddc97f2019-09-03 18:11:12 -0400720function juju_createproxy() {
Adam Israel43fb44d2019-11-06 10:37:25 -0500721 echo -e "\nChecking required packages: iptables-persistent"
722 dpkg -l iptables-persistent &>/dev/null || ! echo -e " Not installed.\nInstalling iptables-persistent requires root privileges" || \
garciadeblas7cc70222019-12-09 01:24:18 +0100723 sudo apt-get -yq install iptables-persistent
Adam Israel43fb44d2019-11-06 10:37:25 -0500724
Adam Israel5ddc97f2019-09-03 18:11:12 -0400725 if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
726 sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
727 sudo netfilter-persistent save
728 fi
729}
730
garciadeblasd8bc5c32018-05-09 17:37:56 +0200731function generate_docker_images() {
732 echo "Pulling and generating docker images"
Michael Marchettiee374142018-08-02 22:47:16 +0200733 _build_from=$COMMIT_ID
734 [ -z "$_build_from" ] && _build_from="master"
735
736 echo "OSM Docker images generated from $_build_from"
737
Mike Marchettib8420852018-09-13 13:45:06 -0400738 BUILD_ARGS+=(--build-arg REPOSITORY="$REPOSITORY")
739 BUILD_ARGS+=(--build-arg RELEASE="$RELEASE")
740 BUILD_ARGS+=(--build-arg REPOSITORY_KEY="$REPOSITORY_KEY")
741 BUILD_ARGS+=(--build-arg REPOSITORY_BASE="$REPOSITORY_BASE")
lavado60216242018-10-10 23:44:28 +0200742
garciadeblas0e596bc2018-05-28 16:04:42 +0200743 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q KAFKA ; then
744 sg docker -c "docker pull wurstmeister/zookeeper" || FATAL "cannot get zookeeper docker image"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300745 sg docker -c "docker pull wurstmeister/kafka:${KAFKA_TAG}" || FATAL "cannot get kafka docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200746 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400747
garciadeblas0e596bc2018-05-28 16:04:42 +0200748 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MONGO ; then
749 sg docker -c "docker pull mongo" || FATAL "cannot get mongo docker image"
750 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400751
lavado60216242018-10-10 23:44:28 +0200752 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
753 sg docker -c "docker pull prom/prometheus:${PROMETHEUS_TAG}" || FATAL "cannot get prometheus docker image"
754 fi
755
garciadeblasfc5bb142019-12-10 10:49:12 +0100756 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS-CADVISOR ; then
757 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
758 fi
759
lavado6ad812e2019-11-29 10:58:58 -0500760 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q GRAFANA ; then
761 sg docker -c "docker pull grafana/grafana:${GRAFANA_TAG}" || FATAL "cannot get grafana docker image"
garciadeblasfc5bb142019-12-10 10:49:12 +0100762 fi
lavado6ad812e2019-11-29 10:58:58 -0500763
garciadeblas4a83e6e2018-12-04 14:55:09 +0100764 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI || echo $TO_REBUILD | grep -q KEYSTONE-DB ; then
lavado9a8df7c2018-10-24 09:35:34 -0500765 sg docker -c "docker pull mariadb:${KEYSTONEDB_TAG}" || FATAL "cannot get keystone-db docker image"
766 fi
767
garciadeblas4a83e6e2018-12-04 14:55:09 +0100768 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
769 sg docker -c "docker pull mysql:5" || FATAL "cannot get mysql docker image"
770 fi
771
Mike Marchettida8a9c42018-10-01 15:25:15 -0400772 if [ -n "$PULL_IMAGES" ]; then
773 sg docker -c "docker pull ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}" || FATAL "cannot pull MON docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400774 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MON ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200775 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/MON
776 git -C ${LWTEMPDIR}/MON checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100777 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 -0500778 fi
779
780 if [ -n "$PULL_IMAGES" ]; then
781 sg docker -c "docker pull ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}" || FATAL "cannot pull POL docker image"
garciadeblas4a83e6e2018-12-04 14:55:09 +0100782 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q POL ; then
lavado9a8df7c2018-10-24 09:35:34 -0500783 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/POL
784 git -C ${LWTEMPDIR}/POL checkout ${COMMIT_ID}
garciadeblas4a83e6e2018-12-04 14:55:09 +0100785 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 +0200786 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400787
788 if [ -n "$PULL_IMAGES" ]; then
789 sg docker -c "docker pull ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}" || FATAL "cannot pull NBI docker image"
lavado9a8df7c2018-10-24 09:35:34 -0500790 sg docker -c "docker pull ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}" || FATAL "cannot pull KEYSTONE docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400791 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200792 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NBI
793 git -C ${LWTEMPDIR}/NBI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100794 sg docker -c "docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t ${DOCKER_USER}/nbi --no-cache" || FATAL "cannot build NBI docker image"
795 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 +0200796 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400797
798 if [ -n "$PULL_IMAGES" ]; then
799 sg docker -c "docker pull ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}" || FATAL "cannot pull RO docker image"
800 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200801 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/RO
802 git -C ${LWTEMPDIR}/RO checkout ${COMMIT_ID}
tierno5cc8ac32019-11-25 10:33:25 +0000803 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 +0200804 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400805
806 if [ -n "$PULL_IMAGES" ]; then
807 sg docker -c "docker pull ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}" || FATAL "cannot pull LCM RO docker image"
808 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LCM ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200809 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LCM
810 git -C ${LWTEMPDIR}/LCM checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100811 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 +0200812 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400813
814 if [ -n "$PULL_IMAGES" ]; then
815 sg docker -c "docker pull ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}" || FATAL "cannot pull light-ui docker image"
816 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-UI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200817 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LW-UI
818 git -C ${LWTEMPDIR}/LW-UI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100819 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 +0200820 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400821
822 if [ -n "$PULL_IMAGES" ]; then
823 sg docker -c "docker pull ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}" || FATAL "cannot pull osmclient docker image"
824 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-osmclient; then
garciadeblas0d45bc82018-11-19 14:25:13 +0100825 sg docker -c "docker build -t ${DOCKER_USER}/osmclient ${BUILD_ARGS[@]} -f $OSM_DEVOPS/docker/osmclient ."
Mike Marchettib8420852018-09-13 13:45:06 -0400826 fi
lavado6ad812e2019-11-29 10:58:58 -0500827
828 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
829 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
830 fi
831
garciadeblasd8bc5c32018-05-09 17:37:56 +0200832 echo "Finished generation of docker images"
833}
834
garciadeblas5b857d32018-05-24 18:37:58 +0200835function cmp_overwrite() {
836 file1="$1"
837 file2="$2"
838 if ! $(cmp "${file1}" "${file2}" >/dev/null 2>&1); then
839 if [ -f "${file2}" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400840 ask_user "The file ${file2} already exists. Overwrite (y/N)? " n && cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200841 else
Mike Marchettib8420852018-09-13 13:45:06 -0400842 cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200843 fi
844 fi
845}
846
garciadeblasd8bc5c32018-05-09 17:37:56 +0200847function generate_docker_env_files() {
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200848 echo "Doing a backup of existing env files"
849 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
850 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
851 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
852 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lwui.env{,~}
853 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
854 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
855 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
856 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
857 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
858
garciadeblasd8bc5c32018-05-09 17:37:56 +0200859 echo "Generating docker env files"
vijaynag8339ed22019-07-25 17:10:58 +0530860 if [ -n "$KUBERNETES" ]; then
861 #Kubernetes resources
862 $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
863 else
864 # Docker-compose
865 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200866
vijaynag8339ed22019-07-25 17:10:58 +0530867 # Prometheus
lavado6ad812e2019-11-29 10:58:58 -0500868 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/files/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus.yml
869
870 # Grafana & Prometheus Exporter files
871 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/files
872 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/files/* $OSM_DOCKER_WORK_DIR/files/
vijaynag8339ed22019-07-25 17:10:58 +0530873 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200874
Benjamin Diazba2cca92018-11-08 21:07:15 -0300875 # LCM
876 if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
877 echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
878 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400879
Benjamin Diazba2cca92018-11-08 21:07:15 -0300880 if ! grep -Fq "OSMLCM_VCA_HOST" $OSM_DOCKER_WORK_DIR/lcm.env; then
881 echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
882 else
883 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_HOST.*|OSMLCM_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/lcm.env
884 fi
885
886 if ! grep -Fq "OSMLCM_VCA_SECRET" $OSM_DOCKER_WORK_DIR/lcm.env; then
887 echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
888 else
889 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_SECRET.*|OSMLCM_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/lcm.env
890 fi
891
garciadeblasaa3ddf42019-04-04 19:04:32 +0200892 if ! grep -Fq "OSMLCM_VCA_PUBKEY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblasec537902019-12-10 14:13:40 +0100893 echo "OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasaa3ddf42019-04-04 19:04:32 +0200894 else
garciadeblasec537902019-12-10 14:13:40 +0100895 $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 +0200896 fi
897
Adam Israelbe7676a2019-10-02 16:10:53 -0400898 if ! grep -Fq "OSMLCM_VCA_CACERT" $OSM_DOCKER_WORK_DIR/lcm.env; then
899 echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
900 else
901 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CACERT.*|OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/lcm.env
902 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -0300903
Adam Israel5ddc97f2019-09-03 18:11:12 -0400904 if ! grep -Fq "OSMLCM_VCA_APIPROXY" $OSM_DOCKER_WORK_DIR/lcm.env; then
905 echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
906 else
907 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_APIPROXY.*|OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
908 fi
909
Benjamin Diazba2cca92018-11-08 21:07:15 -0300910 # RO
911 MYSQL_ROOT_PASSWORD=$(generate_secret)
Mike Marchettib8420852018-09-13 13:45:06 -0400912 if [ ! -f $OSM_DOCKER_WORK_DIR/ro-db.env ]; then
913 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro-db.env
garciadeblas5b857d32018-05-24 18:37:58 +0200914 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400915 if [ ! -f $OSM_DOCKER_WORK_DIR/ro.env ]; then
916 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro.env
garciadeblas5b857d32018-05-24 18:37:58 +0200917 fi
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100918
Benjamin Diazba2cca92018-11-08 21:07:15 -0300919 # Keystone
Benjamin Diazba2cca92018-11-08 21:07:15 -0300920 KEYSTONE_DB_PASSWORD=$(generate_secret)
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100921 SERVICE_PASSWORD=$(generate_secret)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100922 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone-db.env ]; then
923 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone-db.env
924 fi
925 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone.env ]; then
926 echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100927 echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100928 echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100929 fi
930
Benjamin Diazba2cca92018-11-08 21:07:15 -0300931 # NBI
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100932 if [ ! -f $OSM_DOCKER_WORK_DIR/nbi.env ]; then
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100933 echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/nbi.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300934 echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/nbi.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100935 fi
936
Benjamin Diazba2cca92018-11-08 21:07:15 -0300937 # MON
938 if [ ! -f $OSM_DOCKER_WORK_DIR/mon.env ]; then
939 echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diaz9261c662019-02-25 17:18:51 -0300940 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 -0300941 fi
942
943 if ! grep -Fq "OS_NOTIFIER_URI" $OSM_DOCKER_WORK_DIR/mon.env; then
944 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
945 else
946 $WORKDIR_SUDO sed -i "s|OS_NOTIFIER_URI.*|OS_NOTIFIER_URI=http://$DEFAULT_IP:8662|g" $OSM_DOCKER_WORK_DIR/mon.env
947 fi
948
949 if ! grep -Fq "OSMMON_VCA_HOST" $OSM_DOCKER_WORK_DIR/mon.env; then
950 echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
951 else
952 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_HOST.*|OSMMON_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/mon.env
953 fi
954
955 if ! grep -Fq "OSMMON_VCA_SECRET" $OSM_DOCKER_WORK_DIR/mon.env; then
956 echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
957 else
958 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_SECRET.*|OSMMON_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/mon.env
959 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400960
Adam Israel6d8adf32019-12-05 15:46:54 -0500961 if ! grep -Fq "OSMMON_VCA_CACERT" $OSM_DOCKER_WORK_DIR/mon.env; then
962 echo "OSMMON_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
963 else
964 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_CACERT.*|OSMMON_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/mon.env
965 fi
966
967
Benjamin Diaz04560882019-02-26 17:25:07 -0300968 # POL
969 if [ ! -f $OSM_DOCKER_WORK_DIR/pol.env ]; then
970 echo "OSMPOL_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/pol" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/pol.env
971 fi
972
Benjamin Diaz4088a9b2019-05-21 15:11:49 -0300973 # LW-UI
974 if [ ! -f $OSM_DOCKER_WORK_DIR/lwui.env ]; then
975 echo "OSMUI_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/lwui" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lwui.env
976 fi
977
garciadeblasd8bc5c32018-05-09 17:37:56 +0200978 echo "Finished generation of docker env files"
979}
980
Mike Marchettib8420852018-09-13 13:45:06 -0400981function generate_osmclient_script () {
Mike Marchetti46d6efe2018-10-23 16:20:16 -0400982 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 -0400983 $WORKDIR_SUDO chmod +x "$OSM_DOCKER_WORK_DIR/osm"
984 echo "osmclient sidecar container can be found at: $OSM_DOCKER_WORK_DIR/osm"
985}
986
vijaynag8339ed22019-07-25 17:10:58 +0530987#installs kubernetes packages
988function install_kube() {
989 sudo apt-get update && sudo apt-get install -y apt-transport-https
990 curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
991 sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
992 sudo apt-get update
993 echo "Installing Kubernetes Packages ..."
994 sudo apt-get install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
995}
996
997#initializes kubernetes control plane
998function init_kubeadm() {
999 sudo swapoff -a
1000 sudo kubeadm init --config $1
1001 sleep 5
1002}
1003
1004function kube_config_dir() {
1005 [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes"
1006 mkdir -p $HOME/.kube
1007 sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
1008 sudo chown $(id -u):$(id -g) $HOME/.kube/config
1009}
1010
1011#deploys flannel as daemonsets
1012function deploy_cni_provider() {
1013 CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")"
1014 trap 'rm -rf "${CNI_DIR}"' EXIT
1015 wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR
1016 kubectl apply -f $CNI_DIR
1017 [ $? -ne 0 ] && FATAL "Cannot Install Flannel"
1018}
1019
1020#creates secrets from env files which will be used by containers
1021function kube_secrets(){
1022 kubectl create ns $OSM_STACK_NAME
1023 kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env
1024 kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env
1025 kubectl create secret generic nbi-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/nbi.env
1026 kubectl create secret generic ro-db-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro-db.env
1027 kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env
1028 kubectl create secret generic keystone-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/keystone.env
1029 kubectl create secret generic lwui-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lwui.env
1030 kubectl create secret generic pol-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/pol.env
1031}
1032
1033#deploys osm pods and services
1034function deploy_osm_services() {
1035 K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}')
1036 kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
1037 sleep 5
1038 kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR
1039}
1040
1041function parse_yaml() {
1042 osm_services="nbi lcm ro pol mon light-ui keystone"
1043 TAG=$1
1044 for osm in $osm_services; do
1045 $WORKDIR_SUDO sed -i "s/opensourcemano\/$osm:.*/opensourcemano\/$osm:$TAG/g" $OSM_K8S_WORK_DIR/$osm.yaml
1046 done
1047}
1048
1049function namespace_vol() {
1050 osm_services="nbi lcm ro pol mon kafka mongo mysql"
1051 for osm in $osm_services; do
1052 $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml
1053 done
1054}
1055
garciadeblasa3e26612018-05-30 17:58:55 +02001056function init_docker_swarm() {
garciadeblasd8bc5c32018-05-09 17:37:56 +02001057 if [ "${DEFAULT_MTU}" != "1500" ]; then
1058 DOCKER_NETS=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
1059 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";}'`
1060 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"
1061 fi
garciadeblas5b857d32018-05-24 18:37:58 +02001062 sg docker -c "docker swarm init --advertise-addr ${DEFAULT_IP}"
garciadeblasa3e26612018-05-30 17:58:55 +02001063 return 0
1064}
1065
Mike Marchettib8420852018-09-13 13:45:06 -04001066function create_docker_network() {
1067 echo "creating network"
1068 sg docker -c "docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} net${OSM_STACK_NAME}"
1069 echo "creating network DONE"
1070}
1071
garciadeblasa3e26612018-05-30 17:58:55 +02001072function deploy_lightweight() {
Mike Marchettib8420852018-09-13 13:45:06 -04001073
garciadeblasa3e26612018-05-30 17:58:55 +02001074 echo "Deploying lightweight build"
Mike Marchettib8420852018-09-13 13:45:06 -04001075 OSM_NBI_PORT=9999
1076 OSM_RO_PORT=9090
Eduardo Sousa09a1e972018-09-21 11:06:32 +01001077 OSM_KEYSTONE_PORT=5000
Mike Marchettib8420852018-09-13 13:45:06 -04001078 OSM_UI_PORT=80
lavadoafa54c72018-10-05 09:28:28 -05001079 OSM_MON_PORT=8662
lavado60216242018-10-10 23:44:28 +02001080 OSM_PROM_PORT=9090
garciadeblasa7b27dc2019-12-04 15:06:55 +01001081 OSM_PROM_CADVISOR_PORT=8080
lavado60216242018-10-10 23:44:28 +02001082 OSM_PROM_HOSTPORT=9091
lavado6ad812e2019-11-29 10:58:58 -05001083 OSM_GRAFANA_PORT=3000
Eduardo Sousae00c8f92018-10-08 10:36:17 +01001084 [ -n "$INSTALL_ELK" ] && OSM_ELK_PORT=5601
lavado6ad812e2019-11-29 10:58:58 -05001085 #[ -n "$INSTALL_PERFMON" ] && OSM_PM_PORT=3000
lavado60216242018-10-10 23:44:28 +02001086
Mike Marchettib8420852018-09-13 13:45:06 -04001087 if [ -n "$NO_HOST_PORTS" ]; then
1088 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT)
1089 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +01001090 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001091 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -05001092 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +02001093 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +01001094 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -05001095 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT)
1096 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +01001097 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001098 else
1099 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT:$OSM_NBI_PORT)
1100 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT:$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +01001101 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT:$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001102 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT:$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -05001103 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT:$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +02001104 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_HOSTPORT:$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +01001105 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT:$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -05001106 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT:$OSM_GRAFANA_PORT)
1107 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT:$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +01001108 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT:$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001109 fi
1110 echo "export ${OSM_PORTS[@]}" | $WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/osm_ports.sh
1111 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 -04001112 echo "export TAG=${OSM_DOCKER_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Mike Marchettida8a9c42018-10-01 15:25:15 -04001113 echo "export DOCKER_USER=${DOCKER_USER}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -03001114 echo "export KAFKA_TAG=${KAFKA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado60216242018-10-10 23:44:28 +02001115 echo "export PROMETHEUS_TAG=${PROMETHEUS_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado9a8df7c2018-10-24 09:35:34 -05001116 echo "export KEYSTONEDB_TAG=${KEYSTONEDB_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado6ad812e2019-11-29 10:58:58 -05001117 echo "export PROMETHEUS_CADVISOR_TAG=${PROMETHEUS_CADVISOR_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
1118 echo "export GRAFANA_TAG=${GRAFANA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -03001119
Mike Marchettib8420852018-09-13 13:45:06 -04001120 pushd $OSM_DOCKER_WORK_DIR
beierl63229a22019-05-30 14:42:04 -04001121 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 -04001122 popd
1123
garciadeblasd8bc5c32018-05-09 17:37:56 +02001124 echo "Finished deployment of lightweight build"
1125}
1126
garciadeblas6c66abf2018-05-16 14:46:19 +02001127function deploy_elk() {
garciadeblase2aebfe2018-07-06 14:11:20 +02001128 echo "Pulling docker images for ELK"
lavado53eb8f52018-11-16 12:58:23 -05001129 sg docker -c "docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:${ELASTIC_VERSION}" || FATAL "cannot get elasticsearch docker image"
1130 sg docker -c "docker pull docker.elastic.co/beats/metricbeat:${ELASTIC_VERSION}" || FATAL "cannot get metricbeat docker image"
1131 sg docker -c "docker pull docker.elastic.co/beats/filebeat:${ELASTIC_VERSION}" || FATAL "cannot get filebeat docker image"
1132 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 -05001133 sg docker -c "docker pull bobrik/curator:${ELASTIC_CURATOR_VERSION}" || FATAL "cannot get curator docker image"
garciadeblase2aebfe2018-07-06 14:11:20 +02001134 echo "Finished pulling elk docker images"
Mike Marchettib8420852018-09-13 13:45:06 -04001135 $WORKDIR_SUDO mkdir -p "$OSM_DOCKER_WORK_DIR/osm_elk"
1136 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_elk/* $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas5b857d32018-05-24 18:37:58 +02001137 remove_stack osm_elk
garciadeblas6c66abf2018-05-16 14:46:19 +02001138 echo "Deploying ELK stack"
Mike Marchettib8420852018-09-13 13:45:06 -04001139 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 +02001140 echo "Waiting for ELK stack to be up and running"
1141 time=0
garciadeblase2aebfe2018-07-06 14:11:20 +02001142 step=5
1143 timelength=40
garciadeblas6c66abf2018-05-16 14:46:19 +02001144 elk_is_up=1
1145 while [ $time -le $timelength ]; do
garciadeblase2aebfe2018-07-06 14:11:20 +02001146 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 +02001147 elk_is_up=0
1148 break
1149 fi
1150 sleep $step
1151 time=$((time+step))
1152 done
1153 if [ $elk_is_up -eq 0 ]; then
1154 echo "ELK is up and running. Trying to create index pattern..."
1155 #Create index pattern
1156 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -05001157 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
1158 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001159 #Make it the default index
garciadeblase2aebfe2018-07-06 14:11:20 +02001160 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +02001161 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -05001162 -d"{\"value\":\"filebeat-*\"}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001163 else
1164 echo "Cannot connect to Kibana to create index pattern."
1165 echo "Once Kibana is running, you can use the following instructions to create index pattern:"
1166 echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -05001167 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
1168 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}"'
garciadeblas6c66abf2018-05-16 14:46:19 +02001169 echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +02001170 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -05001171 -d"{\"value\":\"filebeat-*\"}"'
garciadeblas6c66abf2018-05-16 14:46:19 +02001172 fi
1173 echo "Finished deployment of ELK stack"
1174 return 0
1175}
1176
garciadeblasd8bc5c32018-05-09 17:37:56 +02001177function install_lightweight() {
garciadeblas0d45bc82018-11-19 14:25:13 +01001178 [ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
vijaynag8339ed22019-07-25 17:10:58 +05301179 [ -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 -04001180 [ ! -d "$OSM_DOCKER_WORK_DIR" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR
vijaynag8339ed22019-07-25 17:10:58 +05301181 [ -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 -04001182
garciadeblas183e5802018-12-13 18:20:54 +01001183 track checkingroot
garciadeblasd13a8aa2018-05-18 15:24:51 +02001184 [ "$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 +01001185 track noroot
vijaynag8339ed22019-07-25 17:10:58 +05301186
1187 if [ -n "$KUBERNETES" ]; then
1188 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
1189 1. Install and configure LXD
1190 2. Install juju
1191 3. Install docker CE
1192 4. Disable swap space
1193 5. Install and initialize Kubernetes
1194 as pre-requirements.
1195 Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
1196
1197 else
1198 [ -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
1199 fi
garciadeblasfae5e972018-06-12 18:27:11 +02001200 track proceed
vijaynag8339ed22019-07-25 17:10:58 +05301201
garciadeblasd8bc5c32018-05-09 17:37:56 +02001202 echo "Installing lightweight build of OSM"
1203 LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
1204 trap 'rm -rf "${LWTEMPDIR}"' EXIT
1205 DEFAULT_IF=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
garciadeblas8cd60772018-06-02 08:38:17 +02001206 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001207 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
garciadeblas8cd60772018-06-02 08:38:17 +02001208 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001209 DEFAULT_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
Mike Marchettib8420852018-09-13 13:45:06 -04001210
1211 # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to
lavadoe07b1642018-10-25 10:58:34 -05001212 if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ]; then
garciadeblasbd925e42018-06-14 14:32:12 +02001213 need_packages_lw="lxd snapd"
garciadeblasd41f5482018-05-25 10:25:06 +02001214 echo -e "Checking required packages: $need_packages_lw"
1215 dpkg -l $need_packages_lw &>/dev/null \
1216 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1217 || sudo apt-get update \
1218 || FATAL "failed to run apt-get update"
1219 dpkg -l $need_packages_lw &>/dev/null \
1220 || ! echo -e "Installing $need_packages_lw requires root privileges." \
1221 || sudo apt-get install -y $need_packages_lw \
1222 || FATAL "failed to install $need_packages_lw"
1223 fi
garciadeblasfae5e972018-06-12 18:27:11 +02001224 track prereqok
Mike Marchettib8420852018-09-13 13:45:06 -04001225
vijaynag8339ed22019-07-25 17:10:58 +05301226 [ -z "$INSTALL_NOJUJU" ] && install_juju
garciadeblas183e5802018-12-13 18:20:54 +01001227 track juju_install
vijaynag8339ed22019-07-25 17:10:58 +05301228
lavadoe07b1642018-10-25 10:58:34 -05001229 if [ -z "$OSM_VCA_HOST" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -04001230 juju_createcontroller
lavadoe07b1642018-10-25 10:58:34 -05001231 OSM_VCA_HOST=`sg lxd -c "juju show-controller $OSM_STACK_NAME"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
1232 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
Mike Marchettib8420852018-09-13 13:45:06 -04001233 fi
garciadeblas183e5802018-12-13 18:20:54 +01001234 track juju_controller
vijaynag8339ed22019-07-25 17:10:58 +05301235
lavadoe07b1642018-10-25 10:58:34 -05001236 if [ -z "$OSM_VCA_SECRET" ]; then
1237 OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME)
1238 [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
Mike Marchettib8420852018-09-13 13:45:06 -04001239 fi
garciadeblasaa3ddf42019-04-04 19:04:32 +02001240 if [ -z "$OSM_VCA_PUBKEY" ]; then
1241 OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
1242 [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
1243 fi
garciadeblasfc5bb142019-12-10 10:49:12 +01001244 if [ -z "$OSM_VCA_CACERT" ]; then
1245 OSM_VCA_CACERT=$(juju controllers --format json | jq -r '.controllers["osm"]["ca-cert"]' | base64 | tr -d \\n)
1246 [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
1247 fi
Adam Israel5ddc97f2019-09-03 18:11:12 -04001248 if [ -z "$OSM_VCA_APIPROXY" ]; then
1249 OSM_VCA_APIPROXY=$DEFAULT_IP
1250 [ -z "$OSM_VCA_APIPROXY" ] && FATAL "Cannot obtain juju api proxy"
1251 fi
1252 juju_createproxy
garciadeblasfc5bb142019-12-10 10:49:12 +01001253 track juju
Adam Israel5ddc97f2019-09-03 18:11:12 -04001254
Benjamin Diazba2cca92018-11-08 21:07:15 -03001255 if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
1256 OSM_DATABASE_COMMONKEY=$(generate_secret)
1257 [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret"
1258 fi
vijaynag8339ed22019-07-25 17:10:58 +05301259
garciadeblasa3e26612018-05-30 17:58:55 +02001260 [ -n "$INSTALL_NODOCKER" ] || install_docker_ce
garciadeblas6c66abf2018-05-16 14:46:19 +02001261 track docker_ce
vijaynag8339ed22019-07-25 17:10:58 +05301262
1263 #Installs Kubernetes and deploys osm services
1264 if [ -n "$KUBERNETES" ]; then
1265 install_kube
1266 track install_k8s
1267 init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
1268 kube_config_dir
1269 track init_k8s
1270 else
1271 #install_docker_compose
1272 [ -n "$INSTALL_NODOCKER" ] || init_docker_swarm
1273 track docker_swarm
1274 fi
1275
Mike Marchettib8420852018-09-13 13:45:06 -04001276 [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
garciadeblas6c66abf2018-05-16 14:46:19 +02001277 track docker_build
vijaynag8339ed22019-07-25 17:10:58 +05301278
garciadeblasd8bc5c32018-05-09 17:37:56 +02001279 generate_docker_env_files
Mike Marchettib8420852018-09-13 13:45:06 -04001280
vijaynag8339ed22019-07-25 17:10:58 +05301281 if [ -n "$KUBERNETES" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +01001282 if [ -n "$K8S_MONITOR" ]; then
1283 # uninstall OSM MONITORING
1284 uninstall_k8s_monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +01001285 track uninstall_k8s_monitoring
romeromonsere366b1a2019-11-19 19:49:26 +01001286 fi
vijaynag8339ed22019-07-25 17:10:58 +05301287 #remove old namespace
1288 remove_k8s_namespace $OSM_STACK_NAME
1289 deploy_cni_provider
1290 kube_secrets
1291 [ ! $OSM_DOCKER_TAG == "latest" ] && parse_yaml $OSM_DOCKER_TAG
1292 namespace_vol
1293 deploy_osm_services
1294 track deploy_osm_services_k8s
garciadeblasfc5bb142019-12-10 10:49:12 +01001295 if [ -n "$K8S_MONITOR" ]; then
1296 # install OSM MONITORING
1297 install_k8s_monitoring
1298 track install_k8s_monitoring
1299 fi
vijaynag8339ed22019-07-25 17:10:58 +05301300 else
1301 # remove old stack
1302 remove_stack $OSM_STACK_NAME
1303 create_docker_network
1304 deploy_lightweight
1305 generate_osmclient_script
1306 track docker_deploy
lavado6ad812e2019-11-29 10:58:58 -05001307 install_prometheus_nodeexporter
garciadeblasfc5bb142019-12-10 10:49:12 +01001308 track nodeexporter
vijaynag8339ed22019-07-25 17:10:58 +05301309 [ -n "$INSTALL_VIMEMU" ] && install_vimemu && track vimemu
1310 [ -n "$INSTALL_ELK" ] && deploy_elk && track elk
vijaynag8339ed22019-07-25 17:10:58 +05301311 fi
1312
Mike Marchettib8420852018-09-13 13:45:06 -04001313 [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
garciadeblas6c66abf2018-05-16 14:46:19 +02001314 track osmclient
vijaynag8339ed22019-07-25 17:10:58 +05301315
garciadeblas44c02192019-12-09 01:36:57 +01001316 wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001317 track end
garciadeblasd8bc5c32018-05-09 17:37:56 +02001318 return 0
1319}
1320
1321function install_vimemu() {
peusterm76353e42018-05-08 13:56:05 +02001322 echo "\nInstalling vim-emu"
1323 EMUTEMPDIR="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX")"
1324 trap 'rm -rf "${EMUTEMPDIR}"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001325 # clone vim-emu repository (attention: branch is currently master only)
1326 echo "Cloning vim-emu repository ..."
peusterm76353e42018-05-08 13:56:05 +02001327 git clone https://osm.etsi.org/gerrit/osm/vim-emu.git $EMUTEMPDIR
garciadeblasd8bc5c32018-05-09 17:37:56 +02001328 # build vim-emu docker
1329 echo "Building vim-emu Docker container..."
Mike Marchettib8420852018-09-13 13:45:06 -04001330
1331 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 +02001332 # start vim-emu container as daemon
1333 echo "Starting vim-emu Docker container 'vim-emu' ..."
peusterm76353e42018-05-08 13:56:05 +02001334 if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
1335 # in lightweight mode, the emulator needs to be attached to netOSM
Mike Marchettib8420852018-09-13 13:45:06 -04001336 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 +02001337 else
1338 # classic build mode
Mike Marchettib8420852018-09-13 13:45:06 -04001339 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 +02001340 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001341 echo "Waiting for 'vim-emu' container to start ..."
1342 sleep 5
Mike Marchettib8420852018-09-13 13:45:06 -04001343 export VIMEMU_HOSTNAME=$(sg docker -c "docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001344 echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
peusterm76353e42018-05-08 13:56:05 +02001345 # print vim-emu connection info
1346 echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001347 echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
peusterm76353e42018-05-08 13:56:05 +02001348 echo -e "To add the emulated VIM to OSM you should do:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001349 echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
1350}
1351
romeromonsere366b1a2019-11-19 19:49:26 +01001352function install_k8s_monitoring() {
1353 # install OSM monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +01001354 $WORKDIR_SUDO chmod +x $OSM_DEVOPS/installers/k8s/*.sh
romeromonsere366b1a2019-11-19 19:49:26 +01001355 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh
1356}
1357
1358function uninstall_k8s_monitoring() {
1359 # install OSM monitoring
romeromonsere366b1a2019-11-19 19:49:26 +01001360 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/uninstall_osm_k8s_monitoring.sh
1361}
1362
garciadeblasd8bc5c32018-05-09 17:37:56 +02001363function dump_vars(){
1364 echo "DEVELOP=$DEVELOP"
1365 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
1366 echo "UNINSTALL=$UNINSTALL"
1367 echo "NAT=$NAT"
1368 echo "UPDATE=$UPDATE"
1369 echo "RECONFIGURE=$RECONFIGURE"
1370 echo "TEST_INSTALLER=$TEST_INSTALLER"
1371 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
1372 echo "INSTALL_LXD=$INSTALL_LXD"
1373 echo "INSTALL_FROM_LXDIMAGES=$INSTALL_FROM_LXDIMAGES"
1374 echo "LXD_REPOSITORY_BASE=$LXD_REPOSITORY_BASE"
1375 echo "LXD_REPOSITORY_PATH=$LXD_REPOSITORY_PATH"
1376 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
garciadeblas6c66abf2018-05-16 14:46:19 +02001377 echo "INSTALL_ONLY=$INSTALL_ONLY"
1378 echo "INSTALL_ELK=$INSTALL_ELK"
lavado6ad812e2019-11-29 10:58:58 -05001379 #echo "INSTALL_PERFMON=$INSTALL_PERFMON"
garciadeblas0e596bc2018-05-28 16:04:42 +02001380 echo "TO_REBUILD=$TO_REBUILD"
garciadeblasd41f5482018-05-25 10:25:06 +02001381 echo "INSTALL_NOLXD=$INSTALL_NOLXD"
garciadeblasa3e26612018-05-30 17:58:55 +02001382 echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
garciadeblas0d45bc82018-11-19 14:25:13 +01001383 echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001384 echo "RELEASE=$RELEASE"
1385 echo "REPOSITORY=$REPOSITORY"
1386 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
1387 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
1388 echo "NOCONFIGURE=$NOCONFIGURE"
garciadeblas0d45bc82018-11-19 14:25:13 +01001389 echo "OSM_DEVOPS=$OSM_DEVOPS"
1390 echo "OSM_VCA_HOST=$OSM_VCA_HOST"
1391 echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
garciadeblasaa3ddf42019-04-04 19:04:32 +02001392 echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001393 echo "NO_HOST_PORTS=$NO_HOST_PORTS"
1394 echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
1395 echo "WORKDIR_SUDO=$WORKDIR_SUDO"
1396 echo "OSM_WORK_DIR=$OSM_STACK_NAME"
1397 echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
1398 echo "DOCKER_USER=$DOCKER_USER"
1399 echo "OSM_STACK_NAME=$OSM_STACK_NAME"
1400 echo "PULL_IMAGES=$PULL_IMAGES"
vijaynag8339ed22019-07-25 17:10:58 +05301401 echo "KUBERNETES=$KUBERNETES"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001402 echo "SHOWOPTS=$SHOWOPTS"
1403 echo "Install from specific refspec (-b): $COMMIT_ID"
1404}
1405
1406function track(){
1407 ctime=`date +%s`
1408 duration=$((ctime - SESSION_ID))
1409 url="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
1410 #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
1411 event_name="bin"
garciadeblas6c66abf2018-05-16 14:46:19 +02001412 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name="binsrc"
1413 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name="lxd"
1414 [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name="lw"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001415 event_name="${event_name}_$1"
1416 url="${url}&event=${event_name}&ce_duration=${duration}"
1417 wget -q -O /dev/null $url
1418}
1419
1420UNINSTALL=""
1421DEVELOP=""
1422NAT=""
1423UPDATE=""
1424RECONFIGURE=""
1425TEST_INSTALLER=""
1426INSTALL_LXD=""
1427SHOWOPTS=""
1428COMMIT_ID=""
1429ASSUME_YES=""
1430INSTALL_FROM_SOURCE=""
garciadeblasfc5bb142019-12-10 10:49:12 +01001431RELEASE="ReleaseSEVEN"
Mike Marchettib8420852018-09-13 13:45:06 -04001432REPOSITORY="stable"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001433INSTALL_VIMEMU=""
1434INSTALL_FROM_LXDIMAGES=""
1435LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
1436LXD_REPOSITORY_PATH=""
1437INSTALL_LIGHTWEIGHT="y"
garciadeblas6c66abf2018-05-16 14:46:19 +02001438INSTALL_ONLY=""
1439INSTALL_ELK=""
garciadeblas0e596bc2018-05-28 16:04:42 +02001440TO_REBUILD=""
garciadeblasd41f5482018-05-25 10:25:06 +02001441INSTALL_NOLXD=""
garciadeblasa3e26612018-05-30 17:58:55 +02001442INSTALL_NODOCKER=""
Mike Marchettib8420852018-09-13 13:45:06 -04001443INSTALL_NOJUJU=""
vijaynag8339ed22019-07-25 17:10:58 +05301444KUBERNETES=""
romeromonsere366b1a2019-11-19 19:49:26 +01001445K8S_MONITOR=""
garciadeblas0d45bc82018-11-19 14:25:13 +01001446INSTALL_NOHOSTCLIENT=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001447NOCONFIGURE=""
1448RELEASE_DAILY=""
1449SESSION_ID=`date +%s`
1450OSM_DEVOPS=
lavadoe07b1642018-10-25 10:58:34 -05001451OSM_VCA_HOST=
1452OSM_VCA_SECRET=
garciadeblasaa3ddf42019-04-04 19:04:32 +02001453OSM_VCA_PUBKEY=
Mike Marchettib8420852018-09-13 13:45:06 -04001454OSM_STACK_NAME=osm
1455NO_HOST_PORTS=""
1456DOCKER_NOBUILD=""
1457REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
garciadeblas870e60a2018-11-21 16:44:21 +01001458REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
Mike Marchettib8420852018-09-13 13:45:06 -04001459WORKDIR_SUDO=sudo
1460OSM_WORK_DIR="/etc/osm"
garciadeblas526f0fb2018-11-23 14:47:40 +01001461OSM_DOCKER_WORK_DIR="/etc/osm/docker"
vijaynag8339ed22019-07-25 17:10:58 +05301462OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
1463OSM_HOST_VOL="/var/lib/osm"
1464OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
Mike Marchetti13d76c82018-09-19 15:00:36 -04001465OSM_DOCKER_TAG=latest
garciadeblas0d45bc82018-11-19 14:25:13 +01001466DOCKER_USER=opensourcemano
1467PULL_IMAGES="y"
Benjamin Diazaa0af712018-10-04 14:02:34 -03001468KAFKA_TAG=2.11-1.0.2
lavado60216242018-10-10 23:44:28 +02001469PROMETHEUS_TAG=v2.4.3
lavado6ad812e2019-11-29 10:58:58 -05001470GRAFANA_TAG=latest
1471PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
1472PROMETHEUS_CADVISOR_TAG=latest
lavado9a8df7c2018-10-24 09:35:34 -05001473KEYSTONEDB_TAG=10
Benjamin Diazba2cca92018-11-08 21:07:15 -03001474OSM_DATABASE_COMMONKEY=
lavado53eb8f52018-11-16 12:58:23 -05001475ELASTIC_VERSION=6.4.2
lavado4e8662c2018-11-28 11:28:14 -05001476ELASTIC_CURATOR_VERSION=5.5.4
vijaynag8339ed22019-07-25 17:10:58 +05301477POD_NETWORK_CIDR=10.244.0.0/16
1478K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
1479RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
garciadeblasd8bc5c32018-05-09 17:37:56 +02001480
vijaynag8339ed22019-07-25 17:10:58 +05301481while 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 +02001482 case "${o}" in
1483 h)
1484 usage && exit 0
1485 ;;
1486 b)
1487 COMMIT_ID=${OPTARG}
garciadeblas0d45bc82018-11-19 14:25:13 +01001488 PULL_IMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001489 ;;
1490 r)
Mike Marchettib8420852018-09-13 13:45:06 -04001491 REPOSITORY="${OPTARG}"
1492 REPO_ARGS+=(-r "$REPOSITORY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001493 ;;
vijaynag8339ed22019-07-25 17:10:58 +05301494 c)
1495 [ "${OPTARG}" == "swarm" ] && continue
1496 [ "${OPTARG}" == "k8s" ] && KUBERNETES="y" && continue
1497 echo -e "Invalid argument for -i : ' $OPTARG'\n" >&2
1498 usage && exit 1
1499 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001500 R)
Mike Marchettib8420852018-09-13 13:45:06 -04001501 RELEASE="${OPTARG}"
1502 REPO_ARGS+=(-R "$RELEASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001503 ;;
1504 k)
Mike Marchettib8420852018-09-13 13:45:06 -04001505 REPOSITORY_KEY="${OPTARG}"
1506 REPO_ARGS+=(-k "$REPOSITORY_KEY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001507 ;;
1508 u)
Mike Marchettib8420852018-09-13 13:45:06 -04001509 REPOSITORY_BASE="${OPTARG}"
1510 REPO_ARGS+=(-u "$REPOSITORY_BASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001511 ;;
garciadeblas0d45bc82018-11-19 14:25:13 +01001512 U)
1513 DOCKER_USER="${OPTARG}"
1514 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001515 l)
1516 LXD_REPOSITORY_BASE="${OPTARG}"
1517 ;;
1518 p)
1519 LXD_REPOSITORY_PATH="${OPTARG}"
1520 ;;
1521 D)
1522 OSM_DEVOPS="${OPTARG}"
1523 ;;
Mike Marchettib8420852018-09-13 13:45:06 -04001524 s)
vijaynag8339ed22019-07-25 17:10:58 +05301525 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 -04001526 ;;
1527 H)
lavadoe07b1642018-10-25 10:58:34 -05001528 OSM_VCA_HOST="${OPTARG}"
Mike Marchettib8420852018-09-13 13:45:06 -04001529 ;;
1530 S)
lavadoe07b1642018-10-25 10:58:34 -05001531 OSM_VCA_SECRET="${OPTARG}"
Mike Marchettib8420852018-09-13 13:45:06 -04001532 ;;
garciadeblasaa3ddf42019-04-04 19:04:32 +02001533 P)
1534 OSM_VCA_PUBKEY=$(cat ${OPTARG})
1535 ;;
Adam Israel5ddc97f2019-09-03 18:11:12 -04001536 A)
1537 OSM_VCA_APIPROXY="${OPTARG}"
1538 ;;
Mike Marchettib8420852018-09-13 13:45:06 -04001539 w)
1540 # when specifying workdir, do not use sudo for access
1541 WORKDIR_SUDO=
1542 OSM_WORK_DIR="${OPTARG}"
1543 ;;
Mike Marchetti13d76c82018-09-19 15:00:36 -04001544 t)
1545 OSM_DOCKER_TAG="${OPTARG}"
1546 ;;
garciadeblas6c66abf2018-05-16 14:46:19 +02001547 o)
1548 INSTALL_ONLY="y"
1549 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
1550 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001551 ;;
garciadeblas0e596bc2018-05-28 16:04:42 +02001552 m)
garciadeblas0e596bc2018-05-28 16:04:42 +02001553 [ "${OPTARG}" == "LW-UI" ] && TO_REBUILD="$TO_REBUILD LW-UI" && continue
govindappa79e51b92019-05-22 12:15:21 +05301554 [ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
1555 [ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
1556 [ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001557 [ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
govindappa79e51b92019-05-22 12:15:21 +05301558 [ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001559 [ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
1560 [ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
govindappa79e51b92019-05-22 12:15:21 +05301561 [ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
garciadeblasfc5bb142019-12-10 10:49:12 +01001562 [ "${OPTARG}" == "PROMETHEUS-CADVISOR" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS-CADVISOR" && continue
govindappa79e51b92019-05-22 12:15:21 +05301563 [ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
lavado6ad812e2019-11-29 10:58:58 -05001564 [ "${OPTARG}" == "GRAFANA" ] && TO_REBUILD="$TO_REBUILD GRAFANA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001565 [ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
1566 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001567 -)
1568 [ "${OPTARG}" == "help" ] && usage && exit 0
garciadeblas0d45bc82018-11-19 14:25:13 +01001569 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001570 [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
1571 [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
1572 [ "${OPTARG}" == "nat" ] && NAT="y" && continue
1573 [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
1574 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
1575 [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
1576 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
garciadeblasd41f5482018-05-25 10:25:06 +02001577 [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
garciadeblasa3e26612018-05-30 17:58:55 +02001578 [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001579 [ "${OPTARG}" == "lxdimages" ] && INSTALL_FROM_LXDIMAGES="y" && continue
1580 [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT="y" && continue
garciadeblase990f662018-05-18 11:43:39 +02001581 [ "${OPTARG}" == "soui" ] && INSTALL_LIGHTWEIGHT="" && RELEASE="-R ReleaseTHREE" && REPOSITORY="-r stable" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001582 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001583 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001584 [ "${OPTARG}" == "noconfigure" ] && NOCONFIGURE="y" && continue
1585 [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
1586 [ "${OPTARG}" == "daily" ] && RELEASE_DAILY="y" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001587 [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
1588 [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
1589 [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
1590 [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
garciadeblas0d45bc82018-11-19 14:25:13 +01001591 [ "${OPTARG}" == "pullimages" ] && continue
romeromonsere366b1a2019-11-19 19:49:26 +01001592 [ "${OPTARG}" == "k8s_monitor" ] && K8S_MONITOR="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001593 echo -e "Invalid option: '--$OPTARG'\n" >&2
1594 usage && exit 1
1595 ;;
1596 \?)
1597 echo -e "Invalid option: '-$OPTARG'\n" >&2
1598 usage && exit 1
1599 ;;
1600 y)
1601 ASSUME_YES="y"
1602 ;;
1603 *)
1604 usage && exit 1
1605 ;;
1606 esac
1607done
1608
garciadeblas6c66abf2018-05-16 14:46:19 +02001609[ -n "$INSTALL_FROM_LXDIMAGES" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --lxd can only be used with --soui"
garciadeblase990f662018-05-18 11:43:39 +02001610[ -n "$NAT" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --nat can only be used with --soui"
1611[ -n "$NOCONFIGURE" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --noconfigure can only be used with --soui"
garciadeblasfb566272018-05-25 10:33:36 +02001612[ -n "$RELEASE_DAILY" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --daily can only be used with --soui"
garciadeblasd41f5482018-05-25 10:25:06 +02001613[ -n "$INSTALL_NOLXD" ] && [ -z "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible option: --nolxd cannot be used with --soui"
garciadeblasa3e26612018-05-30 17:58:55 +02001614[ -n "$INSTALL_NODOCKER" ] && [ -z "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible option: --nodocker cannot be used with --soui"
garciadeblas0e596bc2018-05-28 16:04:42 +02001615[ -n "$TO_REBUILD" ] && [ -z "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible option: -m cannot be used with --soui"
1616[ -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 +02001617
garciadeblasd8bc5c32018-05-09 17:37:56 +02001618if [ -n "$SHOWOPTS" ]; then
1619 dump_vars
1620 exit 0
1621fi
1622
1623[ -n "$RELEASE_DAILY" ] && echo -e "\nInstalling from daily build repo" && RELEASE="-R ReleaseTHREE-daily" && REPOSITORY="-r testing" && COMMIT_ID="master"
1624
1625# if develop, we force master
1626[ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
1627
garciadeblasd8bc5c32018-05-09 17:37:56 +02001628need_packages="git jq wget curl tar"
1629echo -e "Checking required packages: $need_packages"
1630dpkg -l $need_packages &>/dev/null \
1631 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1632 || sudo apt-get update \
1633 || FATAL "failed to run apt-get update"
1634dpkg -l $need_packages &>/dev/null \
1635 || ! echo -e "Installing $need_packages requires root privileges." \
1636 || sudo apt-get install -y $need_packages \
1637 || FATAL "failed to install $need_packages"
1638
1639if [ -z "$OSM_DEVOPS" ]; then
Michael Marchettiee374142018-08-02 22:47:16 +02001640 if [ -n "$TEST_INSTALLER" ]; then
1641 echo -e "\nUsing local devops repo for OSM installation"
1642 OSM_DEVOPS="$(dirname $(realpath $(dirname $0)))"
1643 else
1644 echo -e "\nCreating temporary dir for OSM installation"
1645 OSM_DEVOPS="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
1646 trap 'rm -rf "$OSM_DEVOPS"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001647
Michael Marchettiee374142018-08-02 22:47:16 +02001648 git clone https://osm.etsi.org/gerrit/osm/devops.git $OSM_DEVOPS
garciadeblasd8bc5c32018-05-09 17:37:56 +02001649
Michael Marchettiee374142018-08-02 22:47:16 +02001650 if [ -z "$COMMIT_ID" ]; then
1651 echo -e "\nGuessing the current stable release"
1652 LATEST_STABLE_DEVOPS=`git -C $OSM_DEVOPS tag -l v[0-9].* | sort -V | tail -n1`
1653 [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
1654
1655 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
1656 COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
1657 else
1658 echo -e "\nDEVOPS Using commit $COMMIT_ID"
1659 fi
1660 git -C $OSM_DEVOPS checkout $COMMIT_ID
garciadeblasd8bc5c32018-05-09 17:37:56 +02001661 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001662fi
1663
garciadeblas3c25fab2019-11-18 17:24:43 +01001664. $OSM_DEVOPS/common/all_funcs
garciadeblasd8bc5c32018-05-09 17:37:56 +02001665
1666[ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight && echo -e "\nDONE" && exit 0
1667[ -n "$UNINSTALL" ] && uninstall && echo -e "\nDONE" && exit 0
1668[ -n "$NAT" ] && nat && echo -e "\nDONE" && exit 0
1669[ -n "$UPDATE" ] && update && echo -e "\nDONE" && exit 0
1670[ -n "$RECONFIGURE" ] && configure && echo -e "\nDONE" && exit 0
garciadeblas6c66abf2018-05-16 14:46:19 +02001671[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
lavado6ad812e2019-11-29 10:58:58 -05001672#[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
garciadeblas6c66abf2018-05-16 14:46:19 +02001673[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
1674[ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
garciadeblasd8bc5c32018-05-09 17:37:56 +02001675
1676#Installation starts here
garciadeblas44c02192019-12-09 01:36:57 +01001677wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001678track start
1679
garciadeblasd8bc5c32018-05-09 17:37:56 +02001680[ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight && echo -e "\nDONE" && exit 0
1681echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
1682if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
1683 ! ask_user "The installation will take about 75-90 minutes. Continue (Y/n)? " y && echo "Cancelled!" && exit 1
1684fi
1685
1686echo -e "Checking required packages: lxd"
1687lxd --version &>/dev/null || FATAL "lxd not present, exiting."
1688[ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
1689
garciadeblasd8bc5c32018-05-09 17:37:56 +02001690# use local devops for containers
1691export OSM_USE_LOCAL_DEVOPS=true
1692if [ -n "$INSTALL_FROM_SOURCE" ]; then #install from source
1693 echo -e "\nCreating the containers and building from source ..."
1694 $OSM_DEVOPS/jenkins/host/start_build RO --notest checkout $COMMIT_ID || FATAL "RO container build failed (refspec: '$COMMIT_ID')"
1695 ro_is_up && track RO
1696 $OSM_DEVOPS/jenkins/host/start_build VCA || FATAL "VCA container build failed"
1697 vca_is_up && track VCA
1698 $OSM_DEVOPS/jenkins/host/start_build MON || FATAL "MON install failed"
1699 mon_is_up && track MON
1700 $OSM_DEVOPS/jenkins/host/start_build SO checkout $COMMIT_ID || FATAL "SO container build failed (refspec: '$COMMIT_ID')"
1701 $OSM_DEVOPS/jenkins/host/start_build UI checkout $COMMIT_ID || FATAL "UI container build failed (refspec: '$COMMIT_ID')"
1702 #so_is_up && track SOUI
1703 track SOUI
1704elif [ -n "$INSTALL_FROM_LXDIMAGES" ]; then #install from LXD images stored in OSM repo
1705 echo -e "\nInstalling from lxd images ..."
1706 install_from_lxdimages
1707else #install from binaries
1708 echo -e "\nCreating the containers and installing from binaries ..."
Mike Marchettib8420852018-09-13 13:45:06 -04001709 $OSM_DEVOPS/jenkins/host/install RO ${REPO_ARGS[@]} || FATAL "RO install failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001710 ro_is_up && track RO
1711 $OSM_DEVOPS/jenkins/host/start_build VCA || FATAL "VCA install failed"
1712 vca_is_up && track VCA
1713 $OSM_DEVOPS/jenkins/host/install MON || FATAL "MON build failed"
1714 mon_is_up && track MON
Mike Marchettib8420852018-09-13 13:45:06 -04001715 $OSM_DEVOPS/jenkins/host/install SO ${REPO_ARGS[@]} || FATAL "SO install failed"
1716 $OSM_DEVOPS/jenkins/host/install UI ${REPO_ARGS[@]} || FATAL "UI install failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001717 #so_is_up && track SOUI
1718 track SOUI
1719fi
1720
1721#Install iptables-persistent and configure NAT rules
1722[ -z "$NOCONFIGURE" ] && nat
1723
1724#Configure components
1725[ -z "$NOCONFIGURE" ] && configure
1726
1727#Install osmclient
1728[ -z "$NOCONFIGURE" ] && install_osmclient
1729
1730#Install vim-emu (optional)
peusterm76353e42018-05-08 13:56:05 +02001731[ -n "$INSTALL_VIMEMU" ] && install_docker_ce && install_vimemu
garciadeblasd8bc5c32018-05-09 17:37:56 +02001732
garciadeblas44c02192019-12-09 01:36:57 +01001733wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblasd8bc5c32018-05-09 17:37:56 +02001734track end
1735echo -e "\nDONE"