blob: 979f604e18fdbffaf19a1566d935b7d8749bcce0 [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"
garciadeblasd41f5482018-05-25 10:25:06 +020056 echo -e " -l <lxd_repo>: (only for Rel THREE with --soui) use specified repository url for lxd images"
57 echo -e " -p <path>: (only for Rel THREE with --soui) use specified repository path for lxd images"
garciadeblasd8bc5c32018-05-09 17:37:56 +020058# echo -e " --reconfigure: reconfigure the modules (DO NOT change NAT rules)"
garciadeblasd41f5482018-05-25 10:25:06 +020059 echo -e " --nat: (only for Rel THREE with --soui) install only NAT rules"
60 echo -e " --noconfigure: (only for Rel THREE with --soui) DO NOT install osmclient, DO NOT install NAT rules, DO NOT configure modules"
garciadeblasd8bc5c32018-05-09 17:37:56 +020061# echo -e " --update: update to the latest stable release or to the latest commit if using a specific branch"
62 echo -e " --showopts: print chosen options and exit (only for debugging)"
63 echo -e " -y: do not prompt for confirmation, assumes yes"
garciadeblasd8bc5c32018-05-09 17:37:56 +020064 echo -e " -h / --help: print this help"
65}
66
67#Uninstall OSM: remove containers
68function uninstall(){
69 echo -e "\nUninstalling OSM"
70 if [ $RC_CLONE ] || [ -n "$TEST_INSTALLER" ]; then
71 $OSM_DEVOPS/jenkins/host/clean_container RO
72 $OSM_DEVOPS/jenkins/host/clean_container VCA
73 $OSM_DEVOPS/jenkins/host/clean_container MON
74 $OSM_DEVOPS/jenkins/host/clean_container SO
75 #$OSM_DEVOPS/jenkins/host/clean_container UI
76 else
77 lxc stop RO && lxc delete RO
78 lxc stop VCA && lxc delete VCA
79 lxc stop MON && lxc delete MON
80 lxc stop SO-ub && lxc delete SO-ub
81 fi
82 echo -e "\nDeleting imported lxd images if they exist"
83 lxc image show osm-ro &>/dev/null && lxc image delete osm-ro
84 lxc image show osm-vca &>/dev/null && lxc image delete osm-vca
85 lxc image show osm-soui &>/dev/null && lxc image delete osm-soui
86 return 0
87}
88
Mike Marchettib8420852018-09-13 13:45:06 -040089# takes a juju/accounts.yaml file and returns the password specific
Adam Israel8232e562018-11-21 16:47:45 -050090# for a controller. I wrote this using only bash tools to minimize
Mike Marchettib8420852018-09-13 13:45:06 -040091# additions of other packages
92function parse_juju_password {
93 password_file="${HOME}/.local/share/juju/accounts.yaml"
94 local controller_name=$1
95 local s='[[:space:]]*' w='[a-zA-Z0-9_-]*' fs=$(echo @|tr @ '\034')
96 sed -ne "s|^\($s\):|\1|" \
97 -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
98 -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $password_file |
99 awk -F$fs -v controller=$controller_name '{
100 indent = length($1)/2;
101 vname[indent] = $2;
102 for (i in vname) {if (i > indent) {delete vname[i]}}
103 if (length($3) > 0) {
104 vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
105 if (match(vn,controller) && match($2,"password")) {
106 printf("%s",$3);
107 }
108 }
109 }'
110}
111
Benjamin Diazba2cca92018-11-08 21:07:15 -0300112function generate_secret() {
113 head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32
114}
115
Mike Marchettib8420852018-09-13 13:45:06 -0400116function remove_volumes() {
vijaynag8339ed22019-07-25 17:10:58 +0530117 if [ -n "$KUBERNETES" ]; then
118 k8_volume=$1
119 echo "Removing ${k8_volume}"
120 $WORKDIR_SUDO rm -rf ${k8_volume}
121 else
122 stack=$1
123 volumes="mongo_db mon_db osm_packages ro_db"
124 for volume in $volumes; do
125 sg docker -c "docker volume rm ${stack}_${volume}"
126 done
127 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400128}
129
130function remove_network() {
131 stack=$1
132 sg docker -c "docker network rm net${stack}"
133}
134
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100135function remove_iptables() {
136 stack=$1
137 if [ -z "$OSM_VCA_HOST" ]; then
138 OSM_VCA_HOST=`sg lxd -c "juju show-controller ${stack}"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
139 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
140 fi
141
142 if sudo iptables -t nat -C PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
143 sudo iptables -t nat -D PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
144 sudo netfilter-persistent save
145 fi
146}
147
garciadeblas5b857d32018-05-24 18:37:58 +0200148function remove_stack() {
149 stack=$1
garciadeblas5ef98212018-05-28 09:25:36 +0200150 if sg docker -c "docker stack ps ${stack}" ; then
garciadeblas5b857d32018-05-24 18:37:58 +0200151 echo -e "\nRemoving stack ${stack}" && sg docker -c "docker stack rm ${stack}"
152 COUNTER=0
153 result=1
154 while [ ${COUNTER} -lt 30 ]; do
155 result=$(sg docker -c "docker stack ps ${stack}" | wc -l)
156 #echo "Dockers running: $result"
157 if [ "${result}" == "0" ]; then
158 break
159 fi
160 let COUNTER=COUNTER+1
161 sleep 1
162 done
garciadeblasd8bc5c32018-05-09 17:37:56 +0200163 if [ "${result}" == "0" ]; then
garciadeblas5b857d32018-05-24 18:37:58 +0200164 echo "All dockers of the stack ${stack} were removed"
165 else
166 FATAL "Some dockers of the stack ${stack} could not be removed. Could not clean it."
garciadeblasd8bc5c32018-05-09 17:37:56 +0200167 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200168 sleep 5
garciadeblasd8bc5c32018-05-09 17:37:56 +0200169 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200170}
171
vijaynag8339ed22019-07-25 17:10:58 +0530172#removes osm deployments and services
173function remove_k8s_namespace() {
174 kubectl delete ns $1
175}
176
garciadeblas5b857d32018-05-24 18:37:58 +0200177#Uninstall lightweight OSM: remove dockers
178function uninstall_lightweight() {
garciadeblas282ff4e2018-07-10 09:16:30 +0200179 if [ -n "$INSTALL_ONLY" ]; then
180 if [ -n "$INSTALL_ELK" ]; then
181 echo -e "\nUninstalling OSM ELK stack"
182 remove_stack osm_elk
Mike Marchettib8420852018-09-13 13:45:06 -0400183 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas282ff4e2018-07-10 09:16:30 +0200184 fi
185 if [ -n "$INSTALL_PERFMON" ]; then
186 echo -e "\nUninstalling OSM Performance Monitoring stack"
187 remove_stack osm_metrics
Mike Marchettib8420852018-09-13 13:45:06 -0400188 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR/osm_metrics
garciadeblas282ff4e2018-07-10 09:16:30 +0200189 fi
190 else
191 echo -e "\nUninstalling OSM"
vijaynag8339ed22019-07-25 17:10:58 +0530192 if [ -n "$KUBERNETES" ]; then
193 remove_k8s_namespace $OSM_STACK_NAME
194 else
195 remove_stack $OSM_STACK_NAME
196 remove_stack osm_elk
197 remove_stack osm_metrics
198 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200199 echo "Now osm docker images and volumes will be deleted"
200 newgrp docker << EONG
lavado02ad4b02018-11-28 11:30:48 -0500201 docker image rm ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}
202 docker image rm ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}
203 docker image rm ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}
204 docker image rm ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}
205 docker image rm ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}
206 docker image rm ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}
207 docker image rm ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}
208 docker image rm ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}
garciadeblas83ca1322018-05-22 18:31:14 +0200209EONG
vijaynag8339ed22019-07-25 17:10:58 +0530210
211 if [ -n "$KUBERNETES" ]; then
212 OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
213 remove_volumes $OSM_NAMESPACE_VOL
214 else
215 remove_volumes $OSM_STACK_NAME
216 remove_network $OSM_STACK_NAME
217 fi
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100218 remove_iptables $OSM_STACK_NAME
Mike Marchettib8420852018-09-13 13:45:06 -0400219 echo "Removing $OSM_DOCKER_WORK_DIR"
220 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR
Adam Israel843764e2019-06-11 10:28:43 -0400221 sg lxd -c "juju destroy-controller --destroy-all-models --yes $OSM_STACK_NAME"
garciadeblas282ff4e2018-07-10 09:16:30 +0200222 fi
223 echo "Some docker images will be kept in case they are used by other docker stacks"
224 echo "To remove them, just run 'docker image prune' in a terminal"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200225 return 0
226}
227
228#Configure NAT rules, based on the current IP addresses of containers
229function nat(){
230 echo -e "\nChecking required packages: iptables-persistent"
231 dpkg -l iptables-persistent &>/dev/null || ! echo -e " Not installed.\nInstalling iptables-persistent requires root privileges" || \
232 sudo DEBIAN_FRONTEND=noninteractive apt-get -yq install iptables-persistent
233 echo -e "\nConfiguring NAT rules"
234 echo -e " Required root privileges"
235 sudo $OSM_DEVOPS/installers/nat_osm
236}
237
238function FATAL(){
239 echo "FATAL error: Cannot install OSM due to \"$1\""
240 exit 1
241}
242
243#Update RO, SO and UI:
244function update(){
245 echo -e "\nUpdating components"
246
247 echo -e " Updating RO"
248 CONTAINER="RO"
249 MDG="RO"
250 INSTALL_FOLDER="/opt/openmano"
251 echo -e " Fetching the repo"
252 lxc exec $CONTAINER -- git -C $INSTALL_FOLDER fetch --all
253 BRANCH=""
254 BRANCH=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
255 [ -z "$BRANCH" ] && FATAL "Could not find the current branch in use in the '$MDG'"
256 CURRENT=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
257 CURRENT_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
258 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
259 # COMMIT_ID either was previously set with -b option, or is an empty string
260 CHECKOUT_ID=$COMMIT_ID
261 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID="tags/$LATEST_STABLE_DEVOPS"
262 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID="$BRANCH"
263 if [[ $CHECKOUT_ID == "tags/"* ]]; then
264 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
265 else
266 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
267 fi
268 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
269 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
270 echo " Nothing to be done."
271 else
272 echo " Update required."
273 lxc exec $CONTAINER -- service osm-ro stop
274 lxc exec $CONTAINER -- git -C /opt/openmano stash
275 lxc exec $CONTAINER -- git -C /opt/openmano pull --rebase
276 lxc exec $CONTAINER -- git -C /opt/openmano checkout $CHECKOUT_ID
277 lxc exec $CONTAINER -- git -C /opt/openmano stash pop
278 lxc exec $CONTAINER -- /opt/openmano/database_utils/migrate_mano_db.sh
279 lxc exec $CONTAINER -- service osm-ro start
280 fi
281 echo
282
283 echo -e " Updating SO and UI"
284 CONTAINER="SO-ub"
285 MDG="SO"
286 INSTALL_FOLDER="" # To be filled in
287 echo -e " Fetching the repo"
288 lxc exec $CONTAINER -- git -C $INSTALL_FOLDER fetch --all
289 BRANCH=""
290 BRANCH=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
291 [ -z "$BRANCH" ] && FATAL "Could not find the current branch in use in the '$MDG'"
292 CURRENT=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
293 CURRENT_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
294 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
295 # COMMIT_ID either was previously set with -b option, or is an empty string
296 CHECKOUT_ID=$COMMIT_ID
297 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID="tags/$LATEST_STABLE_DEVOPS"
298 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID="$BRANCH"
299 if [[ $CHECKOUT_ID == "tags/"* ]]; then
300 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
301 else
302 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
303 fi
304 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
305 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
306 echo " Nothing to be done."
307 else
308 echo " Update required."
309 # Instructions to be added
310 # lxc exec SO-ub -- ...
311 fi
312 echo
313 echo -e "Updating MON Container"
314 CONTAINER="MON"
315 MDG="MON"
316 INSTALL_FOLDER="/root/MON"
317 echo -e " Fetching the repo"
318 lxc exec $CONTAINER -- git -C $INSTALL_FOLDER fetch --all
319 BRANCH=""
320 BRANCH=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
321 [ -z "$BRANCH" ] && FATAL "Could not find the current branch in use in the '$MDG'"
322 CURRENT=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
323 CURRENT_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
324 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
325 # COMMIT_ID either was previously set with -b option, or is an empty string
326 CHECKOUT_ID=$COMMIT_ID
327 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID="tags/$LATEST_STABLE_DEVOPS"
328 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID="$BRANCH"
329 if [[ $CHECKOUT_ID == "tags/"* ]]; then
330 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
331 else
332 REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
333 fi
334 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
335 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
336 echo " Nothing to be done."
337 else
338 echo " Update required."
339 fi
340 echo
341}
342
343function so_is_up() {
344 if [ -n "$1" ]; then
345 SO_IP=$1
346 else
347 SO_IP=`lxc list SO-ub -c 4|grep eth0 |awk '{print $2}'`
348 fi
349 time=0
350 step=5
351 timelength=300
352 while [ $time -le $timelength ]
353 do
354 if [[ `curl -k -X GET https://$SO_IP:8008/api/operational/vcs/info \
355 -H 'accept: application/vnd.yang.data+json' \
356 -H 'authorization: Basic YWRtaW46YWRtaW4=' \
357 -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 ]]
358 then
359 echo "RW.Restconf running....SO is up"
360 return 0
361 fi
362
363 sleep $step
364 echo -n "."
365 time=$((time+step))
366 done
367
368 FATAL "OSM Failed to startup. SO failed to startup"
369}
370
371function vca_is_up() {
372 if [[ `lxc exec VCA -- juju status | grep "osm" | wc -l` -eq 1 ]]; then
373 echo "VCA is up and running"
374 return 0
375 fi
376
377 FATAL "OSM Failed to startup. VCA failed to startup"
378}
379
380function mon_is_up() {
381 if [[ `curl http://$RO_IP:9090/openmano/ | grep "works" | wc -l` -eq 1 ]]; then
382 echo "MON is up and running"
383 return 0
384 fi
385
386 FATAL "OSM Failed to startup. MON failed to startup"
387}
388
389function ro_is_up() {
390 if [ -n "$1" ]; then
391 RO_IP=$1
392 else
393 RO_IP=`lxc list RO -c 4|grep eth0 |awk '{print $2}'`
394 fi
395 time=0
396 step=2
397 timelength=20
398 while [ $time -le $timelength ]; do
399 if [[ `curl http://$RO_IP:9090/openmano/ | grep "works" | wc -l` -eq 1 ]]; then
400 echo "RO is up and running"
401 return 0
402 fi
403 sleep $step
404 echo -n "."
405 time=$((time+step))
406 done
407
408 FATAL "OSM Failed to startup. RO failed to startup"
409}
410
411
412function configure_RO(){
413 . $OSM_DEVOPS/installers/export_ips
414 echo -e " Configuring RO"
415 lxc exec RO -- sed -i -e "s/^\#\?log_socket_host:.*/log_socket_host: $SO_CONTAINER_IP/g" /etc/osm/openmanod.cfg
416 lxc exec RO -- service osm-ro restart
417
418 ro_is_up
419
420 lxc exec RO -- openmano tenant-delete -f osm >/dev/null
421 lxc exec RO -- openmano tenant-create osm > /dev/null
422 lxc exec RO -- sed -i '/export OPENMANO_TENANT=osm/d' .bashrc
423 lxc exec RO -- sed -i '$ i export OPENMANO_TENANT=osm' .bashrc
424 lxc exec RO -- sh -c 'echo "export OPENMANO_TENANT=osm" >> .bashrc'
425}
426
427function configure_VCA(){
428 echo -e " Configuring VCA"
Benjamin Diazba2cca92018-11-08 21:07:15 -0300429 JUJU_PASSWD=$(generate_secret)
garciadeblasd8bc5c32018-05-09 17:37:56 +0200430 echo -e "$JUJU_PASSWD\n$JUJU_PASSWD" | lxc exec VCA -- juju change-user-password
431}
432
433function configure_SOUI(){
434 . $OSM_DEVOPS/installers/export_ips
435 JUJU_CONTROLLER_IP=`lxc exec VCA -- lxc list -c 4 |grep eth0 |awk '{print $2}'`
436 RO_TENANT_ID=`lxc exec RO -- openmano tenant-list osm |awk '{print $1}'`
437
438 echo -e " Configuring MON"
439 #Information to be added about SO socket for logging
440
441 echo -e " Configuring SO"
442 sudo route add -host $JUJU_CONTROLLER_IP gw $VCA_CONTAINER_IP
garciadeblas818fa5a2018-05-10 13:39:10 +0200443 sudo ip route add 10.44.127.0/24 via $VCA_CONTAINER_IP
garciadeblasd8bc5c32018-05-09 17:37:56 +0200444 sudo sed -i "$ i route add -host $JUJU_CONTROLLER_IP gw $VCA_CONTAINER_IP" /etc/rc.local
garciadeblas818fa5a2018-05-10 13:39:10 +0200445 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 +0200446 # make journaling persistent
447 lxc exec SO-ub -- mkdir -p /var/log/journal
448 lxc exec SO-ub -- systemd-tmpfiles --create --prefix /var/log/journal
449 lxc exec SO-ub -- systemctl restart systemd-journald
450
451 echo RIFT_EXTERNAL_ADDRESS=$DEFAULT_IP | lxc exec SO-ub -- tee -a /usr/rift/etc/default/launchpad
452
453 lxc exec SO-ub -- systemctl restart launchpad
454
455 so_is_up $SO_CONTAINER_IP
456
457 #delete existing config agent (could be there on reconfigure)
458 curl -k --request DELETE \
459 --url https://$SO_CONTAINER_IP:8008/api/config/config-agent/account/osmjuju \
460 --header 'accept: application/vnd.yang.data+json' \
461 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
462 --header 'cache-control: no-cache' \
463 --header 'content-type: application/vnd.yang.data+json' &> /dev/null
464
465 result=$(curl -k --request POST \
466 --url https://$SO_CONTAINER_IP:8008/api/config/config-agent \
467 --header 'accept: application/vnd.yang.data+json' \
468 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
469 --header 'cache-control: no-cache' \
470 --header 'content-type: application/vnd.yang.data+json' \
471 --data '{"account": [ { "name": "osmjuju", "account-type": "juju", "juju": { "ip-address": "'$JUJU_CONTROLLER_IP'", "port": "17070", "user": "admin", "secret": "'$JUJU_PASSWD'" } } ]}')
472 [[ $result =~ .*success.* ]] || FATAL "Failed config-agent configuration: $result"
473
474 #R1/R2 config line
475 #result=$(curl -k --request PUT \
476 # --url https://$SO_CONTAINER_IP:8008/api/config/resource-orchestrator \
477 # --header 'accept: application/vnd.yang.data+json' \
478 # --header 'authorization: Basic YWRtaW46YWRtaW4=' \
479 # --header 'cache-control: no-cache' \
480 # --header 'content-type: application/vnd.yang.data+json' \
481 # --data '{ "openmano": { "host": "'$RO_CONTAINER_IP'", "port": "9090", "tenant-id": "'$RO_TENANT_ID'" }, "name": "osmopenmano", "account-type": "openmano" }')
482
483 result=$(curl -k --request PUT \
484 --url https://$SO_CONTAINER_IP:8008/api/config/project/default/ro-account/account \
485 --header 'accept: application/vnd.yang.data+json' \
486 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
487 --header 'cache-control: no-cache' \
488 --header 'content-type: application/vnd.yang.data+json' \
489 --data '{"rw-ro-account:account": [ { "openmano": { "host": "'$RO_CONTAINER_IP'", "port": "9090", "tenant-id": "'$RO_TENANT_ID'"}, "name": "osmopenmano", "ro-account-type": "openmano" }]}')
490 [[ $result =~ .*success.* ]] || FATAL "Failed resource-orchestrator configuration: $result"
491
492 result=$(curl -k --request PATCH \
493 --url https://$SO_CONTAINER_IP:8008/v2/api/config/openidc-provider-config/rw-ui-client/redirect-uri \
494 --header 'accept: application/vnd.yang.data+json' \
495 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
496 --header 'cache-control: no-cache' \
497 --header 'content-type: application/vnd.yang.data+json' \
498 --data '{"redirect-uri": "https://'$DEFAULT_IP':8443/callback" }')
499 [[ $result =~ .*success.* ]] || FATAL "Failed redirect-uri configuration: $result"
500
501 result=$(curl -k --request PATCH \
502 --url https://$SO_CONTAINER_IP:8008/v2/api/config/openidc-provider-config/rw-ui-client/post-logout-redirect-uri \
503 --header 'accept: application/vnd.yang.data+json' \
504 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
505 --header 'cache-control: no-cache' \
506 --header 'content-type: application/vnd.yang.data+json' \
507 --data '{"post-logout-redirect-uri": "https://'$DEFAULT_IP':8443/?api_server=https://'$DEFAULT_IP'" }')
508 [[ $result =~ .*success.* ]] || FATAL "Failed post-logout-redirect-uri configuration: $result"
509
510 lxc exec SO-ub -- tee /etc/network/interfaces.d/60-rift.cfg <<EOF
511auto lo:1
512iface lo:1 inet static
513 address $DEFAULT_IP
514 netmask 255.255.255.255
515EOF
516 lxc exec SO-ub ifup lo:1
517}
518
519#Configure RO, VCA, and SO with the initial configuration:
520# RO -> tenant:osm, logs to be sent to SO
521# VCA -> juju-password
522# SO -> route to Juju Controller, add RO account, add VCA account
523function configure(){
524 #Configure components
525 echo -e "\nConfiguring components"
526 configure_RO
527 configure_VCA
528 configure_SOUI
529}
530
531function install_lxd() {
532 sudo apt-get update
533 sudo apt-get install -y lxd
534 newgrp lxd
535 lxd init --auto
536 lxd waitready
537 lxc network create lxdbr0 ipv4.address=auto ipv4.nat=true ipv6.address=none ipv6.nat=false
538 DEFAULT_INTERFACE=$(route -n | awk '$1~/^0.0.0.0/ {print $8}')
539 DEFAULT_MTU=$(ip addr show $DEFAULT_INTERFACE | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
540 lxc profile device set default eth0 mtu $DEFAULT_MTU
541 #sudo systemctl stop lxd-bridge
542 #sudo systemctl --system daemon-reload
543 #sudo systemctl enable lxd-bridge
544 #sudo systemctl start lxd-bridge
545}
546
547function ask_user(){
548 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
549 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
550 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
551 read -e -p "$1" USER_CONFIRMATION
552 while true ; do
553 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
554 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
555 [ "${USER_CONFIRMATION,,}" == "yes" ] || [ "${USER_CONFIRMATION,,}" == "y" ] && return 0
556 [ "${USER_CONFIRMATION,,}" == "no" ] || [ "${USER_CONFIRMATION,,}" == "n" ] && return 1
557 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
558 done
559}
560
561function launch_container_from_lxd(){
562 export OSM_MDG=$1
563 OSM_load_config
564 export OSM_BASE_IMAGE=$2
565 if ! container_exists $OSM_BUILD_CONTAINER; then
566 CONTAINER_OPTS=""
567 [[ "$OSM_BUILD_CONTAINER_PRIVILEGED" == yes ]] && CONTAINER_OPTS="$CONTAINER_OPTS -c security.privileged=true"
568 [[ "$OSM_BUILD_CONTAINER_ALLOW_NESTED" == yes ]] && CONTAINER_OPTS="$CONTAINER_OPTS -c security.nesting=true"
569 create_container $OSM_BASE_IMAGE $OSM_BUILD_CONTAINER $CONTAINER_OPTS
570 wait_container_up $OSM_BUILD_CONTAINER
571 fi
572}
573
574function install_osmclient(){
575 CLIENT_RELEASE=${RELEASE#"-R "}
576 CLIENT_REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
577 CLIENT_REPOSITORY=${REPOSITORY#"-r "}
garciadeblasd8bc5c32018-05-09 17:37:56 +0200578 CLIENT_REPOSITORY_BASE=${REPOSITORY_BASE#"-u "}
579 key_location=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
580 curl $key_location | sudo apt-key add -
garciadeblas078f5982019-11-27 15:06:06 +0100581 sudo add-apt-repository -y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient IM"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200582 sudo apt-get update
garciadeblas078f5982019-11-27 15:06:06 +0100583 sudo apt-get install -y python3-pip
584 sudo -H LC_ALL=C python3 -m pip install -U pip
garciadeblas1c097b22019-11-29 14:17:12 +0100585 sudo -H LC_ALL=C python3 -m pip install -U python-magic pyangbind
garciadeblasda89ee72019-11-28 02:19:59 +0100586 sudo apt-get install -y python3-osm-im python3-osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +0200587 #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
588 #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
589 #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
590 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME=`lxc list | awk '($2=="SO-ub"){print $6}'`
591 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME=`lxc list | awk '($2=="RO"){print $6}'`
garciadeblasd8bc5c32018-05-09 17:37:56 +0200592 echo -e "\nOSM client installed"
garciadeblasc3226982018-11-27 11:32:47 +0100593 if [ -z "$INSTALL_LIGHTWEIGHT" ]; then
594 echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
595 echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
596 echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
597 else
598 echo -e "OSM client assumes that OSM host is running in localhost (127.0.0.1)."
599 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:"
600 echo " export OSM_HOSTNAME=<OSM_host>"
601 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +0200602 return 0
603}
604
605function install_from_lxdimages(){
606 LXD_RELEASE=${RELEASE#"-R "}
607 if [ -n "$LXD_REPOSITORY_PATH" ]; then
608 LXD_IMAGE_DIR="$LXD_REPOSITORY_PATH"
609 else
610 LXD_IMAGE_DIR="$(mktemp -d -q --tmpdir "osmimages.XXXXXX")"
611 trap 'rm -rf "$LXD_IMAGE_DIR"' EXIT
612 fi
613 echo -e "\nDeleting previous lxd images if they exist"
614 lxc image show osm-ro &>/dev/null && lxc image delete osm-ro
615 lxc image show osm-vca &>/dev/null && lxc image delete osm-vca
616 lxc image show osm-soui &>/dev/null && lxc image delete osm-soui
617 echo -e "\nImporting osm-ro"
618 [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-ro.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-ro.tar.gz
619 lxc image import $LXD_IMAGE_DIR/osm-ro.tar.gz --alias osm-ro
620 rm -f $LXD_IMAGE_DIR/osm-ro.tar.gz
621 echo -e "\nImporting osm-vca"
622 [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-vca.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-vca.tar.gz
623 lxc image import $LXD_IMAGE_DIR/osm-vca.tar.gz --alias osm-vca
624 rm -f $LXD_IMAGE_DIR/osm-vca.tar.gz
625 echo -e "\nImporting osm-soui"
626 [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-soui.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-soui.tar.gz
627 lxc image import $LXD_IMAGE_DIR/osm-soui.tar.gz --alias osm-soui
628 rm -f $LXD_IMAGE_DIR/osm-soui.tar.gz
629 launch_container_from_lxd RO osm-ro
630 ro_is_up && track RO
631 launch_container_from_lxd VCA osm-vca
632 vca_is_up && track VCA
633 launch_container_from_lxd MON osm-mon
634 mon_is_up && track MON
635 launch_container_from_lxd SO osm-soui
636 #so_is_up && track SOUI
637 track SOUI
638}
639
640function install_docker_ce() {
641 # installs and configures Docker CE
642 echo "Installing Docker CE ..."
643 sudo apt-get -qq update
644 sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
645 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
646 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
647 sudo apt-get -qq update
648 sudo apt-get install -y docker-ce
649 echo "Adding user to group 'docker'"
650 sudo groupadd -f docker
651 sudo usermod -aG docker $USER
garciadeblasd8bc5c32018-05-09 17:37:56 +0200652 sleep 2
653 sudo service docker restart
654 echo "... restarted Docker service"
garciadeblas67ce97c2018-05-18 10:22:09 +0200655 sg docker -c "docker version" || FATAL "Docker installation failed"
656 echo "... Docker CE installation done"
657 return 0
garciadeblasd8bc5c32018-05-09 17:37:56 +0200658}
659
660function install_docker_compose() {
661 # installs and configures docker-compose
662 echo "Installing Docker Compose ..."
663 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
664 sudo chmod +x /usr/local/bin/docker-compose
665 echo "... Docker Compose installation done"
666}
667
668function install_juju() {
669 echo "Installing juju"
Adam Israel41587482019-11-06 10:45:43 -0500670 sudo snap install juju --classic
garciadeblasd41f5482018-05-25 10:25:06 +0200671 [ -z "$INSTALL_NOLXD" ] && sudo dpkg-reconfigure -p medium lxd
garciadeblasd8bc5c32018-05-09 17:37:56 +0200672 echo "Finished installation of juju"
Mike Marchettib8420852018-09-13 13:45:06 -0400673 return 0
674}
675
676function juju_createcontroller() {
Adam Israel8232e562018-11-21 16:47:45 -0500677 if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then
Mike Marchettib8420852018-09-13 13:45:06 -0400678 # Not found created, create the controller
679 sg lxd -c "juju bootstrap --bootstrap-series=xenial localhost $OSM_STACK_NAME"
680 fi
Adam Israel8232e562018-11-21 16:47:45 -0500681 [ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200682}
683
Adam Israel5ddc97f2019-09-03 18:11:12 -0400684function juju_createproxy() {
Adam Israel43fb44d2019-11-06 10:37:25 -0500685 echo -e "\nChecking required packages: iptables-persistent"
686 dpkg -l iptables-persistent &>/dev/null || ! echo -e " Not installed.\nInstalling iptables-persistent requires root privileges" || \
687 sudo DEBIAN_FRONTEND=noninteractive apt-get -yq install iptables-persistent
688
Adam Israel5ddc97f2019-09-03 18:11:12 -0400689 if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
690 sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
691 sudo netfilter-persistent save
692 fi
693}
694
garciadeblasd8bc5c32018-05-09 17:37:56 +0200695function generate_docker_images() {
696 echo "Pulling and generating docker images"
Michael Marchettiee374142018-08-02 22:47:16 +0200697 _build_from=$COMMIT_ID
698 [ -z "$_build_from" ] && _build_from="master"
699
700 echo "OSM Docker images generated from $_build_from"
701
Mike Marchettib8420852018-09-13 13:45:06 -0400702 BUILD_ARGS+=(--build-arg REPOSITORY="$REPOSITORY")
703 BUILD_ARGS+=(--build-arg RELEASE="$RELEASE")
704 BUILD_ARGS+=(--build-arg REPOSITORY_KEY="$REPOSITORY_KEY")
705 BUILD_ARGS+=(--build-arg REPOSITORY_BASE="$REPOSITORY_BASE")
lavado60216242018-10-10 23:44:28 +0200706
garciadeblas0e596bc2018-05-28 16:04:42 +0200707 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q KAFKA ; then
708 sg docker -c "docker pull wurstmeister/zookeeper" || FATAL "cannot get zookeeper docker image"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300709 sg docker -c "docker pull wurstmeister/kafka:${KAFKA_TAG}" || FATAL "cannot get kafka docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200710 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400711
garciadeblas0e596bc2018-05-28 16:04:42 +0200712 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MONGO ; then
713 sg docker -c "docker pull mongo" || FATAL "cannot get mongo docker image"
714 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400715
lavado60216242018-10-10 23:44:28 +0200716 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
717 sg docker -c "docker pull prom/prometheus:${PROMETHEUS_TAG}" || FATAL "cannot get prometheus docker image"
718 fi
719
garciadeblas4a83e6e2018-12-04 14:55:09 +0100720 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI || echo $TO_REBUILD | grep -q KEYSTONE-DB ; then
lavado9a8df7c2018-10-24 09:35:34 -0500721 sg docker -c "docker pull mariadb:${KEYSTONEDB_TAG}" || FATAL "cannot get keystone-db docker image"
722 fi
723
garciadeblas4a83e6e2018-12-04 14:55:09 +0100724 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
725 sg docker -c "docker pull mysql:5" || FATAL "cannot get mysql docker image"
726 fi
727
Mike Marchettida8a9c42018-10-01 15:25:15 -0400728 if [ -n "$PULL_IMAGES" ]; then
729 sg docker -c "docker pull ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}" || FATAL "cannot pull MON docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400730 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MON ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200731 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/MON
732 git -C ${LWTEMPDIR}/MON checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100733 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 -0500734 fi
735
736 if [ -n "$PULL_IMAGES" ]; then
737 sg docker -c "docker pull ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}" || FATAL "cannot pull POL docker image"
garciadeblas4a83e6e2018-12-04 14:55:09 +0100738 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q POL ; then
lavado9a8df7c2018-10-24 09:35:34 -0500739 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/POL
740 git -C ${LWTEMPDIR}/POL checkout ${COMMIT_ID}
garciadeblas4a83e6e2018-12-04 14:55:09 +0100741 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 +0200742 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400743
744 if [ -n "$PULL_IMAGES" ]; then
745 sg docker -c "docker pull ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}" || FATAL "cannot pull NBI docker image"
lavado9a8df7c2018-10-24 09:35:34 -0500746 sg docker -c "docker pull ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}" || FATAL "cannot pull KEYSTONE docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400747 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200748 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NBI
749 git -C ${LWTEMPDIR}/NBI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100750 sg docker -c "docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t ${DOCKER_USER}/nbi --no-cache" || FATAL "cannot build NBI docker image"
751 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 +0200752 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400753
754 if [ -n "$PULL_IMAGES" ]; then
755 sg docker -c "docker pull ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}" || FATAL "cannot pull RO docker image"
756 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200757 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/RO
758 git -C ${LWTEMPDIR}/RO checkout ${COMMIT_ID}
tierno5cc8ac32019-11-25 10:33:25 +0000759 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 +0200760 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400761
762 if [ -n "$PULL_IMAGES" ]; then
763 sg docker -c "docker pull ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}" || FATAL "cannot pull LCM RO docker image"
764 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LCM ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200765 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LCM
766 git -C ${LWTEMPDIR}/LCM checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100767 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 +0200768 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400769
770 if [ -n "$PULL_IMAGES" ]; then
771 sg docker -c "docker pull ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}" || FATAL "cannot pull light-ui docker image"
772 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-UI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200773 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LW-UI
774 git -C ${LWTEMPDIR}/LW-UI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100775 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 +0200776 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400777
778 if [ -n "$PULL_IMAGES" ]; then
779 sg docker -c "docker pull ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}" || FATAL "cannot pull osmclient docker image"
780 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-osmclient; then
garciadeblas0d45bc82018-11-19 14:25:13 +0100781 sg docker -c "docker build -t ${DOCKER_USER}/osmclient ${BUILD_ARGS[@]} -f $OSM_DEVOPS/docker/osmclient ."
Mike Marchettib8420852018-09-13 13:45:06 -0400782 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +0200783 echo "Finished generation of docker images"
784}
785
garciadeblas5b857d32018-05-24 18:37:58 +0200786function cmp_overwrite() {
787 file1="$1"
788 file2="$2"
789 if ! $(cmp "${file1}" "${file2}" >/dev/null 2>&1); then
790 if [ -f "${file2}" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400791 ask_user "The file ${file2} already exists. Overwrite (y/N)? " n && cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200792 else
Mike Marchettib8420852018-09-13 13:45:06 -0400793 cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200794 fi
795 fi
796}
797
garciadeblasd8bc5c32018-05-09 17:37:56 +0200798function generate_docker_env_files() {
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200799 echo "Doing a backup of existing env files"
800 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
801 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
802 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
803 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lwui.env{,~}
804 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
805 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
806 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
807 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
808 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
809
garciadeblasd8bc5c32018-05-09 17:37:56 +0200810 echo "Generating docker env files"
vijaynag8339ed22019-07-25 17:10:58 +0530811 if [ -n "$KUBERNETES" ]; then
812 #Kubernetes resources
813 $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
814 else
815 # Docker-compose
816 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200817
vijaynag8339ed22019-07-25 17:10:58 +0530818 # Prometheus
819 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus.yml
820 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200821
Benjamin Diazba2cca92018-11-08 21:07:15 -0300822 # LCM
823 if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
824 echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
825 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400826
Benjamin Diazba2cca92018-11-08 21:07:15 -0300827 if ! grep -Fq "OSMLCM_VCA_HOST" $OSM_DOCKER_WORK_DIR/lcm.env; then
828 echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
829 else
830 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_HOST.*|OSMLCM_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/lcm.env
831 fi
832
833 if ! grep -Fq "OSMLCM_VCA_SECRET" $OSM_DOCKER_WORK_DIR/lcm.env; then
834 echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
835 else
836 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_SECRET.*|OSMLCM_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/lcm.env
837 fi
838
garciadeblasaa3ddf42019-04-04 19:04:32 +0200839 if ! grep -Fq "OSMLCM_VCA_PUBKEY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas6f0f4662019-06-11 17:47:14 +0200840 echo "OSMLCM_VCA_PUBKEY=\"${OSM_VCA_PUBKEY}\"" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasaa3ddf42019-04-04 19:04:32 +0200841 else
garciadeblas6f0f4662019-06-11 17:47:14 +0200842 $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 +0200843 fi
844
Adam Israelbe7676a2019-10-02 16:10:53 -0400845 if ! grep -Fq "OSMLCM_VCA_CACERT" $OSM_DOCKER_WORK_DIR/lcm.env; then
846 echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
847 else
848 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CACERT.*|OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/lcm.env
849 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -0300850
Adam Israel5ddc97f2019-09-03 18:11:12 -0400851 if ! grep -Fq "OSMLCM_VCA_APIPROXY" $OSM_DOCKER_WORK_DIR/lcm.env; then
852 echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
853 else
854 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_APIPROXY.*|OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
855 fi
856
Benjamin Diazba2cca92018-11-08 21:07:15 -0300857 # RO
858 MYSQL_ROOT_PASSWORD=$(generate_secret)
Mike Marchettib8420852018-09-13 13:45:06 -0400859 if [ ! -f $OSM_DOCKER_WORK_DIR/ro-db.env ]; then
860 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro-db.env
garciadeblas5b857d32018-05-24 18:37:58 +0200861 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400862 if [ ! -f $OSM_DOCKER_WORK_DIR/ro.env ]; then
863 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro.env
garciadeblas5b857d32018-05-24 18:37:58 +0200864 fi
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100865
Benjamin Diazba2cca92018-11-08 21:07:15 -0300866 # Keystone
Benjamin Diazba2cca92018-11-08 21:07:15 -0300867 KEYSTONE_DB_PASSWORD=$(generate_secret)
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100868 SERVICE_PASSWORD=$(generate_secret)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100869 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone-db.env ]; then
870 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone-db.env
871 fi
872 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone.env ]; then
873 echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100874 echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100875 echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100876 fi
877
Benjamin Diazba2cca92018-11-08 21:07:15 -0300878 # NBI
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100879 if [ ! -f $OSM_DOCKER_WORK_DIR/nbi.env ]; then
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100880 echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/nbi.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300881 echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/nbi.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100882 fi
883
Benjamin Diazba2cca92018-11-08 21:07:15 -0300884 # MON
885 if [ ! -f $OSM_DOCKER_WORK_DIR/mon.env ]; then
886 echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diaz9261c662019-02-25 17:18:51 -0300887 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 -0300888 fi
889
890 if ! grep -Fq "OS_NOTIFIER_URI" $OSM_DOCKER_WORK_DIR/mon.env; then
891 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
892 else
893 $WORKDIR_SUDO sed -i "s|OS_NOTIFIER_URI.*|OS_NOTIFIER_URI=http://$DEFAULT_IP:8662|g" $OSM_DOCKER_WORK_DIR/mon.env
894 fi
895
896 if ! grep -Fq "OSMMON_VCA_HOST" $OSM_DOCKER_WORK_DIR/mon.env; then
897 echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
898 else
899 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_HOST.*|OSMMON_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/mon.env
900 fi
901
902 if ! grep -Fq "OSMMON_VCA_SECRET" $OSM_DOCKER_WORK_DIR/mon.env; then
903 echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
904 else
905 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_SECRET.*|OSMMON_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/mon.env
906 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400907
Benjamin Diaz04560882019-02-26 17:25:07 -0300908 # POL
909 if [ ! -f $OSM_DOCKER_WORK_DIR/pol.env ]; then
910 echo "OSMPOL_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/pol" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/pol.env
911 fi
912
Benjamin Diaz4088a9b2019-05-21 15:11:49 -0300913 # LW-UI
914 if [ ! -f $OSM_DOCKER_WORK_DIR/lwui.env ]; then
915 echo "OSMUI_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/lwui" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lwui.env
916 fi
917
garciadeblasd8bc5c32018-05-09 17:37:56 +0200918 echo "Finished generation of docker env files"
919}
920
Mike Marchettib8420852018-09-13 13:45:06 -0400921function generate_osmclient_script () {
Mike Marchetti46d6efe2018-10-23 16:20:16 -0400922 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 -0400923 $WORKDIR_SUDO chmod +x "$OSM_DOCKER_WORK_DIR/osm"
924 echo "osmclient sidecar container can be found at: $OSM_DOCKER_WORK_DIR/osm"
925}
926
vijaynag8339ed22019-07-25 17:10:58 +0530927#installs kubernetes packages
928function install_kube() {
929 sudo apt-get update && sudo apt-get install -y apt-transport-https
930 curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
931 sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
932 sudo apt-get update
933 echo "Installing Kubernetes Packages ..."
934 sudo apt-get install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
935}
936
937#initializes kubernetes control plane
938function init_kubeadm() {
939 sudo swapoff -a
940 sudo kubeadm init --config $1
941 sleep 5
942}
943
944function kube_config_dir() {
945 [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes"
946 mkdir -p $HOME/.kube
947 sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
948 sudo chown $(id -u):$(id -g) $HOME/.kube/config
949}
950
951#deploys flannel as daemonsets
952function deploy_cni_provider() {
953 CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")"
954 trap 'rm -rf "${CNI_DIR}"' EXIT
955 wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR
956 kubectl apply -f $CNI_DIR
957 [ $? -ne 0 ] && FATAL "Cannot Install Flannel"
958}
959
960#creates secrets from env files which will be used by containers
961function kube_secrets(){
962 kubectl create ns $OSM_STACK_NAME
963 kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env
964 kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env
965 kubectl create secret generic nbi-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/nbi.env
966 kubectl create secret generic ro-db-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro-db.env
967 kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env
968 kubectl create secret generic keystone-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/keystone.env
969 kubectl create secret generic lwui-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lwui.env
970 kubectl create secret generic pol-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/pol.env
971}
972
973#deploys osm pods and services
974function deploy_osm_services() {
975 K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}')
976 kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
977 sleep 5
978 kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR
979}
980
981function parse_yaml() {
982 osm_services="nbi lcm ro pol mon light-ui keystone"
983 TAG=$1
984 for osm in $osm_services; do
985 $WORKDIR_SUDO sed -i "s/opensourcemano\/$osm:.*/opensourcemano\/$osm:$TAG/g" $OSM_K8S_WORK_DIR/$osm.yaml
986 done
987}
988
989function namespace_vol() {
990 osm_services="nbi lcm ro pol mon kafka mongo mysql"
991 for osm in $osm_services; do
992 $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml
993 done
994}
995
garciadeblasa3e26612018-05-30 17:58:55 +0200996function init_docker_swarm() {
garciadeblasd8bc5c32018-05-09 17:37:56 +0200997 if [ "${DEFAULT_MTU}" != "1500" ]; then
998 DOCKER_NETS=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
999 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";}'`
1000 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"
1001 fi
garciadeblas5b857d32018-05-24 18:37:58 +02001002 sg docker -c "docker swarm init --advertise-addr ${DEFAULT_IP}"
garciadeblasa3e26612018-05-30 17:58:55 +02001003 return 0
1004}
1005
Mike Marchettib8420852018-09-13 13:45:06 -04001006function create_docker_network() {
1007 echo "creating network"
1008 sg docker -c "docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} net${OSM_STACK_NAME}"
1009 echo "creating network DONE"
1010}
1011
garciadeblasa3e26612018-05-30 17:58:55 +02001012function deploy_lightweight() {
Mike Marchettib8420852018-09-13 13:45:06 -04001013
garciadeblasa3e26612018-05-30 17:58:55 +02001014 echo "Deploying lightweight build"
Mike Marchettib8420852018-09-13 13:45:06 -04001015 OSM_NBI_PORT=9999
1016 OSM_RO_PORT=9090
Eduardo Sousa09a1e972018-09-21 11:06:32 +01001017 OSM_KEYSTONE_PORT=5000
Mike Marchettib8420852018-09-13 13:45:06 -04001018 OSM_UI_PORT=80
lavadoafa54c72018-10-05 09:28:28 -05001019 OSM_MON_PORT=8662
lavado60216242018-10-10 23:44:28 +02001020 OSM_PROM_PORT=9090
1021 OSM_PROM_HOSTPORT=9091
Eduardo Sousae00c8f92018-10-08 10:36:17 +01001022 [ -n "$INSTALL_ELK" ] && OSM_ELK_PORT=5601
1023 [ -n "$INSTALL_PERFMON" ] && OSM_PM_PORT=3000
lavado60216242018-10-10 23:44:28 +02001024
Mike Marchettib8420852018-09-13 13:45:06 -04001025 if [ -n "$NO_HOST_PORTS" ]; then
1026 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT)
1027 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +01001028 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001029 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -05001030 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +02001031 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +01001032 [ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT)
1033 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001034 else
1035 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT:$OSM_NBI_PORT)
1036 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT:$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +01001037 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT:$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001038 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT:$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -05001039 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT:$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +02001040 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_HOSTPORT:$OSM_PROM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +01001041 [ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT:$OSM_PM_PORT)
1042 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT:$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001043 fi
1044 echo "export ${OSM_PORTS[@]}" | $WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/osm_ports.sh
1045 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 -04001046 echo "export TAG=${OSM_DOCKER_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Mike Marchettida8a9c42018-10-01 15:25:15 -04001047 echo "export DOCKER_USER=${DOCKER_USER}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -03001048 echo "export KAFKA_TAG=${KAFKA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado60216242018-10-10 23:44:28 +02001049 echo "export PROMETHEUS_TAG=${PROMETHEUS_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado9a8df7c2018-10-24 09:35:34 -05001050 echo "export KEYSTONEDB_TAG=${KEYSTONEDB_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -03001051
Mike Marchettib8420852018-09-13 13:45:06 -04001052 pushd $OSM_DOCKER_WORK_DIR
beierl63229a22019-05-30 14:42:04 -04001053 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 -04001054 popd
1055
garciadeblasd8bc5c32018-05-09 17:37:56 +02001056 echo "Finished deployment of lightweight build"
1057}
1058
garciadeblas6c66abf2018-05-16 14:46:19 +02001059function deploy_elk() {
garciadeblase2aebfe2018-07-06 14:11:20 +02001060 echo "Pulling docker images for ELK"
lavado53eb8f52018-11-16 12:58:23 -05001061 sg docker -c "docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:${ELASTIC_VERSION}" || FATAL "cannot get elasticsearch docker image"
1062 sg docker -c "docker pull docker.elastic.co/beats/metricbeat:${ELASTIC_VERSION}" || FATAL "cannot get metricbeat docker image"
1063 sg docker -c "docker pull docker.elastic.co/beats/filebeat:${ELASTIC_VERSION}" || FATAL "cannot get filebeat docker image"
1064 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 -05001065 sg docker -c "docker pull bobrik/curator:${ELASTIC_CURATOR_VERSION}" || FATAL "cannot get curator docker image"
garciadeblase2aebfe2018-07-06 14:11:20 +02001066 echo "Finished pulling elk docker images"
Mike Marchettib8420852018-09-13 13:45:06 -04001067 $WORKDIR_SUDO mkdir -p "$OSM_DOCKER_WORK_DIR/osm_elk"
1068 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_elk/* $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas5b857d32018-05-24 18:37:58 +02001069 remove_stack osm_elk
garciadeblas6c66abf2018-05-16 14:46:19 +02001070 echo "Deploying ELK stack"
Mike Marchettib8420852018-09-13 13:45:06 -04001071 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 +02001072 echo "Waiting for ELK stack to be up and running"
1073 time=0
garciadeblase2aebfe2018-07-06 14:11:20 +02001074 step=5
1075 timelength=40
garciadeblas6c66abf2018-05-16 14:46:19 +02001076 elk_is_up=1
1077 while [ $time -le $timelength ]; do
garciadeblase2aebfe2018-07-06 14:11:20 +02001078 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 +02001079 elk_is_up=0
1080 break
1081 fi
1082 sleep $step
1083 time=$((time+step))
1084 done
1085 if [ $elk_is_up -eq 0 ]; then
1086 echo "ELK is up and running. Trying to create index pattern..."
1087 #Create index pattern
1088 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -05001089 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
1090 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001091 #Make it the default index
garciadeblase2aebfe2018-07-06 14:11:20 +02001092 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +02001093 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -05001094 -d"{\"value\":\"filebeat-*\"}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001095 else
1096 echo "Cannot connect to Kibana to create index pattern."
1097 echo "Once Kibana is running, you can use the following instructions to create index pattern:"
1098 echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -05001099 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
1100 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}"'
garciadeblas6c66abf2018-05-16 14:46:19 +02001101 echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +02001102 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -05001103 -d"{\"value\":\"filebeat-*\"}"'
garciadeblas6c66abf2018-05-16 14:46:19 +02001104 fi
1105 echo "Finished deployment of ELK stack"
1106 return 0
1107}
1108
1109function deploy_perfmon() {
lavado62591442018-10-23 16:37:01 -05001110 echo "Pulling docker images for PM (Grafana)"
garciadeblase2aebfe2018-07-06 14:11:20 +02001111 sg docker -c "docker pull grafana/grafana" || FATAL "cannot get grafana docker image"
1112 echo "Finished pulling PM docker images"
Mike Marchettib8420852018-09-13 13:45:06 -04001113 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/osm_metrics
1114 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_metrics/*.yml $OSM_DOCKER_WORK_DIR/osm_metrics
1115 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_metrics/*.json $OSM_DOCKER_WORK_DIR/osm_metrics
garciadeblas5b857d32018-05-24 18:37:58 +02001116 remove_stack osm_metrics
lavado62591442018-10-23 16:37:01 -05001117 echo "Deploying PM stack (Grafana)"
Mike Marchettib8420852018-09-13 13:45:06 -04001118 sg docker -c "OSM_NETWORK=net${OSM_STACK_NAME} docker stack deploy -c $OSM_DOCKER_WORK_DIR/osm_metrics/docker-compose.yml osm_metrics"
garciadeblas6c66abf2018-05-16 14:46:19 +02001119 echo "Finished deployment of PM stack"
1120 return 0
1121}
1122
garciadeblasd8bc5c32018-05-09 17:37:56 +02001123function install_lightweight() {
garciadeblas0d45bc82018-11-19 14:25:13 +01001124 [ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
vijaynag8339ed22019-07-25 17:10:58 +05301125 [ -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 -04001126 [ ! -d "$OSM_DOCKER_WORK_DIR" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR
vijaynag8339ed22019-07-25 17:10:58 +05301127 [ -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 -04001128
garciadeblas183e5802018-12-13 18:20:54 +01001129 track checkingroot
garciadeblasd13a8aa2018-05-18 15:24:51 +02001130 [ "$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 +01001131 track noroot
vijaynag8339ed22019-07-25 17:10:58 +05301132
1133 if [ -n "$KUBERNETES" ]; then
1134 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
1135 1. Install and configure LXD
1136 2. Install juju
1137 3. Install docker CE
1138 4. Disable swap space
1139 5. Install and initialize Kubernetes
1140 as pre-requirements.
1141 Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
1142
1143 else
1144 [ -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
1145 fi
garciadeblasfae5e972018-06-12 18:27:11 +02001146 track proceed
vijaynag8339ed22019-07-25 17:10:58 +05301147
garciadeblasd8bc5c32018-05-09 17:37:56 +02001148 echo "Installing lightweight build of OSM"
1149 LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
1150 trap 'rm -rf "${LWTEMPDIR}"' EXIT
1151 DEFAULT_IF=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
garciadeblas8cd60772018-06-02 08:38:17 +02001152 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001153 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
garciadeblas8cd60772018-06-02 08:38:17 +02001154 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001155 DEFAULT_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
Mike Marchettib8420852018-09-13 13:45:06 -04001156
1157 # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to
lavadoe07b1642018-10-25 10:58:34 -05001158 if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ]; then
garciadeblasbd925e42018-06-14 14:32:12 +02001159 need_packages_lw="lxd snapd"
garciadeblasd41f5482018-05-25 10:25:06 +02001160 echo -e "Checking required packages: $need_packages_lw"
1161 dpkg -l $need_packages_lw &>/dev/null \
1162 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1163 || sudo apt-get update \
1164 || FATAL "failed to run apt-get update"
1165 dpkg -l $need_packages_lw &>/dev/null \
1166 || ! echo -e "Installing $need_packages_lw requires root privileges." \
1167 || sudo apt-get install -y $need_packages_lw \
1168 || FATAL "failed to install $need_packages_lw"
1169 fi
garciadeblasfae5e972018-06-12 18:27:11 +02001170 track prereqok
Mike Marchettib8420852018-09-13 13:45:06 -04001171
vijaynag8339ed22019-07-25 17:10:58 +05301172 [ -z "$INSTALL_NOJUJU" ] && install_juju
garciadeblas183e5802018-12-13 18:20:54 +01001173 track juju_install
vijaynag8339ed22019-07-25 17:10:58 +05301174
lavadoe07b1642018-10-25 10:58:34 -05001175 if [ -z "$OSM_VCA_HOST" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -04001176 juju_createcontroller
lavadoe07b1642018-10-25 10:58:34 -05001177 OSM_VCA_HOST=`sg lxd -c "juju show-controller $OSM_STACK_NAME"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
1178 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
Mike Marchettib8420852018-09-13 13:45:06 -04001179 fi
garciadeblas183e5802018-12-13 18:20:54 +01001180 track juju_controller
vijaynag8339ed22019-07-25 17:10:58 +05301181
lavadoe07b1642018-10-25 10:58:34 -05001182 if [ -z "$OSM_VCA_SECRET" ]; then
1183 OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME)
1184 [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
Mike Marchettib8420852018-09-13 13:45:06 -04001185 fi
garciadeblasaa3ddf42019-04-04 19:04:32 +02001186 if [ -z "$OSM_VCA_PUBKEY" ]; then
1187 OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
1188 [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
1189 fi
Adam Israel5ddc97f2019-09-03 18:11:12 -04001190 if [ -z "$OSM_VCA_APIPROXY" ]; then
1191 OSM_VCA_APIPROXY=$DEFAULT_IP
1192 [ -z "$OSM_VCA_APIPROXY" ] && FATAL "Cannot obtain juju api proxy"
1193 fi
1194 juju_createproxy
1195
Adam Israelbe7676a2019-10-02 16:10:53 -04001196 if [ -z "$OSM_VCA_CACERT" ]; then
1197 OSM_VCA_CACERT=$(juju controllers --format json | jq -r '.controllers["osm"]["ca-cert"]' | base64 | tr -d \\n)
1198 [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
1199 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -03001200 if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
1201 OSM_DATABASE_COMMONKEY=$(generate_secret)
1202 [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret"
1203 fi
garciadeblas6c66abf2018-05-16 14:46:19 +02001204 track juju
vijaynag8339ed22019-07-25 17:10:58 +05301205
garciadeblasa3e26612018-05-30 17:58:55 +02001206 [ -n "$INSTALL_NODOCKER" ] || install_docker_ce
garciadeblas6c66abf2018-05-16 14:46:19 +02001207 track docker_ce
vijaynag8339ed22019-07-25 17:10:58 +05301208
1209 #Installs Kubernetes and deploys osm services
1210 if [ -n "$KUBERNETES" ]; then
1211 install_kube
1212 track install_k8s
1213 init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
1214 kube_config_dir
1215 track init_k8s
1216 else
1217 #install_docker_compose
1218 [ -n "$INSTALL_NODOCKER" ] || init_docker_swarm
1219 track docker_swarm
1220 fi
1221
Mike Marchettib8420852018-09-13 13:45:06 -04001222 [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
garciadeblas6c66abf2018-05-16 14:46:19 +02001223 track docker_build
vijaynag8339ed22019-07-25 17:10:58 +05301224
garciadeblasd8bc5c32018-05-09 17:37:56 +02001225 generate_docker_env_files
Mike Marchettib8420852018-09-13 13:45:06 -04001226
vijaynag8339ed22019-07-25 17:10:58 +05301227 if [ -n "$KUBERNETES" ]; then
1228 #remove old namespace
1229 remove_k8s_namespace $OSM_STACK_NAME
1230 deploy_cni_provider
1231 kube_secrets
1232 [ ! $OSM_DOCKER_TAG == "latest" ] && parse_yaml $OSM_DOCKER_TAG
1233 namespace_vol
1234 deploy_osm_services
1235 track deploy_osm_services_k8s
1236 else
1237 # remove old stack
1238 remove_stack $OSM_STACK_NAME
1239 create_docker_network
1240 deploy_lightweight
1241 generate_osmclient_script
1242 track docker_deploy
1243 [ -n "$INSTALL_VIMEMU" ] && install_vimemu && track vimemu
1244 [ -n "$INSTALL_ELK" ] && deploy_elk && track elk
1245 [ -n "$INSTALL_PERFMON" ] && deploy_perfmon && track perfmon
1246 fi
1247
Mike Marchettib8420852018-09-13 13:45:06 -04001248 [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
garciadeblas6c66abf2018-05-16 14:46:19 +02001249 track osmclient
vijaynag8339ed22019-07-25 17:10:58 +05301250
garciadeblasb6a0bf12019-09-10 21:08:21 +02001251 wget -q -O- https://osm-download.etsi.org/ftp/osm-6.0-six/README2.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001252 track end
garciadeblasd8bc5c32018-05-09 17:37:56 +02001253 return 0
1254}
1255
1256function install_vimemu() {
peusterm76353e42018-05-08 13:56:05 +02001257 echo "\nInstalling vim-emu"
1258 EMUTEMPDIR="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX")"
1259 trap 'rm -rf "${EMUTEMPDIR}"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001260 # clone vim-emu repository (attention: branch is currently master only)
1261 echo "Cloning vim-emu repository ..."
peusterm76353e42018-05-08 13:56:05 +02001262 git clone https://osm.etsi.org/gerrit/osm/vim-emu.git $EMUTEMPDIR
garciadeblasd8bc5c32018-05-09 17:37:56 +02001263 # build vim-emu docker
1264 echo "Building vim-emu Docker container..."
Mike Marchettib8420852018-09-13 13:45:06 -04001265
1266 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 +02001267 # start vim-emu container as daemon
1268 echo "Starting vim-emu Docker container 'vim-emu' ..."
peusterm76353e42018-05-08 13:56:05 +02001269 if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
1270 # in lightweight mode, the emulator needs to be attached to netOSM
Mike Marchettib8420852018-09-13 13:45:06 -04001271 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 +02001272 else
1273 # classic build mode
Mike Marchettib8420852018-09-13 13:45:06 -04001274 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 +02001275 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001276 echo "Waiting for 'vim-emu' container to start ..."
1277 sleep 5
Mike Marchettib8420852018-09-13 13:45:06 -04001278 export VIMEMU_HOSTNAME=$(sg docker -c "docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001279 echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
peusterm76353e42018-05-08 13:56:05 +02001280 # print vim-emu connection info
1281 echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001282 echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
peusterm76353e42018-05-08 13:56:05 +02001283 echo -e "To add the emulated VIM to OSM you should do:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001284 echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
1285}
1286
1287function dump_vars(){
1288 echo "DEVELOP=$DEVELOP"
1289 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
1290 echo "UNINSTALL=$UNINSTALL"
1291 echo "NAT=$NAT"
1292 echo "UPDATE=$UPDATE"
1293 echo "RECONFIGURE=$RECONFIGURE"
1294 echo "TEST_INSTALLER=$TEST_INSTALLER"
1295 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
1296 echo "INSTALL_LXD=$INSTALL_LXD"
1297 echo "INSTALL_FROM_LXDIMAGES=$INSTALL_FROM_LXDIMAGES"
1298 echo "LXD_REPOSITORY_BASE=$LXD_REPOSITORY_BASE"
1299 echo "LXD_REPOSITORY_PATH=$LXD_REPOSITORY_PATH"
1300 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
garciadeblas6c66abf2018-05-16 14:46:19 +02001301 echo "INSTALL_ONLY=$INSTALL_ONLY"
1302 echo "INSTALL_ELK=$INSTALL_ELK"
1303 echo "INSTALL_PERFMON=$INSTALL_PERFMON"
garciadeblas0e596bc2018-05-28 16:04:42 +02001304 echo "TO_REBUILD=$TO_REBUILD"
garciadeblasd41f5482018-05-25 10:25:06 +02001305 echo "INSTALL_NOLXD=$INSTALL_NOLXD"
garciadeblasa3e26612018-05-30 17:58:55 +02001306 echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
garciadeblas0d45bc82018-11-19 14:25:13 +01001307 echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001308 echo "RELEASE=$RELEASE"
1309 echo "REPOSITORY=$REPOSITORY"
1310 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
1311 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
1312 echo "NOCONFIGURE=$NOCONFIGURE"
garciadeblas0d45bc82018-11-19 14:25:13 +01001313 echo "OSM_DEVOPS=$OSM_DEVOPS"
1314 echo "OSM_VCA_HOST=$OSM_VCA_HOST"
1315 echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
garciadeblasaa3ddf42019-04-04 19:04:32 +02001316 echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001317 echo "NO_HOST_PORTS=$NO_HOST_PORTS"
1318 echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
1319 echo "WORKDIR_SUDO=$WORKDIR_SUDO"
1320 echo "OSM_WORK_DIR=$OSM_STACK_NAME"
1321 echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
1322 echo "DOCKER_USER=$DOCKER_USER"
1323 echo "OSM_STACK_NAME=$OSM_STACK_NAME"
1324 echo "PULL_IMAGES=$PULL_IMAGES"
vijaynag8339ed22019-07-25 17:10:58 +05301325 echo "KUBERNETES=$KUBERNETES"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001326 echo "SHOWOPTS=$SHOWOPTS"
1327 echo "Install from specific refspec (-b): $COMMIT_ID"
1328}
1329
1330function track(){
1331 ctime=`date +%s`
1332 duration=$((ctime - SESSION_ID))
1333 url="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
1334 #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
1335 event_name="bin"
garciadeblas6c66abf2018-05-16 14:46:19 +02001336 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name="binsrc"
1337 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name="lxd"
1338 [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name="lw"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001339 event_name="${event_name}_$1"
1340 url="${url}&event=${event_name}&ce_duration=${duration}"
1341 wget -q -O /dev/null $url
1342}
1343
1344UNINSTALL=""
1345DEVELOP=""
1346NAT=""
1347UPDATE=""
1348RECONFIGURE=""
1349TEST_INSTALLER=""
1350INSTALL_LXD=""
1351SHOWOPTS=""
1352COMMIT_ID=""
1353ASSUME_YES=""
1354INSTALL_FROM_SOURCE=""
Gerardo Garcíac471ecc2019-06-26 16:40:28 +02001355RELEASE="ReleaseSIX"
Mike Marchettib8420852018-09-13 13:45:06 -04001356REPOSITORY="stable"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001357INSTALL_VIMEMU=""
1358INSTALL_FROM_LXDIMAGES=""
1359LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
1360LXD_REPOSITORY_PATH=""
1361INSTALL_LIGHTWEIGHT="y"
garciadeblas6c66abf2018-05-16 14:46:19 +02001362INSTALL_ONLY=""
1363INSTALL_ELK=""
1364INSTALL_PERFMON=""
garciadeblas0e596bc2018-05-28 16:04:42 +02001365TO_REBUILD=""
garciadeblasd41f5482018-05-25 10:25:06 +02001366INSTALL_NOLXD=""
garciadeblasa3e26612018-05-30 17:58:55 +02001367INSTALL_NODOCKER=""
Mike Marchettib8420852018-09-13 13:45:06 -04001368INSTALL_NOJUJU=""
vijaynag8339ed22019-07-25 17:10:58 +05301369KUBERNETES=""
garciadeblas0d45bc82018-11-19 14:25:13 +01001370INSTALL_NOHOSTCLIENT=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001371NOCONFIGURE=""
1372RELEASE_DAILY=""
1373SESSION_ID=`date +%s`
1374OSM_DEVOPS=
lavadoe07b1642018-10-25 10:58:34 -05001375OSM_VCA_HOST=
1376OSM_VCA_SECRET=
garciadeblasaa3ddf42019-04-04 19:04:32 +02001377OSM_VCA_PUBKEY=
Mike Marchettib8420852018-09-13 13:45:06 -04001378OSM_STACK_NAME=osm
1379NO_HOST_PORTS=""
1380DOCKER_NOBUILD=""
1381REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
garciadeblas870e60a2018-11-21 16:44:21 +01001382REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
Mike Marchettib8420852018-09-13 13:45:06 -04001383WORKDIR_SUDO=sudo
1384OSM_WORK_DIR="/etc/osm"
garciadeblas526f0fb2018-11-23 14:47:40 +01001385OSM_DOCKER_WORK_DIR="/etc/osm/docker"
vijaynag8339ed22019-07-25 17:10:58 +05301386OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
1387OSM_HOST_VOL="/var/lib/osm"
1388OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
Mike Marchetti13d76c82018-09-19 15:00:36 -04001389OSM_DOCKER_TAG=latest
garciadeblas0d45bc82018-11-19 14:25:13 +01001390DOCKER_USER=opensourcemano
1391PULL_IMAGES="y"
Benjamin Diazaa0af712018-10-04 14:02:34 -03001392KAFKA_TAG=2.11-1.0.2
lavado60216242018-10-10 23:44:28 +02001393PROMETHEUS_TAG=v2.4.3
lavado9a8df7c2018-10-24 09:35:34 -05001394KEYSTONEDB_TAG=10
Benjamin Diazba2cca92018-11-08 21:07:15 -03001395OSM_DATABASE_COMMONKEY=
lavado53eb8f52018-11-16 12:58:23 -05001396ELASTIC_VERSION=6.4.2
lavado4e8662c2018-11-28 11:28:14 -05001397ELASTIC_CURATOR_VERSION=5.5.4
vijaynag8339ed22019-07-25 17:10:58 +05301398POD_NETWORK_CIDR=10.244.0.0/16
1399K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
1400RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
garciadeblasd8bc5c32018-05-09 17:37:56 +02001401
vijaynag8339ed22019-07-25 17:10:58 +05301402while 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 +02001403 case "${o}" in
1404 h)
1405 usage && exit 0
1406 ;;
1407 b)
1408 COMMIT_ID=${OPTARG}
garciadeblas0d45bc82018-11-19 14:25:13 +01001409 PULL_IMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001410 ;;
1411 r)
Mike Marchettib8420852018-09-13 13:45:06 -04001412 REPOSITORY="${OPTARG}"
1413 REPO_ARGS+=(-r "$REPOSITORY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001414 ;;
vijaynag8339ed22019-07-25 17:10:58 +05301415 c)
1416 [ "${OPTARG}" == "swarm" ] && continue
1417 [ "${OPTARG}" == "k8s" ] && KUBERNETES="y" && continue
1418 echo -e "Invalid argument for -i : ' $OPTARG'\n" >&2
1419 usage && exit 1
1420 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001421 R)
Mike Marchettib8420852018-09-13 13:45:06 -04001422 RELEASE="${OPTARG}"
1423 REPO_ARGS+=(-R "$RELEASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001424 ;;
1425 k)
Mike Marchettib8420852018-09-13 13:45:06 -04001426 REPOSITORY_KEY="${OPTARG}"
1427 REPO_ARGS+=(-k "$REPOSITORY_KEY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001428 ;;
1429 u)
Mike Marchettib8420852018-09-13 13:45:06 -04001430 REPOSITORY_BASE="${OPTARG}"
1431 REPO_ARGS+=(-u "$REPOSITORY_BASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001432 ;;
garciadeblas0d45bc82018-11-19 14:25:13 +01001433 U)
1434 DOCKER_USER="${OPTARG}"
1435 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001436 l)
1437 LXD_REPOSITORY_BASE="${OPTARG}"
1438 ;;
1439 p)
1440 LXD_REPOSITORY_PATH="${OPTARG}"
1441 ;;
1442 D)
1443 OSM_DEVOPS="${OPTARG}"
1444 ;;
Mike Marchettib8420852018-09-13 13:45:06 -04001445 s)
vijaynag8339ed22019-07-25 17:10:58 +05301446 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 -04001447 ;;
1448 H)
lavadoe07b1642018-10-25 10:58:34 -05001449 OSM_VCA_HOST="${OPTARG}"
Mike Marchettib8420852018-09-13 13:45:06 -04001450 ;;
1451 S)
lavadoe07b1642018-10-25 10:58:34 -05001452 OSM_VCA_SECRET="${OPTARG}"
Mike Marchettib8420852018-09-13 13:45:06 -04001453 ;;
garciadeblasaa3ddf42019-04-04 19:04:32 +02001454 P)
1455 OSM_VCA_PUBKEY=$(cat ${OPTARG})
1456 ;;
Adam Israel5ddc97f2019-09-03 18:11:12 -04001457 A)
1458 OSM_VCA_APIPROXY="${OPTARG}"
1459 ;;
Mike Marchettib8420852018-09-13 13:45:06 -04001460 w)
1461 # when specifying workdir, do not use sudo for access
1462 WORKDIR_SUDO=
1463 OSM_WORK_DIR="${OPTARG}"
1464 ;;
Mike Marchetti13d76c82018-09-19 15:00:36 -04001465 t)
1466 OSM_DOCKER_TAG="${OPTARG}"
1467 ;;
garciadeblas6c66abf2018-05-16 14:46:19 +02001468 o)
1469 INSTALL_ONLY="y"
1470 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
1471 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
1472 [ "${OPTARG}" == "pm_stack" ] && INSTALL_PERFMON="y" && continue
1473 ;;
garciadeblas0e596bc2018-05-28 16:04:42 +02001474 m)
garciadeblas0e596bc2018-05-28 16:04:42 +02001475 [ "${OPTARG}" == "LW-UI" ] && TO_REBUILD="$TO_REBUILD LW-UI" && continue
govindappa79e51b92019-05-22 12:15:21 +05301476 [ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
1477 [ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
1478 [ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001479 [ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
govindappa79e51b92019-05-22 12:15:21 +05301480 [ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001481 [ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
1482 [ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
govindappa79e51b92019-05-22 12:15:21 +05301483 [ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
1484 [ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001485 [ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
1486 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001487 -)
1488 [ "${OPTARG}" == "help" ] && usage && exit 0
garciadeblas0d45bc82018-11-19 14:25:13 +01001489 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001490 [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
1491 [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
1492 [ "${OPTARG}" == "nat" ] && NAT="y" && continue
1493 [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
1494 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
1495 [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
1496 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
garciadeblasd41f5482018-05-25 10:25:06 +02001497 [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
garciadeblasa3e26612018-05-30 17:58:55 +02001498 [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001499 [ "${OPTARG}" == "lxdimages" ] && INSTALL_FROM_LXDIMAGES="y" && continue
1500 [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT="y" && continue
garciadeblase990f662018-05-18 11:43:39 +02001501 [ "${OPTARG}" == "soui" ] && INSTALL_LIGHTWEIGHT="" && RELEASE="-R ReleaseTHREE" && REPOSITORY="-r stable" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001502 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001503 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
1504 [ "${OPTARG}" == "pm_stack" ] && INSTALL_PERFMON="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001505 [ "${OPTARG}" == "noconfigure" ] && NOCONFIGURE="y" && continue
1506 [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
1507 [ "${OPTARG}" == "daily" ] && RELEASE_DAILY="y" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001508 [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
1509 [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
1510 [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
1511 [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
garciadeblas0d45bc82018-11-19 14:25:13 +01001512 [ "${OPTARG}" == "pullimages" ] && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001513 echo -e "Invalid option: '--$OPTARG'\n" >&2
1514 usage && exit 1
1515 ;;
1516 \?)
1517 echo -e "Invalid option: '-$OPTARG'\n" >&2
1518 usage && exit 1
1519 ;;
1520 y)
1521 ASSUME_YES="y"
1522 ;;
1523 *)
1524 usage && exit 1
1525 ;;
1526 esac
1527done
1528
garciadeblas6c66abf2018-05-16 14:46:19 +02001529[ -n "$INSTALL_FROM_LXDIMAGES" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --lxd can only be used with --soui"
garciadeblase990f662018-05-18 11:43:39 +02001530[ -n "$NAT" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --nat can only be used with --soui"
1531[ -n "$NOCONFIGURE" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --noconfigure can only be used with --soui"
garciadeblasfb566272018-05-25 10:33:36 +02001532[ -n "$RELEASE_DAILY" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --daily can only be used with --soui"
garciadeblasd41f5482018-05-25 10:25:06 +02001533[ -n "$INSTALL_NOLXD" ] && [ -z "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible option: --nolxd cannot be used with --soui"
garciadeblasa3e26612018-05-30 17:58:55 +02001534[ -n "$INSTALL_NODOCKER" ] && [ -z "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible option: --nodocker cannot be used with --soui"
garciadeblas0e596bc2018-05-28 16:04:42 +02001535[ -n "$TO_REBUILD" ] && [ -z "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible option: -m cannot be used with --soui"
1536[ -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 +02001537
garciadeblasd8bc5c32018-05-09 17:37:56 +02001538if [ -n "$SHOWOPTS" ]; then
1539 dump_vars
1540 exit 0
1541fi
1542
1543[ -n "$RELEASE_DAILY" ] && echo -e "\nInstalling from daily build repo" && RELEASE="-R ReleaseTHREE-daily" && REPOSITORY="-r testing" && COMMIT_ID="master"
1544
1545# if develop, we force master
1546[ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
1547
garciadeblasd8bc5c32018-05-09 17:37:56 +02001548need_packages="git jq wget curl tar"
1549echo -e "Checking required packages: $need_packages"
1550dpkg -l $need_packages &>/dev/null \
1551 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1552 || sudo apt-get update \
1553 || FATAL "failed to run apt-get update"
1554dpkg -l $need_packages &>/dev/null \
1555 || ! echo -e "Installing $need_packages requires root privileges." \
1556 || sudo apt-get install -y $need_packages \
1557 || FATAL "failed to install $need_packages"
1558
1559if [ -z "$OSM_DEVOPS" ]; then
Michael Marchettiee374142018-08-02 22:47:16 +02001560 if [ -n "$TEST_INSTALLER" ]; then
1561 echo -e "\nUsing local devops repo for OSM installation"
1562 OSM_DEVOPS="$(dirname $(realpath $(dirname $0)))"
1563 else
1564 echo -e "\nCreating temporary dir for OSM installation"
1565 OSM_DEVOPS="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
1566 trap 'rm -rf "$OSM_DEVOPS"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001567
Michael Marchettiee374142018-08-02 22:47:16 +02001568 git clone https://osm.etsi.org/gerrit/osm/devops.git $OSM_DEVOPS
garciadeblasd8bc5c32018-05-09 17:37:56 +02001569
Michael Marchettiee374142018-08-02 22:47:16 +02001570 if [ -z "$COMMIT_ID" ]; then
1571 echo -e "\nGuessing the current stable release"
1572 LATEST_STABLE_DEVOPS=`git -C $OSM_DEVOPS tag -l v[0-9].* | sort -V | tail -n1`
1573 [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
1574
1575 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
1576 COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
1577 else
1578 echo -e "\nDEVOPS Using commit $COMMIT_ID"
1579 fi
1580 git -C $OSM_DEVOPS checkout $COMMIT_ID
garciadeblasd8bc5c32018-05-09 17:37:56 +02001581 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001582fi
1583
garciadeblas3c25fab2019-11-18 17:24:43 +01001584. $OSM_DEVOPS/common/all_funcs
garciadeblasd8bc5c32018-05-09 17:37:56 +02001585
1586[ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight && echo -e "\nDONE" && exit 0
1587[ -n "$UNINSTALL" ] && uninstall && echo -e "\nDONE" && exit 0
1588[ -n "$NAT" ] && nat && echo -e "\nDONE" && exit 0
1589[ -n "$UPDATE" ] && update && echo -e "\nDONE" && exit 0
1590[ -n "$RECONFIGURE" ] && configure && echo -e "\nDONE" && exit 0
garciadeblas6c66abf2018-05-16 14:46:19 +02001591[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
1592[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
1593[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
1594[ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
garciadeblasd8bc5c32018-05-09 17:37:56 +02001595
1596#Installation starts here
garciadeblasb1993ed2019-09-10 00:58:43 +02001597wget -q -O- https://osm-download.etsi.org/ftp/osm-6.0-six/README.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001598track start
1599
garciadeblasd8bc5c32018-05-09 17:37:56 +02001600[ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight && echo -e "\nDONE" && exit 0
1601echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
1602if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
1603 ! ask_user "The installation will take about 75-90 minutes. Continue (Y/n)? " y && echo "Cancelled!" && exit 1
1604fi
1605
1606echo -e "Checking required packages: lxd"
1607lxd --version &>/dev/null || FATAL "lxd not present, exiting."
1608[ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
1609
garciadeblasd8bc5c32018-05-09 17:37:56 +02001610# use local devops for containers
1611export OSM_USE_LOCAL_DEVOPS=true
1612if [ -n "$INSTALL_FROM_SOURCE" ]; then #install from source
1613 echo -e "\nCreating the containers and building from source ..."
1614 $OSM_DEVOPS/jenkins/host/start_build RO --notest checkout $COMMIT_ID || FATAL "RO container build failed (refspec: '$COMMIT_ID')"
1615 ro_is_up && track RO
1616 $OSM_DEVOPS/jenkins/host/start_build VCA || FATAL "VCA container build failed"
1617 vca_is_up && track VCA
1618 $OSM_DEVOPS/jenkins/host/start_build MON || FATAL "MON install failed"
1619 mon_is_up && track MON
1620 $OSM_DEVOPS/jenkins/host/start_build SO checkout $COMMIT_ID || FATAL "SO container build failed (refspec: '$COMMIT_ID')"
1621 $OSM_DEVOPS/jenkins/host/start_build UI checkout $COMMIT_ID || FATAL "UI container build failed (refspec: '$COMMIT_ID')"
1622 #so_is_up && track SOUI
1623 track SOUI
1624elif [ -n "$INSTALL_FROM_LXDIMAGES" ]; then #install from LXD images stored in OSM repo
1625 echo -e "\nInstalling from lxd images ..."
1626 install_from_lxdimages
1627else #install from binaries
1628 echo -e "\nCreating the containers and installing from binaries ..."
Mike Marchettib8420852018-09-13 13:45:06 -04001629 $OSM_DEVOPS/jenkins/host/install RO ${REPO_ARGS[@]} || FATAL "RO install failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001630 ro_is_up && track RO
1631 $OSM_DEVOPS/jenkins/host/start_build VCA || FATAL "VCA install failed"
1632 vca_is_up && track VCA
1633 $OSM_DEVOPS/jenkins/host/install MON || FATAL "MON build failed"
1634 mon_is_up && track MON
Mike Marchettib8420852018-09-13 13:45:06 -04001635 $OSM_DEVOPS/jenkins/host/install SO ${REPO_ARGS[@]} || FATAL "SO install failed"
1636 $OSM_DEVOPS/jenkins/host/install UI ${REPO_ARGS[@]} || FATAL "UI install failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001637 #so_is_up && track SOUI
1638 track SOUI
1639fi
1640
1641#Install iptables-persistent and configure NAT rules
1642[ -z "$NOCONFIGURE" ] && nat
1643
1644#Configure components
1645[ -z "$NOCONFIGURE" ] && configure
1646
1647#Install osmclient
1648[ -z "$NOCONFIGURE" ] && install_osmclient
1649
1650#Install vim-emu (optional)
peusterm76353e42018-05-08 13:56:05 +02001651[ -n "$INSTALL_VIMEMU" ] && install_docker_ce && install_vimemu
garciadeblasd8bc5c32018-05-09 17:37:56 +02001652
garciadeblasb1993ed2019-09-10 00:58:43 +02001653wget -q -O- https://osm-download.etsi.org/ftp/osm-6.0-six/README2.txt &> /dev/null
garciadeblasd8bc5c32018-05-09 17:37:56 +02001654track end
1655echo -e "\nDONE"