blob: d657ccf7aaf6ee78c737ba30c5ea62bcff225604 [file] [log] [blame]
garciadeblasd8bc5c32018-05-09 17:37:56 +02001#!/bin/bash
2# Copyright 2016 Telefónica Investigación y Desarrollo S.A.U.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16function usage(){
17 echo -e "usage: $0 [OPTIONS]"
18 echo -e "Install OSM from binaries or source code (by default, from binaries)"
19 echo -e " OPTIONS"
garciadeblasd8bc5c32018-05-09 17:37:56 +020020 echo -e " -r <repo>: use specified repository name for osm packages"
21 echo -e " -R <release>: use specified release for osm binaries (deb packages, lxd images, ...)"
22 echo -e " -u <repo base>: use specified repository url for osm packages"
23 echo -e " -k <repo key>: use specified repository public key url"
24 echo -e " -b <refspec>: install OSM from source code using a specific branch (master, v2.0, ...) or tag"
25 echo -e " -b master (main dev branch)"
26 echo -e " -b v2.0 (v2.0 branch)"
27 echo -e " -b tags/v1.1.0 (a specific tag)"
28 echo -e " ..."
vijaynag8339ed22019-07-25 17:10:58 +053029 echo -e " -c <orchestrator> deploy osm services using container <orchestrator>. Valid values are <k8s> or <swarm>. If -c is not used then osm will be deployed using default orchestrator. When used with --uninstall, osm services deployed by the orchestrator will be uninstalled"
30 echo -e " -s <stack name> or <namespace> user defined stack name when installed using swarm or namespace when installed using k8s, default is osm"
Mike Marchettib8420852018-09-13 13:45:06 -040031 echo -e " -H <VCA host> use specific juju host controller IP"
32 echo -e " -S <VCA secret> use VCA/juju secret key"
garciadeblasaa3ddf42019-04-04 19:04:32 +020033 echo -e " -P <VCA pubkey> use VCA/juju public key file"
garciadeblas0c2f62b2019-05-29 15:23:19 +020034 echo -e " -C <VCA cacert> use VCA/juju CA certificate file"
Adam Israel5ddc97f2019-09-03 18:11:12 -040035 echo -e " -A <VCA apiproxy> use VCA/juju API proxy"
garciadeblas6c66abf2018-05-16 14:46:19 +020036 echo -e " --vimemu: additionally deploy the VIM emulator as a docker container"
37 echo -e " --elk_stack: additionally deploy an ELK docker stack for event logging"
garciadeblasfc5bb142019-12-10 10:49:12 +010038 echo -e " -m <MODULE>: install OSM but only rebuild the specified docker images (LW-UI, NBI, LCM, RO, MON, POL, KAFKA, MONGO, PROMETHEUS, PROMETHEUS-CADVISOR, KEYSTONE-DB, NONE)"
39 echo -e " -o <ADDON>: ONLY (un)installs one of the addons (vimemu, elk_stack)"
garciadeblase990f662018-05-18 11:43:39 +020040 echo -e " -D <devops path> use local devops installation path"
Mike Marchettib8420852018-09-13 13:45:06 -040041 echo -e " -w <work dir> Location to store runtime installation"
Mike Marchetti13d76c82018-09-19 15:00:36 -040042 echo -e " -t <docker tag> specify osm docker tag (default is latest)"
garciadeblasd41f5482018-05-25 10:25:06 +020043 echo -e " --nolxd: do not install and configure LXD, allowing unattended installations (assumes LXD is already installed and confifured)"
garciadeblasa3e26612018-05-30 17:58:55 +020044 echo -e " --nodocker: do not install docker, do not initialize a swarm (assumes docker is already installed and a swarm has been initialized)"
Mike Marchettib8420852018-09-13 13:45:06 -040045 echo -e " --nojuju: do not juju, assumes already installed"
46 echo -e " --nodockerbuild:do not build docker images (use existing locally cached images)"
47 echo -e " --nohostports: do not expose docker ports to host (useful for creating multiple instances of osm on the same host)"
48 echo -e " --nohostclient: do not install the osmclient"
garciadeblase990f662018-05-18 11:43:39 +020049 echo -e " --uninstall: uninstall OSM: remove the containers and delete NAT rules"
50 echo -e " --source: install OSM from source code using the latest stable tag"
garciadeblasd8bc5c32018-05-09 17:37:56 +020051 echo -e " --develop: (deprecated, use '-b master') install OSM from source code using the master branch"
Mike Marchettida8a9c42018-10-01 15:25:15 -040052 echo -e " --pullimages: pull/run osm images from docker.io/opensourcemano"
romeromonsere366b1a2019-11-19 19:49:26 +010053 echo -e " --k8s_monitor: install the OSM kubernetes moitoring with prometheus and grafana"
garciadeblasd8bc5c32018-05-09 17:37:56 +020054# echo -e " --reconfigure: reconfigure the modules (DO NOT change NAT rules)"
garciadeblasd8bc5c32018-05-09 17:37:56 +020055# echo -e " --update: update to the latest stable release or to the latest commit if using a specific branch"
56 echo -e " --showopts: print chosen options and exit (only for debugging)"
57 echo -e " -y: do not prompt for confirmation, assumes yes"
garciadeblasd8bc5c32018-05-09 17:37:56 +020058 echo -e " -h / --help: print this help"
59}
60
Mike Marchettib8420852018-09-13 13:45:06 -040061# takes a juju/accounts.yaml file and returns the password specific
Adam Israel8232e562018-11-21 16:47:45 -050062# for a controller. I wrote this using only bash tools to minimize
Mike Marchettib8420852018-09-13 13:45:06 -040063# additions of other packages
64function parse_juju_password {
65 password_file="${HOME}/.local/share/juju/accounts.yaml"
66 local controller_name=$1
67 local s='[[:space:]]*' w='[a-zA-Z0-9_-]*' fs=$(echo @|tr @ '\034')
68 sed -ne "s|^\($s\):|\1|" \
69 -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
70 -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $password_file |
71 awk -F$fs -v controller=$controller_name '{
72 indent = length($1)/2;
73 vname[indent] = $2;
74 for (i in vname) {if (i > indent) {delete vname[i]}}
75 if (length($3) > 0) {
76 vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
77 if (match(vn,controller) && match($2,"password")) {
78 printf("%s",$3);
79 }
80 }
81 }'
82}
83
Benjamin Diazba2cca92018-11-08 21:07:15 -030084function generate_secret() {
85 head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32
86}
87
Mike Marchettib8420852018-09-13 13:45:06 -040088function remove_volumes() {
vijaynag8339ed22019-07-25 17:10:58 +053089 if [ -n "$KUBERNETES" ]; then
90 k8_volume=$1
91 echo "Removing ${k8_volume}"
92 $WORKDIR_SUDO rm -rf ${k8_volume}
93 else
94 stack=$1
garciadeblasac550f22019-12-11 11:17:06 +010095 volumes="mongo_db mon_db osm_packages ro_db pol_db prom_db ro"
vijaynag8339ed22019-07-25 17:10:58 +053096 for volume in $volumes; do
97 sg docker -c "docker volume rm ${stack}_${volume}"
98 done
99 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400100}
101
102function remove_network() {
103 stack=$1
104 sg docker -c "docker network rm net${stack}"
105}
106
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100107function remove_iptables() {
108 stack=$1
109 if [ -z "$OSM_VCA_HOST" ]; then
110 OSM_VCA_HOST=`sg lxd -c "juju show-controller ${stack}"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
111 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
112 fi
113
David Garcia26432d42019-12-11 12:22:35 +0100114 if [ -z "$DEFAULT_IP" ]; then
115 DEFAULT_IF=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
116 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
117 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
118 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
119 fi
120
121 if sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
122 sudo iptables -t nat -D PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100123 sudo netfilter-persistent save
124 fi
125}
126
garciadeblas5b857d32018-05-24 18:37:58 +0200127function remove_stack() {
128 stack=$1
garciadeblas5ef98212018-05-28 09:25:36 +0200129 if sg docker -c "docker stack ps ${stack}" ; then
garciadeblas5b857d32018-05-24 18:37:58 +0200130 echo -e "\nRemoving stack ${stack}" && sg docker -c "docker stack rm ${stack}"
131 COUNTER=0
132 result=1
133 while [ ${COUNTER} -lt 30 ]; do
134 result=$(sg docker -c "docker stack ps ${stack}" | wc -l)
135 #echo "Dockers running: $result"
136 if [ "${result}" == "0" ]; then
137 break
138 fi
139 let COUNTER=COUNTER+1
140 sleep 1
141 done
garciadeblasd8bc5c32018-05-09 17:37:56 +0200142 if [ "${result}" == "0" ]; then
garciadeblas5b857d32018-05-24 18:37:58 +0200143 echo "All dockers of the stack ${stack} were removed"
144 else
145 FATAL "Some dockers of the stack ${stack} could not be removed. Could not clean it."
garciadeblasd8bc5c32018-05-09 17:37:56 +0200146 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200147 sleep 5
garciadeblasd8bc5c32018-05-09 17:37:56 +0200148 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200149}
150
vijaynag8339ed22019-07-25 17:10:58 +0530151#removes osm deployments and services
152function remove_k8s_namespace() {
153 kubectl delete ns $1
154}
155
garciadeblas5b857d32018-05-24 18:37:58 +0200156#Uninstall lightweight OSM: remove dockers
157function uninstall_lightweight() {
garciadeblas282ff4e2018-07-10 09:16:30 +0200158 if [ -n "$INSTALL_ONLY" ]; then
159 if [ -n "$INSTALL_ELK" ]; then
160 echo -e "\nUninstalling OSM ELK stack"
161 remove_stack osm_elk
Mike Marchettib8420852018-09-13 13:45:06 -0400162 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas282ff4e2018-07-10 09:16:30 +0200163 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200164 else
165 echo -e "\nUninstalling OSM"
vijaynag8339ed22019-07-25 17:10:58 +0530166 if [ -n "$KUBERNETES" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +0100167 if [ -n "$K8S_MONITOR" ]; then
168 # uninstall OSM MONITORING
169 uninstall_k8s_monitoring
170 fi
vijaynag8339ed22019-07-25 17:10:58 +0530171 remove_k8s_namespace $OSM_STACK_NAME
172 else
Dominik4763cfe2019-11-27 12:15:50 +0100173
vijaynag8339ed22019-07-25 17:10:58 +0530174 remove_stack $OSM_STACK_NAME
175 remove_stack osm_elk
vijaynag8339ed22019-07-25 17:10:58 +0530176 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200177 echo "Now osm docker images and volumes will be deleted"
178 newgrp docker << EONG
lavado02ad4b02018-11-28 11:30:48 -0500179 docker image rm ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}
180 docker image rm ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}
181 docker image rm ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}
182 docker image rm ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}
183 docker image rm ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}
184 docker image rm ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}
185 docker image rm ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}
186 docker image rm ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}
garciadeblas83ca1322018-05-22 18:31:14 +0200187EONG
vijaynag8339ed22019-07-25 17:10:58 +0530188
189 if [ -n "$KUBERNETES" ]; then
190 OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
191 remove_volumes $OSM_NAMESPACE_VOL
192 else
193 remove_volumes $OSM_STACK_NAME
194 remove_network $OSM_STACK_NAME
195 fi
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100196 remove_iptables $OSM_STACK_NAME
Mike Marchettib8420852018-09-13 13:45:06 -0400197 echo "Removing $OSM_DOCKER_WORK_DIR"
198 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR
Adam Israel843764e2019-06-11 10:28:43 -0400199 sg lxd -c "juju destroy-controller --destroy-all-models --yes $OSM_STACK_NAME"
garciadeblas282ff4e2018-07-10 09:16:30 +0200200 fi
201 echo "Some docker images will be kept in case they are used by other docker stacks"
202 echo "To remove them, just run 'docker image prune' in a terminal"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200203 return 0
204}
205
206#Configure NAT rules, based on the current IP addresses of containers
207function nat(){
208 echo -e "\nChecking required packages: iptables-persistent"
209 dpkg -l iptables-persistent &>/dev/null || ! echo -e " Not installed.\nInstalling iptables-persistent requires root privileges" || \
garciadeblas7cc70222019-12-09 01:24:18 +0100210 sudo apt-get -yq install iptables-persistent
garciadeblasd8bc5c32018-05-09 17:37:56 +0200211 echo -e "\nConfiguring NAT rules"
212 echo -e " Required root privileges"
213 sudo $OSM_DEVOPS/installers/nat_osm
214}
215
216function FATAL(){
217 echo "FATAL error: Cannot install OSM due to \"$1\""
218 exit 1
219}
220
garciadeblasd8bc5c32018-05-09 17:37:56 +0200221function install_lxd() {
222 sudo apt-get update
223 sudo apt-get install -y lxd
224 newgrp lxd
225 lxd init --auto
226 lxd waitready
227 lxc network create lxdbr0 ipv4.address=auto ipv4.nat=true ipv6.address=none ipv6.nat=false
228 DEFAULT_INTERFACE=$(route -n | awk '$1~/^0.0.0.0/ {print $8}')
229 DEFAULT_MTU=$(ip addr show $DEFAULT_INTERFACE | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
230 lxc profile device set default eth0 mtu $DEFAULT_MTU
231 #sudo systemctl stop lxd-bridge
232 #sudo systemctl --system daemon-reload
233 #sudo systemctl enable lxd-bridge
234 #sudo systemctl start lxd-bridge
235}
236
237function ask_user(){
238 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
239 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
240 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
241 read -e -p "$1" USER_CONFIRMATION
242 while true ; do
243 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
244 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
245 [ "${USER_CONFIRMATION,,}" == "yes" ] || [ "${USER_CONFIRMATION,,}" == "y" ] && return 0
246 [ "${USER_CONFIRMATION,,}" == "no" ] || [ "${USER_CONFIRMATION,,}" == "n" ] && return 1
247 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
248 done
249}
250
garciadeblasd8bc5c32018-05-09 17:37:56 +0200251function install_osmclient(){
252 CLIENT_RELEASE=${RELEASE#"-R "}
253 CLIENT_REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
254 CLIENT_REPOSITORY=${REPOSITORY#"-r "}
garciadeblasd8bc5c32018-05-09 17:37:56 +0200255 CLIENT_REPOSITORY_BASE=${REPOSITORY_BASE#"-u "}
256 key_location=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
257 curl $key_location | sudo apt-key add -
garciadeblas078f5982019-11-27 15:06:06 +0100258 sudo add-apt-repository -y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient IM"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200259 sudo apt-get update
garciadeblas078f5982019-11-27 15:06:06 +0100260 sudo apt-get install -y python3-pip
261 sudo -H LC_ALL=C python3 -m pip install -U pip
garciadeblasa9954892020-01-22 16:05:05 +0100262 sudo -H LC_ALL=C python3 -m pip install -U python-magic pyangbind verboselogs
garciadeblasda89ee72019-11-28 02:19:59 +0100263 sudo apt-get install -y python3-osm-im python3-osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +0200264 #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
265 #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
266 #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
267 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME=`lxc list | awk '($2=="SO-ub"){print $6}'`
268 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME=`lxc list | awk '($2=="RO"){print $6}'`
garciadeblasd8bc5c32018-05-09 17:37:56 +0200269 echo -e "\nOSM client installed"
garciadeblasc3226982018-11-27 11:32:47 +0100270 if [ -z "$INSTALL_LIGHTWEIGHT" ]; then
271 echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
272 echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
273 echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
274 else
275 echo -e "OSM client assumes that OSM host is running in localhost (127.0.0.1)."
276 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:"
277 echo " export OSM_HOSTNAME=<OSM_host>"
278 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +0200279 return 0
280}
281
lavado6ad812e2019-11-29 10:58:58 -0500282function install_prometheus_nodeexporter(){
lavadoc26d90b2019-12-06 18:11:36 -0500283 if (systemctl -q is-active node_exporter)
284 then
285 echo "Node Exporter is already running."
286 else
287 echo "Node Exporter is not active, installing..."
288 if getent passwd node_exporter > /dev/null 2>&1; then
289 echo "node_exporter user exists"
290 else
291 echo "Creating user node_exporter"
292 sudo useradd --no-create-home --shell /bin/false node_exporter
293 fi
294 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/
295 sudo tar -C /tmp -xf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz
296 sudo cp /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64/node_exporter /usr/local/bin
297 sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
298 sudo rm -rf node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64*
299 sudo cp ${OSM_DEVOPS}/installers/docker/files/node_exporter.service /etc/systemd/system/node_exporter.service
300 sudo systemctl daemon-reload
301 sudo systemctl restart node_exporter
302 sudo systemctl enable node_exporter
303 echo "Node Exporter has been activated in this host."
304 fi
lavado6ad812e2019-11-29 10:58:58 -0500305 return 0
306}
307
lavado1e4a88c2019-12-03 16:19:59 -0500308function uninstall_prometheus_nodeexporter(){
309 sudo systemctl stop node_exporter
310 sudo systemctl disable node_exporter
311 sudo rm /etc/systemd/system/node_exporter.service
312 sudo systemctl daemon-reload
313 sudo userdel node_exporter
314 sudo rm /usr/local/bin/node_exporter
315 return 0
316}
317
garciadeblasd8bc5c32018-05-09 17:37:56 +0200318function install_docker_ce() {
319 # installs and configures Docker CE
320 echo "Installing Docker CE ..."
321 sudo apt-get -qq update
322 sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
323 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
324 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
325 sudo apt-get -qq update
326 sudo apt-get install -y docker-ce
327 echo "Adding user to group 'docker'"
328 sudo groupadd -f docker
329 sudo usermod -aG docker $USER
garciadeblasd8bc5c32018-05-09 17:37:56 +0200330 sleep 2
331 sudo service docker restart
332 echo "... restarted Docker service"
garciadeblas67ce97c2018-05-18 10:22:09 +0200333 sg docker -c "docker version" || FATAL "Docker installation failed"
334 echo "... Docker CE installation done"
335 return 0
garciadeblasd8bc5c32018-05-09 17:37:56 +0200336}
337
338function install_docker_compose() {
339 # installs and configures docker-compose
340 echo "Installing Docker Compose ..."
341 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
342 sudo chmod +x /usr/local/bin/docker-compose
343 echo "... Docker Compose installation done"
344}
345
346function install_juju() {
347 echo "Installing juju"
Adam Israel41587482019-11-06 10:45:43 -0500348 sudo snap install juju --classic
garciadeblasd41f5482018-05-25 10:25:06 +0200349 [ -z "$INSTALL_NOLXD" ] && sudo dpkg-reconfigure -p medium lxd
Dominik4763cfe2019-11-27 12:15:50 +0100350 [[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200351 echo "Finished installation of juju"
Mike Marchettib8420852018-09-13 13:45:06 -0400352 return 0
353}
354
355function juju_createcontroller() {
Adam Israel8232e562018-11-21 16:47:45 -0500356 if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then
Mike Marchettib8420852018-09-13 13:45:06 -0400357 # Not found created, create the controller
garciadeblas85bb41a2020-01-15 18:20:14 +0100358 sudo usermod -a -G lxd ${USER}
Mike Marchettib8420852018-09-13 13:45:06 -0400359 sg lxd -c "juju bootstrap --bootstrap-series=xenial localhost $OSM_STACK_NAME"
360 fi
Adam Israel8232e562018-11-21 16:47:45 -0500361 [ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200362}
363
Adam Israel5ddc97f2019-09-03 18:11:12 -0400364function juju_createproxy() {
Adam Israel43fb44d2019-11-06 10:37:25 -0500365 echo -e "\nChecking required packages: iptables-persistent"
366 dpkg -l iptables-persistent &>/dev/null || ! echo -e " Not installed.\nInstalling iptables-persistent requires root privileges" || \
garciadeblas7cc70222019-12-09 01:24:18 +0100367 sudo apt-get -yq install iptables-persistent
Adam Israel43fb44d2019-11-06 10:37:25 -0500368
David Garcia26432d42019-12-11 12:22:35 +0100369 if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
370 sudo iptables -t nat -A PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
Adam Israel5ddc97f2019-09-03 18:11:12 -0400371 sudo netfilter-persistent save
372 fi
373}
374
garciadeblasd8bc5c32018-05-09 17:37:56 +0200375function generate_docker_images() {
376 echo "Pulling and generating docker images"
Michael Marchettiee374142018-08-02 22:47:16 +0200377 _build_from=$COMMIT_ID
378 [ -z "$_build_from" ] && _build_from="master"
379
380 echo "OSM Docker images generated from $_build_from"
381
Mike Marchettib8420852018-09-13 13:45:06 -0400382 BUILD_ARGS+=(--build-arg REPOSITORY="$REPOSITORY")
383 BUILD_ARGS+=(--build-arg RELEASE="$RELEASE")
384 BUILD_ARGS+=(--build-arg REPOSITORY_KEY="$REPOSITORY_KEY")
385 BUILD_ARGS+=(--build-arg REPOSITORY_BASE="$REPOSITORY_BASE")
lavado60216242018-10-10 23:44:28 +0200386
garciadeblas0e596bc2018-05-28 16:04:42 +0200387 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q KAFKA ; then
388 sg docker -c "docker pull wurstmeister/zookeeper" || FATAL "cannot get zookeeper docker image"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300389 sg docker -c "docker pull wurstmeister/kafka:${KAFKA_TAG}" || FATAL "cannot get kafka docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200390 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400391
garciadeblas0e596bc2018-05-28 16:04:42 +0200392 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MONGO ; then
393 sg docker -c "docker pull mongo" || FATAL "cannot get mongo docker image"
394 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400395
lavado60216242018-10-10 23:44:28 +0200396 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
397 sg docker -c "docker pull prom/prometheus:${PROMETHEUS_TAG}" || FATAL "cannot get prometheus docker image"
398 fi
399
garciadeblasfc5bb142019-12-10 10:49:12 +0100400 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS-CADVISOR ; then
401 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
402 fi
403
lavado6ad812e2019-11-29 10:58:58 -0500404 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q GRAFANA ; then
405 sg docker -c "docker pull grafana/grafana:${GRAFANA_TAG}" || FATAL "cannot get grafana docker image"
garciadeblasfc5bb142019-12-10 10:49:12 +0100406 fi
lavado6ad812e2019-11-29 10:58:58 -0500407
garciadeblas4a83e6e2018-12-04 14:55:09 +0100408 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI || echo $TO_REBUILD | grep -q KEYSTONE-DB ; then
lavado9a8df7c2018-10-24 09:35:34 -0500409 sg docker -c "docker pull mariadb:${KEYSTONEDB_TAG}" || FATAL "cannot get keystone-db docker image"
410 fi
411
garciadeblas4a83e6e2018-12-04 14:55:09 +0100412 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
413 sg docker -c "docker pull mysql:5" || FATAL "cannot get mysql docker image"
414 fi
415
Mike Marchettida8a9c42018-10-01 15:25:15 -0400416 if [ -n "$PULL_IMAGES" ]; then
417 sg docker -c "docker pull ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}" || FATAL "cannot pull MON docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400418 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MON ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200419 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/MON
420 git -C ${LWTEMPDIR}/MON checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100421 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 -0500422 fi
423
424 if [ -n "$PULL_IMAGES" ]; then
425 sg docker -c "docker pull ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}" || FATAL "cannot pull POL docker image"
garciadeblas4a83e6e2018-12-04 14:55:09 +0100426 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q POL ; then
lavado9a8df7c2018-10-24 09:35:34 -0500427 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/POL
428 git -C ${LWTEMPDIR}/POL checkout ${COMMIT_ID}
garciadeblas4a83e6e2018-12-04 14:55:09 +0100429 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 +0200430 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400431
432 if [ -n "$PULL_IMAGES" ]; then
433 sg docker -c "docker pull ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}" || FATAL "cannot pull NBI docker image"
lavado9a8df7c2018-10-24 09:35:34 -0500434 sg docker -c "docker pull ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}" || FATAL "cannot pull KEYSTONE docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400435 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200436 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NBI
437 git -C ${LWTEMPDIR}/NBI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100438 sg docker -c "docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t ${DOCKER_USER}/nbi --no-cache" || FATAL "cannot build NBI docker image"
439 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 +0200440 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400441
442 if [ -n "$PULL_IMAGES" ]; then
443 sg docker -c "docker pull ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}" || FATAL "cannot pull RO docker image"
444 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200445 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/RO
446 git -C ${LWTEMPDIR}/RO checkout ${COMMIT_ID}
tierno5cc8ac32019-11-25 10:33:25 +0000447 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 +0200448 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400449
450 if [ -n "$PULL_IMAGES" ]; then
451 sg docker -c "docker pull ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}" || FATAL "cannot pull LCM RO docker image"
452 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LCM ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200453 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LCM
454 git -C ${LWTEMPDIR}/LCM checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100455 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 +0200456 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400457
458 if [ -n "$PULL_IMAGES" ]; then
459 sg docker -c "docker pull ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}" || FATAL "cannot pull light-ui docker image"
460 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-UI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200461 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LW-UI
462 git -C ${LWTEMPDIR}/LW-UI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100463 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 +0200464 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400465
466 if [ -n "$PULL_IMAGES" ]; then
467 sg docker -c "docker pull ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}" || FATAL "cannot pull osmclient docker image"
468 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-osmclient; then
garciadeblas0d45bc82018-11-19 14:25:13 +0100469 sg docker -c "docker build -t ${DOCKER_USER}/osmclient ${BUILD_ARGS[@]} -f $OSM_DEVOPS/docker/osmclient ."
Mike Marchettib8420852018-09-13 13:45:06 -0400470 fi
lavado6ad812e2019-11-29 10:58:58 -0500471
472 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
473 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
474 fi
475
garciadeblasd8bc5c32018-05-09 17:37:56 +0200476 echo "Finished generation of docker images"
477}
478
garciadeblas5b857d32018-05-24 18:37:58 +0200479function cmp_overwrite() {
480 file1="$1"
481 file2="$2"
482 if ! $(cmp "${file1}" "${file2}" >/dev/null 2>&1); then
483 if [ -f "${file2}" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400484 ask_user "The file ${file2} already exists. Overwrite (y/N)? " n && cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200485 else
Mike Marchettib8420852018-09-13 13:45:06 -0400486 cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200487 fi
488 fi
489}
490
garciadeblasd8bc5c32018-05-09 17:37:56 +0200491function generate_docker_env_files() {
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200492 echo "Doing a backup of existing env files"
493 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
494 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
495 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
496 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lwui.env{,~}
497 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
498 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
499 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
500 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
501 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
502
garciadeblasd8bc5c32018-05-09 17:37:56 +0200503 echo "Generating docker env files"
vijaynag8339ed22019-07-25 17:10:58 +0530504 if [ -n "$KUBERNETES" ]; then
505 #Kubernetes resources
506 $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
507 else
508 # Docker-compose
509 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200510
vijaynag8339ed22019-07-25 17:10:58 +0530511 # Prometheus
lavado6ad812e2019-11-29 10:58:58 -0500512 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/files/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus.yml
513
514 # Grafana & Prometheus Exporter files
515 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/files
516 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/files/* $OSM_DOCKER_WORK_DIR/files/
vijaynag8339ed22019-07-25 17:10:58 +0530517 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200518
Benjamin Diazba2cca92018-11-08 21:07:15 -0300519 # LCM
520 if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
521 echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
522 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400523
Benjamin Diazba2cca92018-11-08 21:07:15 -0300524 if ! grep -Fq "OSMLCM_VCA_HOST" $OSM_DOCKER_WORK_DIR/lcm.env; then
525 echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
526 else
527 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_HOST.*|OSMLCM_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/lcm.env
528 fi
529
530 if ! grep -Fq "OSMLCM_VCA_SECRET" $OSM_DOCKER_WORK_DIR/lcm.env; then
531 echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
532 else
533 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_SECRET.*|OSMLCM_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/lcm.env
534 fi
535
garciadeblasaa3ddf42019-04-04 19:04:32 +0200536 if ! grep -Fq "OSMLCM_VCA_PUBKEY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblasec537902019-12-10 14:13:40 +0100537 echo "OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasaa3ddf42019-04-04 19:04:32 +0200538 else
garciadeblasec537902019-12-10 14:13:40 +0100539 $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 +0200540 fi
541
Adam Israelbe7676a2019-10-02 16:10:53 -0400542 if ! grep -Fq "OSMLCM_VCA_CACERT" $OSM_DOCKER_WORK_DIR/lcm.env; then
543 echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
544 else
545 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CACERT.*|OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/lcm.env
546 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -0300547
Adam Israel5ddc97f2019-09-03 18:11:12 -0400548 if ! grep -Fq "OSMLCM_VCA_APIPROXY" $OSM_DOCKER_WORK_DIR/lcm.env; then
549 echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
550 else
551 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_APIPROXY.*|OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
552 fi
553
garciadeblasa2e41842019-12-18 11:05:24 +0100554 if ! grep -Fq "OSMLCM_VCA_ENABLEOSUPGRADE" $OSM_DOCKER_WORK_DIR/lcm.env; then
555 echo "# OSMLCM_VCA_ENABLEOSUPGRADE=false" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
556 fi
557
558 if ! grep -Fq "OSMLCM_VCA_APTMIRROR" $OSM_DOCKER_WORK_DIR/lcm.env; then
559 echo "# OSMLCM_VCA_APTMIRROR=http://archive.ubuntu.com/ubuntu/" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
560 fi
561
Benjamin Diazba2cca92018-11-08 21:07:15 -0300562 # RO
563 MYSQL_ROOT_PASSWORD=$(generate_secret)
Mike Marchettib8420852018-09-13 13:45:06 -0400564 if [ ! -f $OSM_DOCKER_WORK_DIR/ro-db.env ]; then
565 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro-db.env
garciadeblas5b857d32018-05-24 18:37:58 +0200566 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400567 if [ ! -f $OSM_DOCKER_WORK_DIR/ro.env ]; then
568 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro.env
garciadeblas5b857d32018-05-24 18:37:58 +0200569 fi
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100570
Benjamin Diazba2cca92018-11-08 21:07:15 -0300571 # Keystone
Benjamin Diazba2cca92018-11-08 21:07:15 -0300572 KEYSTONE_DB_PASSWORD=$(generate_secret)
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100573 SERVICE_PASSWORD=$(generate_secret)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100574 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone-db.env ]; then
575 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone-db.env
576 fi
577 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone.env ]; then
578 echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100579 echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100580 echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100581 fi
582
Benjamin Diazba2cca92018-11-08 21:07:15 -0300583 # NBI
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100584 if [ ! -f $OSM_DOCKER_WORK_DIR/nbi.env ]; then
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100585 echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/nbi.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300586 echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/nbi.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100587 fi
588
Benjamin Diazba2cca92018-11-08 21:07:15 -0300589 # MON
590 if [ ! -f $OSM_DOCKER_WORK_DIR/mon.env ]; then
591 echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diaz9261c662019-02-25 17:18:51 -0300592 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 -0300593 fi
594
595 if ! grep -Fq "OS_NOTIFIER_URI" $OSM_DOCKER_WORK_DIR/mon.env; then
596 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
597 else
598 $WORKDIR_SUDO sed -i "s|OS_NOTIFIER_URI.*|OS_NOTIFIER_URI=http://$DEFAULT_IP:8662|g" $OSM_DOCKER_WORK_DIR/mon.env
599 fi
600
601 if ! grep -Fq "OSMMON_VCA_HOST" $OSM_DOCKER_WORK_DIR/mon.env; then
602 echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
603 else
604 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_HOST.*|OSMMON_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/mon.env
605 fi
606
607 if ! grep -Fq "OSMMON_VCA_SECRET" $OSM_DOCKER_WORK_DIR/mon.env; then
608 echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
609 else
610 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_SECRET.*|OSMMON_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/mon.env
611 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400612
Adam Israel6d8adf32019-12-05 15:46:54 -0500613 if ! grep -Fq "OSMMON_VCA_CACERT" $OSM_DOCKER_WORK_DIR/mon.env; then
614 echo "OSMMON_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
615 else
616 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_CACERT.*|OSMMON_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/mon.env
617 fi
618
619
Benjamin Diaz04560882019-02-26 17:25:07 -0300620 # POL
621 if [ ! -f $OSM_DOCKER_WORK_DIR/pol.env ]; then
622 echo "OSMPOL_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/pol" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/pol.env
623 fi
624
Benjamin Diaz4088a9b2019-05-21 15:11:49 -0300625 # LW-UI
626 if [ ! -f $OSM_DOCKER_WORK_DIR/lwui.env ]; then
627 echo "OSMUI_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/lwui" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lwui.env
628 fi
629
garciadeblasd8bc5c32018-05-09 17:37:56 +0200630 echo "Finished generation of docker env files"
631}
632
Mike Marchettib8420852018-09-13 13:45:06 -0400633function generate_osmclient_script () {
Mike Marchetti46d6efe2018-10-23 16:20:16 -0400634 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 -0400635 $WORKDIR_SUDO chmod +x "$OSM_DOCKER_WORK_DIR/osm"
636 echo "osmclient sidecar container can be found at: $OSM_DOCKER_WORK_DIR/osm"
637}
638
vijaynag8339ed22019-07-25 17:10:58 +0530639#installs kubernetes packages
640function install_kube() {
641 sudo apt-get update && sudo apt-get install -y apt-transport-https
642 curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
643 sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
644 sudo apt-get update
645 echo "Installing Kubernetes Packages ..."
646 sudo apt-get install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
647}
648
649#initializes kubernetes control plane
650function init_kubeadm() {
651 sudo swapoff -a
652 sudo kubeadm init --config $1
653 sleep 5
654}
655
656function kube_config_dir() {
657 [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes"
658 mkdir -p $HOME/.kube
659 sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
660 sudo chown $(id -u):$(id -g) $HOME/.kube/config
661}
662
663#deploys flannel as daemonsets
664function deploy_cni_provider() {
665 CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")"
666 trap 'rm -rf "${CNI_DIR}"' EXIT
667 wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR
668 kubectl apply -f $CNI_DIR
669 [ $? -ne 0 ] && FATAL "Cannot Install Flannel"
670}
671
672#creates secrets from env files which will be used by containers
673function kube_secrets(){
674 kubectl create ns $OSM_STACK_NAME
675 kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env
676 kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env
677 kubectl create secret generic nbi-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/nbi.env
678 kubectl create secret generic ro-db-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro-db.env
679 kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env
680 kubectl create secret generic keystone-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/keystone.env
681 kubectl create secret generic lwui-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lwui.env
682 kubectl create secret generic pol-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/pol.env
683}
684
685#deploys osm pods and services
686function deploy_osm_services() {
687 K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}')
688 kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
689 sleep 5
690 kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR
691}
692
693function parse_yaml() {
694 osm_services="nbi lcm ro pol mon light-ui keystone"
695 TAG=$1
696 for osm in $osm_services; do
697 $WORKDIR_SUDO sed -i "s/opensourcemano\/$osm:.*/opensourcemano\/$osm:$TAG/g" $OSM_K8S_WORK_DIR/$osm.yaml
698 done
699}
700
701function namespace_vol() {
702 osm_services="nbi lcm ro pol mon kafka mongo mysql"
703 for osm in $osm_services; do
704 $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml
705 done
706}
707
garciadeblasa3e26612018-05-30 17:58:55 +0200708function init_docker_swarm() {
garciadeblasd8bc5c32018-05-09 17:37:56 +0200709 if [ "${DEFAULT_MTU}" != "1500" ]; then
710 DOCKER_NETS=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
711 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";}'`
712 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"
713 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200714 sg docker -c "docker swarm init --advertise-addr ${DEFAULT_IP}"
garciadeblasa3e26612018-05-30 17:58:55 +0200715 return 0
716}
717
Mike Marchettib8420852018-09-13 13:45:06 -0400718function create_docker_network() {
719 echo "creating network"
720 sg docker -c "docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} net${OSM_STACK_NAME}"
721 echo "creating network DONE"
722}
723
garciadeblasa3e26612018-05-30 17:58:55 +0200724function deploy_lightweight() {
Mike Marchettib8420852018-09-13 13:45:06 -0400725
garciadeblasa3e26612018-05-30 17:58:55 +0200726 echo "Deploying lightweight build"
Mike Marchettib8420852018-09-13 13:45:06 -0400727 OSM_NBI_PORT=9999
728 OSM_RO_PORT=9090
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100729 OSM_KEYSTONE_PORT=5000
Mike Marchettib8420852018-09-13 13:45:06 -0400730 OSM_UI_PORT=80
lavadoafa54c72018-10-05 09:28:28 -0500731 OSM_MON_PORT=8662
lavado60216242018-10-10 23:44:28 +0200732 OSM_PROM_PORT=9090
garciadeblasa7b27dc2019-12-04 15:06:55 +0100733 OSM_PROM_CADVISOR_PORT=8080
lavado60216242018-10-10 23:44:28 +0200734 OSM_PROM_HOSTPORT=9091
lavado6ad812e2019-11-29 10:58:58 -0500735 OSM_GRAFANA_PORT=3000
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100736 [ -n "$INSTALL_ELK" ] && OSM_ELK_PORT=5601
lavado6ad812e2019-11-29 10:58:58 -0500737 #[ -n "$INSTALL_PERFMON" ] && OSM_PM_PORT=3000
lavado60216242018-10-10 23:44:28 +0200738
Mike Marchettib8420852018-09-13 13:45:06 -0400739 if [ -n "$NO_HOST_PORTS" ]; then
740 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT)
741 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100742 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400743 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -0500744 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +0200745 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +0100746 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -0500747 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT)
748 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100749 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400750 else
751 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT:$OSM_NBI_PORT)
752 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT:$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100753 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT:$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400754 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT:$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -0500755 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT:$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +0200756 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_HOSTPORT:$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +0100757 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT:$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -0500758 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT:$OSM_GRAFANA_PORT)
759 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT:$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100760 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT:$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400761 fi
762 echo "export ${OSM_PORTS[@]}" | $WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/osm_ports.sh
763 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 -0400764 echo "export TAG=${OSM_DOCKER_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Mike Marchettida8a9c42018-10-01 15:25:15 -0400765 echo "export DOCKER_USER=${DOCKER_USER}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -0300766 echo "export KAFKA_TAG=${KAFKA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado60216242018-10-10 23:44:28 +0200767 echo "export PROMETHEUS_TAG=${PROMETHEUS_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado9a8df7c2018-10-24 09:35:34 -0500768 echo "export KEYSTONEDB_TAG=${KEYSTONEDB_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado6ad812e2019-11-29 10:58:58 -0500769 echo "export PROMETHEUS_CADVISOR_TAG=${PROMETHEUS_CADVISOR_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
770 echo "export GRAFANA_TAG=${GRAFANA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -0300771
Mike Marchettib8420852018-09-13 13:45:06 -0400772 pushd $OSM_DOCKER_WORK_DIR
beierl63229a22019-05-30 14:42:04 -0400773 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 -0400774 popd
775
garciadeblasd8bc5c32018-05-09 17:37:56 +0200776 echo "Finished deployment of lightweight build"
777}
778
garciadeblas6c66abf2018-05-16 14:46:19 +0200779function deploy_elk() {
garciadeblase2aebfe2018-07-06 14:11:20 +0200780 echo "Pulling docker images for ELK"
lavado53eb8f52018-11-16 12:58:23 -0500781 sg docker -c "docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:${ELASTIC_VERSION}" || FATAL "cannot get elasticsearch docker image"
782 sg docker -c "docker pull docker.elastic.co/beats/metricbeat:${ELASTIC_VERSION}" || FATAL "cannot get metricbeat docker image"
783 sg docker -c "docker pull docker.elastic.co/beats/filebeat:${ELASTIC_VERSION}" || FATAL "cannot get filebeat docker image"
784 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 -0500785 sg docker -c "docker pull bobrik/curator:${ELASTIC_CURATOR_VERSION}" || FATAL "cannot get curator docker image"
garciadeblase2aebfe2018-07-06 14:11:20 +0200786 echo "Finished pulling elk docker images"
Mike Marchettib8420852018-09-13 13:45:06 -0400787 $WORKDIR_SUDO mkdir -p "$OSM_DOCKER_WORK_DIR/osm_elk"
788 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_elk/* $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas5b857d32018-05-24 18:37:58 +0200789 remove_stack osm_elk
garciadeblas6c66abf2018-05-16 14:46:19 +0200790 echo "Deploying ELK stack"
Mike Marchettib8420852018-09-13 13:45:06 -0400791 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 +0200792 echo "Waiting for ELK stack to be up and running"
793 time=0
garciadeblase2aebfe2018-07-06 14:11:20 +0200794 step=5
795 timelength=40
garciadeblas6c66abf2018-05-16 14:46:19 +0200796 elk_is_up=1
797 while [ $time -le $timelength ]; do
garciadeblase2aebfe2018-07-06 14:11:20 +0200798 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 +0200799 elk_is_up=0
800 break
801 fi
802 sleep $step
803 time=$((time+step))
804 done
805 if [ $elk_is_up -eq 0 ]; then
806 echo "ELK is up and running. Trying to create index pattern..."
807 #Create index pattern
808 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -0500809 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
810 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200811 #Make it the default index
garciadeblase2aebfe2018-07-06 14:11:20 +0200812 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +0200813 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -0500814 -d"{\"value\":\"filebeat-*\"}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200815 else
816 echo "Cannot connect to Kibana to create index pattern."
817 echo "Once Kibana is running, you can use the following instructions to create index pattern:"
818 echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -0500819 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
820 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}"'
garciadeblas6c66abf2018-05-16 14:46:19 +0200821 echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +0200822 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -0500823 -d"{\"value\":\"filebeat-*\"}"'
garciadeblas6c66abf2018-05-16 14:46:19 +0200824 fi
825 echo "Finished deployment of ELK stack"
826 return 0
827}
828
garciadeblasd8bc5c32018-05-09 17:37:56 +0200829function install_lightweight() {
garciadeblas0d45bc82018-11-19 14:25:13 +0100830 [ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
vijaynag8339ed22019-07-25 17:10:58 +0530831 [ -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 -0400832 [ ! -d "$OSM_DOCKER_WORK_DIR" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR
vijaynag8339ed22019-07-25 17:10:58 +0530833 [ -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 -0400834
garciadeblas183e5802018-12-13 18:20:54 +0100835 track checkingroot
garciadeblasd13a8aa2018-05-18 15:24:51 +0200836 [ "$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 +0100837 track noroot
vijaynag8339ed22019-07-25 17:10:58 +0530838
839 if [ -n "$KUBERNETES" ]; then
840 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
841 1. Install and configure LXD
842 2. Install juju
843 3. Install docker CE
844 4. Disable swap space
845 5. Install and initialize Kubernetes
846 as pre-requirements.
847 Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
848
849 else
850 [ -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
851 fi
garciadeblasfae5e972018-06-12 18:27:11 +0200852 track proceed
vijaynag8339ed22019-07-25 17:10:58 +0530853
garciadeblasd8bc5c32018-05-09 17:37:56 +0200854 echo "Installing lightweight build of OSM"
855 LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
856 trap 'rm -rf "${LWTEMPDIR}"' EXIT
857 DEFAULT_IF=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
garciadeblas8cd60772018-06-02 08:38:17 +0200858 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200859 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
garciadeblas8cd60772018-06-02 08:38:17 +0200860 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200861 DEFAULT_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
Mike Marchettib8420852018-09-13 13:45:06 -0400862
863 # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to
lavadoe07b1642018-10-25 10:58:34 -0500864 if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ]; then
garciadeblasbd925e42018-06-14 14:32:12 +0200865 need_packages_lw="lxd snapd"
garciadeblasd41f5482018-05-25 10:25:06 +0200866 echo -e "Checking required packages: $need_packages_lw"
867 dpkg -l $need_packages_lw &>/dev/null \
868 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
869 || sudo apt-get update \
870 || FATAL "failed to run apt-get update"
871 dpkg -l $need_packages_lw &>/dev/null \
872 || ! echo -e "Installing $need_packages_lw requires root privileges." \
873 || sudo apt-get install -y $need_packages_lw \
874 || FATAL "failed to install $need_packages_lw"
875 fi
garciadeblasfae5e972018-06-12 18:27:11 +0200876 track prereqok
Mike Marchettib8420852018-09-13 13:45:06 -0400877
vijaynag8339ed22019-07-25 17:10:58 +0530878 [ -z "$INSTALL_NOJUJU" ] && install_juju
garciadeblas183e5802018-12-13 18:20:54 +0100879 track juju_install
vijaynag8339ed22019-07-25 17:10:58 +0530880
lavadoe07b1642018-10-25 10:58:34 -0500881 if [ -z "$OSM_VCA_HOST" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400882 juju_createcontroller
lavadoe07b1642018-10-25 10:58:34 -0500883 OSM_VCA_HOST=`sg lxd -c "juju show-controller $OSM_STACK_NAME"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
884 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
Mike Marchettib8420852018-09-13 13:45:06 -0400885 fi
garciadeblas183e5802018-12-13 18:20:54 +0100886 track juju_controller
vijaynag8339ed22019-07-25 17:10:58 +0530887
lavadoe07b1642018-10-25 10:58:34 -0500888 if [ -z "$OSM_VCA_SECRET" ]; then
889 OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME)
890 [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
Mike Marchettib8420852018-09-13 13:45:06 -0400891 fi
garciadeblasaa3ddf42019-04-04 19:04:32 +0200892 if [ -z "$OSM_VCA_PUBKEY" ]; then
893 OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
894 [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
895 fi
garciadeblasfc5bb142019-12-10 10:49:12 +0100896 if [ -z "$OSM_VCA_CACERT" ]; then
897 OSM_VCA_CACERT=$(juju controllers --format json | jq -r '.controllers["osm"]["ca-cert"]' | base64 | tr -d \\n)
898 [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
899 fi
Adam Israel5ddc97f2019-09-03 18:11:12 -0400900 if [ -z "$OSM_VCA_APIPROXY" ]; then
901 OSM_VCA_APIPROXY=$DEFAULT_IP
902 [ -z "$OSM_VCA_APIPROXY" ] && FATAL "Cannot obtain juju api proxy"
903 fi
904 juju_createproxy
garciadeblasfc5bb142019-12-10 10:49:12 +0100905 track juju
Adam Israel5ddc97f2019-09-03 18:11:12 -0400906
Benjamin Diazba2cca92018-11-08 21:07:15 -0300907 if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
908 OSM_DATABASE_COMMONKEY=$(generate_secret)
909 [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret"
910 fi
vijaynag8339ed22019-07-25 17:10:58 +0530911
garciadeblasa3e26612018-05-30 17:58:55 +0200912 [ -n "$INSTALL_NODOCKER" ] || install_docker_ce
garciadeblas6c66abf2018-05-16 14:46:19 +0200913 track docker_ce
vijaynag8339ed22019-07-25 17:10:58 +0530914
915 #Installs Kubernetes and deploys osm services
916 if [ -n "$KUBERNETES" ]; then
917 install_kube
918 track install_k8s
919 init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
920 kube_config_dir
921 track init_k8s
922 else
923 #install_docker_compose
924 [ -n "$INSTALL_NODOCKER" ] || init_docker_swarm
925 track docker_swarm
926 fi
927
Mike Marchettib8420852018-09-13 13:45:06 -0400928 [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
garciadeblas6c66abf2018-05-16 14:46:19 +0200929 track docker_build
vijaynag8339ed22019-07-25 17:10:58 +0530930
garciadeblasd8bc5c32018-05-09 17:37:56 +0200931 generate_docker_env_files
Mike Marchettib8420852018-09-13 13:45:06 -0400932
vijaynag8339ed22019-07-25 17:10:58 +0530933 if [ -n "$KUBERNETES" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +0100934 if [ -n "$K8S_MONITOR" ]; then
935 # uninstall OSM MONITORING
936 uninstall_k8s_monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +0100937 track uninstall_k8s_monitoring
romeromonsere366b1a2019-11-19 19:49:26 +0100938 fi
vijaynag8339ed22019-07-25 17:10:58 +0530939 #remove old namespace
940 remove_k8s_namespace $OSM_STACK_NAME
941 deploy_cni_provider
942 kube_secrets
garciadeblasa7e128a2019-12-18 11:10:45 +0100943 [ ! $OSM_DOCKER_TAG == "7" ] && parse_yaml $OSM_DOCKER_TAG
vijaynag8339ed22019-07-25 17:10:58 +0530944 namespace_vol
945 deploy_osm_services
946 track deploy_osm_services_k8s
garciadeblasfc5bb142019-12-10 10:49:12 +0100947 if [ -n "$K8S_MONITOR" ]; then
948 # install OSM MONITORING
949 install_k8s_monitoring
950 track install_k8s_monitoring
951 fi
vijaynag8339ed22019-07-25 17:10:58 +0530952 else
953 # remove old stack
954 remove_stack $OSM_STACK_NAME
955 create_docker_network
956 deploy_lightweight
957 generate_osmclient_script
958 track docker_deploy
lavado6ad812e2019-11-29 10:58:58 -0500959 install_prometheus_nodeexporter
garciadeblasfc5bb142019-12-10 10:49:12 +0100960 track nodeexporter
vijaynag8339ed22019-07-25 17:10:58 +0530961 [ -n "$INSTALL_VIMEMU" ] && install_vimemu && track vimemu
962 [ -n "$INSTALL_ELK" ] && deploy_elk && track elk
vijaynag8339ed22019-07-25 17:10:58 +0530963 fi
964
Mike Marchettib8420852018-09-13 13:45:06 -0400965 [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
garciadeblas6c66abf2018-05-16 14:46:19 +0200966 track osmclient
vijaynag8339ed22019-07-25 17:10:58 +0530967
garciadeblas44c02192019-12-09 01:36:57 +0100968 wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200969 track end
garciadeblasd8bc5c32018-05-09 17:37:56 +0200970 return 0
971}
972
973function install_vimemu() {
peusterm76353e42018-05-08 13:56:05 +0200974 echo "\nInstalling vim-emu"
975 EMUTEMPDIR="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX")"
976 trap 'rm -rf "${EMUTEMPDIR}"' EXIT
peusterma3a7d142020-02-07 10:12:29 +0100977 # install prerequisites (OVS is a must for the emulator to work)
978 sudo apt-get install openvswitch-switch
garciadeblasd8bc5c32018-05-09 17:37:56 +0200979 # clone vim-emu repository (attention: branch is currently master only)
980 echo "Cloning vim-emu repository ..."
peusterm76353e42018-05-08 13:56:05 +0200981 git clone https://osm.etsi.org/gerrit/osm/vim-emu.git $EMUTEMPDIR
garciadeblasd8bc5c32018-05-09 17:37:56 +0200982 # build vim-emu docker
983 echo "Building vim-emu Docker container..."
Mike Marchettib8420852018-09-13 13:45:06 -0400984
985 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 +0200986 # start vim-emu container as daemon
987 echo "Starting vim-emu Docker container 'vim-emu' ..."
peusterm76353e42018-05-08 13:56:05 +0200988 if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
989 # in lightweight mode, the emulator needs to be attached to netOSM
Mike Marchettib8420852018-09-13 13:45:06 -0400990 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 +0200991 else
992 # classic build mode
Mike Marchettib8420852018-09-13 13:45:06 -0400993 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 +0200994 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +0200995 echo "Waiting for 'vim-emu' container to start ..."
996 sleep 5
Mike Marchettib8420852018-09-13 13:45:06 -0400997 export VIMEMU_HOSTNAME=$(sg docker -c "docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu")
garciadeblasd8bc5c32018-05-09 17:37:56 +0200998 echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
peusterm76353e42018-05-08 13:56:05 +0200999 # print vim-emu connection info
1000 echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001001 echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
peusterm76353e42018-05-08 13:56:05 +02001002 echo -e "To add the emulated VIM to OSM you should do:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001003 echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
1004}
1005
romeromonsere366b1a2019-11-19 19:49:26 +01001006function install_k8s_monitoring() {
1007 # install OSM monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +01001008 $WORKDIR_SUDO chmod +x $OSM_DEVOPS/installers/k8s/*.sh
romeromonsere366b1a2019-11-19 19:49:26 +01001009 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh
1010}
1011
1012function uninstall_k8s_monitoring() {
K Sai Kiran5e151f02019-12-11 14:50:09 +05301013 # uninstall OSM monitoring
romeromonsere366b1a2019-11-19 19:49:26 +01001014 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/uninstall_osm_k8s_monitoring.sh
1015}
1016
garciadeblasd8bc5c32018-05-09 17:37:56 +02001017function dump_vars(){
1018 echo "DEVELOP=$DEVELOP"
1019 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
1020 echo "UNINSTALL=$UNINSTALL"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001021 echo "UPDATE=$UPDATE"
1022 echo "RECONFIGURE=$RECONFIGURE"
1023 echo "TEST_INSTALLER=$TEST_INSTALLER"
1024 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
1025 echo "INSTALL_LXD=$INSTALL_LXD"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001026 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
garciadeblas6c66abf2018-05-16 14:46:19 +02001027 echo "INSTALL_ONLY=$INSTALL_ONLY"
1028 echo "INSTALL_ELK=$INSTALL_ELK"
lavado6ad812e2019-11-29 10:58:58 -05001029 #echo "INSTALL_PERFMON=$INSTALL_PERFMON"
garciadeblas0e596bc2018-05-28 16:04:42 +02001030 echo "TO_REBUILD=$TO_REBUILD"
garciadeblasd41f5482018-05-25 10:25:06 +02001031 echo "INSTALL_NOLXD=$INSTALL_NOLXD"
garciadeblasa3e26612018-05-30 17:58:55 +02001032 echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
garciadeblas0d45bc82018-11-19 14:25:13 +01001033 echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001034 echo "RELEASE=$RELEASE"
1035 echo "REPOSITORY=$REPOSITORY"
1036 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
1037 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001038 echo "OSM_DEVOPS=$OSM_DEVOPS"
1039 echo "OSM_VCA_HOST=$OSM_VCA_HOST"
1040 echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
garciadeblasaa3ddf42019-04-04 19:04:32 +02001041 echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001042 echo "NO_HOST_PORTS=$NO_HOST_PORTS"
1043 echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
1044 echo "WORKDIR_SUDO=$WORKDIR_SUDO"
1045 echo "OSM_WORK_DIR=$OSM_STACK_NAME"
1046 echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
1047 echo "DOCKER_USER=$DOCKER_USER"
1048 echo "OSM_STACK_NAME=$OSM_STACK_NAME"
1049 echo "PULL_IMAGES=$PULL_IMAGES"
vijaynag8339ed22019-07-25 17:10:58 +05301050 echo "KUBERNETES=$KUBERNETES"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001051 echo "SHOWOPTS=$SHOWOPTS"
1052 echo "Install from specific refspec (-b): $COMMIT_ID"
1053}
1054
1055function track(){
1056 ctime=`date +%s`
1057 duration=$((ctime - SESSION_ID))
1058 url="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
1059 #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
1060 event_name="bin"
garciadeblas6c66abf2018-05-16 14:46:19 +02001061 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name="binsrc"
1062 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name="lxd"
1063 [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name="lw"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001064 event_name="${event_name}_$1"
1065 url="${url}&event=${event_name}&ce_duration=${duration}"
1066 wget -q -O /dev/null $url
1067}
1068
1069UNINSTALL=""
1070DEVELOP=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001071UPDATE=""
1072RECONFIGURE=""
1073TEST_INSTALLER=""
1074INSTALL_LXD=""
1075SHOWOPTS=""
1076COMMIT_ID=""
1077ASSUME_YES=""
1078INSTALL_FROM_SOURCE=""
garciadeblasfc5bb142019-12-10 10:49:12 +01001079RELEASE="ReleaseSEVEN"
Mike Marchettib8420852018-09-13 13:45:06 -04001080REPOSITORY="stable"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001081INSTALL_VIMEMU=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001082LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
1083LXD_REPOSITORY_PATH=""
1084INSTALL_LIGHTWEIGHT="y"
garciadeblas6c66abf2018-05-16 14:46:19 +02001085INSTALL_ONLY=""
1086INSTALL_ELK=""
garciadeblas0e596bc2018-05-28 16:04:42 +02001087TO_REBUILD=""
garciadeblasd41f5482018-05-25 10:25:06 +02001088INSTALL_NOLXD=""
garciadeblasa3e26612018-05-30 17:58:55 +02001089INSTALL_NODOCKER=""
Mike Marchettib8420852018-09-13 13:45:06 -04001090INSTALL_NOJUJU=""
vijaynag8339ed22019-07-25 17:10:58 +05301091KUBERNETES=""
romeromonsere366b1a2019-11-19 19:49:26 +01001092K8S_MONITOR=""
garciadeblas0d45bc82018-11-19 14:25:13 +01001093INSTALL_NOHOSTCLIENT=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001094SESSION_ID=`date +%s`
1095OSM_DEVOPS=
lavadoe07b1642018-10-25 10:58:34 -05001096OSM_VCA_HOST=
1097OSM_VCA_SECRET=
garciadeblasaa3ddf42019-04-04 19:04:32 +02001098OSM_VCA_PUBKEY=
Mike Marchettib8420852018-09-13 13:45:06 -04001099OSM_STACK_NAME=osm
1100NO_HOST_PORTS=""
1101DOCKER_NOBUILD=""
1102REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
garciadeblas870e60a2018-11-21 16:44:21 +01001103REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
Mike Marchettib8420852018-09-13 13:45:06 -04001104WORKDIR_SUDO=sudo
1105OSM_WORK_DIR="/etc/osm"
garciadeblas526f0fb2018-11-23 14:47:40 +01001106OSM_DOCKER_WORK_DIR="/etc/osm/docker"
vijaynag8339ed22019-07-25 17:10:58 +05301107OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
1108OSM_HOST_VOL="/var/lib/osm"
1109OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
Mike Marchetti13d76c82018-09-19 15:00:36 -04001110OSM_DOCKER_TAG=latest
garciadeblas0d45bc82018-11-19 14:25:13 +01001111DOCKER_USER=opensourcemano
1112PULL_IMAGES="y"
Benjamin Diazaa0af712018-10-04 14:02:34 -03001113KAFKA_TAG=2.11-1.0.2
lavado60216242018-10-10 23:44:28 +02001114PROMETHEUS_TAG=v2.4.3
lavado6ad812e2019-11-29 10:58:58 -05001115GRAFANA_TAG=latest
1116PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
1117PROMETHEUS_CADVISOR_TAG=latest
lavado9a8df7c2018-10-24 09:35:34 -05001118KEYSTONEDB_TAG=10
Benjamin Diazba2cca92018-11-08 21:07:15 -03001119OSM_DATABASE_COMMONKEY=
lavado53eb8f52018-11-16 12:58:23 -05001120ELASTIC_VERSION=6.4.2
lavado4e8662c2018-11-28 11:28:14 -05001121ELASTIC_CURATOR_VERSION=5.5.4
vijaynag8339ed22019-07-25 17:10:58 +05301122POD_NETWORK_CIDR=10.244.0.0/16
1123K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
1124RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
garciadeblasd8bc5c32018-05-09 17:37:56 +02001125
vijaynag01b68762020-02-03 08:46:36 +00001126while getopts ":b:r:c:k:u:R:D:o:m:H:S:s:w:t:U:P:A:-: hy" o; do
garciadeblasd8bc5c32018-05-09 17:37:56 +02001127 case "${o}" in
garciadeblasd8bc5c32018-05-09 17:37:56 +02001128 b)
1129 COMMIT_ID=${OPTARG}
garciadeblas0d45bc82018-11-19 14:25:13 +01001130 PULL_IMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001131 ;;
1132 r)
Mike Marchettib8420852018-09-13 13:45:06 -04001133 REPOSITORY="${OPTARG}"
1134 REPO_ARGS+=(-r "$REPOSITORY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001135 ;;
vijaynag8339ed22019-07-25 17:10:58 +05301136 c)
1137 [ "${OPTARG}" == "swarm" ] && continue
1138 [ "${OPTARG}" == "k8s" ] && KUBERNETES="y" && continue
1139 echo -e "Invalid argument for -i : ' $OPTARG'\n" >&2
1140 usage && exit 1
1141 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001142 k)
Mike Marchettib8420852018-09-13 13:45:06 -04001143 REPOSITORY_KEY="${OPTARG}"
1144 REPO_ARGS+=(-k "$REPOSITORY_KEY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001145 ;;
1146 u)
Mike Marchettib8420852018-09-13 13:45:06 -04001147 REPOSITORY_BASE="${OPTARG}"
1148 REPO_ARGS+=(-u "$REPOSITORY_BASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001149 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001150 R)
1151 RELEASE="${OPTARG}"
1152 REPO_ARGS+=(-R "$RELEASE")
garciadeblas0d45bc82018-11-19 14:25:13 +01001153 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001154 D)
1155 OSM_DEVOPS="${OPTARG}"
1156 ;;
garciadeblas6c66abf2018-05-16 14:46:19 +02001157 o)
1158 INSTALL_ONLY="y"
1159 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
1160 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001161 ;;
garciadeblas0e596bc2018-05-28 16:04:42 +02001162 m)
garciadeblas0e596bc2018-05-28 16:04:42 +02001163 [ "${OPTARG}" == "LW-UI" ] && TO_REBUILD="$TO_REBUILD LW-UI" && continue
govindappa79e51b92019-05-22 12:15:21 +05301164 [ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
1165 [ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
1166 [ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001167 [ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
govindappa79e51b92019-05-22 12:15:21 +05301168 [ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001169 [ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
1170 [ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
govindappa79e51b92019-05-22 12:15:21 +05301171 [ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
garciadeblasfc5bb142019-12-10 10:49:12 +01001172 [ "${OPTARG}" == "PROMETHEUS-CADVISOR" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS-CADVISOR" && continue
govindappa79e51b92019-05-22 12:15:21 +05301173 [ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
lavado6ad812e2019-11-29 10:58:58 -05001174 [ "${OPTARG}" == "GRAFANA" ] && TO_REBUILD="$TO_REBUILD GRAFANA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001175 [ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
1176 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001177 H)
1178 OSM_VCA_HOST="${OPTARG}"
1179 ;;
1180 S)
1181 OSM_VCA_SECRET="${OPTARG}"
1182 ;;
1183 s)
1184 OSM_STACK_NAME="${OPTARG}" && [ -n "$KUBERNETES" ] && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0
1185 ;;
1186 w)
1187 # when specifying workdir, do not use sudo for access
1188 WORKDIR_SUDO=
1189 OSM_WORK_DIR="${OPTARG}"
1190 ;;
1191 t)
1192 OSM_DOCKER_TAG="${OPTARG}"
1193 ;;
1194 U)
1195 DOCKER_USER="${OPTARG}"
1196 ;;
1197 P)
1198 OSM_VCA_PUBKEY=$(cat ${OPTARG})
1199 ;;
1200 A)
1201 OSM_VCA_APIPROXY="${OPTARG}"
1202 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001203 -)
1204 [ "${OPTARG}" == "help" ] && usage && exit 0
garciadeblas0d45bc82018-11-19 14:25:13 +01001205 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001206 [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
1207 [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001208 [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
1209 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
1210 [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
1211 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
garciadeblasd41f5482018-05-25 10:25:06 +02001212 [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
garciadeblasa3e26612018-05-30 17:58:55 +02001213 [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001214 [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001215 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001216 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001217 [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001218 [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
1219 [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
1220 [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
1221 [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
garciadeblas0d45bc82018-11-19 14:25:13 +01001222 [ "${OPTARG}" == "pullimages" ] && continue
romeromonsere366b1a2019-11-19 19:49:26 +01001223 [ "${OPTARG}" == "k8s_monitor" ] && K8S_MONITOR="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001224 echo -e "Invalid option: '--$OPTARG'\n" >&2
1225 usage && exit 1
1226 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001227 :)
1228 echo "Option -$OPTARG requires an argument" >&2
1229 usage && exit 1
1230 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001231 \?)
1232 echo -e "Invalid option: '-$OPTARG'\n" >&2
1233 usage && exit 1
1234 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001235 h)
1236 usage && exit 0
1237 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001238 y)
1239 ASSUME_YES="y"
1240 ;;
1241 *)
1242 usage && exit 1
1243 ;;
1244 esac
1245done
1246
garciadeblas0e596bc2018-05-28 16:04:42 +02001247[ -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 +02001248
garciadeblasd8bc5c32018-05-09 17:37:56 +02001249if [ -n "$SHOWOPTS" ]; then
1250 dump_vars
1251 exit 0
1252fi
1253
garciadeblasd8bc5c32018-05-09 17:37:56 +02001254# if develop, we force master
1255[ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
1256
garciadeblasd8bc5c32018-05-09 17:37:56 +02001257need_packages="git jq wget curl tar"
1258echo -e "Checking required packages: $need_packages"
1259dpkg -l $need_packages &>/dev/null \
1260 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1261 || sudo apt-get update \
1262 || FATAL "failed to run apt-get update"
1263dpkg -l $need_packages &>/dev/null \
1264 || ! echo -e "Installing $need_packages requires root privileges." \
1265 || sudo apt-get install -y $need_packages \
1266 || FATAL "failed to install $need_packages"
1267
1268if [ -z "$OSM_DEVOPS" ]; then
Michael Marchettiee374142018-08-02 22:47:16 +02001269 if [ -n "$TEST_INSTALLER" ]; then
1270 echo -e "\nUsing local devops repo for OSM installation"
1271 OSM_DEVOPS="$(dirname $(realpath $(dirname $0)))"
1272 else
1273 echo -e "\nCreating temporary dir for OSM installation"
1274 OSM_DEVOPS="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
1275 trap 'rm -rf "$OSM_DEVOPS"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001276
Michael Marchettiee374142018-08-02 22:47:16 +02001277 git clone https://osm.etsi.org/gerrit/osm/devops.git $OSM_DEVOPS
garciadeblasd8bc5c32018-05-09 17:37:56 +02001278
Michael Marchettiee374142018-08-02 22:47:16 +02001279 if [ -z "$COMMIT_ID" ]; then
1280 echo -e "\nGuessing the current stable release"
1281 LATEST_STABLE_DEVOPS=`git -C $OSM_DEVOPS tag -l v[0-9].* | sort -V | tail -n1`
1282 [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
1283
1284 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
1285 COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
1286 else
1287 echo -e "\nDEVOPS Using commit $COMMIT_ID"
1288 fi
1289 git -C $OSM_DEVOPS checkout $COMMIT_ID
garciadeblasd8bc5c32018-05-09 17:37:56 +02001290 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001291fi
1292
garciadeblas3c25fab2019-11-18 17:24:43 +01001293. $OSM_DEVOPS/common/all_funcs
garciadeblasd8bc5c32018-05-09 17:37:56 +02001294
1295[ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight && echo -e "\nDONE" && exit 0
garciadeblas6c66abf2018-05-16 14:46:19 +02001296[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
lavado6ad812e2019-11-29 10:58:58 -05001297#[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
garciadeblas6c66abf2018-05-16 14:46:19 +02001298[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
1299[ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
garciadeblasd8bc5c32018-05-09 17:37:56 +02001300
1301#Installation starts here
garciadeblas44c02192019-12-09 01:36:57 +01001302wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001303track start
1304
garciadeblasd8bc5c32018-05-09 17:37:56 +02001305[ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight && echo -e "\nDONE" && exit 0
1306echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
1307if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
1308 ! ask_user "The installation will take about 75-90 minutes. Continue (Y/n)? " y && echo "Cancelled!" && exit 1
1309fi
1310
1311echo -e "Checking required packages: lxd"
1312lxd --version &>/dev/null || FATAL "lxd not present, exiting."
1313[ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
1314
garciadeblasd8bc5c32018-05-09 17:37:56 +02001315# use local devops for containers
1316export OSM_USE_LOCAL_DEVOPS=true
garciadeblasd8bc5c32018-05-09 17:37:56 +02001317
1318#Install osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +02001319
1320#Install vim-emu (optional)
peusterm76353e42018-05-08 13:56:05 +02001321[ -n "$INSTALL_VIMEMU" ] && install_docker_ce && install_vimemu
garciadeblasd8bc5c32018-05-09 17:37:56 +02001322
garciadeblas44c02192019-12-09 01:36:57 +01001323wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblasd8bc5c32018-05-09 17:37:56 +02001324track end
1325echo -e "\nDONE"