blob: c1dd2cc7a4b97764fa0c9164ecbb473061c99fe3 [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"
38 echo -e " --pm_stack: additionally deploy a Prometheus+Grafana stack for performance monitoring (PM)"
govindappa79e51b92019-05-22 12:15:21 +053039 echo -e " -m <MODULE>: install OSM but only rebuild the specified docker images (LW-UI, NBI, LCM, RO, MON, POL, KAFKA, MONGO, PROMETHEUS, KEYSTONE-DB, NONE)"
garciadeblas282ff4e2018-07-10 09:16:30 +020040 echo -e " -o <ADDON>: ONLY (un)installs one of the addons (vimemu, elk_stack, pm_stack)"
garciadeblase990f662018-05-18 11:43:39 +020041 echo -e " -D <devops path> use local devops installation path"
Mike Marchettib8420852018-09-13 13:45:06 -040042 echo -e " -w <work dir> Location to store runtime installation"
Mike Marchetti13d76c82018-09-19 15:00:36 -040043 echo -e " -t <docker tag> specify osm docker tag (default is latest)"
garciadeblasd41f5482018-05-25 10:25:06 +020044 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 +020045 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 -040046 echo -e " --nojuju: do not juju, assumes already installed"
47 echo -e " --nodockerbuild:do not build docker images (use existing locally cached images)"
48 echo -e " --nohostports: do not expose docker ports to host (useful for creating multiple instances of osm on the same host)"
49 echo -e " --nohostclient: do not install the osmclient"
garciadeblase990f662018-05-18 11:43:39 +020050 echo -e " --uninstall: uninstall OSM: remove the containers and delete NAT rules"
51 echo -e " --source: install OSM from source code using the latest stable tag"
garciadeblasd8bc5c32018-05-09 17:37:56 +020052 echo -e " --develop: (deprecated, use '-b master') install OSM from source code using the master branch"
garciadeblasd41f5482018-05-25 10:25:06 +020053 echo -e " --soui: install classic build of OSM (Rel THREE v3.1, based on LXD containers, with SO and UI)"
54 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 -040055 echo -e " --pullimages: pull/run osm images from docker.io/opensourcemano"
romeromonsere366b1a2019-11-19 19:49:26 +010056 echo -e " --k8s_monitor: install the OSM kubernetes moitoring with prometheus and grafana"
garciadeblasd41f5482018-05-25 10:25:06 +020057 echo -e " -l <lxd_repo>: (only for Rel THREE with --soui) use specified repository url for lxd images"
58 echo -e " -p <path>: (only for Rel THREE with --soui) use specified repository path for lxd images"
garciadeblasd8bc5c32018-05-09 17:37:56 +020059# echo -e " --reconfigure: reconfigure the modules (DO NOT change NAT rules)"
garciadeblasd41f5482018-05-25 10:25:06 +020060 echo -e " --nat: (only for Rel THREE with --soui) install only NAT rules"
61 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 +020062# echo -e " --update: update to the latest stable release or to the latest commit if using a specific branch"
63 echo -e " --showopts: print chosen options and exit (only for debugging)"
64 echo -e " -y: do not prompt for confirmation, assumes yes"
garciadeblasd8bc5c32018-05-09 17:37:56 +020065 echo -e " -h / --help: print this help"
66}
67
68#Uninstall OSM: remove containers
69function uninstall(){
70 echo -e "\nUninstalling OSM"
71 if [ $RC_CLONE ] || [ -n "$TEST_INSTALLER" ]; then
72 $OSM_DEVOPS/jenkins/host/clean_container RO
73 $OSM_DEVOPS/jenkins/host/clean_container VCA
74 $OSM_DEVOPS/jenkins/host/clean_container MON
75 $OSM_DEVOPS/jenkins/host/clean_container SO
76 #$OSM_DEVOPS/jenkins/host/clean_container UI
77 else
78 lxc stop RO && lxc delete RO
79 lxc stop VCA && lxc delete VCA
80 lxc stop MON && lxc delete MON
81 lxc stop SO-ub && lxc delete SO-ub
82 fi
83 echo -e "\nDeleting imported lxd images if they exist"
84 lxc image show osm-ro &>/dev/null && lxc image delete osm-ro
85 lxc image show osm-vca &>/dev/null && lxc image delete osm-vca
86 lxc image show osm-soui &>/dev/null && lxc image delete osm-soui
87 return 0
88}
89
Mike Marchettib8420852018-09-13 13:45:06 -040090# takes a juju/accounts.yaml file and returns the password specific
Adam Israel8232e562018-11-21 16:47:45 -050091# for a controller. I wrote this using only bash tools to minimize
Mike Marchettib8420852018-09-13 13:45:06 -040092# additions of other packages
93function parse_juju_password {
94 password_file="${HOME}/.local/share/juju/accounts.yaml"
95 local controller_name=$1
96 local s='[[:space:]]*' w='[a-zA-Z0-9_-]*' fs=$(echo @|tr @ '\034')
97 sed -ne "s|^\($s\):|\1|" \
98 -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
99 -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $password_file |
100 awk -F$fs -v controller=$controller_name '{
101 indent = length($1)/2;
102 vname[indent] = $2;
103 for (i in vname) {if (i > indent) {delete vname[i]}}
104 if (length($3) > 0) {
105 vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
106 if (match(vn,controller) && match($2,"password")) {
107 printf("%s",$3);
108 }
109 }
110 }'
111}
112
Benjamin Diazba2cca92018-11-08 21:07:15 -0300113function generate_secret() {
114 head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32
115}
116
Mike Marchettib8420852018-09-13 13:45:06 -0400117function remove_volumes() {
vijaynag8339ed22019-07-25 17:10:58 +0530118 if [ -n "$KUBERNETES" ]; then
119 k8_volume=$1
120 echo "Removing ${k8_volume}"
121 $WORKDIR_SUDO rm -rf ${k8_volume}
122 else
123 stack=$1
124 volumes="mongo_db mon_db osm_packages ro_db"
125 for volume in $volumes; do
126 sg docker -c "docker volume rm ${stack}_${volume}"
127 done
128 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400129}
130
131function remove_network() {
132 stack=$1
133 sg docker -c "docker network rm net${stack}"
134}
135
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100136function remove_iptables() {
137 stack=$1
138 if [ -z "$OSM_VCA_HOST" ]; then
139 OSM_VCA_HOST=`sg lxd -c "juju show-controller ${stack}"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
140 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
141 fi
142
143 if sudo iptables -t nat -C PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
144 sudo iptables -t nat -D PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
145 sudo netfilter-persistent save
146 fi
147}
148
garciadeblas5b857d32018-05-24 18:37:58 +0200149function remove_stack() {
150 stack=$1
garciadeblas5ef98212018-05-28 09:25:36 +0200151 if sg docker -c "docker stack ps ${stack}" ; then
garciadeblas5b857d32018-05-24 18:37:58 +0200152 echo -e "\nRemoving stack ${stack}" && sg docker -c "docker stack rm ${stack}"
153 COUNTER=0
154 result=1
155 while [ ${COUNTER} -lt 30 ]; do
156 result=$(sg docker -c "docker stack ps ${stack}" | wc -l)
157 #echo "Dockers running: $result"
158 if [ "${result}" == "0" ]; then
159 break
160 fi
161 let COUNTER=COUNTER+1
162 sleep 1
163 done
garciadeblasd8bc5c32018-05-09 17:37:56 +0200164 if [ "${result}" == "0" ]; then
garciadeblas5b857d32018-05-24 18:37:58 +0200165 echo "All dockers of the stack ${stack} were removed"
166 else
167 FATAL "Some dockers of the stack ${stack} could not be removed. Could not clean it."
garciadeblasd8bc5c32018-05-09 17:37:56 +0200168 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200169 sleep 5
garciadeblasd8bc5c32018-05-09 17:37:56 +0200170 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200171}
172
vijaynag8339ed22019-07-25 17:10:58 +0530173#removes osm deployments and services
174function remove_k8s_namespace() {
175 kubectl delete ns $1
176}
177
garciadeblas5b857d32018-05-24 18:37:58 +0200178#Uninstall lightweight OSM: remove dockers
179function uninstall_lightweight() {
garciadeblas282ff4e2018-07-10 09:16:30 +0200180 if [ -n "$INSTALL_ONLY" ]; then
181 if [ -n "$INSTALL_ELK" ]; then
182 echo -e "\nUninstalling OSM ELK stack"
183 remove_stack osm_elk
Mike Marchettib8420852018-09-13 13:45:06 -0400184 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas282ff4e2018-07-10 09:16:30 +0200185 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200186 else
187 echo -e "\nUninstalling OSM"
vijaynag8339ed22019-07-25 17:10:58 +0530188 if [ -n "$KUBERNETES" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +0100189 if [ -n "$K8S_MONITOR" ]; then
190 # uninstall OSM MONITORING
191 uninstall_k8s_monitoring
192 fi
vijaynag8339ed22019-07-25 17:10:58 +0530193 remove_k8s_namespace $OSM_STACK_NAME
194 else
Dominik4763cfe2019-11-27 12:15:50 +0100195
vijaynag8339ed22019-07-25 17:10:58 +0530196 remove_stack $OSM_STACK_NAME
197 remove_stack osm_elk
lavado1e4a88c2019-12-03 16:19:59 -0500198 uninstall_prometheus_nodeexporter
vijaynag8339ed22019-07-25 17:10:58 +0530199 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200200 echo "Now osm docker images and volumes will be deleted"
201 newgrp docker << EONG
lavado02ad4b02018-11-28 11:30:48 -0500202 docker image rm ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}
203 docker image rm ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}
204 docker image rm ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}
205 docker image rm ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}
206 docker image rm ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}
207 docker image rm ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}
208 docker image rm ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}
209 docker image rm ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}
garciadeblas83ca1322018-05-22 18:31:14 +0200210EONG
vijaynag8339ed22019-07-25 17:10:58 +0530211
212 if [ -n "$KUBERNETES" ]; then
213 OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
214 remove_volumes $OSM_NAMESPACE_VOL
215 else
216 remove_volumes $OSM_STACK_NAME
217 remove_network $OSM_STACK_NAME
218 fi
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100219 remove_iptables $OSM_STACK_NAME
Mike Marchettib8420852018-09-13 13:45:06 -0400220 echo "Removing $OSM_DOCKER_WORK_DIR"
221 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR
Adam Israel843764e2019-06-11 10:28:43 -0400222 sg lxd -c "juju destroy-controller --destroy-all-models --yes $OSM_STACK_NAME"
garciadeblas282ff4e2018-07-10 09:16:30 +0200223 fi
224 echo "Some docker images will be kept in case they are used by other docker stacks"
225 echo "To remove them, just run 'docker image prune' in a terminal"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200226 return 0
227}
228
229#Configure NAT rules, based on the current IP addresses of containers
230function nat(){
231 echo -e "\nChecking required packages: iptables-persistent"
232 dpkg -l iptables-persistent &>/dev/null || ! echo -e " Not installed.\nInstalling iptables-persistent requires root privileges" || \
233 sudo DEBIAN_FRONTEND=noninteractive apt-get -yq install iptables-persistent
234 echo -e "\nConfiguring NAT rules"
235 echo -e " Required root privileges"
236 sudo $OSM_DEVOPS/installers/nat_osm
237}
238
239function FATAL(){
240 echo "FATAL error: Cannot install OSM due to \"$1\""
241 exit 1
242}
243
244#Update RO, SO and UI:
245function update(){
246 echo -e "\nUpdating components"
247
248 echo -e " Updating RO"
249 CONTAINER="RO"
250 MDG="RO"
251 INSTALL_FOLDER="/opt/openmano"
252 echo -e " Fetching the repo"
253 lxc exec $CONTAINER -- git -C $INSTALL_FOLDER fetch --all
254 BRANCH=""
255 BRANCH=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
256 [ -z "$BRANCH" ] && FATAL "Could not find the current branch in use in the '$MDG'"
257 CURRENT=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
258 CURRENT_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
259 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
260 # COMMIT_ID either was previously set with -b option, or is an empty string
261 CHECKOUT_ID=$COMMIT_ID
262 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID="tags/$LATEST_STABLE_DEVOPS"
263 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID="$BRANCH"
264 if [[ $CHECKOUT_ID == "tags/"* ]]; then
265 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
266 else
267 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
268 fi
269 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
270 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
271 echo " Nothing to be done."
272 else
273 echo " Update required."
274 lxc exec $CONTAINER -- service osm-ro stop
275 lxc exec $CONTAINER -- git -C /opt/openmano stash
276 lxc exec $CONTAINER -- git -C /opt/openmano pull --rebase
277 lxc exec $CONTAINER -- git -C /opt/openmano checkout $CHECKOUT_ID
278 lxc exec $CONTAINER -- git -C /opt/openmano stash pop
279 lxc exec $CONTAINER -- /opt/openmano/database_utils/migrate_mano_db.sh
280 lxc exec $CONTAINER -- service osm-ro start
281 fi
282 echo
283
284 echo -e " Updating SO and UI"
285 CONTAINER="SO-ub"
286 MDG="SO"
287 INSTALL_FOLDER="" # To be filled in
288 echo -e " Fetching the repo"
289 lxc exec $CONTAINER -- git -C $INSTALL_FOLDER fetch --all
290 BRANCH=""
291 BRANCH=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
292 [ -z "$BRANCH" ] && FATAL "Could not find the current branch in use in the '$MDG'"
293 CURRENT=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
294 CURRENT_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
295 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
296 # COMMIT_ID either was previously set with -b option, or is an empty string
297 CHECKOUT_ID=$COMMIT_ID
298 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID="tags/$LATEST_STABLE_DEVOPS"
299 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID="$BRANCH"
300 if [[ $CHECKOUT_ID == "tags/"* ]]; then
301 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
302 else
303 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
304 fi
305 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
306 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
307 echo " Nothing to be done."
308 else
309 echo " Update required."
310 # Instructions to be added
311 # lxc exec SO-ub -- ...
312 fi
313 echo
314 echo -e "Updating MON Container"
315 CONTAINER="MON"
316 MDG="MON"
317 INSTALL_FOLDER="/root/MON"
318 echo -e " Fetching the repo"
319 lxc exec $CONTAINER -- git -C $INSTALL_FOLDER fetch --all
320 BRANCH=""
321 BRANCH=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
322 [ -z "$BRANCH" ] && FATAL "Could not find the current branch in use in the '$MDG'"
323 CURRENT=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
324 CURRENT_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
325 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
326 # COMMIT_ID either was previously set with -b option, or is an empty string
327 CHECKOUT_ID=$COMMIT_ID
328 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID="tags/$LATEST_STABLE_DEVOPS"
329 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID="$BRANCH"
330 if [[ $CHECKOUT_ID == "tags/"* ]]; then
331 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
332 else
333 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
334 fi
335 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
336 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
337 echo " Nothing to be done."
338 else
339 echo " Update required."
340 fi
341 echo
342}
343
344function so_is_up() {
345 if [ -n "$1" ]; then
346 SO_IP=$1
347 else
348 SO_IP=`lxc list SO-ub -c 4|grep eth0 |awk '{print $2}'`
349 fi
350 time=0
351 step=5
352 timelength=300
353 while [ $time -le $timelength ]
354 do
355 if [[ `curl -k -X GET https://$SO_IP:8008/api/operational/vcs/info \
356 -H 'accept: application/vnd.yang.data+json' \
357 -H 'authorization: Basic YWRtaW46YWRtaW4=' \
358 -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 ]]
359 then
360 echo "RW.Restconf running....SO is up"
361 return 0
362 fi
363
364 sleep $step
365 echo -n "."
366 time=$((time+step))
367 done
368
369 FATAL "OSM Failed to startup. SO failed to startup"
370}
371
372function vca_is_up() {
373 if [[ `lxc exec VCA -- juju status | grep "osm" | wc -l` -eq 1 ]]; then
374 echo "VCA is up and running"
375 return 0
376 fi
377
378 FATAL "OSM Failed to startup. VCA failed to startup"
379}
380
381function mon_is_up() {
382 if [[ `curl http://$RO_IP:9090/openmano/ | grep "works" | wc -l` -eq 1 ]]; then
383 echo "MON is up and running"
384 return 0
385 fi
386
387 FATAL "OSM Failed to startup. MON failed to startup"
388}
389
390function ro_is_up() {
391 if [ -n "$1" ]; then
392 RO_IP=$1
393 else
394 RO_IP=`lxc list RO -c 4|grep eth0 |awk '{print $2}'`
395 fi
396 time=0
397 step=2
398 timelength=20
399 while [ $time -le $timelength ]; do
400 if [[ `curl http://$RO_IP:9090/openmano/ | grep "works" | wc -l` -eq 1 ]]; then
401 echo "RO is up and running"
402 return 0
403 fi
404 sleep $step
405 echo -n "."
406 time=$((time+step))
407 done
408
409 FATAL "OSM Failed to startup. RO failed to startup"
410}
411
412
413function configure_RO(){
414 . $OSM_DEVOPS/installers/export_ips
415 echo -e " Configuring RO"
416 lxc exec RO -- sed -i -e "s/^\#\?log_socket_host:.*/log_socket_host: $SO_CONTAINER_IP/g" /etc/osm/openmanod.cfg
417 lxc exec RO -- service osm-ro restart
418
419 ro_is_up
420
421 lxc exec RO -- openmano tenant-delete -f osm >/dev/null
422 lxc exec RO -- openmano tenant-create osm > /dev/null
423 lxc exec RO -- sed -i '/export OPENMANO_TENANT=osm/d' .bashrc
424 lxc exec RO -- sed -i '$ i export OPENMANO_TENANT=osm' .bashrc
425 lxc exec RO -- sh -c 'echo "export OPENMANO_TENANT=osm" >> .bashrc'
426}
427
428function configure_VCA(){
429 echo -e " Configuring VCA"
Benjamin Diazba2cca92018-11-08 21:07:15 -0300430 JUJU_PASSWD=$(generate_secret)
garciadeblasd8bc5c32018-05-09 17:37:56 +0200431 echo -e "$JUJU_PASSWD\n$JUJU_PASSWD" | lxc exec VCA -- juju change-user-password
432}
433
434function configure_SOUI(){
435 . $OSM_DEVOPS/installers/export_ips
436 JUJU_CONTROLLER_IP=`lxc exec VCA -- lxc list -c 4 |grep eth0 |awk '{print $2}'`
437 RO_TENANT_ID=`lxc exec RO -- openmano tenant-list osm |awk '{print $1}'`
438
439 echo -e " Configuring MON"
440 #Information to be added about SO socket for logging
441
442 echo -e " Configuring SO"
443 sudo route add -host $JUJU_CONTROLLER_IP gw $VCA_CONTAINER_IP
garciadeblas818fa5a2018-05-10 13:39:10 +0200444 sudo ip route add 10.44.127.0/24 via $VCA_CONTAINER_IP
garciadeblasd8bc5c32018-05-09 17:37:56 +0200445 sudo sed -i "$ i route add -host $JUJU_CONTROLLER_IP gw $VCA_CONTAINER_IP" /etc/rc.local
garciadeblas818fa5a2018-05-10 13:39:10 +0200446 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 +0200447 # make journaling persistent
448 lxc exec SO-ub -- mkdir -p /var/log/journal
449 lxc exec SO-ub -- systemd-tmpfiles --create --prefix /var/log/journal
450 lxc exec SO-ub -- systemctl restart systemd-journald
451
452 echo RIFT_EXTERNAL_ADDRESS=$DEFAULT_IP | lxc exec SO-ub -- tee -a /usr/rift/etc/default/launchpad
453
454 lxc exec SO-ub -- systemctl restart launchpad
455
456 so_is_up $SO_CONTAINER_IP
457
458 #delete existing config agent (could be there on reconfigure)
459 curl -k --request DELETE \
460 --url https://$SO_CONTAINER_IP:8008/api/config/config-agent/account/osmjuju \
461 --header 'accept: application/vnd.yang.data+json' \
462 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
463 --header 'cache-control: no-cache' \
464 --header 'content-type: application/vnd.yang.data+json' &> /dev/null
465
466 result=$(curl -k --request POST \
467 --url https://$SO_CONTAINER_IP:8008/api/config/config-agent \
468 --header 'accept: application/vnd.yang.data+json' \
469 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
470 --header 'cache-control: no-cache' \
471 --header 'content-type: application/vnd.yang.data+json' \
472 --data '{"account": [ { "name": "osmjuju", "account-type": "juju", "juju": { "ip-address": "'$JUJU_CONTROLLER_IP'", "port": "17070", "user": "admin", "secret": "'$JUJU_PASSWD'" } } ]}')
473 [[ $result =~ .*success.* ]] || FATAL "Failed config-agent configuration: $result"
474
475 #R1/R2 config line
476 #result=$(curl -k --request PUT \
477 # --url https://$SO_CONTAINER_IP:8008/api/config/resource-orchestrator \
478 # --header 'accept: application/vnd.yang.data+json' \
479 # --header 'authorization: Basic YWRtaW46YWRtaW4=' \
480 # --header 'cache-control: no-cache' \
481 # --header 'content-type: application/vnd.yang.data+json' \
482 # --data '{ "openmano": { "host": "'$RO_CONTAINER_IP'", "port": "9090", "tenant-id": "'$RO_TENANT_ID'" }, "name": "osmopenmano", "account-type": "openmano" }')
483
484 result=$(curl -k --request PUT \
485 --url https://$SO_CONTAINER_IP:8008/api/config/project/default/ro-account/account \
486 --header 'accept: application/vnd.yang.data+json' \
487 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
488 --header 'cache-control: no-cache' \
489 --header 'content-type: application/vnd.yang.data+json' \
490 --data '{"rw-ro-account:account": [ { "openmano": { "host": "'$RO_CONTAINER_IP'", "port": "9090", "tenant-id": "'$RO_TENANT_ID'"}, "name": "osmopenmano", "ro-account-type": "openmano" }]}')
491 [[ $result =~ .*success.* ]] || FATAL "Failed resource-orchestrator configuration: $result"
492
493 result=$(curl -k --request PATCH \
494 --url https://$SO_CONTAINER_IP:8008/v2/api/config/openidc-provider-config/rw-ui-client/redirect-uri \
495 --header 'accept: application/vnd.yang.data+json' \
496 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
497 --header 'cache-control: no-cache' \
498 --header 'content-type: application/vnd.yang.data+json' \
499 --data '{"redirect-uri": "https://'$DEFAULT_IP':8443/callback" }')
500 [[ $result =~ .*success.* ]] || FATAL "Failed redirect-uri configuration: $result"
501
502 result=$(curl -k --request PATCH \
503 --url https://$SO_CONTAINER_IP:8008/v2/api/config/openidc-provider-config/rw-ui-client/post-logout-redirect-uri \
504 --header 'accept: application/vnd.yang.data+json' \
505 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
506 --header 'cache-control: no-cache' \
507 --header 'content-type: application/vnd.yang.data+json' \
508 --data '{"post-logout-redirect-uri": "https://'$DEFAULT_IP':8443/?api_server=https://'$DEFAULT_IP'" }')
509 [[ $result =~ .*success.* ]] || FATAL "Failed post-logout-redirect-uri configuration: $result"
510
511 lxc exec SO-ub -- tee /etc/network/interfaces.d/60-rift.cfg <<EOF
512auto lo:1
513iface lo:1 inet static
514 address $DEFAULT_IP
515 netmask 255.255.255.255
516EOF
517 lxc exec SO-ub ifup lo:1
518}
519
520#Configure RO, VCA, and SO with the initial configuration:
521# RO -> tenant:osm, logs to be sent to SO
522# VCA -> juju-password
523# SO -> route to Juju Controller, add RO account, add VCA account
524function configure(){
525 #Configure components
526 echo -e "\nConfiguring components"
527 configure_RO
528 configure_VCA
529 configure_SOUI
530}
531
532function install_lxd() {
533 sudo apt-get update
534 sudo apt-get install -y lxd
535 newgrp lxd
536 lxd init --auto
537 lxd waitready
538 lxc network create lxdbr0 ipv4.address=auto ipv4.nat=true ipv6.address=none ipv6.nat=false
539 DEFAULT_INTERFACE=$(route -n | awk '$1~/^0.0.0.0/ {print $8}')
540 DEFAULT_MTU=$(ip addr show $DEFAULT_INTERFACE | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
541 lxc profile device set default eth0 mtu $DEFAULT_MTU
542 #sudo systemctl stop lxd-bridge
543 #sudo systemctl --system daemon-reload
544 #sudo systemctl enable lxd-bridge
545 #sudo systemctl start lxd-bridge
546}
547
548function ask_user(){
549 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
550 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
551 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
552 read -e -p "$1" USER_CONFIRMATION
553 while true ; do
554 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
555 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
556 [ "${USER_CONFIRMATION,,}" == "yes" ] || [ "${USER_CONFIRMATION,,}" == "y" ] && return 0
557 [ "${USER_CONFIRMATION,,}" == "no" ] || [ "${USER_CONFIRMATION,,}" == "n" ] && return 1
558 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
559 done
560}
561
562function launch_container_from_lxd(){
563 export OSM_MDG=$1
564 OSM_load_config
565 export OSM_BASE_IMAGE=$2
566 if ! container_exists $OSM_BUILD_CONTAINER; then
567 CONTAINER_OPTS=""
568 [[ "$OSM_BUILD_CONTAINER_PRIVILEGED" == yes ]] && CONTAINER_OPTS="$CONTAINER_OPTS -c security.privileged=true"
569 [[ "$OSM_BUILD_CONTAINER_ALLOW_NESTED" == yes ]] && CONTAINER_OPTS="$CONTAINER_OPTS -c security.nesting=true"
570 create_container $OSM_BASE_IMAGE $OSM_BUILD_CONTAINER $CONTAINER_OPTS
571 wait_container_up $OSM_BUILD_CONTAINER
572 fi
573}
574
575function install_osmclient(){
576 CLIENT_RELEASE=${RELEASE#"-R "}
577 CLIENT_REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
578 CLIENT_REPOSITORY=${REPOSITORY#"-r "}
garciadeblasd8bc5c32018-05-09 17:37:56 +0200579 CLIENT_REPOSITORY_BASE=${REPOSITORY_BASE#"-u "}
580 key_location=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
581 curl $key_location | sudo apt-key add -
garciadeblas078f5982019-11-27 15:06:06 +0100582 sudo add-apt-repository -y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient IM"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200583 sudo apt-get update
garciadeblas078f5982019-11-27 15:06:06 +0100584 sudo apt-get install -y python3-pip
585 sudo -H LC_ALL=C python3 -m pip install -U pip
garciadeblas1c097b22019-11-29 14:17:12 +0100586 sudo -H LC_ALL=C python3 -m pip install -U python-magic pyangbind
garciadeblasda89ee72019-11-28 02:19:59 +0100587 sudo apt-get install -y python3-osm-im python3-osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +0200588 #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
589 #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
590 #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
591 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME=`lxc list | awk '($2=="SO-ub"){print $6}'`
592 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME=`lxc list | awk '($2=="RO"){print $6}'`
garciadeblasd8bc5c32018-05-09 17:37:56 +0200593 echo -e "\nOSM client installed"
garciadeblasc3226982018-11-27 11:32:47 +0100594 if [ -z "$INSTALL_LIGHTWEIGHT" ]; then
595 echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
596 echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
597 echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
598 else
599 echo -e "OSM client assumes that OSM host is running in localhost (127.0.0.1)."
600 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:"
601 echo " export OSM_HOSTNAME=<OSM_host>"
602 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +0200603 return 0
604}
605
lavado6ad812e2019-11-29 10:58:58 -0500606function install_prometheus_nodeexporter(){
607 sudo useradd --no-create-home --shell /bin/false node_exporter
608 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/
609 sudo tar -C /tmp -xf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz
610 sudo cp /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64/node_exporter /usr/local/bin
611 sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
612 sudo rm -rf node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64*
613 sudo cp ${OSM_DEVOPS}/installers/docker/files/node_exporter.service /etc/systemd/system/node_exporter.service
614 sudo systemctl daemon-reload
615 sudo systemctl restart node_exporter
616 sudo systemctl enable node_exporter
617 return 0
618}
619
lavado1e4a88c2019-12-03 16:19:59 -0500620function uninstall_prometheus_nodeexporter(){
621 sudo systemctl stop node_exporter
622 sudo systemctl disable node_exporter
623 sudo rm /etc/systemd/system/node_exporter.service
624 sudo systemctl daemon-reload
625 sudo userdel node_exporter
626 sudo rm /usr/local/bin/node_exporter
627 return 0
628}
629
garciadeblasd8bc5c32018-05-09 17:37:56 +0200630function install_from_lxdimages(){
631 LXD_RELEASE=${RELEASE#"-R "}
632 if [ -n "$LXD_REPOSITORY_PATH" ]; then
633 LXD_IMAGE_DIR="$LXD_REPOSITORY_PATH"
634 else
635 LXD_IMAGE_DIR="$(mktemp -d -q --tmpdir "osmimages.XXXXXX")"
636 trap 'rm -rf "$LXD_IMAGE_DIR"' EXIT
637 fi
638 echo -e "\nDeleting previous lxd images if they exist"
639 lxc image show osm-ro &>/dev/null && lxc image delete osm-ro
640 lxc image show osm-vca &>/dev/null && lxc image delete osm-vca
641 lxc image show osm-soui &>/dev/null && lxc image delete osm-soui
642 echo -e "\nImporting osm-ro"
643 [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-ro.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-ro.tar.gz
644 lxc image import $LXD_IMAGE_DIR/osm-ro.tar.gz --alias osm-ro
645 rm -f $LXD_IMAGE_DIR/osm-ro.tar.gz
646 echo -e "\nImporting osm-vca"
647 [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-vca.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-vca.tar.gz
648 lxc image import $LXD_IMAGE_DIR/osm-vca.tar.gz --alias osm-vca
649 rm -f $LXD_IMAGE_DIR/osm-vca.tar.gz
650 echo -e "\nImporting osm-soui"
651 [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-soui.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-soui.tar.gz
652 lxc image import $LXD_IMAGE_DIR/osm-soui.tar.gz --alias osm-soui
653 rm -f $LXD_IMAGE_DIR/osm-soui.tar.gz
654 launch_container_from_lxd RO osm-ro
655 ro_is_up && track RO
656 launch_container_from_lxd VCA osm-vca
657 vca_is_up && track VCA
658 launch_container_from_lxd MON osm-mon
659 mon_is_up && track MON
660 launch_container_from_lxd SO osm-soui
661 #so_is_up && track SOUI
662 track SOUI
663}
664
665function install_docker_ce() {
666 # installs and configures Docker CE
667 echo "Installing Docker CE ..."
668 sudo apt-get -qq update
669 sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
670 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
671 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
672 sudo apt-get -qq update
673 sudo apt-get install -y docker-ce
674 echo "Adding user to group 'docker'"
675 sudo groupadd -f docker
676 sudo usermod -aG docker $USER
garciadeblasd8bc5c32018-05-09 17:37:56 +0200677 sleep 2
678 sudo service docker restart
679 echo "... restarted Docker service"
garciadeblas67ce97c2018-05-18 10:22:09 +0200680 sg docker -c "docker version" || FATAL "Docker installation failed"
681 echo "... Docker CE installation done"
682 return 0
garciadeblasd8bc5c32018-05-09 17:37:56 +0200683}
684
685function install_docker_compose() {
686 # installs and configures docker-compose
687 echo "Installing Docker Compose ..."
688 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
689 sudo chmod +x /usr/local/bin/docker-compose
690 echo "... Docker Compose installation done"
691}
692
693function install_juju() {
694 echo "Installing juju"
Adam Israel41587482019-11-06 10:45:43 -0500695 sudo snap install juju --classic
garciadeblasd41f5482018-05-25 10:25:06 +0200696 [ -z "$INSTALL_NOLXD" ] && sudo dpkg-reconfigure -p medium lxd
Dominik4763cfe2019-11-27 12:15:50 +0100697 [[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200698 echo "Finished installation of juju"
Mike Marchettib8420852018-09-13 13:45:06 -0400699 return 0
700}
701
702function juju_createcontroller() {
Adam Israel8232e562018-11-21 16:47:45 -0500703 if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then
Mike Marchettib8420852018-09-13 13:45:06 -0400704 # Not found created, create the controller
705 sg lxd -c "juju bootstrap --bootstrap-series=xenial localhost $OSM_STACK_NAME"
706 fi
Adam Israel8232e562018-11-21 16:47:45 -0500707 [ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200708}
709
Adam Israel5ddc97f2019-09-03 18:11:12 -0400710function juju_createproxy() {
Adam Israel43fb44d2019-11-06 10:37:25 -0500711 echo -e "\nChecking required packages: iptables-persistent"
712 dpkg -l iptables-persistent &>/dev/null || ! echo -e " Not installed.\nInstalling iptables-persistent requires root privileges" || \
713 sudo DEBIAN_FRONTEND=noninteractive apt-get -yq install iptables-persistent
714
Adam Israel5ddc97f2019-09-03 18:11:12 -0400715 if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
716 sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
717 sudo netfilter-persistent save
718 fi
719}
720
garciadeblasd8bc5c32018-05-09 17:37:56 +0200721function generate_docker_images() {
722 echo "Pulling and generating docker images"
Michael Marchettiee374142018-08-02 22:47:16 +0200723 _build_from=$COMMIT_ID
724 [ -z "$_build_from" ] && _build_from="master"
725
726 echo "OSM Docker images generated from $_build_from"
727
Mike Marchettib8420852018-09-13 13:45:06 -0400728 BUILD_ARGS+=(--build-arg REPOSITORY="$REPOSITORY")
729 BUILD_ARGS+=(--build-arg RELEASE="$RELEASE")
730 BUILD_ARGS+=(--build-arg REPOSITORY_KEY="$REPOSITORY_KEY")
731 BUILD_ARGS+=(--build-arg REPOSITORY_BASE="$REPOSITORY_BASE")
lavado60216242018-10-10 23:44:28 +0200732
garciadeblas0e596bc2018-05-28 16:04:42 +0200733 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q KAFKA ; then
734 sg docker -c "docker pull wurstmeister/zookeeper" || FATAL "cannot get zookeeper docker image"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300735 sg docker -c "docker pull wurstmeister/kafka:${KAFKA_TAG}" || FATAL "cannot get kafka docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200736 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400737
garciadeblas0e596bc2018-05-28 16:04:42 +0200738 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MONGO ; then
739 sg docker -c "docker pull mongo" || FATAL "cannot get mongo docker image"
740 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400741
lavado60216242018-10-10 23:44:28 +0200742 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
743 sg docker -c "docker pull prom/prometheus:${PROMETHEUS_TAG}" || FATAL "cannot get prometheus docker image"
744 fi
745
lavado6ad812e2019-11-29 10:58:58 -0500746 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q GRAFANA ; then
747 sg docker -c "docker pull grafana/grafana:${GRAFANA_TAG}" || FATAL "cannot get grafana docker image"
748 fi
749
garciadeblas4a83e6e2018-12-04 14:55:09 +0100750 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI || echo $TO_REBUILD | grep -q KEYSTONE-DB ; then
lavado9a8df7c2018-10-24 09:35:34 -0500751 sg docker -c "docker pull mariadb:${KEYSTONEDB_TAG}" || FATAL "cannot get keystone-db docker image"
752 fi
753
garciadeblas4a83e6e2018-12-04 14:55:09 +0100754 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
755 sg docker -c "docker pull mysql:5" || FATAL "cannot get mysql docker image"
756 fi
757
Mike Marchettida8a9c42018-10-01 15:25:15 -0400758 if [ -n "$PULL_IMAGES" ]; then
759 sg docker -c "docker pull ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}" || FATAL "cannot pull MON docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400760 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MON ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200761 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/MON
762 git -C ${LWTEMPDIR}/MON checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100763 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 -0500764 fi
765
766 if [ -n "$PULL_IMAGES" ]; then
767 sg docker -c "docker pull ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}" || FATAL "cannot pull POL docker image"
garciadeblas4a83e6e2018-12-04 14:55:09 +0100768 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q POL ; then
lavado9a8df7c2018-10-24 09:35:34 -0500769 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/POL
770 git -C ${LWTEMPDIR}/POL checkout ${COMMIT_ID}
garciadeblas4a83e6e2018-12-04 14:55:09 +0100771 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 +0200772 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400773
774 if [ -n "$PULL_IMAGES" ]; then
775 sg docker -c "docker pull ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}" || FATAL "cannot pull NBI docker image"
lavado9a8df7c2018-10-24 09:35:34 -0500776 sg docker -c "docker pull ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}" || FATAL "cannot pull KEYSTONE docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400777 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200778 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NBI
779 git -C ${LWTEMPDIR}/NBI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100780 sg docker -c "docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t ${DOCKER_USER}/nbi --no-cache" || FATAL "cannot build NBI docker image"
781 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 +0200782 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400783
784 if [ -n "$PULL_IMAGES" ]; then
785 sg docker -c "docker pull ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}" || FATAL "cannot pull RO docker image"
786 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200787 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/RO
788 git -C ${LWTEMPDIR}/RO checkout ${COMMIT_ID}
tierno5cc8ac32019-11-25 10:33:25 +0000789 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 +0200790 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400791
792 if [ -n "$PULL_IMAGES" ]; then
793 sg docker -c "docker pull ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}" || FATAL "cannot pull LCM RO docker image"
794 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LCM ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200795 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LCM
796 git -C ${LWTEMPDIR}/LCM checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100797 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 +0200798 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400799
800 if [ -n "$PULL_IMAGES" ]; then
801 sg docker -c "docker pull ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}" || FATAL "cannot pull light-ui docker image"
802 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-UI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200803 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LW-UI
804 git -C ${LWTEMPDIR}/LW-UI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100805 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 +0200806 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400807
808 if [ -n "$PULL_IMAGES" ]; then
809 sg docker -c "docker pull ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}" || FATAL "cannot pull osmclient docker image"
810 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-osmclient; then
garciadeblas0d45bc82018-11-19 14:25:13 +0100811 sg docker -c "docker build -t ${DOCKER_USER}/osmclient ${BUILD_ARGS[@]} -f $OSM_DEVOPS/docker/osmclient ."
Mike Marchettib8420852018-09-13 13:45:06 -0400812 fi
lavado6ad812e2019-11-29 10:58:58 -0500813
814 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
815 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
816 fi
817
garciadeblasd8bc5c32018-05-09 17:37:56 +0200818 echo "Finished generation of docker images"
819}
820
garciadeblas5b857d32018-05-24 18:37:58 +0200821function cmp_overwrite() {
822 file1="$1"
823 file2="$2"
824 if ! $(cmp "${file1}" "${file2}" >/dev/null 2>&1); then
825 if [ -f "${file2}" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400826 ask_user "The file ${file2} already exists. Overwrite (y/N)? " n && cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200827 else
Mike Marchettib8420852018-09-13 13:45:06 -0400828 cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200829 fi
830 fi
831}
832
garciadeblasd8bc5c32018-05-09 17:37:56 +0200833function generate_docker_env_files() {
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200834 echo "Doing a backup of existing env files"
835 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
836 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
837 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
838 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lwui.env{,~}
839 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
840 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
841 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
842 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
843 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
844
garciadeblasd8bc5c32018-05-09 17:37:56 +0200845 echo "Generating docker env files"
vijaynag8339ed22019-07-25 17:10:58 +0530846 if [ -n "$KUBERNETES" ]; then
847 #Kubernetes resources
848 $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
849 else
850 # Docker-compose
851 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200852
vijaynag8339ed22019-07-25 17:10:58 +0530853 # Prometheus
lavado6ad812e2019-11-29 10:58:58 -0500854 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/files/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus.yml
855
856 # Grafana & Prometheus Exporter files
857 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/files
858 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/files/* $OSM_DOCKER_WORK_DIR/files/
vijaynag8339ed22019-07-25 17:10:58 +0530859 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200860
Benjamin Diazba2cca92018-11-08 21:07:15 -0300861 # LCM
862 if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
863 echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
864 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400865
Benjamin Diazba2cca92018-11-08 21:07:15 -0300866 if ! grep -Fq "OSMLCM_VCA_HOST" $OSM_DOCKER_WORK_DIR/lcm.env; then
867 echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
868 else
869 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_HOST.*|OSMLCM_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/lcm.env
870 fi
871
872 if ! grep -Fq "OSMLCM_VCA_SECRET" $OSM_DOCKER_WORK_DIR/lcm.env; then
873 echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
874 else
875 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_SECRET.*|OSMLCM_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/lcm.env
876 fi
877
garciadeblasaa3ddf42019-04-04 19:04:32 +0200878 if ! grep -Fq "OSMLCM_VCA_PUBKEY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas6f0f4662019-06-11 17:47:14 +0200879 echo "OSMLCM_VCA_PUBKEY=\"${OSM_VCA_PUBKEY}\"" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasaa3ddf42019-04-04 19:04:32 +0200880 else
garciadeblas6f0f4662019-06-11 17:47:14 +0200881 $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 +0200882 fi
883
Adam Israelbe7676a2019-10-02 16:10:53 -0400884 if ! grep -Fq "OSMLCM_VCA_CACERT" $OSM_DOCKER_WORK_DIR/lcm.env; then
885 echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
886 else
887 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CACERT.*|OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/lcm.env
888 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -0300889
Adam Israel5ddc97f2019-09-03 18:11:12 -0400890 if ! grep -Fq "OSMLCM_VCA_APIPROXY" $OSM_DOCKER_WORK_DIR/lcm.env; then
891 echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
892 else
893 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_APIPROXY.*|OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
894 fi
895
Benjamin Diazba2cca92018-11-08 21:07:15 -0300896 # RO
897 MYSQL_ROOT_PASSWORD=$(generate_secret)
Mike Marchettib8420852018-09-13 13:45:06 -0400898 if [ ! -f $OSM_DOCKER_WORK_DIR/ro-db.env ]; then
899 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro-db.env
garciadeblas5b857d32018-05-24 18:37:58 +0200900 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400901 if [ ! -f $OSM_DOCKER_WORK_DIR/ro.env ]; then
902 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro.env
garciadeblas5b857d32018-05-24 18:37:58 +0200903 fi
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100904
Benjamin Diazba2cca92018-11-08 21:07:15 -0300905 # Keystone
Benjamin Diazba2cca92018-11-08 21:07:15 -0300906 KEYSTONE_DB_PASSWORD=$(generate_secret)
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100907 SERVICE_PASSWORD=$(generate_secret)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100908 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone-db.env ]; then
909 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone-db.env
910 fi
911 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone.env ]; then
912 echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100913 echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100914 echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100915 fi
916
Benjamin Diazba2cca92018-11-08 21:07:15 -0300917 # NBI
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100918 if [ ! -f $OSM_DOCKER_WORK_DIR/nbi.env ]; then
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100919 echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/nbi.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300920 echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/nbi.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100921 fi
922
Benjamin Diazba2cca92018-11-08 21:07:15 -0300923 # MON
924 if [ ! -f $OSM_DOCKER_WORK_DIR/mon.env ]; then
925 echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diaz9261c662019-02-25 17:18:51 -0300926 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 -0300927 fi
928
929 if ! grep -Fq "OS_NOTIFIER_URI" $OSM_DOCKER_WORK_DIR/mon.env; then
930 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
931 else
932 $WORKDIR_SUDO sed -i "s|OS_NOTIFIER_URI.*|OS_NOTIFIER_URI=http://$DEFAULT_IP:8662|g" $OSM_DOCKER_WORK_DIR/mon.env
933 fi
934
935 if ! grep -Fq "OSMMON_VCA_HOST" $OSM_DOCKER_WORK_DIR/mon.env; then
936 echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
937 else
938 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_HOST.*|OSMMON_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/mon.env
939 fi
940
941 if ! grep -Fq "OSMMON_VCA_SECRET" $OSM_DOCKER_WORK_DIR/mon.env; then
942 echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
943 else
944 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_SECRET.*|OSMMON_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/mon.env
945 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400946
Adam Israel6d8adf32019-12-05 15:46:54 -0500947 if ! grep -Fq "OSMMON_VCA_CACERT" $OSM_DOCKER_WORK_DIR/mon.env; then
948 echo "OSMMON_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
949 else
950 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_CACERT.*|OSMMON_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/mon.env
951 fi
952
953
Benjamin Diaz04560882019-02-26 17:25:07 -0300954 # POL
955 if [ ! -f $OSM_DOCKER_WORK_DIR/pol.env ]; then
956 echo "OSMPOL_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/pol" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/pol.env
957 fi
958
Benjamin Diaz4088a9b2019-05-21 15:11:49 -0300959 # LW-UI
960 if [ ! -f $OSM_DOCKER_WORK_DIR/lwui.env ]; then
961 echo "OSMUI_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/lwui" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lwui.env
962 fi
963
garciadeblasd8bc5c32018-05-09 17:37:56 +0200964 echo "Finished generation of docker env files"
965}
966
Mike Marchettib8420852018-09-13 13:45:06 -0400967function generate_osmclient_script () {
Mike Marchetti46d6efe2018-10-23 16:20:16 -0400968 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 -0400969 $WORKDIR_SUDO chmod +x "$OSM_DOCKER_WORK_DIR/osm"
970 echo "osmclient sidecar container can be found at: $OSM_DOCKER_WORK_DIR/osm"
971}
972
vijaynag8339ed22019-07-25 17:10:58 +0530973#installs kubernetes packages
974function install_kube() {
975 sudo apt-get update && sudo apt-get install -y apt-transport-https
976 curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
977 sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
978 sudo apt-get update
979 echo "Installing Kubernetes Packages ..."
980 sudo apt-get install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
981}
982
983#initializes kubernetes control plane
984function init_kubeadm() {
985 sudo swapoff -a
986 sudo kubeadm init --config $1
987 sleep 5
988}
989
990function kube_config_dir() {
991 [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes"
992 mkdir -p $HOME/.kube
993 sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
994 sudo chown $(id -u):$(id -g) $HOME/.kube/config
995}
996
997#deploys flannel as daemonsets
998function deploy_cni_provider() {
999 CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")"
1000 trap 'rm -rf "${CNI_DIR}"' EXIT
1001 wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR
1002 kubectl apply -f $CNI_DIR
1003 [ $? -ne 0 ] && FATAL "Cannot Install Flannel"
1004}
1005
1006#creates secrets from env files which will be used by containers
1007function kube_secrets(){
1008 kubectl create ns $OSM_STACK_NAME
1009 kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env
1010 kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env
1011 kubectl create secret generic nbi-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/nbi.env
1012 kubectl create secret generic ro-db-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro-db.env
1013 kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env
1014 kubectl create secret generic keystone-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/keystone.env
1015 kubectl create secret generic lwui-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lwui.env
1016 kubectl create secret generic pol-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/pol.env
1017}
1018
1019#deploys osm pods and services
1020function deploy_osm_services() {
1021 K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}')
1022 kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
1023 sleep 5
1024 kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR
1025}
1026
1027function parse_yaml() {
1028 osm_services="nbi lcm ro pol mon light-ui keystone"
1029 TAG=$1
1030 for osm in $osm_services; do
1031 $WORKDIR_SUDO sed -i "s/opensourcemano\/$osm:.*/opensourcemano\/$osm:$TAG/g" $OSM_K8S_WORK_DIR/$osm.yaml
1032 done
1033}
1034
1035function namespace_vol() {
1036 osm_services="nbi lcm ro pol mon kafka mongo mysql"
1037 for osm in $osm_services; do
1038 $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml
1039 done
1040}
1041
garciadeblasa3e26612018-05-30 17:58:55 +02001042function init_docker_swarm() {
garciadeblasd8bc5c32018-05-09 17:37:56 +02001043 if [ "${DEFAULT_MTU}" != "1500" ]; then
1044 DOCKER_NETS=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
1045 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";}'`
1046 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"
1047 fi
garciadeblas5b857d32018-05-24 18:37:58 +02001048 sg docker -c "docker swarm init --advertise-addr ${DEFAULT_IP}"
garciadeblasa3e26612018-05-30 17:58:55 +02001049 return 0
1050}
1051
Mike Marchettib8420852018-09-13 13:45:06 -04001052function create_docker_network() {
1053 echo "creating network"
1054 sg docker -c "docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} net${OSM_STACK_NAME}"
1055 echo "creating network DONE"
1056}
1057
garciadeblasa3e26612018-05-30 17:58:55 +02001058function deploy_lightweight() {
Mike Marchettib8420852018-09-13 13:45:06 -04001059
garciadeblasa3e26612018-05-30 17:58:55 +02001060 echo "Deploying lightweight build"
Mike Marchettib8420852018-09-13 13:45:06 -04001061 OSM_NBI_PORT=9999
1062 OSM_RO_PORT=9090
Eduardo Sousa09a1e972018-09-21 11:06:32 +01001063 OSM_KEYSTONE_PORT=5000
Mike Marchettib8420852018-09-13 13:45:06 -04001064 OSM_UI_PORT=80
lavadoafa54c72018-10-05 09:28:28 -05001065 OSM_MON_PORT=8662
lavado60216242018-10-10 23:44:28 +02001066 OSM_PROM_PORT=9090
garciadeblasa7b27dc2019-12-04 15:06:55 +01001067 OSM_PROM_CADVISOR_PORT=8080
lavado60216242018-10-10 23:44:28 +02001068 OSM_PROM_HOSTPORT=9091
lavado6ad812e2019-11-29 10:58:58 -05001069 OSM_GRAFANA_PORT=3000
Eduardo Sousae00c8f92018-10-08 10:36:17 +01001070 [ -n "$INSTALL_ELK" ] && OSM_ELK_PORT=5601
lavado6ad812e2019-11-29 10:58:58 -05001071 #[ -n "$INSTALL_PERFMON" ] && OSM_PM_PORT=3000
lavado60216242018-10-10 23:44:28 +02001072
Mike Marchettib8420852018-09-13 13:45:06 -04001073 if [ -n "$NO_HOST_PORTS" ]; then
1074 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT)
1075 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +01001076 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001077 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -05001078 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +02001079 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +01001080 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -05001081 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT)
1082 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +01001083 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001084 else
1085 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT:$OSM_NBI_PORT)
1086 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT:$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +01001087 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT:$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001088 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT:$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -05001089 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT:$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +02001090 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_HOSTPORT:$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +01001091 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT:$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -05001092 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT:$OSM_GRAFANA_PORT)
1093 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT:$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +01001094 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT:$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001095 fi
1096 echo "export ${OSM_PORTS[@]}" | $WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/osm_ports.sh
1097 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 -04001098 echo "export TAG=${OSM_DOCKER_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Mike Marchettida8a9c42018-10-01 15:25:15 -04001099 echo "export DOCKER_USER=${DOCKER_USER}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -03001100 echo "export KAFKA_TAG=${KAFKA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado60216242018-10-10 23:44:28 +02001101 echo "export PROMETHEUS_TAG=${PROMETHEUS_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado9a8df7c2018-10-24 09:35:34 -05001102 echo "export KEYSTONEDB_TAG=${KEYSTONEDB_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado6ad812e2019-11-29 10:58:58 -05001103 echo "export PROMETHEUS_CADVISOR_TAG=${PROMETHEUS_CADVISOR_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
1104 echo "export GRAFANA_TAG=${GRAFANA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -03001105
Mike Marchettib8420852018-09-13 13:45:06 -04001106 pushd $OSM_DOCKER_WORK_DIR
beierl63229a22019-05-30 14:42:04 -04001107 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 -04001108 popd
1109
garciadeblasd8bc5c32018-05-09 17:37:56 +02001110 echo "Finished deployment of lightweight build"
1111}
1112
garciadeblas6c66abf2018-05-16 14:46:19 +02001113function deploy_elk() {
garciadeblase2aebfe2018-07-06 14:11:20 +02001114 echo "Pulling docker images for ELK"
lavado53eb8f52018-11-16 12:58:23 -05001115 sg docker -c "docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:${ELASTIC_VERSION}" || FATAL "cannot get elasticsearch docker image"
1116 sg docker -c "docker pull docker.elastic.co/beats/metricbeat:${ELASTIC_VERSION}" || FATAL "cannot get metricbeat docker image"
1117 sg docker -c "docker pull docker.elastic.co/beats/filebeat:${ELASTIC_VERSION}" || FATAL "cannot get filebeat docker image"
1118 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 -05001119 sg docker -c "docker pull bobrik/curator:${ELASTIC_CURATOR_VERSION}" || FATAL "cannot get curator docker image"
garciadeblase2aebfe2018-07-06 14:11:20 +02001120 echo "Finished pulling elk docker images"
Mike Marchettib8420852018-09-13 13:45:06 -04001121 $WORKDIR_SUDO mkdir -p "$OSM_DOCKER_WORK_DIR/osm_elk"
1122 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_elk/* $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas5b857d32018-05-24 18:37:58 +02001123 remove_stack osm_elk
garciadeblas6c66abf2018-05-16 14:46:19 +02001124 echo "Deploying ELK stack"
Mike Marchettib8420852018-09-13 13:45:06 -04001125 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 +02001126 echo "Waiting for ELK stack to be up and running"
1127 time=0
garciadeblase2aebfe2018-07-06 14:11:20 +02001128 step=5
1129 timelength=40
garciadeblas6c66abf2018-05-16 14:46:19 +02001130 elk_is_up=1
1131 while [ $time -le $timelength ]; do
garciadeblase2aebfe2018-07-06 14:11:20 +02001132 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 +02001133 elk_is_up=0
1134 break
1135 fi
1136 sleep $step
1137 time=$((time+step))
1138 done
1139 if [ $elk_is_up -eq 0 ]; then
1140 echo "ELK is up and running. Trying to create index pattern..."
1141 #Create index pattern
1142 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -05001143 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
1144 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001145 #Make it the default index
garciadeblase2aebfe2018-07-06 14:11:20 +02001146 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +02001147 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -05001148 -d"{\"value\":\"filebeat-*\"}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001149 else
1150 echo "Cannot connect to Kibana to create index pattern."
1151 echo "Once Kibana is running, you can use the following instructions to create index pattern:"
1152 echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -05001153 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
1154 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}"'
garciadeblas6c66abf2018-05-16 14:46:19 +02001155 echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +02001156 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -05001157 -d"{\"value\":\"filebeat-*\"}"'
garciadeblas6c66abf2018-05-16 14:46:19 +02001158 fi
1159 echo "Finished deployment of ELK stack"
1160 return 0
1161}
1162
garciadeblasd8bc5c32018-05-09 17:37:56 +02001163function install_lightweight() {
garciadeblas0d45bc82018-11-19 14:25:13 +01001164 [ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
vijaynag8339ed22019-07-25 17:10:58 +05301165 [ -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 -04001166 [ ! -d "$OSM_DOCKER_WORK_DIR" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR
vijaynag8339ed22019-07-25 17:10:58 +05301167 [ -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 -04001168
garciadeblas183e5802018-12-13 18:20:54 +01001169 track checkingroot
garciadeblasd13a8aa2018-05-18 15:24:51 +02001170 [ "$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 +01001171 track noroot
vijaynag8339ed22019-07-25 17:10:58 +05301172
1173 if [ -n "$KUBERNETES" ]; then
1174 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
1175 1. Install and configure LXD
1176 2. Install juju
1177 3. Install docker CE
1178 4. Disable swap space
1179 5. Install and initialize Kubernetes
1180 as pre-requirements.
1181 Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
1182
1183 else
1184 [ -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
1185 fi
garciadeblasfae5e972018-06-12 18:27:11 +02001186 track proceed
vijaynag8339ed22019-07-25 17:10:58 +05301187
garciadeblasd8bc5c32018-05-09 17:37:56 +02001188 echo "Installing lightweight build of OSM"
1189 LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
1190 trap 'rm -rf "${LWTEMPDIR}"' EXIT
1191 DEFAULT_IF=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
garciadeblas8cd60772018-06-02 08:38:17 +02001192 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001193 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
garciadeblas8cd60772018-06-02 08:38:17 +02001194 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001195 DEFAULT_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
Mike Marchettib8420852018-09-13 13:45:06 -04001196
1197 # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to
lavadoe07b1642018-10-25 10:58:34 -05001198 if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ]; then
garciadeblasbd925e42018-06-14 14:32:12 +02001199 need_packages_lw="lxd snapd"
garciadeblasd41f5482018-05-25 10:25:06 +02001200 echo -e "Checking required packages: $need_packages_lw"
1201 dpkg -l $need_packages_lw &>/dev/null \
1202 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1203 || sudo apt-get update \
1204 || FATAL "failed to run apt-get update"
1205 dpkg -l $need_packages_lw &>/dev/null \
1206 || ! echo -e "Installing $need_packages_lw requires root privileges." \
1207 || sudo apt-get install -y $need_packages_lw \
1208 || FATAL "failed to install $need_packages_lw"
1209 fi
garciadeblasfae5e972018-06-12 18:27:11 +02001210 track prereqok
Mike Marchettib8420852018-09-13 13:45:06 -04001211
vijaynag8339ed22019-07-25 17:10:58 +05301212 [ -z "$INSTALL_NOJUJU" ] && install_juju
garciadeblas183e5802018-12-13 18:20:54 +01001213 track juju_install
vijaynag8339ed22019-07-25 17:10:58 +05301214
lavadoe07b1642018-10-25 10:58:34 -05001215 if [ -z "$OSM_VCA_HOST" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -04001216 juju_createcontroller
lavadoe07b1642018-10-25 10:58:34 -05001217 OSM_VCA_HOST=`sg lxd -c "juju show-controller $OSM_STACK_NAME"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
1218 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
Mike Marchettib8420852018-09-13 13:45:06 -04001219 fi
garciadeblas183e5802018-12-13 18:20:54 +01001220 track juju_controller
vijaynag8339ed22019-07-25 17:10:58 +05301221
lavadoe07b1642018-10-25 10:58:34 -05001222 if [ -z "$OSM_VCA_SECRET" ]; then
1223 OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME)
1224 [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
Mike Marchettib8420852018-09-13 13:45:06 -04001225 fi
garciadeblasaa3ddf42019-04-04 19:04:32 +02001226 if [ -z "$OSM_VCA_PUBKEY" ]; then
1227 OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
1228 [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
1229 fi
Adam Israel5ddc97f2019-09-03 18:11:12 -04001230 if [ -z "$OSM_VCA_APIPROXY" ]; then
1231 OSM_VCA_APIPROXY=$DEFAULT_IP
1232 [ -z "$OSM_VCA_APIPROXY" ] && FATAL "Cannot obtain juju api proxy"
1233 fi
1234 juju_createproxy
1235
Adam Israelbe7676a2019-10-02 16:10:53 -04001236 if [ -z "$OSM_VCA_CACERT" ]; then
1237 OSM_VCA_CACERT=$(juju controllers --format json | jq -r '.controllers["osm"]["ca-cert"]' | base64 | tr -d \\n)
1238 [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
1239 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -03001240 if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
1241 OSM_DATABASE_COMMONKEY=$(generate_secret)
1242 [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret"
1243 fi
garciadeblas6c66abf2018-05-16 14:46:19 +02001244 track juju
vijaynag8339ed22019-07-25 17:10:58 +05301245
garciadeblasa3e26612018-05-30 17:58:55 +02001246 [ -n "$INSTALL_NODOCKER" ] || install_docker_ce
garciadeblas6c66abf2018-05-16 14:46:19 +02001247 track docker_ce
vijaynag8339ed22019-07-25 17:10:58 +05301248
1249 #Installs Kubernetes and deploys osm services
1250 if [ -n "$KUBERNETES" ]; then
1251 install_kube
1252 track install_k8s
1253 init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
1254 kube_config_dir
1255 track init_k8s
1256 else
1257 #install_docker_compose
1258 [ -n "$INSTALL_NODOCKER" ] || init_docker_swarm
1259 track docker_swarm
1260 fi
1261
Mike Marchettib8420852018-09-13 13:45:06 -04001262 [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
garciadeblas6c66abf2018-05-16 14:46:19 +02001263 track docker_build
vijaynag8339ed22019-07-25 17:10:58 +05301264
garciadeblasd8bc5c32018-05-09 17:37:56 +02001265 generate_docker_env_files
Mike Marchettib8420852018-09-13 13:45:06 -04001266
vijaynag8339ed22019-07-25 17:10:58 +05301267 if [ -n "$KUBERNETES" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +01001268 if [ -n "$K8S_MONITOR" ]; then
1269 # uninstall OSM MONITORING
1270 uninstall_k8s_monitoring
1271 fi
vijaynag8339ed22019-07-25 17:10:58 +05301272 #remove old namespace
1273 remove_k8s_namespace $OSM_STACK_NAME
1274 deploy_cni_provider
1275 kube_secrets
1276 [ ! $OSM_DOCKER_TAG == "latest" ] && parse_yaml $OSM_DOCKER_TAG
1277 namespace_vol
1278 deploy_osm_services
1279 track deploy_osm_services_k8s
1280 else
1281 # remove old stack
1282 remove_stack $OSM_STACK_NAME
1283 create_docker_network
1284 deploy_lightweight
1285 generate_osmclient_script
1286 track docker_deploy
lavado6ad812e2019-11-29 10:58:58 -05001287 install_prometheus_nodeexporter
vijaynag8339ed22019-07-25 17:10:58 +05301288 [ -n "$INSTALL_VIMEMU" ] && install_vimemu && track vimemu
1289 [ -n "$INSTALL_ELK" ] && deploy_elk && track elk
vijaynag8339ed22019-07-25 17:10:58 +05301290 fi
1291
romeromonsere366b1a2019-11-19 19:49:26 +01001292 if [ -n "$KUBERNETES" ] && [ -n "$K8S_MONITOR" ]; then
1293 # install OSM MONITORING
1294 install_k8s_monitoring
1295 track install_k8s_monitoring
1296 fi
1297
Mike Marchettib8420852018-09-13 13:45:06 -04001298 [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
garciadeblas6c66abf2018-05-16 14:46:19 +02001299 track osmclient
vijaynag8339ed22019-07-25 17:10:58 +05301300
garciadeblasb6a0bf12019-09-10 21:08:21 +02001301 wget -q -O- https://osm-download.etsi.org/ftp/osm-6.0-six/README2.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001302 track end
garciadeblasd8bc5c32018-05-09 17:37:56 +02001303 return 0
1304}
1305
1306function install_vimemu() {
peusterm76353e42018-05-08 13:56:05 +02001307 echo "\nInstalling vim-emu"
1308 EMUTEMPDIR="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX")"
1309 trap 'rm -rf "${EMUTEMPDIR}"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001310 # clone vim-emu repository (attention: branch is currently master only)
1311 echo "Cloning vim-emu repository ..."
peusterm76353e42018-05-08 13:56:05 +02001312 git clone https://osm.etsi.org/gerrit/osm/vim-emu.git $EMUTEMPDIR
garciadeblasd8bc5c32018-05-09 17:37:56 +02001313 # build vim-emu docker
1314 echo "Building vim-emu Docker container..."
Mike Marchettib8420852018-09-13 13:45:06 -04001315
1316 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 +02001317 # start vim-emu container as daemon
1318 echo "Starting vim-emu Docker container 'vim-emu' ..."
peusterm76353e42018-05-08 13:56:05 +02001319 if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
1320 # in lightweight mode, the emulator needs to be attached to netOSM
Mike Marchettib8420852018-09-13 13:45:06 -04001321 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 +02001322 else
1323 # classic build mode
Mike Marchettib8420852018-09-13 13:45:06 -04001324 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 +02001325 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001326 echo "Waiting for 'vim-emu' container to start ..."
1327 sleep 5
Mike Marchettib8420852018-09-13 13:45:06 -04001328 export VIMEMU_HOSTNAME=$(sg docker -c "docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001329 echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
peusterm76353e42018-05-08 13:56:05 +02001330 # print vim-emu connection info
1331 echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001332 echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
peusterm76353e42018-05-08 13:56:05 +02001333 echo -e "To add the emulated VIM to OSM you should do:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001334 echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
1335}
1336
romeromonsere366b1a2019-11-19 19:49:26 +01001337function install_k8s_monitoring() {
1338 # install OSM monitoring
1339 chmod +x $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/*.sh
1340 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh
1341}
1342
1343function uninstall_k8s_monitoring() {
1344 # install OSM monitoring
1345 chmod +x $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/*.sh
1346 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/uninstall_osm_k8s_monitoring.sh
1347}
1348
garciadeblasd8bc5c32018-05-09 17:37:56 +02001349function dump_vars(){
1350 echo "DEVELOP=$DEVELOP"
1351 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
1352 echo "UNINSTALL=$UNINSTALL"
1353 echo "NAT=$NAT"
1354 echo "UPDATE=$UPDATE"
1355 echo "RECONFIGURE=$RECONFIGURE"
1356 echo "TEST_INSTALLER=$TEST_INSTALLER"
1357 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
1358 echo "INSTALL_LXD=$INSTALL_LXD"
1359 echo "INSTALL_FROM_LXDIMAGES=$INSTALL_FROM_LXDIMAGES"
1360 echo "LXD_REPOSITORY_BASE=$LXD_REPOSITORY_BASE"
1361 echo "LXD_REPOSITORY_PATH=$LXD_REPOSITORY_PATH"
1362 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
garciadeblas6c66abf2018-05-16 14:46:19 +02001363 echo "INSTALL_ONLY=$INSTALL_ONLY"
1364 echo "INSTALL_ELK=$INSTALL_ELK"
lavado6ad812e2019-11-29 10:58:58 -05001365 #echo "INSTALL_PERFMON=$INSTALL_PERFMON"
garciadeblas0e596bc2018-05-28 16:04:42 +02001366 echo "TO_REBUILD=$TO_REBUILD"
garciadeblasd41f5482018-05-25 10:25:06 +02001367 echo "INSTALL_NOLXD=$INSTALL_NOLXD"
garciadeblasa3e26612018-05-30 17:58:55 +02001368 echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
garciadeblas0d45bc82018-11-19 14:25:13 +01001369 echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001370 echo "RELEASE=$RELEASE"
1371 echo "REPOSITORY=$REPOSITORY"
1372 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
1373 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
1374 echo "NOCONFIGURE=$NOCONFIGURE"
garciadeblas0d45bc82018-11-19 14:25:13 +01001375 echo "OSM_DEVOPS=$OSM_DEVOPS"
1376 echo "OSM_VCA_HOST=$OSM_VCA_HOST"
1377 echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
garciadeblasaa3ddf42019-04-04 19:04:32 +02001378 echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001379 echo "NO_HOST_PORTS=$NO_HOST_PORTS"
1380 echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
1381 echo "WORKDIR_SUDO=$WORKDIR_SUDO"
1382 echo "OSM_WORK_DIR=$OSM_STACK_NAME"
1383 echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
1384 echo "DOCKER_USER=$DOCKER_USER"
1385 echo "OSM_STACK_NAME=$OSM_STACK_NAME"
1386 echo "PULL_IMAGES=$PULL_IMAGES"
vijaynag8339ed22019-07-25 17:10:58 +05301387 echo "KUBERNETES=$KUBERNETES"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001388 echo "SHOWOPTS=$SHOWOPTS"
1389 echo "Install from specific refspec (-b): $COMMIT_ID"
1390}
1391
1392function track(){
1393 ctime=`date +%s`
1394 duration=$((ctime - SESSION_ID))
1395 url="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
1396 #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
1397 event_name="bin"
garciadeblas6c66abf2018-05-16 14:46:19 +02001398 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name="binsrc"
1399 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name="lxd"
1400 [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name="lw"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001401 event_name="${event_name}_$1"
1402 url="${url}&event=${event_name}&ce_duration=${duration}"
1403 wget -q -O /dev/null $url
1404}
1405
1406UNINSTALL=""
1407DEVELOP=""
1408NAT=""
1409UPDATE=""
1410RECONFIGURE=""
1411TEST_INSTALLER=""
1412INSTALL_LXD=""
1413SHOWOPTS=""
1414COMMIT_ID=""
1415ASSUME_YES=""
1416INSTALL_FROM_SOURCE=""
Gerardo Garcíac471ecc2019-06-26 16:40:28 +02001417RELEASE="ReleaseSIX"
Mike Marchettib8420852018-09-13 13:45:06 -04001418REPOSITORY="stable"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001419INSTALL_VIMEMU=""
1420INSTALL_FROM_LXDIMAGES=""
1421LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
1422LXD_REPOSITORY_PATH=""
1423INSTALL_LIGHTWEIGHT="y"
garciadeblas6c66abf2018-05-16 14:46:19 +02001424INSTALL_ONLY=""
1425INSTALL_ELK=""
lavado6ad812e2019-11-29 10:58:58 -05001426#INSTALL_PERFMON=""
garciadeblas0e596bc2018-05-28 16:04:42 +02001427TO_REBUILD=""
garciadeblasd41f5482018-05-25 10:25:06 +02001428INSTALL_NOLXD=""
garciadeblasa3e26612018-05-30 17:58:55 +02001429INSTALL_NODOCKER=""
Mike Marchettib8420852018-09-13 13:45:06 -04001430INSTALL_NOJUJU=""
vijaynag8339ed22019-07-25 17:10:58 +05301431KUBERNETES=""
romeromonsere366b1a2019-11-19 19:49:26 +01001432K8S_MONITOR=""
garciadeblas0d45bc82018-11-19 14:25:13 +01001433INSTALL_NOHOSTCLIENT=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001434NOCONFIGURE=""
1435RELEASE_DAILY=""
1436SESSION_ID=`date +%s`
1437OSM_DEVOPS=
lavadoe07b1642018-10-25 10:58:34 -05001438OSM_VCA_HOST=
1439OSM_VCA_SECRET=
garciadeblasaa3ddf42019-04-04 19:04:32 +02001440OSM_VCA_PUBKEY=
Mike Marchettib8420852018-09-13 13:45:06 -04001441OSM_STACK_NAME=osm
1442NO_HOST_PORTS=""
1443DOCKER_NOBUILD=""
1444REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
garciadeblas870e60a2018-11-21 16:44:21 +01001445REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
Mike Marchettib8420852018-09-13 13:45:06 -04001446WORKDIR_SUDO=sudo
1447OSM_WORK_DIR="/etc/osm"
garciadeblas526f0fb2018-11-23 14:47:40 +01001448OSM_DOCKER_WORK_DIR="/etc/osm/docker"
vijaynag8339ed22019-07-25 17:10:58 +05301449OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
1450OSM_HOST_VOL="/var/lib/osm"
1451OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
Mike Marchetti13d76c82018-09-19 15:00:36 -04001452OSM_DOCKER_TAG=latest
garciadeblas0d45bc82018-11-19 14:25:13 +01001453DOCKER_USER=opensourcemano
1454PULL_IMAGES="y"
Benjamin Diazaa0af712018-10-04 14:02:34 -03001455KAFKA_TAG=2.11-1.0.2
lavado60216242018-10-10 23:44:28 +02001456PROMETHEUS_TAG=v2.4.3
lavado6ad812e2019-11-29 10:58:58 -05001457GRAFANA_TAG=latest
1458PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
1459PROMETHEUS_CADVISOR_TAG=latest
lavado9a8df7c2018-10-24 09:35:34 -05001460KEYSTONEDB_TAG=10
Benjamin Diazba2cca92018-11-08 21:07:15 -03001461OSM_DATABASE_COMMONKEY=
lavado53eb8f52018-11-16 12:58:23 -05001462ELASTIC_VERSION=6.4.2
lavado4e8662c2018-11-28 11:28:14 -05001463ELASTIC_CURATOR_VERSION=5.5.4
vijaynag8339ed22019-07-25 17:10:58 +05301464POD_NETWORK_CIDR=10.244.0.0/16
1465K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
1466RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
garciadeblasd8bc5c32018-05-09 17:37:56 +02001467
vijaynag8339ed22019-07-25 17:10:58 +05301468while 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 +02001469 case "${o}" in
1470 h)
1471 usage && exit 0
1472 ;;
1473 b)
1474 COMMIT_ID=${OPTARG}
garciadeblas0d45bc82018-11-19 14:25:13 +01001475 PULL_IMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001476 ;;
1477 r)
Mike Marchettib8420852018-09-13 13:45:06 -04001478 REPOSITORY="${OPTARG}"
1479 REPO_ARGS+=(-r "$REPOSITORY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001480 ;;
vijaynag8339ed22019-07-25 17:10:58 +05301481 c)
1482 [ "${OPTARG}" == "swarm" ] && continue
1483 [ "${OPTARG}" == "k8s" ] && KUBERNETES="y" && continue
1484 echo -e "Invalid argument for -i : ' $OPTARG'\n" >&2
1485 usage && exit 1
1486 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001487 R)
Mike Marchettib8420852018-09-13 13:45:06 -04001488 RELEASE="${OPTARG}"
1489 REPO_ARGS+=(-R "$RELEASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001490 ;;
1491 k)
Mike Marchettib8420852018-09-13 13:45:06 -04001492 REPOSITORY_KEY="${OPTARG}"
1493 REPO_ARGS+=(-k "$REPOSITORY_KEY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001494 ;;
1495 u)
Mike Marchettib8420852018-09-13 13:45:06 -04001496 REPOSITORY_BASE="${OPTARG}"
1497 REPO_ARGS+=(-u "$REPOSITORY_BASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001498 ;;
garciadeblas0d45bc82018-11-19 14:25:13 +01001499 U)
1500 DOCKER_USER="${OPTARG}"
1501 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001502 l)
1503 LXD_REPOSITORY_BASE="${OPTARG}"
1504 ;;
1505 p)
1506 LXD_REPOSITORY_PATH="${OPTARG}"
1507 ;;
1508 D)
1509 OSM_DEVOPS="${OPTARG}"
1510 ;;
Mike Marchettib8420852018-09-13 13:45:06 -04001511 s)
vijaynag8339ed22019-07-25 17:10:58 +05301512 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 -04001513 ;;
1514 H)
lavadoe07b1642018-10-25 10:58:34 -05001515 OSM_VCA_HOST="${OPTARG}"
Mike Marchettib8420852018-09-13 13:45:06 -04001516 ;;
1517 S)
lavadoe07b1642018-10-25 10:58:34 -05001518 OSM_VCA_SECRET="${OPTARG}"
Mike Marchettib8420852018-09-13 13:45:06 -04001519 ;;
garciadeblasaa3ddf42019-04-04 19:04:32 +02001520 P)
1521 OSM_VCA_PUBKEY=$(cat ${OPTARG})
1522 ;;
Adam Israel5ddc97f2019-09-03 18:11:12 -04001523 A)
1524 OSM_VCA_APIPROXY="${OPTARG}"
1525 ;;
Mike Marchettib8420852018-09-13 13:45:06 -04001526 w)
1527 # when specifying workdir, do not use sudo for access
1528 WORKDIR_SUDO=
1529 OSM_WORK_DIR="${OPTARG}"
1530 ;;
Mike Marchetti13d76c82018-09-19 15:00:36 -04001531 t)
1532 OSM_DOCKER_TAG="${OPTARG}"
1533 ;;
garciadeblas6c66abf2018-05-16 14:46:19 +02001534 o)
1535 INSTALL_ONLY="y"
1536 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
1537 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
lavado6ad812e2019-11-29 10:58:58 -05001538 #[ "${OPTARG}" == "pm_stack" ] && INSTALL_PERFMON="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001539 ;;
garciadeblas0e596bc2018-05-28 16:04:42 +02001540 m)
garciadeblas0e596bc2018-05-28 16:04:42 +02001541 [ "${OPTARG}" == "LW-UI" ] && TO_REBUILD="$TO_REBUILD LW-UI" && continue
govindappa79e51b92019-05-22 12:15:21 +05301542 [ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
1543 [ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
1544 [ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001545 [ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
govindappa79e51b92019-05-22 12:15:21 +05301546 [ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001547 [ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
1548 [ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
govindappa79e51b92019-05-22 12:15:21 +05301549 [ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
1550 [ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
lavado6ad812e2019-11-29 10:58:58 -05001551 [ "${OPTARG}" == "GRAFANA" ] && TO_REBUILD="$TO_REBUILD GRAFANA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001552 [ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
1553 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001554 -)
1555 [ "${OPTARG}" == "help" ] && usage && exit 0
garciadeblas0d45bc82018-11-19 14:25:13 +01001556 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001557 [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
1558 [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
1559 [ "${OPTARG}" == "nat" ] && NAT="y" && continue
1560 [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
1561 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
1562 [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
1563 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
garciadeblasd41f5482018-05-25 10:25:06 +02001564 [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
garciadeblasa3e26612018-05-30 17:58:55 +02001565 [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001566 [ "${OPTARG}" == "lxdimages" ] && INSTALL_FROM_LXDIMAGES="y" && continue
1567 [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT="y" && continue
garciadeblase990f662018-05-18 11:43:39 +02001568 [ "${OPTARG}" == "soui" ] && INSTALL_LIGHTWEIGHT="" && RELEASE="-R ReleaseTHREE" && REPOSITORY="-r stable" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001569 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001570 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
lavado6ad812e2019-11-29 10:58:58 -05001571 #[ "${OPTARG}" == "pm_stack" ] && INSTALL_PERFMON="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001572 [ "${OPTARG}" == "noconfigure" ] && NOCONFIGURE="y" && continue
1573 [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
1574 [ "${OPTARG}" == "daily" ] && RELEASE_DAILY="y" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001575 [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
1576 [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
1577 [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
1578 [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
garciadeblas0d45bc82018-11-19 14:25:13 +01001579 [ "${OPTARG}" == "pullimages" ] && continue
romeromonsere366b1a2019-11-19 19:49:26 +01001580 [ "${OPTARG}" == "k8s_monitor" ] && K8S_MONITOR="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001581 echo -e "Invalid option: '--$OPTARG'\n" >&2
1582 usage && exit 1
1583 ;;
1584 \?)
1585 echo -e "Invalid option: '-$OPTARG'\n" >&2
1586 usage && exit 1
1587 ;;
1588 y)
1589 ASSUME_YES="y"
1590 ;;
1591 *)
1592 usage && exit 1
1593 ;;
1594 esac
1595done
1596
garciadeblas6c66abf2018-05-16 14:46:19 +02001597[ -n "$INSTALL_FROM_LXDIMAGES" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --lxd can only be used with --soui"
garciadeblase990f662018-05-18 11:43:39 +02001598[ -n "$NAT" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --nat can only be used with --soui"
1599[ -n "$NOCONFIGURE" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --noconfigure can only be used with --soui"
garciadeblasfb566272018-05-25 10:33:36 +02001600[ -n "$RELEASE_DAILY" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --daily can only be used with --soui"
garciadeblasd41f5482018-05-25 10:25:06 +02001601[ -n "$INSTALL_NOLXD" ] && [ -z "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible option: --nolxd cannot be used with --soui"
garciadeblasa3e26612018-05-30 17:58:55 +02001602[ -n "$INSTALL_NODOCKER" ] && [ -z "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible option: --nodocker cannot be used with --soui"
garciadeblas0e596bc2018-05-28 16:04:42 +02001603[ -n "$TO_REBUILD" ] && [ -z "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible option: -m cannot be used with --soui"
1604[ -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 +02001605
garciadeblasd8bc5c32018-05-09 17:37:56 +02001606if [ -n "$SHOWOPTS" ]; then
1607 dump_vars
1608 exit 0
1609fi
1610
1611[ -n "$RELEASE_DAILY" ] && echo -e "\nInstalling from daily build repo" && RELEASE="-R ReleaseTHREE-daily" && REPOSITORY="-r testing" && COMMIT_ID="master"
1612
1613# if develop, we force master
1614[ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
1615
garciadeblasd8bc5c32018-05-09 17:37:56 +02001616need_packages="git jq wget curl tar"
1617echo -e "Checking required packages: $need_packages"
1618dpkg -l $need_packages &>/dev/null \
1619 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1620 || sudo apt-get update \
1621 || FATAL "failed to run apt-get update"
1622dpkg -l $need_packages &>/dev/null \
1623 || ! echo -e "Installing $need_packages requires root privileges." \
1624 || sudo apt-get install -y $need_packages \
1625 || FATAL "failed to install $need_packages"
1626
1627if [ -z "$OSM_DEVOPS" ]; then
Michael Marchettiee374142018-08-02 22:47:16 +02001628 if [ -n "$TEST_INSTALLER" ]; then
1629 echo -e "\nUsing local devops repo for OSM installation"
1630 OSM_DEVOPS="$(dirname $(realpath $(dirname $0)))"
1631 else
1632 echo -e "\nCreating temporary dir for OSM installation"
1633 OSM_DEVOPS="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
1634 trap 'rm -rf "$OSM_DEVOPS"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001635
Michael Marchettiee374142018-08-02 22:47:16 +02001636 git clone https://osm.etsi.org/gerrit/osm/devops.git $OSM_DEVOPS
garciadeblasd8bc5c32018-05-09 17:37:56 +02001637
Michael Marchettiee374142018-08-02 22:47:16 +02001638 if [ -z "$COMMIT_ID" ]; then
1639 echo -e "\nGuessing the current stable release"
1640 LATEST_STABLE_DEVOPS=`git -C $OSM_DEVOPS tag -l v[0-9].* | sort -V | tail -n1`
1641 [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
1642
1643 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
1644 COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
1645 else
1646 echo -e "\nDEVOPS Using commit $COMMIT_ID"
1647 fi
1648 git -C $OSM_DEVOPS checkout $COMMIT_ID
garciadeblasd8bc5c32018-05-09 17:37:56 +02001649 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001650fi
1651
garciadeblas3c25fab2019-11-18 17:24:43 +01001652. $OSM_DEVOPS/common/all_funcs
garciadeblasd8bc5c32018-05-09 17:37:56 +02001653
1654[ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight && echo -e "\nDONE" && exit 0
1655[ -n "$UNINSTALL" ] && uninstall && echo -e "\nDONE" && exit 0
1656[ -n "$NAT" ] && nat && echo -e "\nDONE" && exit 0
1657[ -n "$UPDATE" ] && update && echo -e "\nDONE" && exit 0
1658[ -n "$RECONFIGURE" ] && configure && echo -e "\nDONE" && exit 0
garciadeblas6c66abf2018-05-16 14:46:19 +02001659[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
lavado6ad812e2019-11-29 10:58:58 -05001660#[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
garciadeblas6c66abf2018-05-16 14:46:19 +02001661[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
1662[ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
garciadeblasd8bc5c32018-05-09 17:37:56 +02001663
1664#Installation starts here
garciadeblasb1993ed2019-09-10 00:58:43 +02001665wget -q -O- https://osm-download.etsi.org/ftp/osm-6.0-six/README.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001666track start
1667
garciadeblasd8bc5c32018-05-09 17:37:56 +02001668[ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight && echo -e "\nDONE" && exit 0
1669echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
1670if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
1671 ! ask_user "The installation will take about 75-90 minutes. Continue (Y/n)? " y && echo "Cancelled!" && exit 1
1672fi
1673
1674echo -e "Checking required packages: lxd"
1675lxd --version &>/dev/null || FATAL "lxd not present, exiting."
1676[ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
1677
garciadeblasd8bc5c32018-05-09 17:37:56 +02001678# use local devops for containers
1679export OSM_USE_LOCAL_DEVOPS=true
1680if [ -n "$INSTALL_FROM_SOURCE" ]; then #install from source
1681 echo -e "\nCreating the containers and building from source ..."
1682 $OSM_DEVOPS/jenkins/host/start_build RO --notest checkout $COMMIT_ID || FATAL "RO container build failed (refspec: '$COMMIT_ID')"
1683 ro_is_up && track RO
1684 $OSM_DEVOPS/jenkins/host/start_build VCA || FATAL "VCA container build failed"
1685 vca_is_up && track VCA
1686 $OSM_DEVOPS/jenkins/host/start_build MON || FATAL "MON install failed"
1687 mon_is_up && track MON
1688 $OSM_DEVOPS/jenkins/host/start_build SO checkout $COMMIT_ID || FATAL "SO container build failed (refspec: '$COMMIT_ID')"
1689 $OSM_DEVOPS/jenkins/host/start_build UI checkout $COMMIT_ID || FATAL "UI container build failed (refspec: '$COMMIT_ID')"
1690 #so_is_up && track SOUI
1691 track SOUI
1692elif [ -n "$INSTALL_FROM_LXDIMAGES" ]; then #install from LXD images stored in OSM repo
1693 echo -e "\nInstalling from lxd images ..."
1694 install_from_lxdimages
1695else #install from binaries
1696 echo -e "\nCreating the containers and installing from binaries ..."
Mike Marchettib8420852018-09-13 13:45:06 -04001697 $OSM_DEVOPS/jenkins/host/install RO ${REPO_ARGS[@]} || FATAL "RO install failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001698 ro_is_up && track RO
1699 $OSM_DEVOPS/jenkins/host/start_build VCA || FATAL "VCA install failed"
1700 vca_is_up && track VCA
1701 $OSM_DEVOPS/jenkins/host/install MON || FATAL "MON build failed"
1702 mon_is_up && track MON
Mike Marchettib8420852018-09-13 13:45:06 -04001703 $OSM_DEVOPS/jenkins/host/install SO ${REPO_ARGS[@]} || FATAL "SO install failed"
1704 $OSM_DEVOPS/jenkins/host/install UI ${REPO_ARGS[@]} || FATAL "UI install failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001705 #so_is_up && track SOUI
1706 track SOUI
1707fi
1708
1709#Install iptables-persistent and configure NAT rules
1710[ -z "$NOCONFIGURE" ] && nat
1711
1712#Configure components
1713[ -z "$NOCONFIGURE" ] && configure
1714
1715#Install osmclient
1716[ -z "$NOCONFIGURE" ] && install_osmclient
1717
1718#Install vim-emu (optional)
peusterm76353e42018-05-08 13:56:05 +02001719[ -n "$INSTALL_VIMEMU" ] && install_docker_ce && install_vimemu
garciadeblasd8bc5c32018-05-09 17:37:56 +02001720
garciadeblasb1993ed2019-09-10 00:58:43 +02001721wget -q -O- https://osm-download.etsi.org/ftp/osm-6.0-six/README2.txt &> /dev/null
garciadeblasd8bc5c32018-05-09 17:37:56 +02001722track end
1723echo -e "\nDONE"