blob: 0f8b1772e0425fd6a48c690605026f1833400f95 [file] [log] [blame]
garciadeblasd8bc5c32018-05-09 17:37:56 +02001#!/bin/bash
2# Copyright 2016 Telefónica Investigación y Desarrollo S.A.U.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16function usage(){
17 echo -e "usage: $0 [OPTIONS]"
18 echo -e "Install OSM from binaries or source code (by default, from binaries)"
19 echo -e " OPTIONS"
garciadeblasd8bc5c32018-05-09 17:37:56 +020020 echo -e " -r <repo>: use specified repository name for osm packages"
21 echo -e " -R <release>: use specified release for osm binaries (deb packages, lxd images, ...)"
22 echo -e " -u <repo base>: use specified repository url for osm packages"
23 echo -e " -k <repo key>: use specified repository public key url"
24 echo -e " -b <refspec>: install OSM from source code using a specific branch (master, v2.0, ...) or tag"
25 echo -e " -b master (main dev branch)"
26 echo -e " -b v2.0 (v2.0 branch)"
27 echo -e " -b tags/v1.1.0 (a specific tag)"
28 echo -e " ..."
vijaynag8339ed22019-07-25 17:10:58 +053029 echo -e " -c <orchestrator> deploy osm services using container <orchestrator>. Valid values are <k8s> or <swarm>. If -c is not used then osm will be deployed using default orchestrator. When used with --uninstall, osm services deployed by the orchestrator will be uninstalled"
30 echo -e " -s <stack name> or <namespace> user defined stack name when installed using swarm or namespace when installed using k8s, default is osm"
Mike Marchettib8420852018-09-13 13:45:06 -040031 echo -e " -H <VCA host> use specific juju host controller IP"
32 echo -e " -S <VCA secret> use VCA/juju secret key"
garciadeblasaa3ddf42019-04-04 19:04:32 +020033 echo -e " -P <VCA pubkey> use VCA/juju public key file"
garciadeblas0c2f62b2019-05-29 15:23:19 +020034 echo -e " -C <VCA cacert> use VCA/juju CA certificate file"
Adam Israel5ddc97f2019-09-03 18:11:12 -040035 echo -e " -A <VCA apiproxy> use VCA/juju API proxy"
garciadeblas6c66abf2018-05-16 14:46:19 +020036 echo -e " --vimemu: additionally deploy the VIM emulator as a docker container"
37 echo -e " --elk_stack: additionally deploy an ELK docker stack for event logging"
38 echo -e " --pm_stack: additionally deploy a Prometheus+Grafana stack for performance monitoring (PM)"
govindappa79e51b92019-05-22 12:15:21 +053039 echo -e " -m <MODULE>: install OSM but only rebuild the specified docker images (LW-UI, NBI, LCM, RO, MON, POL, KAFKA, MONGO, PROMETHEUS, KEYSTONE-DB, NONE)"
garciadeblas282ff4e2018-07-10 09:16:30 +020040 echo -e " -o <ADDON>: ONLY (un)installs one of the addons (vimemu, elk_stack, pm_stack)"
garciadeblase990f662018-05-18 11:43:39 +020041 echo -e " -D <devops path> use local devops installation path"
Mike Marchettib8420852018-09-13 13:45:06 -040042 echo -e " -w <work dir> Location to store runtime installation"
Mike Marchetti13d76c82018-09-19 15:00:36 -040043 echo -e " -t <docker tag> specify osm docker tag (default is latest)"
garciadeblasd41f5482018-05-25 10:25:06 +020044 echo -e " --nolxd: do not install and configure LXD, allowing unattended installations (assumes LXD is already installed and confifured)"
garciadeblasa3e26612018-05-30 17:58:55 +020045 echo -e " --nodocker: do not install docker, do not initialize a swarm (assumes docker is already installed and a swarm has been initialized)"
Mike Marchettib8420852018-09-13 13:45:06 -040046 echo -e " --nojuju: do not juju, assumes already installed"
47 echo -e " --nodockerbuild:do not build docker images (use existing locally cached images)"
48 echo -e " --nohostports: do not expose docker ports to host (useful for creating multiple instances of osm on the same host)"
49 echo -e " --nohostclient: do not install the osmclient"
garciadeblase990f662018-05-18 11:43:39 +020050 echo -e " --uninstall: uninstall OSM: remove the containers and delete NAT rules"
51 echo -e " --source: install OSM from source code using the latest stable tag"
garciadeblasd8bc5c32018-05-09 17:37:56 +020052 echo -e " --develop: (deprecated, use '-b master') install OSM from source code using the master branch"
garciadeblasd41f5482018-05-25 10:25:06 +020053 echo -e " --soui: install classic build of OSM (Rel THREE v3.1, based on LXD containers, with SO and UI)"
54 echo -e " --lxdimages: (only for Rel THREE with --soui) download lxd images from OSM repository instead of creating them from scratch"
Mike Marchettida8a9c42018-10-01 15:25:15 -040055 echo -e " --pullimages: pull/run osm images from docker.io/opensourcemano"
romeromonsere366b1a2019-11-19 19:49:26 +010056 echo -e " --k8s_monitor: install the OSM kubernetes moitoring with prometheus and grafana"
garciadeblasd41f5482018-05-25 10:25:06 +020057 echo -e " -l <lxd_repo>: (only for Rel THREE with --soui) use specified repository url for lxd images"
58 echo -e " -p <path>: (only for Rel THREE with --soui) use specified repository path for lxd images"
garciadeblasd8bc5c32018-05-09 17:37:56 +020059# echo -e " --reconfigure: reconfigure the modules (DO NOT change NAT rules)"
garciadeblasd41f5482018-05-25 10:25:06 +020060 echo -e " --nat: (only for Rel THREE with --soui) install only NAT rules"
61 echo -e " --noconfigure: (only for Rel THREE with --soui) DO NOT install osmclient, DO NOT install NAT rules, DO NOT configure modules"
garciadeblasd8bc5c32018-05-09 17:37:56 +020062# echo -e " --update: update to the latest stable release or to the latest commit if using a specific branch"
63 echo -e " --showopts: print chosen options and exit (only for debugging)"
64 echo -e " -y: do not prompt for confirmation, assumes yes"
garciadeblasd8bc5c32018-05-09 17:37:56 +020065 echo -e " -h / --help: print this help"
66}
67
68#Uninstall OSM: remove containers
69function uninstall(){
70 echo -e "\nUninstalling OSM"
71 if [ $RC_CLONE ] || [ -n "$TEST_INSTALLER" ]; then
72 $OSM_DEVOPS/jenkins/host/clean_container RO
73 $OSM_DEVOPS/jenkins/host/clean_container VCA
74 $OSM_DEVOPS/jenkins/host/clean_container MON
75 $OSM_DEVOPS/jenkins/host/clean_container SO
76 #$OSM_DEVOPS/jenkins/host/clean_container UI
77 else
78 lxc stop RO && lxc delete RO
79 lxc stop VCA && lxc delete VCA
80 lxc stop MON && lxc delete MON
81 lxc stop SO-ub && lxc delete SO-ub
82 fi
83 echo -e "\nDeleting imported lxd images if they exist"
84 lxc image show osm-ro &>/dev/null && lxc image delete osm-ro
85 lxc image show osm-vca &>/dev/null && lxc image delete osm-vca
86 lxc image show osm-soui &>/dev/null && lxc image delete osm-soui
87 return 0
88}
89
Mike Marchettib8420852018-09-13 13:45:06 -040090# takes a juju/accounts.yaml file and returns the password specific
Adam Israel8232e562018-11-21 16:47:45 -050091# for a controller. I wrote this using only bash tools to minimize
Mike Marchettib8420852018-09-13 13:45:06 -040092# additions of other packages
93function parse_juju_password {
94 password_file="${HOME}/.local/share/juju/accounts.yaml"
95 local controller_name=$1
96 local s='[[:space:]]*' w='[a-zA-Z0-9_-]*' fs=$(echo @|tr @ '\034')
97 sed -ne "s|^\($s\):|\1|" \
98 -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
99 -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $password_file |
100 awk -F$fs -v controller=$controller_name '{
101 indent = length($1)/2;
102 vname[indent] = $2;
103 for (i in vname) {if (i > indent) {delete vname[i]}}
104 if (length($3) > 0) {
105 vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
106 if (match(vn,controller) && match($2,"password")) {
107 printf("%s",$3);
108 }
109 }
110 }'
111}
112
Benjamin Diazba2cca92018-11-08 21:07:15 -0300113function generate_secret() {
114 head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32
115}
116
Mike Marchettib8420852018-09-13 13:45:06 -0400117function remove_volumes() {
vijaynag8339ed22019-07-25 17:10:58 +0530118 if [ -n "$KUBERNETES" ]; then
119 k8_volume=$1
120 echo "Removing ${k8_volume}"
121 $WORKDIR_SUDO rm -rf ${k8_volume}
122 else
123 stack=$1
124 volumes="mongo_db mon_db osm_packages ro_db"
125 for volume in $volumes; do
126 sg docker -c "docker volume rm ${stack}_${volume}"
127 done
128 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400129}
130
131function remove_network() {
132 stack=$1
133 sg docker -c "docker network rm net${stack}"
134}
135
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100136function remove_iptables() {
137 stack=$1
138 if [ -z "$OSM_VCA_HOST" ]; then
139 OSM_VCA_HOST=`sg lxd -c "juju show-controller ${stack}"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
140 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
141 fi
142
143 if sudo iptables -t nat -C PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
144 sudo iptables -t nat -D PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
145 sudo netfilter-persistent save
146 fi
147}
148
garciadeblas5b857d32018-05-24 18:37:58 +0200149function remove_stack() {
150 stack=$1
garciadeblas5ef98212018-05-28 09:25:36 +0200151 if sg docker -c "docker stack ps ${stack}" ; then
garciadeblas5b857d32018-05-24 18:37:58 +0200152 echo -e "\nRemoving stack ${stack}" && sg docker -c "docker stack rm ${stack}"
153 COUNTER=0
154 result=1
155 while [ ${COUNTER} -lt 30 ]; do
156 result=$(sg docker -c "docker stack ps ${stack}" | wc -l)
157 #echo "Dockers running: $result"
158 if [ "${result}" == "0" ]; then
159 break
160 fi
161 let COUNTER=COUNTER+1
162 sleep 1
163 done
garciadeblasd8bc5c32018-05-09 17:37:56 +0200164 if [ "${result}" == "0" ]; then
garciadeblas5b857d32018-05-24 18:37:58 +0200165 echo "All dockers of the stack ${stack} were removed"
166 else
167 FATAL "Some dockers of the stack ${stack} could not be removed. Could not clean it."
garciadeblasd8bc5c32018-05-09 17:37:56 +0200168 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200169 sleep 5
garciadeblasd8bc5c32018-05-09 17:37:56 +0200170 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200171}
172
vijaynag8339ed22019-07-25 17:10:58 +0530173#removes osm deployments and services
174function remove_k8s_namespace() {
175 kubectl delete ns $1
176}
177
garciadeblas5b857d32018-05-24 18:37:58 +0200178#Uninstall lightweight OSM: remove dockers
179function uninstall_lightweight() {
garciadeblas282ff4e2018-07-10 09:16:30 +0200180 if [ -n "$INSTALL_ONLY" ]; then
181 if [ -n "$INSTALL_ELK" ]; then
182 echo -e "\nUninstalling OSM ELK stack"
183 remove_stack osm_elk
Mike Marchettib8420852018-09-13 13:45:06 -0400184 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas282ff4e2018-07-10 09:16:30 +0200185 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200186 else
187 echo -e "\nUninstalling OSM"
vijaynag8339ed22019-07-25 17:10:58 +0530188 if [ -n "$KUBERNETES" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +0100189 if [ -n "$K8S_MONITOR" ]; then
190 # uninstall OSM MONITORING
191 uninstall_k8s_monitoring
192 fi
vijaynag8339ed22019-07-25 17:10:58 +0530193 remove_k8s_namespace $OSM_STACK_NAME
194 else
Dominik4763cfe2019-11-27 12:15:50 +0100195
vijaynag8339ed22019-07-25 17:10:58 +0530196 remove_stack $OSM_STACK_NAME
197 remove_stack osm_elk
vijaynag8339ed22019-07-25 17:10:58 +0530198 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" || \
garciadeblas7cc70222019-12-09 01:24:18 +0100232 sudo apt-get -yq install iptables-persistent
garciadeblasd8bc5c32018-05-09 17:37:56 +0200233 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
lavado6ad812e2019-11-29 10:58:58 -0500605function install_prometheus_nodeexporter(){
lavadoc26d90b2019-12-06 18:11:36 -0500606 if (systemctl -q is-active node_exporter)
607 then
608 echo "Node Exporter is already running."
609 else
610 echo "Node Exporter is not active, installing..."
611 if getent passwd node_exporter > /dev/null 2>&1; then
612 echo "node_exporter user exists"
613 else
614 echo "Creating user node_exporter"
615 sudo useradd --no-create-home --shell /bin/false node_exporter
616 fi
617 sudo wget -q https://github.com/prometheus/node_exporter/releases/download/v$PROMETHEUS_NODE_EXPORTER_TAG/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz -P /tmp/
618 sudo tar -C /tmp -xf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz
619 sudo cp /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64/node_exporter /usr/local/bin
620 sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
621 sudo rm -rf node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64*
622 sudo cp ${OSM_DEVOPS}/installers/docker/files/node_exporter.service /etc/systemd/system/node_exporter.service
623 sudo systemctl daemon-reload
624 sudo systemctl restart node_exporter
625 sudo systemctl enable node_exporter
626 echo "Node Exporter has been activated in this host."
627 fi
lavado6ad812e2019-11-29 10:58:58 -0500628 return 0
629}
630
lavado1e4a88c2019-12-03 16:19:59 -0500631function uninstall_prometheus_nodeexporter(){
632 sudo systemctl stop node_exporter
633 sudo systemctl disable node_exporter
634 sudo rm /etc/systemd/system/node_exporter.service
635 sudo systemctl daemon-reload
636 sudo userdel node_exporter
637 sudo rm /usr/local/bin/node_exporter
638 return 0
639}
640
garciadeblasd8bc5c32018-05-09 17:37:56 +0200641function install_from_lxdimages(){
642 LXD_RELEASE=${RELEASE#"-R "}
643 if [ -n "$LXD_REPOSITORY_PATH" ]; then
644 LXD_IMAGE_DIR="$LXD_REPOSITORY_PATH"
645 else
646 LXD_IMAGE_DIR="$(mktemp -d -q --tmpdir "osmimages.XXXXXX")"
647 trap 'rm -rf "$LXD_IMAGE_DIR"' EXIT
648 fi
649 echo -e "\nDeleting previous lxd images if they exist"
650 lxc image show osm-ro &>/dev/null && lxc image delete osm-ro
651 lxc image show osm-vca &>/dev/null && lxc image delete osm-vca
652 lxc image show osm-soui &>/dev/null && lxc image delete osm-soui
653 echo -e "\nImporting osm-ro"
654 [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-ro.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-ro.tar.gz
655 lxc image import $LXD_IMAGE_DIR/osm-ro.tar.gz --alias osm-ro
656 rm -f $LXD_IMAGE_DIR/osm-ro.tar.gz
657 echo -e "\nImporting osm-vca"
658 [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-vca.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-vca.tar.gz
659 lxc image import $LXD_IMAGE_DIR/osm-vca.tar.gz --alias osm-vca
660 rm -f $LXD_IMAGE_DIR/osm-vca.tar.gz
661 echo -e "\nImporting osm-soui"
662 [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-soui.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-soui.tar.gz
663 lxc image import $LXD_IMAGE_DIR/osm-soui.tar.gz --alias osm-soui
664 rm -f $LXD_IMAGE_DIR/osm-soui.tar.gz
665 launch_container_from_lxd RO osm-ro
666 ro_is_up && track RO
667 launch_container_from_lxd VCA osm-vca
668 vca_is_up && track VCA
669 launch_container_from_lxd MON osm-mon
670 mon_is_up && track MON
671 launch_container_from_lxd SO osm-soui
672 #so_is_up && track SOUI
673 track SOUI
674}
675
676function install_docker_ce() {
677 # installs and configures Docker CE
678 echo "Installing Docker CE ..."
679 sudo apt-get -qq update
680 sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
681 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
682 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
683 sudo apt-get -qq update
684 sudo apt-get install -y docker-ce
685 echo "Adding user to group 'docker'"
686 sudo groupadd -f docker
687 sudo usermod -aG docker $USER
garciadeblasd8bc5c32018-05-09 17:37:56 +0200688 sleep 2
689 sudo service docker restart
690 echo "... restarted Docker service"
garciadeblas67ce97c2018-05-18 10:22:09 +0200691 sg docker -c "docker version" || FATAL "Docker installation failed"
692 echo "... Docker CE installation done"
693 return 0
garciadeblasd8bc5c32018-05-09 17:37:56 +0200694}
695
696function install_docker_compose() {
697 # installs and configures docker-compose
698 echo "Installing Docker Compose ..."
699 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
700 sudo chmod +x /usr/local/bin/docker-compose
701 echo "... Docker Compose installation done"
702}
703
704function install_juju() {
705 echo "Installing juju"
Adam Israel41587482019-11-06 10:45:43 -0500706 sudo snap install juju --classic
garciadeblasd41f5482018-05-25 10:25:06 +0200707 [ -z "$INSTALL_NOLXD" ] && sudo dpkg-reconfigure -p medium lxd
Dominik4763cfe2019-11-27 12:15:50 +0100708 [[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200709 echo "Finished installation of juju"
Mike Marchettib8420852018-09-13 13:45:06 -0400710 return 0
711}
712
713function juju_createcontroller() {
Adam Israel8232e562018-11-21 16:47:45 -0500714 if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then
Mike Marchettib8420852018-09-13 13:45:06 -0400715 # Not found created, create the controller
716 sg lxd -c "juju bootstrap --bootstrap-series=xenial localhost $OSM_STACK_NAME"
717 fi
Adam Israel8232e562018-11-21 16:47:45 -0500718 [ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200719}
720
Adam Israel5ddc97f2019-09-03 18:11:12 -0400721function juju_createproxy() {
Adam Israel43fb44d2019-11-06 10:37:25 -0500722 echo -e "\nChecking required packages: iptables-persistent"
723 dpkg -l iptables-persistent &>/dev/null || ! echo -e " Not installed.\nInstalling iptables-persistent requires root privileges" || \
garciadeblas7cc70222019-12-09 01:24:18 +0100724 sudo apt-get -yq install iptables-persistent
Adam Israel43fb44d2019-11-06 10:37:25 -0500725
Adam Israel5ddc97f2019-09-03 18:11:12 -0400726 if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
727 sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
728 sudo netfilter-persistent save
729 fi
730}
731
garciadeblasd8bc5c32018-05-09 17:37:56 +0200732function generate_docker_images() {
733 echo "Pulling and generating docker images"
Michael Marchettiee374142018-08-02 22:47:16 +0200734 _build_from=$COMMIT_ID
735 [ -z "$_build_from" ] && _build_from="master"
736
737 echo "OSM Docker images generated from $_build_from"
738
Mike Marchettib8420852018-09-13 13:45:06 -0400739 BUILD_ARGS+=(--build-arg REPOSITORY="$REPOSITORY")
740 BUILD_ARGS+=(--build-arg RELEASE="$RELEASE")
741 BUILD_ARGS+=(--build-arg REPOSITORY_KEY="$REPOSITORY_KEY")
742 BUILD_ARGS+=(--build-arg REPOSITORY_BASE="$REPOSITORY_BASE")
lavado60216242018-10-10 23:44:28 +0200743
garciadeblas0e596bc2018-05-28 16:04:42 +0200744 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q KAFKA ; then
745 sg docker -c "docker pull wurstmeister/zookeeper" || FATAL "cannot get zookeeper docker image"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300746 sg docker -c "docker pull wurstmeister/kafka:${KAFKA_TAG}" || FATAL "cannot get kafka docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200747 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400748
garciadeblas0e596bc2018-05-28 16:04:42 +0200749 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MONGO ; then
750 sg docker -c "docker pull mongo" || FATAL "cannot get mongo docker image"
751 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400752
lavado60216242018-10-10 23:44:28 +0200753 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
754 sg docker -c "docker pull prom/prometheus:${PROMETHEUS_TAG}" || FATAL "cannot get prometheus docker image"
755 fi
756
lavado6ad812e2019-11-29 10:58:58 -0500757 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q GRAFANA ; then
758 sg docker -c "docker pull grafana/grafana:${GRAFANA_TAG}" || FATAL "cannot get grafana docker image"
759 fi
760
garciadeblas4a83e6e2018-12-04 14:55:09 +0100761 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI || echo $TO_REBUILD | grep -q KEYSTONE-DB ; then
lavado9a8df7c2018-10-24 09:35:34 -0500762 sg docker -c "docker pull mariadb:${KEYSTONEDB_TAG}" || FATAL "cannot get keystone-db docker image"
763 fi
764
garciadeblas4a83e6e2018-12-04 14:55:09 +0100765 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
766 sg docker -c "docker pull mysql:5" || FATAL "cannot get mysql docker image"
767 fi
768
Mike Marchettida8a9c42018-10-01 15:25:15 -0400769 if [ -n "$PULL_IMAGES" ]; then
770 sg docker -c "docker pull ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}" || FATAL "cannot pull MON docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400771 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MON ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200772 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/MON
773 git -C ${LWTEMPDIR}/MON checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100774 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 -0500775 fi
776
777 if [ -n "$PULL_IMAGES" ]; then
778 sg docker -c "docker pull ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}" || FATAL "cannot pull POL docker image"
garciadeblas4a83e6e2018-12-04 14:55:09 +0100779 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q POL ; then
lavado9a8df7c2018-10-24 09:35:34 -0500780 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/POL
781 git -C ${LWTEMPDIR}/POL checkout ${COMMIT_ID}
garciadeblas4a83e6e2018-12-04 14:55:09 +0100782 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 +0200783 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400784
785 if [ -n "$PULL_IMAGES" ]; then
786 sg docker -c "docker pull ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}" || FATAL "cannot pull NBI docker image"
lavado9a8df7c2018-10-24 09:35:34 -0500787 sg docker -c "docker pull ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}" || FATAL "cannot pull KEYSTONE docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400788 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200789 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NBI
790 git -C ${LWTEMPDIR}/NBI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100791 sg docker -c "docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t ${DOCKER_USER}/nbi --no-cache" || FATAL "cannot build NBI docker image"
792 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 +0200793 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400794
795 if [ -n "$PULL_IMAGES" ]; then
796 sg docker -c "docker pull ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}" || FATAL "cannot pull RO docker image"
797 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200798 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/RO
799 git -C ${LWTEMPDIR}/RO checkout ${COMMIT_ID}
tierno5cc8ac32019-11-25 10:33:25 +0000800 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 +0200801 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400802
803 if [ -n "$PULL_IMAGES" ]; then
804 sg docker -c "docker pull ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}" || FATAL "cannot pull LCM RO docker image"
805 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LCM ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200806 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LCM
807 git -C ${LWTEMPDIR}/LCM checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100808 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 +0200809 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400810
811 if [ -n "$PULL_IMAGES" ]; then
812 sg docker -c "docker pull ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}" || FATAL "cannot pull light-ui docker image"
813 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-UI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200814 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LW-UI
815 git -C ${LWTEMPDIR}/LW-UI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100816 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 +0200817 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400818
819 if [ -n "$PULL_IMAGES" ]; then
820 sg docker -c "docker pull ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}" || FATAL "cannot pull osmclient docker image"
821 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-osmclient; then
garciadeblas0d45bc82018-11-19 14:25:13 +0100822 sg docker -c "docker build -t ${DOCKER_USER}/osmclient ${BUILD_ARGS[@]} -f $OSM_DEVOPS/docker/osmclient ."
Mike Marchettib8420852018-09-13 13:45:06 -0400823 fi
lavado6ad812e2019-11-29 10:58:58 -0500824
825 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
826 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
827 fi
828
garciadeblasd8bc5c32018-05-09 17:37:56 +0200829 echo "Finished generation of docker images"
830}
831
garciadeblas5b857d32018-05-24 18:37:58 +0200832function cmp_overwrite() {
833 file1="$1"
834 file2="$2"
835 if ! $(cmp "${file1}" "${file2}" >/dev/null 2>&1); then
836 if [ -f "${file2}" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400837 ask_user "The file ${file2} already exists. Overwrite (y/N)? " n && cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200838 else
Mike Marchettib8420852018-09-13 13:45:06 -0400839 cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200840 fi
841 fi
842}
843
garciadeblasd8bc5c32018-05-09 17:37:56 +0200844function generate_docker_env_files() {
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200845 echo "Doing a backup of existing env files"
846 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
847 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
848 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
849 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lwui.env{,~}
850 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
851 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
852 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
853 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
854 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
855
garciadeblasd8bc5c32018-05-09 17:37:56 +0200856 echo "Generating docker env files"
vijaynag8339ed22019-07-25 17:10:58 +0530857 if [ -n "$KUBERNETES" ]; then
858 #Kubernetes resources
859 $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
860 else
861 # Docker-compose
862 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200863
vijaynag8339ed22019-07-25 17:10:58 +0530864 # Prometheus
lavado6ad812e2019-11-29 10:58:58 -0500865 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/files/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus.yml
866
867 # Grafana & Prometheus Exporter files
868 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/files
869 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/files/* $OSM_DOCKER_WORK_DIR/files/
vijaynag8339ed22019-07-25 17:10:58 +0530870 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200871
Benjamin Diazba2cca92018-11-08 21:07:15 -0300872 # LCM
873 if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
874 echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
875 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400876
Benjamin Diazba2cca92018-11-08 21:07:15 -0300877 if ! grep -Fq "OSMLCM_VCA_HOST" $OSM_DOCKER_WORK_DIR/lcm.env; then
878 echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
879 else
880 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_HOST.*|OSMLCM_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/lcm.env
881 fi
882
883 if ! grep -Fq "OSMLCM_VCA_SECRET" $OSM_DOCKER_WORK_DIR/lcm.env; then
884 echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
885 else
886 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_SECRET.*|OSMLCM_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/lcm.env
887 fi
888
garciadeblasaa3ddf42019-04-04 19:04:32 +0200889 if ! grep -Fq "OSMLCM_VCA_PUBKEY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblas6f0f4662019-06-11 17:47:14 +0200890 echo "OSMLCM_VCA_PUBKEY=\"${OSM_VCA_PUBKEY}\"" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasaa3ddf42019-04-04 19:04:32 +0200891 else
garciadeblas6f0f4662019-06-11 17:47:14 +0200892 $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 +0200893 fi
894
Adam Israelbe7676a2019-10-02 16:10:53 -0400895 if ! grep -Fq "OSMLCM_VCA_CACERT" $OSM_DOCKER_WORK_DIR/lcm.env; then
896 echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
897 else
898 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CACERT.*|OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/lcm.env
899 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -0300900
Adam Israel5ddc97f2019-09-03 18:11:12 -0400901 if ! grep -Fq "OSMLCM_VCA_APIPROXY" $OSM_DOCKER_WORK_DIR/lcm.env; then
902 echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
903 else
904 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_APIPROXY.*|OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
905 fi
906
Benjamin Diazba2cca92018-11-08 21:07:15 -0300907 # RO
908 MYSQL_ROOT_PASSWORD=$(generate_secret)
Mike Marchettib8420852018-09-13 13:45:06 -0400909 if [ ! -f $OSM_DOCKER_WORK_DIR/ro-db.env ]; then
910 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro-db.env
garciadeblas5b857d32018-05-24 18:37:58 +0200911 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400912 if [ ! -f $OSM_DOCKER_WORK_DIR/ro.env ]; then
913 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro.env
garciadeblas5b857d32018-05-24 18:37:58 +0200914 fi
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100915
Benjamin Diazba2cca92018-11-08 21:07:15 -0300916 # Keystone
Benjamin Diazba2cca92018-11-08 21:07:15 -0300917 KEYSTONE_DB_PASSWORD=$(generate_secret)
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100918 SERVICE_PASSWORD=$(generate_secret)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100919 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone-db.env ]; then
920 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone-db.env
921 fi
922 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone.env ]; then
923 echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100924 echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100925 echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100926 fi
927
Benjamin Diazba2cca92018-11-08 21:07:15 -0300928 # NBI
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100929 if [ ! -f $OSM_DOCKER_WORK_DIR/nbi.env ]; then
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100930 echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/nbi.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300931 echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/nbi.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100932 fi
933
Benjamin Diazba2cca92018-11-08 21:07:15 -0300934 # MON
935 if [ ! -f $OSM_DOCKER_WORK_DIR/mon.env ]; then
936 echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diaz9261c662019-02-25 17:18:51 -0300937 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 -0300938 fi
939
940 if ! grep -Fq "OS_NOTIFIER_URI" $OSM_DOCKER_WORK_DIR/mon.env; then
941 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
942 else
943 $WORKDIR_SUDO sed -i "s|OS_NOTIFIER_URI.*|OS_NOTIFIER_URI=http://$DEFAULT_IP:8662|g" $OSM_DOCKER_WORK_DIR/mon.env
944 fi
945
946 if ! grep -Fq "OSMMON_VCA_HOST" $OSM_DOCKER_WORK_DIR/mon.env; then
947 echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
948 else
949 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_HOST.*|OSMMON_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/mon.env
950 fi
951
952 if ! grep -Fq "OSMMON_VCA_SECRET" $OSM_DOCKER_WORK_DIR/mon.env; then
953 echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
954 else
955 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_SECRET.*|OSMMON_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/mon.env
956 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400957
Adam Israel6d8adf32019-12-05 15:46:54 -0500958 if ! grep -Fq "OSMMON_VCA_CACERT" $OSM_DOCKER_WORK_DIR/mon.env; then
959 echo "OSMMON_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
960 else
961 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_CACERT.*|OSMMON_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/mon.env
962 fi
963
964
Benjamin Diaz04560882019-02-26 17:25:07 -0300965 # POL
966 if [ ! -f $OSM_DOCKER_WORK_DIR/pol.env ]; then
967 echo "OSMPOL_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/pol" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/pol.env
968 fi
969
Benjamin Diaz4088a9b2019-05-21 15:11:49 -0300970 # LW-UI
971 if [ ! -f $OSM_DOCKER_WORK_DIR/lwui.env ]; then
972 echo "OSMUI_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/lwui" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lwui.env
973 fi
974
garciadeblasd8bc5c32018-05-09 17:37:56 +0200975 echo "Finished generation of docker env files"
976}
977
Mike Marchettib8420852018-09-13 13:45:06 -0400978function generate_osmclient_script () {
Mike Marchetti46d6efe2018-10-23 16:20:16 -0400979 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 -0400980 $WORKDIR_SUDO chmod +x "$OSM_DOCKER_WORK_DIR/osm"
981 echo "osmclient sidecar container can be found at: $OSM_DOCKER_WORK_DIR/osm"
982}
983
vijaynag8339ed22019-07-25 17:10:58 +0530984#installs kubernetes packages
985function install_kube() {
986 sudo apt-get update && sudo apt-get install -y apt-transport-https
987 curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
988 sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
989 sudo apt-get update
990 echo "Installing Kubernetes Packages ..."
991 sudo apt-get install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
992}
993
994#initializes kubernetes control plane
995function init_kubeadm() {
996 sudo swapoff -a
997 sudo kubeadm init --config $1
998 sleep 5
999}
1000
1001function kube_config_dir() {
1002 [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes"
1003 mkdir -p $HOME/.kube
1004 sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
1005 sudo chown $(id -u):$(id -g) $HOME/.kube/config
1006}
1007
1008#deploys flannel as daemonsets
1009function deploy_cni_provider() {
1010 CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")"
1011 trap 'rm -rf "${CNI_DIR}"' EXIT
1012 wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR
1013 kubectl apply -f $CNI_DIR
1014 [ $? -ne 0 ] && FATAL "Cannot Install Flannel"
1015}
1016
1017#creates secrets from env files which will be used by containers
1018function kube_secrets(){
1019 kubectl create ns $OSM_STACK_NAME
1020 kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env
1021 kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env
1022 kubectl create secret generic nbi-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/nbi.env
1023 kubectl create secret generic ro-db-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro-db.env
1024 kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env
1025 kubectl create secret generic keystone-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/keystone.env
1026 kubectl create secret generic lwui-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lwui.env
1027 kubectl create secret generic pol-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/pol.env
1028}
1029
1030#deploys osm pods and services
1031function deploy_osm_services() {
1032 K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}')
1033 kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
1034 sleep 5
1035 kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR
1036}
1037
1038function parse_yaml() {
1039 osm_services="nbi lcm ro pol mon light-ui keystone"
1040 TAG=$1
1041 for osm in $osm_services; do
1042 $WORKDIR_SUDO sed -i "s/opensourcemano\/$osm:.*/opensourcemano\/$osm:$TAG/g" $OSM_K8S_WORK_DIR/$osm.yaml
1043 done
1044}
1045
1046function namespace_vol() {
1047 osm_services="nbi lcm ro pol mon kafka mongo mysql"
1048 for osm in $osm_services; do
1049 $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml
1050 done
1051}
1052
garciadeblasa3e26612018-05-30 17:58:55 +02001053function init_docker_swarm() {
garciadeblasd8bc5c32018-05-09 17:37:56 +02001054 if [ "${DEFAULT_MTU}" != "1500" ]; then
1055 DOCKER_NETS=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
1056 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";}'`
1057 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"
1058 fi
garciadeblas5b857d32018-05-24 18:37:58 +02001059 sg docker -c "docker swarm init --advertise-addr ${DEFAULT_IP}"
garciadeblasa3e26612018-05-30 17:58:55 +02001060 return 0
1061}
1062
Mike Marchettib8420852018-09-13 13:45:06 -04001063function create_docker_network() {
1064 echo "creating network"
1065 sg docker -c "docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} net${OSM_STACK_NAME}"
1066 echo "creating network DONE"
1067}
1068
garciadeblasa3e26612018-05-30 17:58:55 +02001069function deploy_lightweight() {
Mike Marchettib8420852018-09-13 13:45:06 -04001070
garciadeblasa3e26612018-05-30 17:58:55 +02001071 echo "Deploying lightweight build"
Mike Marchettib8420852018-09-13 13:45:06 -04001072 OSM_NBI_PORT=9999
1073 OSM_RO_PORT=9090
Eduardo Sousa09a1e972018-09-21 11:06:32 +01001074 OSM_KEYSTONE_PORT=5000
Mike Marchettib8420852018-09-13 13:45:06 -04001075 OSM_UI_PORT=80
lavadoafa54c72018-10-05 09:28:28 -05001076 OSM_MON_PORT=8662
lavado60216242018-10-10 23:44:28 +02001077 OSM_PROM_PORT=9090
garciadeblasa7b27dc2019-12-04 15:06:55 +01001078 OSM_PROM_CADVISOR_PORT=8080
lavado60216242018-10-10 23:44:28 +02001079 OSM_PROM_HOSTPORT=9091
lavado6ad812e2019-11-29 10:58:58 -05001080 OSM_GRAFANA_PORT=3000
Eduardo Sousae00c8f92018-10-08 10:36:17 +01001081 [ -n "$INSTALL_ELK" ] && OSM_ELK_PORT=5601
lavado6ad812e2019-11-29 10:58:58 -05001082 #[ -n "$INSTALL_PERFMON" ] && OSM_PM_PORT=3000
lavado60216242018-10-10 23:44:28 +02001083
Mike Marchettib8420852018-09-13 13:45:06 -04001084 if [ -n "$NO_HOST_PORTS" ]; then
1085 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT)
1086 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +01001087 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001088 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -05001089 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +02001090 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +01001091 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -05001092 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT)
1093 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +01001094 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001095 else
1096 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT:$OSM_NBI_PORT)
1097 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT:$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +01001098 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT:$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001099 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT:$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -05001100 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT:$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +02001101 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_HOSTPORT:$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +01001102 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT:$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -05001103 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT:$OSM_GRAFANA_PORT)
1104 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT:$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +01001105 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT:$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -04001106 fi
1107 echo "export ${OSM_PORTS[@]}" | $WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/osm_ports.sh
1108 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 -04001109 echo "export TAG=${OSM_DOCKER_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Mike Marchettida8a9c42018-10-01 15:25:15 -04001110 echo "export DOCKER_USER=${DOCKER_USER}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -03001111 echo "export KAFKA_TAG=${KAFKA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado60216242018-10-10 23:44:28 +02001112 echo "export PROMETHEUS_TAG=${PROMETHEUS_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado9a8df7c2018-10-24 09:35:34 -05001113 echo "export KEYSTONEDB_TAG=${KEYSTONEDB_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado6ad812e2019-11-29 10:58:58 -05001114 echo "export PROMETHEUS_CADVISOR_TAG=${PROMETHEUS_CADVISOR_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
1115 echo "export GRAFANA_TAG=${GRAFANA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -03001116
Mike Marchettib8420852018-09-13 13:45:06 -04001117 pushd $OSM_DOCKER_WORK_DIR
beierl63229a22019-05-30 14:42:04 -04001118 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 -04001119 popd
1120
garciadeblasd8bc5c32018-05-09 17:37:56 +02001121 echo "Finished deployment of lightweight build"
1122}
1123
garciadeblas6c66abf2018-05-16 14:46:19 +02001124function deploy_elk() {
garciadeblase2aebfe2018-07-06 14:11:20 +02001125 echo "Pulling docker images for ELK"
lavado53eb8f52018-11-16 12:58:23 -05001126 sg docker -c "docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:${ELASTIC_VERSION}" || FATAL "cannot get elasticsearch docker image"
1127 sg docker -c "docker pull docker.elastic.co/beats/metricbeat:${ELASTIC_VERSION}" || FATAL "cannot get metricbeat docker image"
1128 sg docker -c "docker pull docker.elastic.co/beats/filebeat:${ELASTIC_VERSION}" || FATAL "cannot get filebeat docker image"
1129 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 -05001130 sg docker -c "docker pull bobrik/curator:${ELASTIC_CURATOR_VERSION}" || FATAL "cannot get curator docker image"
garciadeblase2aebfe2018-07-06 14:11:20 +02001131 echo "Finished pulling elk docker images"
Mike Marchettib8420852018-09-13 13:45:06 -04001132 $WORKDIR_SUDO mkdir -p "$OSM_DOCKER_WORK_DIR/osm_elk"
1133 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_elk/* $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas5b857d32018-05-24 18:37:58 +02001134 remove_stack osm_elk
garciadeblas6c66abf2018-05-16 14:46:19 +02001135 echo "Deploying ELK stack"
Mike Marchettib8420852018-09-13 13:45:06 -04001136 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 +02001137 echo "Waiting for ELK stack to be up and running"
1138 time=0
garciadeblase2aebfe2018-07-06 14:11:20 +02001139 step=5
1140 timelength=40
garciadeblas6c66abf2018-05-16 14:46:19 +02001141 elk_is_up=1
1142 while [ $time -le $timelength ]; do
garciadeblase2aebfe2018-07-06 14:11:20 +02001143 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 +02001144 elk_is_up=0
1145 break
1146 fi
1147 sleep $step
1148 time=$((time+step))
1149 done
1150 if [ $elk_is_up -eq 0 ]; then
1151 echo "ELK is up and running. Trying to create index pattern..."
1152 #Create index pattern
1153 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -05001154 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
1155 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001156 #Make it the default index
garciadeblase2aebfe2018-07-06 14:11:20 +02001157 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +02001158 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -05001159 -d"{\"value\":\"filebeat-*\"}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001160 else
1161 echo "Cannot connect to Kibana to create index pattern."
1162 echo "Once Kibana is running, you can use the following instructions to create index pattern:"
1163 echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -05001164 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
1165 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}"'
garciadeblas6c66abf2018-05-16 14:46:19 +02001166 echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +02001167 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -05001168 -d"{\"value\":\"filebeat-*\"}"'
garciadeblas6c66abf2018-05-16 14:46:19 +02001169 fi
1170 echo "Finished deployment of ELK stack"
1171 return 0
1172}
1173
garciadeblasd8bc5c32018-05-09 17:37:56 +02001174function install_lightweight() {
garciadeblas0d45bc82018-11-19 14:25:13 +01001175 [ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
vijaynag8339ed22019-07-25 17:10:58 +05301176 [ -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 -04001177 [ ! -d "$OSM_DOCKER_WORK_DIR" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR
vijaynag8339ed22019-07-25 17:10:58 +05301178 [ -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 -04001179
garciadeblas183e5802018-12-13 18:20:54 +01001180 track checkingroot
garciadeblasd13a8aa2018-05-18 15:24:51 +02001181 [ "$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 +01001182 track noroot
vijaynag8339ed22019-07-25 17:10:58 +05301183
1184 if [ -n "$KUBERNETES" ]; then
1185 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
1186 1. Install and configure LXD
1187 2. Install juju
1188 3. Install docker CE
1189 4. Disable swap space
1190 5. Install and initialize Kubernetes
1191 as pre-requirements.
1192 Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
1193
1194 else
1195 [ -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
1196 fi
garciadeblasfae5e972018-06-12 18:27:11 +02001197 track proceed
vijaynag8339ed22019-07-25 17:10:58 +05301198
garciadeblasd8bc5c32018-05-09 17:37:56 +02001199 echo "Installing lightweight build of OSM"
1200 LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
1201 trap 'rm -rf "${LWTEMPDIR}"' EXIT
1202 DEFAULT_IF=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
garciadeblas8cd60772018-06-02 08:38:17 +02001203 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001204 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
garciadeblas8cd60772018-06-02 08:38:17 +02001205 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001206 DEFAULT_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
Mike Marchettib8420852018-09-13 13:45:06 -04001207
1208 # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to
lavadoe07b1642018-10-25 10:58:34 -05001209 if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ]; then
garciadeblasbd925e42018-06-14 14:32:12 +02001210 need_packages_lw="lxd snapd"
garciadeblasd41f5482018-05-25 10:25:06 +02001211 echo -e "Checking required packages: $need_packages_lw"
1212 dpkg -l $need_packages_lw &>/dev/null \
1213 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1214 || sudo apt-get update \
1215 || FATAL "failed to run apt-get update"
1216 dpkg -l $need_packages_lw &>/dev/null \
1217 || ! echo -e "Installing $need_packages_lw requires root privileges." \
1218 || sudo apt-get install -y $need_packages_lw \
1219 || FATAL "failed to install $need_packages_lw"
1220 fi
garciadeblasfae5e972018-06-12 18:27:11 +02001221 track prereqok
Mike Marchettib8420852018-09-13 13:45:06 -04001222
vijaynag8339ed22019-07-25 17:10:58 +05301223 [ -z "$INSTALL_NOJUJU" ] && install_juju
garciadeblas183e5802018-12-13 18:20:54 +01001224 track juju_install
vijaynag8339ed22019-07-25 17:10:58 +05301225
lavadoe07b1642018-10-25 10:58:34 -05001226 if [ -z "$OSM_VCA_HOST" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -04001227 juju_createcontroller
lavadoe07b1642018-10-25 10:58:34 -05001228 OSM_VCA_HOST=`sg lxd -c "juju show-controller $OSM_STACK_NAME"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
1229 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
Mike Marchettib8420852018-09-13 13:45:06 -04001230 fi
garciadeblas183e5802018-12-13 18:20:54 +01001231 track juju_controller
vijaynag8339ed22019-07-25 17:10:58 +05301232
lavadoe07b1642018-10-25 10:58:34 -05001233 if [ -z "$OSM_VCA_SECRET" ]; then
1234 OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME)
1235 [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
Mike Marchettib8420852018-09-13 13:45:06 -04001236 fi
garciadeblasaa3ddf42019-04-04 19:04:32 +02001237 if [ -z "$OSM_VCA_PUBKEY" ]; then
1238 OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
1239 [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
1240 fi
Adam Israel5ddc97f2019-09-03 18:11:12 -04001241 if [ -z "$OSM_VCA_APIPROXY" ]; then
1242 OSM_VCA_APIPROXY=$DEFAULT_IP
1243 [ -z "$OSM_VCA_APIPROXY" ] && FATAL "Cannot obtain juju api proxy"
1244 fi
1245 juju_createproxy
1246
Adam Israelbe7676a2019-10-02 16:10:53 -04001247 if [ -z "$OSM_VCA_CACERT" ]; then
1248 OSM_VCA_CACERT=$(juju controllers --format json | jq -r '.controllers["osm"]["ca-cert"]' | base64 | tr -d \\n)
1249 [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
1250 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -03001251 if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
1252 OSM_DATABASE_COMMONKEY=$(generate_secret)
1253 [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret"
1254 fi
garciadeblas6c66abf2018-05-16 14:46:19 +02001255 track juju
vijaynag8339ed22019-07-25 17:10:58 +05301256
garciadeblasa3e26612018-05-30 17:58:55 +02001257 [ -n "$INSTALL_NODOCKER" ] || install_docker_ce
garciadeblas6c66abf2018-05-16 14:46:19 +02001258 track docker_ce
vijaynag8339ed22019-07-25 17:10:58 +05301259
1260 #Installs Kubernetes and deploys osm services
1261 if [ -n "$KUBERNETES" ]; then
1262 install_kube
1263 track install_k8s
1264 init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
1265 kube_config_dir
1266 track init_k8s
1267 else
1268 #install_docker_compose
1269 [ -n "$INSTALL_NODOCKER" ] || init_docker_swarm
1270 track docker_swarm
1271 fi
1272
Mike Marchettib8420852018-09-13 13:45:06 -04001273 [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
garciadeblas6c66abf2018-05-16 14:46:19 +02001274 track docker_build
vijaynag8339ed22019-07-25 17:10:58 +05301275
garciadeblasd8bc5c32018-05-09 17:37:56 +02001276 generate_docker_env_files
Mike Marchettib8420852018-09-13 13:45:06 -04001277
vijaynag8339ed22019-07-25 17:10:58 +05301278 if [ -n "$KUBERNETES" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +01001279 if [ -n "$K8S_MONITOR" ]; then
1280 # uninstall OSM MONITORING
1281 uninstall_k8s_monitoring
1282 fi
vijaynag8339ed22019-07-25 17:10:58 +05301283 #remove old namespace
1284 remove_k8s_namespace $OSM_STACK_NAME
1285 deploy_cni_provider
1286 kube_secrets
1287 [ ! $OSM_DOCKER_TAG == "latest" ] && parse_yaml $OSM_DOCKER_TAG
1288 namespace_vol
1289 deploy_osm_services
1290 track deploy_osm_services_k8s
1291 else
1292 # remove old stack
1293 remove_stack $OSM_STACK_NAME
1294 create_docker_network
1295 deploy_lightweight
1296 generate_osmclient_script
1297 track docker_deploy
lavado6ad812e2019-11-29 10:58:58 -05001298 install_prometheus_nodeexporter
vijaynag8339ed22019-07-25 17:10:58 +05301299 [ -n "$INSTALL_VIMEMU" ] && install_vimemu && track vimemu
1300 [ -n "$INSTALL_ELK" ] && deploy_elk && track elk
vijaynag8339ed22019-07-25 17:10:58 +05301301 fi
1302
romeromonsere366b1a2019-11-19 19:49:26 +01001303 if [ -n "$KUBERNETES" ] && [ -n "$K8S_MONITOR" ]; then
1304 # install OSM MONITORING
1305 install_k8s_monitoring
1306 track install_k8s_monitoring
1307 fi
1308
Mike Marchettib8420852018-09-13 13:45:06 -04001309 [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
garciadeblas6c66abf2018-05-16 14:46:19 +02001310 track osmclient
vijaynag8339ed22019-07-25 17:10:58 +05301311
garciadeblasb6a0bf12019-09-10 21:08:21 +02001312 wget -q -O- https://osm-download.etsi.org/ftp/osm-6.0-six/README2.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001313 track end
garciadeblasd8bc5c32018-05-09 17:37:56 +02001314 return 0
1315}
1316
1317function install_vimemu() {
peusterm76353e42018-05-08 13:56:05 +02001318 echo "\nInstalling vim-emu"
1319 EMUTEMPDIR="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX")"
1320 trap 'rm -rf "${EMUTEMPDIR}"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001321 # clone vim-emu repository (attention: branch is currently master only)
1322 echo "Cloning vim-emu repository ..."
peusterm76353e42018-05-08 13:56:05 +02001323 git clone https://osm.etsi.org/gerrit/osm/vim-emu.git $EMUTEMPDIR
garciadeblasd8bc5c32018-05-09 17:37:56 +02001324 # build vim-emu docker
1325 echo "Building vim-emu Docker container..."
Mike Marchettib8420852018-09-13 13:45:06 -04001326
1327 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 +02001328 # start vim-emu container as daemon
1329 echo "Starting vim-emu Docker container 'vim-emu' ..."
peusterm76353e42018-05-08 13:56:05 +02001330 if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
1331 # in lightweight mode, the emulator needs to be attached to netOSM
Mike Marchettib8420852018-09-13 13:45:06 -04001332 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 +02001333 else
1334 # classic build mode
Mike Marchettib8420852018-09-13 13:45:06 -04001335 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 +02001336 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001337 echo "Waiting for 'vim-emu' container to start ..."
1338 sleep 5
Mike Marchettib8420852018-09-13 13:45:06 -04001339 export VIMEMU_HOSTNAME=$(sg docker -c "docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001340 echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
peusterm76353e42018-05-08 13:56:05 +02001341 # print vim-emu connection info
1342 echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001343 echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
peusterm76353e42018-05-08 13:56:05 +02001344 echo -e "To add the emulated VIM to OSM you should do:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001345 echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
1346}
1347
romeromonsere366b1a2019-11-19 19:49:26 +01001348function install_k8s_monitoring() {
1349 # install OSM monitoring
1350 chmod +x $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/*.sh
1351 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh
1352}
1353
1354function uninstall_k8s_monitoring() {
1355 # install OSM monitoring
1356 chmod +x $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/*.sh
1357 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/uninstall_osm_k8s_monitoring.sh
1358}
1359
garciadeblasd8bc5c32018-05-09 17:37:56 +02001360function dump_vars(){
1361 echo "DEVELOP=$DEVELOP"
1362 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
1363 echo "UNINSTALL=$UNINSTALL"
1364 echo "NAT=$NAT"
1365 echo "UPDATE=$UPDATE"
1366 echo "RECONFIGURE=$RECONFIGURE"
1367 echo "TEST_INSTALLER=$TEST_INSTALLER"
1368 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
1369 echo "INSTALL_LXD=$INSTALL_LXD"
1370 echo "INSTALL_FROM_LXDIMAGES=$INSTALL_FROM_LXDIMAGES"
1371 echo "LXD_REPOSITORY_BASE=$LXD_REPOSITORY_BASE"
1372 echo "LXD_REPOSITORY_PATH=$LXD_REPOSITORY_PATH"
1373 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
garciadeblas6c66abf2018-05-16 14:46:19 +02001374 echo "INSTALL_ONLY=$INSTALL_ONLY"
1375 echo "INSTALL_ELK=$INSTALL_ELK"
lavado6ad812e2019-11-29 10:58:58 -05001376 #echo "INSTALL_PERFMON=$INSTALL_PERFMON"
garciadeblas0e596bc2018-05-28 16:04:42 +02001377 echo "TO_REBUILD=$TO_REBUILD"
garciadeblasd41f5482018-05-25 10:25:06 +02001378 echo "INSTALL_NOLXD=$INSTALL_NOLXD"
garciadeblasa3e26612018-05-30 17:58:55 +02001379 echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
garciadeblas0d45bc82018-11-19 14:25:13 +01001380 echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001381 echo "RELEASE=$RELEASE"
1382 echo "REPOSITORY=$REPOSITORY"
1383 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
1384 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
1385 echo "NOCONFIGURE=$NOCONFIGURE"
garciadeblas0d45bc82018-11-19 14:25:13 +01001386 echo "OSM_DEVOPS=$OSM_DEVOPS"
1387 echo "OSM_VCA_HOST=$OSM_VCA_HOST"
1388 echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
garciadeblasaa3ddf42019-04-04 19:04:32 +02001389 echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001390 echo "NO_HOST_PORTS=$NO_HOST_PORTS"
1391 echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
1392 echo "WORKDIR_SUDO=$WORKDIR_SUDO"
1393 echo "OSM_WORK_DIR=$OSM_STACK_NAME"
1394 echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
1395 echo "DOCKER_USER=$DOCKER_USER"
1396 echo "OSM_STACK_NAME=$OSM_STACK_NAME"
1397 echo "PULL_IMAGES=$PULL_IMAGES"
vijaynag8339ed22019-07-25 17:10:58 +05301398 echo "KUBERNETES=$KUBERNETES"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001399 echo "SHOWOPTS=$SHOWOPTS"
1400 echo "Install from specific refspec (-b): $COMMIT_ID"
1401}
1402
1403function track(){
1404 ctime=`date +%s`
1405 duration=$((ctime - SESSION_ID))
1406 url="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
1407 #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
1408 event_name="bin"
garciadeblas6c66abf2018-05-16 14:46:19 +02001409 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name="binsrc"
1410 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name="lxd"
1411 [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name="lw"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001412 event_name="${event_name}_$1"
1413 url="${url}&event=${event_name}&ce_duration=${duration}"
1414 wget -q -O /dev/null $url
1415}
1416
1417UNINSTALL=""
1418DEVELOP=""
1419NAT=""
1420UPDATE=""
1421RECONFIGURE=""
1422TEST_INSTALLER=""
1423INSTALL_LXD=""
1424SHOWOPTS=""
1425COMMIT_ID=""
1426ASSUME_YES=""
1427INSTALL_FROM_SOURCE=""
Gerardo Garcíac471ecc2019-06-26 16:40:28 +02001428RELEASE="ReleaseSIX"
Mike Marchettib8420852018-09-13 13:45:06 -04001429REPOSITORY="stable"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001430INSTALL_VIMEMU=""
1431INSTALL_FROM_LXDIMAGES=""
1432LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
1433LXD_REPOSITORY_PATH=""
1434INSTALL_LIGHTWEIGHT="y"
garciadeblas6c66abf2018-05-16 14:46:19 +02001435INSTALL_ONLY=""
1436INSTALL_ELK=""
lavado6ad812e2019-11-29 10:58:58 -05001437#INSTALL_PERFMON=""
garciadeblas0e596bc2018-05-28 16:04:42 +02001438TO_REBUILD=""
garciadeblasd41f5482018-05-25 10:25:06 +02001439INSTALL_NOLXD=""
garciadeblasa3e26612018-05-30 17:58:55 +02001440INSTALL_NODOCKER=""
Mike Marchettib8420852018-09-13 13:45:06 -04001441INSTALL_NOJUJU=""
vijaynag8339ed22019-07-25 17:10:58 +05301442KUBERNETES=""
romeromonsere366b1a2019-11-19 19:49:26 +01001443K8S_MONITOR=""
garciadeblas0d45bc82018-11-19 14:25:13 +01001444INSTALL_NOHOSTCLIENT=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001445NOCONFIGURE=""
1446RELEASE_DAILY=""
1447SESSION_ID=`date +%s`
1448OSM_DEVOPS=
lavadoe07b1642018-10-25 10:58:34 -05001449OSM_VCA_HOST=
1450OSM_VCA_SECRET=
garciadeblasaa3ddf42019-04-04 19:04:32 +02001451OSM_VCA_PUBKEY=
Mike Marchettib8420852018-09-13 13:45:06 -04001452OSM_STACK_NAME=osm
1453NO_HOST_PORTS=""
1454DOCKER_NOBUILD=""
1455REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
garciadeblas870e60a2018-11-21 16:44:21 +01001456REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
Mike Marchettib8420852018-09-13 13:45:06 -04001457WORKDIR_SUDO=sudo
1458OSM_WORK_DIR="/etc/osm"
garciadeblas526f0fb2018-11-23 14:47:40 +01001459OSM_DOCKER_WORK_DIR="/etc/osm/docker"
vijaynag8339ed22019-07-25 17:10:58 +05301460OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
1461OSM_HOST_VOL="/var/lib/osm"
1462OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
Mike Marchetti13d76c82018-09-19 15:00:36 -04001463OSM_DOCKER_TAG=latest
garciadeblas0d45bc82018-11-19 14:25:13 +01001464DOCKER_USER=opensourcemano
1465PULL_IMAGES="y"
Benjamin Diazaa0af712018-10-04 14:02:34 -03001466KAFKA_TAG=2.11-1.0.2
lavado60216242018-10-10 23:44:28 +02001467PROMETHEUS_TAG=v2.4.3
lavado6ad812e2019-11-29 10:58:58 -05001468GRAFANA_TAG=latest
1469PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
1470PROMETHEUS_CADVISOR_TAG=latest
lavado9a8df7c2018-10-24 09:35:34 -05001471KEYSTONEDB_TAG=10
Benjamin Diazba2cca92018-11-08 21:07:15 -03001472OSM_DATABASE_COMMONKEY=
lavado53eb8f52018-11-16 12:58:23 -05001473ELASTIC_VERSION=6.4.2
lavado4e8662c2018-11-28 11:28:14 -05001474ELASTIC_CURATOR_VERSION=5.5.4
vijaynag8339ed22019-07-25 17:10:58 +05301475POD_NETWORK_CIDR=10.244.0.0/16
1476K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
1477RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
garciadeblasd8bc5c32018-05-09 17:37:56 +02001478
vijaynag8339ed22019-07-25 17:10:58 +05301479while 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 +02001480 case "${o}" in
1481 h)
1482 usage && exit 0
1483 ;;
1484 b)
1485 COMMIT_ID=${OPTARG}
garciadeblas0d45bc82018-11-19 14:25:13 +01001486 PULL_IMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001487 ;;
1488 r)
Mike Marchettib8420852018-09-13 13:45:06 -04001489 REPOSITORY="${OPTARG}"
1490 REPO_ARGS+=(-r "$REPOSITORY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001491 ;;
vijaynag8339ed22019-07-25 17:10:58 +05301492 c)
1493 [ "${OPTARG}" == "swarm" ] && continue
1494 [ "${OPTARG}" == "k8s" ] && KUBERNETES="y" && continue
1495 echo -e "Invalid argument for -i : ' $OPTARG'\n" >&2
1496 usage && exit 1
1497 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001498 R)
Mike Marchettib8420852018-09-13 13:45:06 -04001499 RELEASE="${OPTARG}"
1500 REPO_ARGS+=(-R "$RELEASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001501 ;;
1502 k)
Mike Marchettib8420852018-09-13 13:45:06 -04001503 REPOSITORY_KEY="${OPTARG}"
1504 REPO_ARGS+=(-k "$REPOSITORY_KEY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001505 ;;
1506 u)
Mike Marchettib8420852018-09-13 13:45:06 -04001507 REPOSITORY_BASE="${OPTARG}"
1508 REPO_ARGS+=(-u "$REPOSITORY_BASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001509 ;;
garciadeblas0d45bc82018-11-19 14:25:13 +01001510 U)
1511 DOCKER_USER="${OPTARG}"
1512 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001513 l)
1514 LXD_REPOSITORY_BASE="${OPTARG}"
1515 ;;
1516 p)
1517 LXD_REPOSITORY_PATH="${OPTARG}"
1518 ;;
1519 D)
1520 OSM_DEVOPS="${OPTARG}"
1521 ;;
Mike Marchettib8420852018-09-13 13:45:06 -04001522 s)
vijaynag8339ed22019-07-25 17:10:58 +05301523 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 -04001524 ;;
1525 H)
lavadoe07b1642018-10-25 10:58:34 -05001526 OSM_VCA_HOST="${OPTARG}"
Mike Marchettib8420852018-09-13 13:45:06 -04001527 ;;
1528 S)
lavadoe07b1642018-10-25 10:58:34 -05001529 OSM_VCA_SECRET="${OPTARG}"
Mike Marchettib8420852018-09-13 13:45:06 -04001530 ;;
garciadeblasaa3ddf42019-04-04 19:04:32 +02001531 P)
1532 OSM_VCA_PUBKEY=$(cat ${OPTARG})
1533 ;;
Adam Israel5ddc97f2019-09-03 18:11:12 -04001534 A)
1535 OSM_VCA_APIPROXY="${OPTARG}"
1536 ;;
Mike Marchettib8420852018-09-13 13:45:06 -04001537 w)
1538 # when specifying workdir, do not use sudo for access
1539 WORKDIR_SUDO=
1540 OSM_WORK_DIR="${OPTARG}"
1541 ;;
Mike Marchetti13d76c82018-09-19 15:00:36 -04001542 t)
1543 OSM_DOCKER_TAG="${OPTARG}"
1544 ;;
garciadeblas6c66abf2018-05-16 14:46:19 +02001545 o)
1546 INSTALL_ONLY="y"
1547 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
1548 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
lavado6ad812e2019-11-29 10:58:58 -05001549 #[ "${OPTARG}" == "pm_stack" ] && INSTALL_PERFMON="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001550 ;;
garciadeblas0e596bc2018-05-28 16:04:42 +02001551 m)
garciadeblas0e596bc2018-05-28 16:04:42 +02001552 [ "${OPTARG}" == "LW-UI" ] && TO_REBUILD="$TO_REBUILD LW-UI" && continue
govindappa79e51b92019-05-22 12:15:21 +05301553 [ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
1554 [ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
1555 [ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001556 [ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
govindappa79e51b92019-05-22 12:15:21 +05301557 [ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001558 [ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
1559 [ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
govindappa79e51b92019-05-22 12:15:21 +05301560 [ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
1561 [ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
lavado6ad812e2019-11-29 10:58:58 -05001562 [ "${OPTARG}" == "GRAFANA" ] && TO_REBUILD="$TO_REBUILD GRAFANA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001563 [ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
1564 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001565 -)
1566 [ "${OPTARG}" == "help" ] && usage && exit 0
garciadeblas0d45bc82018-11-19 14:25:13 +01001567 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001568 [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
1569 [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
1570 [ "${OPTARG}" == "nat" ] && NAT="y" && continue
1571 [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
1572 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
1573 [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
1574 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
garciadeblasd41f5482018-05-25 10:25:06 +02001575 [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
garciadeblasa3e26612018-05-30 17:58:55 +02001576 [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001577 [ "${OPTARG}" == "lxdimages" ] && INSTALL_FROM_LXDIMAGES="y" && continue
1578 [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT="y" && continue
garciadeblase990f662018-05-18 11:43:39 +02001579 [ "${OPTARG}" == "soui" ] && INSTALL_LIGHTWEIGHT="" && RELEASE="-R ReleaseTHREE" && REPOSITORY="-r stable" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001580 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001581 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
lavado6ad812e2019-11-29 10:58:58 -05001582 #[ "${OPTARG}" == "pm_stack" ] && INSTALL_PERFMON="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001583 [ "${OPTARG}" == "noconfigure" ] && NOCONFIGURE="y" && continue
1584 [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
1585 [ "${OPTARG}" == "daily" ] && RELEASE_DAILY="y" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001586 [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
1587 [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
1588 [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
1589 [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
garciadeblas0d45bc82018-11-19 14:25:13 +01001590 [ "${OPTARG}" == "pullimages" ] && continue
romeromonsere366b1a2019-11-19 19:49:26 +01001591 [ "${OPTARG}" == "k8s_monitor" ] && K8S_MONITOR="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001592 echo -e "Invalid option: '--$OPTARG'\n" >&2
1593 usage && exit 1
1594 ;;
1595 \?)
1596 echo -e "Invalid option: '-$OPTARG'\n" >&2
1597 usage && exit 1
1598 ;;
1599 y)
1600 ASSUME_YES="y"
1601 ;;
1602 *)
1603 usage && exit 1
1604 ;;
1605 esac
1606done
1607
garciadeblas6c66abf2018-05-16 14:46:19 +02001608[ -n "$INSTALL_FROM_LXDIMAGES" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --lxd can only be used with --soui"
garciadeblase990f662018-05-18 11:43:39 +02001609[ -n "$NAT" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --nat can only be used with --soui"
1610[ -n "$NOCONFIGURE" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --noconfigure can only be used with --soui"
garciadeblasfb566272018-05-25 10:33:36 +02001611[ -n "$RELEASE_DAILY" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible options: --daily can only be used with --soui"
garciadeblasd41f5482018-05-25 10:25:06 +02001612[ -n "$INSTALL_NOLXD" ] && [ -z "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible option: --nolxd cannot be used with --soui"
garciadeblasa3e26612018-05-30 17:58:55 +02001613[ -n "$INSTALL_NODOCKER" ] && [ -z "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible option: --nodocker cannot be used with --soui"
garciadeblas0e596bc2018-05-28 16:04:42 +02001614[ -n "$TO_REBUILD" ] && [ -z "$INSTALL_LIGHTWEIGHT" ] && FATAL "Incompatible option: -m cannot be used with --soui"
1615[ -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 +02001616
garciadeblasd8bc5c32018-05-09 17:37:56 +02001617if [ -n "$SHOWOPTS" ]; then
1618 dump_vars
1619 exit 0
1620fi
1621
1622[ -n "$RELEASE_DAILY" ] && echo -e "\nInstalling from daily build repo" && RELEASE="-R ReleaseTHREE-daily" && REPOSITORY="-r testing" && COMMIT_ID="master"
1623
1624# if develop, we force master
1625[ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
1626
garciadeblasd8bc5c32018-05-09 17:37:56 +02001627need_packages="git jq wget curl tar"
1628echo -e "Checking required packages: $need_packages"
1629dpkg -l $need_packages &>/dev/null \
1630 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1631 || sudo apt-get update \
1632 || FATAL "failed to run apt-get update"
1633dpkg -l $need_packages &>/dev/null \
1634 || ! echo -e "Installing $need_packages requires root privileges." \
1635 || sudo apt-get install -y $need_packages \
1636 || FATAL "failed to install $need_packages"
1637
1638if [ -z "$OSM_DEVOPS" ]; then
Michael Marchettiee374142018-08-02 22:47:16 +02001639 if [ -n "$TEST_INSTALLER" ]; then
1640 echo -e "\nUsing local devops repo for OSM installation"
1641 OSM_DEVOPS="$(dirname $(realpath $(dirname $0)))"
1642 else
1643 echo -e "\nCreating temporary dir for OSM installation"
1644 OSM_DEVOPS="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
1645 trap 'rm -rf "$OSM_DEVOPS"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001646
Michael Marchettiee374142018-08-02 22:47:16 +02001647 git clone https://osm.etsi.org/gerrit/osm/devops.git $OSM_DEVOPS
garciadeblasd8bc5c32018-05-09 17:37:56 +02001648
Michael Marchettiee374142018-08-02 22:47:16 +02001649 if [ -z "$COMMIT_ID" ]; then
1650 echo -e "\nGuessing the current stable release"
1651 LATEST_STABLE_DEVOPS=`git -C $OSM_DEVOPS tag -l v[0-9].* | sort -V | tail -n1`
1652 [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
1653
1654 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
1655 COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
1656 else
1657 echo -e "\nDEVOPS Using commit $COMMIT_ID"
1658 fi
1659 git -C $OSM_DEVOPS checkout $COMMIT_ID
garciadeblasd8bc5c32018-05-09 17:37:56 +02001660 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001661fi
1662
garciadeblas3c25fab2019-11-18 17:24:43 +01001663. $OSM_DEVOPS/common/all_funcs
garciadeblasd8bc5c32018-05-09 17:37:56 +02001664
1665[ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight && echo -e "\nDONE" && exit 0
1666[ -n "$UNINSTALL" ] && uninstall && echo -e "\nDONE" && exit 0
1667[ -n "$NAT" ] && nat && echo -e "\nDONE" && exit 0
1668[ -n "$UPDATE" ] && update && echo -e "\nDONE" && exit 0
1669[ -n "$RECONFIGURE" ] && configure && echo -e "\nDONE" && exit 0
garciadeblas6c66abf2018-05-16 14:46:19 +02001670[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
lavado6ad812e2019-11-29 10:58:58 -05001671#[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
garciadeblas6c66abf2018-05-16 14:46:19 +02001672[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
1673[ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
garciadeblasd8bc5c32018-05-09 17:37:56 +02001674
1675#Installation starts here
garciadeblasb1993ed2019-09-10 00:58:43 +02001676wget -q -O- https://osm-download.etsi.org/ftp/osm-6.0-six/README.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001677track start
1678
garciadeblasd8bc5c32018-05-09 17:37:56 +02001679[ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight && echo -e "\nDONE" && exit 0
1680echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
1681if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
1682 ! ask_user "The installation will take about 75-90 minutes. Continue (Y/n)? " y && echo "Cancelled!" && exit 1
1683fi
1684
1685echo -e "Checking required packages: lxd"
1686lxd --version &>/dev/null || FATAL "lxd not present, exiting."
1687[ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
1688
garciadeblasd8bc5c32018-05-09 17:37:56 +02001689# use local devops for containers
1690export OSM_USE_LOCAL_DEVOPS=true
1691if [ -n "$INSTALL_FROM_SOURCE" ]; then #install from source
1692 echo -e "\nCreating the containers and building from source ..."
1693 $OSM_DEVOPS/jenkins/host/start_build RO --notest checkout $COMMIT_ID || FATAL "RO container build failed (refspec: '$COMMIT_ID')"
1694 ro_is_up && track RO
1695 $OSM_DEVOPS/jenkins/host/start_build VCA || FATAL "VCA container build failed"
1696 vca_is_up && track VCA
1697 $OSM_DEVOPS/jenkins/host/start_build MON || FATAL "MON install failed"
1698 mon_is_up && track MON
1699 $OSM_DEVOPS/jenkins/host/start_build SO checkout $COMMIT_ID || FATAL "SO container build failed (refspec: '$COMMIT_ID')"
1700 $OSM_DEVOPS/jenkins/host/start_build UI checkout $COMMIT_ID || FATAL "UI container build failed (refspec: '$COMMIT_ID')"
1701 #so_is_up && track SOUI
1702 track SOUI
1703elif [ -n "$INSTALL_FROM_LXDIMAGES" ]; then #install from LXD images stored in OSM repo
1704 echo -e "\nInstalling from lxd images ..."
1705 install_from_lxdimages
1706else #install from binaries
1707 echo -e "\nCreating the containers and installing from binaries ..."
Mike Marchettib8420852018-09-13 13:45:06 -04001708 $OSM_DEVOPS/jenkins/host/install RO ${REPO_ARGS[@]} || FATAL "RO install failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001709 ro_is_up && track RO
1710 $OSM_DEVOPS/jenkins/host/start_build VCA || FATAL "VCA install failed"
1711 vca_is_up && track VCA
1712 $OSM_DEVOPS/jenkins/host/install MON || FATAL "MON build failed"
1713 mon_is_up && track MON
Mike Marchettib8420852018-09-13 13:45:06 -04001714 $OSM_DEVOPS/jenkins/host/install SO ${REPO_ARGS[@]} || FATAL "SO install failed"
1715 $OSM_DEVOPS/jenkins/host/install UI ${REPO_ARGS[@]} || FATAL "UI install failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001716 #so_is_up && track SOUI
1717 track SOUI
1718fi
1719
1720#Install iptables-persistent and configure NAT rules
1721[ -z "$NOCONFIGURE" ] && nat
1722
1723#Configure components
1724[ -z "$NOCONFIGURE" ] && configure
1725
1726#Install osmclient
1727[ -z "$NOCONFIGURE" ] && install_osmclient
1728
1729#Install vim-emu (optional)
peusterm76353e42018-05-08 13:56:05 +02001730[ -n "$INSTALL_VIMEMU" ] && install_docker_ce && install_vimemu
garciadeblasd8bc5c32018-05-09 17:37:56 +02001731
garciadeblasb1993ed2019-09-10 00:58:43 +02001732wget -q -O- https://osm-download.etsi.org/ftp/osm-6.0-six/README2.txt &> /dev/null
garciadeblasd8bc5c32018-05-09 17:37:56 +02001733track end
1734echo -e "\nDONE"