blob: 72f3190bf3c264bbe7659e25a38ad42668062f41 [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"
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +010059 echo -e " --charmed: install OSM with charms"
60 echo -e " --bundle <bundle path>: Specify with which bundle to deploy OSM with charms (--charmed option)"
61 echo -e " --kubeconfig <kubeconfig path>: Specify with which kubernetes to deploy OSM with charms (--charmed option)"
62 echo -e " --lxdendpoint <lxd endpoint ip>: Specify with which LXD to deploy OSM with charms (--charmed option)"
63 echo -e " --lxdcert <lxd cert path>: Specify external LXD cert to deploy OSM with charms (--charmed option)"
64 echo -e " --microstack: Installs microstack as a vim. (--charmed option)"
65
garciadeblasd8bc5c32018-05-09 17:37:56 +020066}
67
Mike Marchettib8420852018-09-13 13:45:06 -040068# takes a juju/accounts.yaml file and returns the password specific
Adam Israel8232e562018-11-21 16:47:45 -050069# for a controller. I wrote this using only bash tools to minimize
Mike Marchettib8420852018-09-13 13:45:06 -040070# additions of other packages
71function parse_juju_password {
72 password_file="${HOME}/.local/share/juju/accounts.yaml"
73 local controller_name=$1
74 local s='[[:space:]]*' w='[a-zA-Z0-9_-]*' fs=$(echo @|tr @ '\034')
75 sed -ne "s|^\($s\):|\1|" \
76 -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
77 -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $password_file |
78 awk -F$fs -v controller=$controller_name '{
79 indent = length($1)/2;
80 vname[indent] = $2;
81 for (i in vname) {if (i > indent) {delete vname[i]}}
82 if (length($3) > 0) {
83 vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
84 if (match(vn,controller) && match($2,"password")) {
85 printf("%s",$3);
86 }
87 }
88 }'
89}
90
Benjamin Diazba2cca92018-11-08 21:07:15 -030091function generate_secret() {
92 head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32
93}
94
Mike Marchettib8420852018-09-13 13:45:06 -040095function remove_volumes() {
vijaynag8339ed22019-07-25 17:10:58 +053096 if [ -n "$KUBERNETES" ]; then
97 k8_volume=$1
98 echo "Removing ${k8_volume}"
99 $WORKDIR_SUDO rm -rf ${k8_volume}
100 else
101 stack=$1
garciadeblasac550f22019-12-11 11:17:06 +0100102 volumes="mongo_db mon_db osm_packages ro_db pol_db prom_db ro"
vijaynag8339ed22019-07-25 17:10:58 +0530103 for volume in $volumes; do
104 sg docker -c "docker volume rm ${stack}_${volume}"
105 done
106 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400107}
108
109function remove_network() {
110 stack=$1
111 sg docker -c "docker network rm net${stack}"
112}
113
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100114function remove_iptables() {
115 stack=$1
116 if [ -z "$OSM_VCA_HOST" ]; then
117 OSM_VCA_HOST=`sg lxd -c "juju show-controller ${stack}"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
118 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
119 fi
120
David Garcia26432d42019-12-11 12:22:35 +0100121 if [ -z "$DEFAULT_IP" ]; then
122 DEFAULT_IF=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
123 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
124 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
125 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
126 fi
127
128 if sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
129 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 +0100130 sudo netfilter-persistent save
131 fi
132}
133
garciadeblas5b857d32018-05-24 18:37:58 +0200134function remove_stack() {
135 stack=$1
garciadeblas5ef98212018-05-28 09:25:36 +0200136 if sg docker -c "docker stack ps ${stack}" ; then
garciadeblas5b857d32018-05-24 18:37:58 +0200137 echo -e "\nRemoving stack ${stack}" && sg docker -c "docker stack rm ${stack}"
138 COUNTER=0
139 result=1
140 while [ ${COUNTER} -lt 30 ]; do
141 result=$(sg docker -c "docker stack ps ${stack}" | wc -l)
142 #echo "Dockers running: $result"
143 if [ "${result}" == "0" ]; then
144 break
145 fi
146 let COUNTER=COUNTER+1
147 sleep 1
148 done
garciadeblasd8bc5c32018-05-09 17:37:56 +0200149 if [ "${result}" == "0" ]; then
garciadeblas5b857d32018-05-24 18:37:58 +0200150 echo "All dockers of the stack ${stack} were removed"
151 else
152 FATAL "Some dockers of the stack ${stack} could not be removed. Could not clean it."
garciadeblasd8bc5c32018-05-09 17:37:56 +0200153 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200154 sleep 5
garciadeblasd8bc5c32018-05-09 17:37:56 +0200155 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200156}
157
vijaynag8339ed22019-07-25 17:10:58 +0530158#removes osm deployments and services
159function remove_k8s_namespace() {
160 kubectl delete ns $1
161}
162
garciadeblas5b857d32018-05-24 18:37:58 +0200163#Uninstall lightweight OSM: remove dockers
164function uninstall_lightweight() {
garciadeblas282ff4e2018-07-10 09:16:30 +0200165 if [ -n "$INSTALL_ONLY" ]; then
166 if [ -n "$INSTALL_ELK" ]; then
167 echo -e "\nUninstalling OSM ELK stack"
168 remove_stack osm_elk
Mike Marchettib8420852018-09-13 13:45:06 -0400169 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas282ff4e2018-07-10 09:16:30 +0200170 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200171 else
172 echo -e "\nUninstalling OSM"
vijaynag8339ed22019-07-25 17:10:58 +0530173 if [ -n "$KUBERNETES" ]; then
garciadeblasb5a630f2020-03-05 18:32:16 +0000174 if [ -n "$INSTALL_K8S_MONITOR" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +0100175 # uninstall OSM MONITORING
176 uninstall_k8s_monitoring
177 fi
vijaynag8339ed22019-07-25 17:10:58 +0530178 remove_k8s_namespace $OSM_STACK_NAME
179 else
Dominik4763cfe2019-11-27 12:15:50 +0100180
vijaynag8339ed22019-07-25 17:10:58 +0530181 remove_stack $OSM_STACK_NAME
182 remove_stack osm_elk
vijaynag8339ed22019-07-25 17:10:58 +0530183 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200184 echo "Now osm docker images and volumes will be deleted"
185 newgrp docker << EONG
lavado02ad4b02018-11-28 11:30:48 -0500186 docker image rm ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}
187 docker image rm ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}
188 docker image rm ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}
189 docker image rm ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}
190 docker image rm ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}
191 docker image rm ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}
192 docker image rm ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}
193 docker image rm ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}
garciadeblas83ca1322018-05-22 18:31:14 +0200194EONG
vijaynag8339ed22019-07-25 17:10:58 +0530195
196 if [ -n "$KUBERNETES" ]; then
197 OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
198 remove_volumes $OSM_NAMESPACE_VOL
199 else
200 remove_volumes $OSM_STACK_NAME
201 remove_network $OSM_STACK_NAME
202 fi
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100203 remove_iptables $OSM_STACK_NAME
Mike Marchettib8420852018-09-13 13:45:06 -0400204 echo "Removing $OSM_DOCKER_WORK_DIR"
205 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR
Adam Israel843764e2019-06-11 10:28:43 -0400206 sg lxd -c "juju destroy-controller --destroy-all-models --yes $OSM_STACK_NAME"
garciadeblas282ff4e2018-07-10 09:16:30 +0200207 fi
208 echo "Some docker images will be kept in case they are used by other docker stacks"
209 echo "To remove them, just run 'docker image prune' in a terminal"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200210 return 0
211}
212
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100213#Safe unattended install of iptables-persistent
214function check_install_iptables_persistent(){
215 echo -e "\nChecking required packages: iptables-persistent"
216 if dpkg -l iptables-persistent &>/dev/null; then
217 echo -e " Not installed.\nInstalling iptables-persistent requires root privileges"
218 echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections
219 echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections
220 sudo apt-get -yq install iptables-persistent
221 fi
222}
223
garciadeblasd8bc5c32018-05-09 17:37:56 +0200224#Configure NAT rules, based on the current IP addresses of containers
225function nat(){
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100226 check_install_iptables_persistent
227
garciadeblasd8bc5c32018-05-09 17:37:56 +0200228 echo -e "\nConfiguring NAT rules"
229 echo -e " Required root privileges"
230 sudo $OSM_DEVOPS/installers/nat_osm
231}
232
233function FATAL(){
234 echo "FATAL error: Cannot install OSM due to \"$1\""
235 exit 1
236}
237
garciadeblasd8bc5c32018-05-09 17:37:56 +0200238function install_lxd() {
David Garcia50d786e2020-03-30 14:49:40 +0200239 # Apply sysctl production values for optimal performance
240 sudo cp /usr/share/osm-devops/installers/60-lxd-production.conf /etc/sysctl.d/60-lxd-production.conf
241 sudo sysctl --system
242
243 # Install LXD snap
244 sudo apt-get remove --purge -y liblxc1 lxc-common lxcfs lxd lxd-client
245 sudo snap install lxd --channel=3.0/stable
246
247 # Configure LXD
248 sudo usermod -a -G lxd `whoami`
249 cat /usr/share/osm-devops/installers/lxd-preseed.conf | sg lxd -c "lxd init --preseed"
250 sg lxd -c "lxd waitready"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200251 DEFAULT_INTERFACE=$(route -n | awk '$1~/^0.0.0.0/ {print $8}')
252 DEFAULT_MTU=$(ip addr show $DEFAULT_INTERFACE | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
David Garcia50d786e2020-03-30 14:49:40 +0200253 sg lxd -c "lxc profile device set default eth0 mtu $DEFAULT_MTU"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200254 #sudo systemctl stop lxd-bridge
255 #sudo systemctl --system daemon-reload
256 #sudo systemctl enable lxd-bridge
257 #sudo systemctl start lxd-bridge
258}
259
260function ask_user(){
261 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
262 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
263 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
264 read -e -p "$1" USER_CONFIRMATION
265 while true ; do
266 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
267 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
268 [ "${USER_CONFIRMATION,,}" == "yes" ] || [ "${USER_CONFIRMATION,,}" == "y" ] && return 0
269 [ "${USER_CONFIRMATION,,}" == "no" ] || [ "${USER_CONFIRMATION,,}" == "n" ] && return 1
270 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
271 done
272}
273
garciadeblasd8bc5c32018-05-09 17:37:56 +0200274function install_osmclient(){
275 CLIENT_RELEASE=${RELEASE#"-R "}
276 CLIENT_REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
277 CLIENT_REPOSITORY=${REPOSITORY#"-r "}
garciadeblasd8bc5c32018-05-09 17:37:56 +0200278 CLIENT_REPOSITORY_BASE=${REPOSITORY_BASE#"-u "}
279 key_location=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
280 curl $key_location | sudo apt-key add -
garciadeblas078f5982019-11-27 15:06:06 +0100281 sudo add-apt-repository -y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient IM"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200282 sudo apt-get update
garciadeblas078f5982019-11-27 15:06:06 +0100283 sudo apt-get install -y python3-pip
284 sudo -H LC_ALL=C python3 -m pip install -U pip
garciadeblasa9954892020-01-22 16:05:05 +0100285 sudo -H LC_ALL=C python3 -m pip install -U python-magic pyangbind verboselogs
garciadeblasda89ee72019-11-28 02:19:59 +0100286 sudo apt-get install -y python3-osm-im python3-osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +0200287 #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
288 #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
289 #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
290 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME=`lxc list | awk '($2=="SO-ub"){print $6}'`
291 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME=`lxc list | awk '($2=="RO"){print $6}'`
garciadeblasd8bc5c32018-05-09 17:37:56 +0200292 echo -e "\nOSM client installed"
garciadeblasc3226982018-11-27 11:32:47 +0100293 if [ -z "$INSTALL_LIGHTWEIGHT" ]; then
294 echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
295 echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
296 echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
297 else
298 echo -e "OSM client assumes that OSM host is running in localhost (127.0.0.1)."
299 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:"
300 echo " export OSM_HOSTNAME=<OSM_host>"
301 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +0200302 return 0
303}
304
lavado6ad812e2019-11-29 10:58:58 -0500305function install_prometheus_nodeexporter(){
lavadoc26d90b2019-12-06 18:11:36 -0500306 if (systemctl -q is-active node_exporter)
307 then
308 echo "Node Exporter is already running."
309 else
310 echo "Node Exporter is not active, installing..."
311 if getent passwd node_exporter > /dev/null 2>&1; then
312 echo "node_exporter user exists"
313 else
314 echo "Creating user node_exporter"
315 sudo useradd --no-create-home --shell /bin/false node_exporter
316 fi
317 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/
318 sudo tar -C /tmp -xf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz
319 sudo cp /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64/node_exporter /usr/local/bin
320 sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
321 sudo rm -rf node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64*
322 sudo cp ${OSM_DEVOPS}/installers/docker/files/node_exporter.service /etc/systemd/system/node_exporter.service
323 sudo systemctl daemon-reload
324 sudo systemctl restart node_exporter
325 sudo systemctl enable node_exporter
326 echo "Node Exporter has been activated in this host."
327 fi
lavado6ad812e2019-11-29 10:58:58 -0500328 return 0
329}
330
lavado1e4a88c2019-12-03 16:19:59 -0500331function uninstall_prometheus_nodeexporter(){
332 sudo systemctl stop node_exporter
333 sudo systemctl disable node_exporter
334 sudo rm /etc/systemd/system/node_exporter.service
335 sudo systemctl daemon-reload
336 sudo userdel node_exporter
337 sudo rm /usr/local/bin/node_exporter
338 return 0
339}
340
garciadeblasd8bc5c32018-05-09 17:37:56 +0200341function install_docker_ce() {
342 # installs and configures Docker CE
343 echo "Installing Docker CE ..."
344 sudo apt-get -qq update
345 sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
346 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
347 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
348 sudo apt-get -qq update
349 sudo apt-get install -y docker-ce
350 echo "Adding user to group 'docker'"
351 sudo groupadd -f docker
352 sudo usermod -aG docker $USER
garciadeblasd8bc5c32018-05-09 17:37:56 +0200353 sleep 2
354 sudo service docker restart
355 echo "... restarted Docker service"
garciadeblas67ce97c2018-05-18 10:22:09 +0200356 sg docker -c "docker version" || FATAL "Docker installation failed"
357 echo "... Docker CE installation done"
358 return 0
garciadeblasd8bc5c32018-05-09 17:37:56 +0200359}
360
361function install_docker_compose() {
362 # installs and configures docker-compose
363 echo "Installing Docker Compose ..."
364 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
365 sudo chmod +x /usr/local/bin/docker-compose
366 echo "... Docker Compose installation done"
367}
368
369function install_juju() {
370 echo "Installing juju"
Adam Israel41587482019-11-06 10:45:43 -0500371 sudo snap install juju --classic
Dominik4763cfe2019-11-27 12:15:50 +0100372 [[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200373 echo "Finished installation of juju"
Mike Marchettib8420852018-09-13 13:45:06 -0400374 return 0
375}
376
377function juju_createcontroller() {
Adam Israel8232e562018-11-21 16:47:45 -0500378 if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then
Mike Marchettib8420852018-09-13 13:45:06 -0400379 # Not found created, create the controller
garciadeblas85bb41a2020-01-15 18:20:14 +0100380 sudo usermod -a -G lxd ${USER}
Mike Marchettib8420852018-09-13 13:45:06 -0400381 sg lxd -c "juju bootstrap --bootstrap-series=xenial localhost $OSM_STACK_NAME"
382 fi
Adam Israel8232e562018-11-21 16:47:45 -0500383 [ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200384}
385
Adam Israel5ddc97f2019-09-03 18:11:12 -0400386function juju_createproxy() {
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100387 check_install_iptables_persistent
Adam Israel43fb44d2019-11-06 10:37:25 -0500388
David Garcia26432d42019-12-11 12:22:35 +0100389 if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
390 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 -0400391 sudo netfilter-persistent save
392 fi
393}
394
garciadeblasd8bc5c32018-05-09 17:37:56 +0200395function generate_docker_images() {
396 echo "Pulling and generating docker images"
Michael Marchettiee374142018-08-02 22:47:16 +0200397 _build_from=$COMMIT_ID
398 [ -z "$_build_from" ] && _build_from="master"
399
400 echo "OSM Docker images generated from $_build_from"
401
Mike Marchettib8420852018-09-13 13:45:06 -0400402 BUILD_ARGS+=(--build-arg REPOSITORY="$REPOSITORY")
403 BUILD_ARGS+=(--build-arg RELEASE="$RELEASE")
404 BUILD_ARGS+=(--build-arg REPOSITORY_KEY="$REPOSITORY_KEY")
405 BUILD_ARGS+=(--build-arg REPOSITORY_BASE="$REPOSITORY_BASE")
lavado60216242018-10-10 23:44:28 +0200406
garciadeblas0e596bc2018-05-28 16:04:42 +0200407 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q KAFKA ; then
408 sg docker -c "docker pull wurstmeister/zookeeper" || FATAL "cannot get zookeeper docker image"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300409 sg docker -c "docker pull wurstmeister/kafka:${KAFKA_TAG}" || FATAL "cannot get kafka docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200410 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400411
garciadeblas0e596bc2018-05-28 16:04:42 +0200412 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MONGO ; then
413 sg docker -c "docker pull mongo" || FATAL "cannot get mongo docker image"
414 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400415
lavado60216242018-10-10 23:44:28 +0200416 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
417 sg docker -c "docker pull prom/prometheus:${PROMETHEUS_TAG}" || FATAL "cannot get prometheus docker image"
418 fi
419
garciadeblasfc5bb142019-12-10 10:49:12 +0100420 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS-CADVISOR ; then
421 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
422 fi
423
lavado6ad812e2019-11-29 10:58:58 -0500424 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q GRAFANA ; then
425 sg docker -c "docker pull grafana/grafana:${GRAFANA_TAG}" || FATAL "cannot get grafana docker image"
garciadeblasfc5bb142019-12-10 10:49:12 +0100426 fi
lavado6ad812e2019-11-29 10:58:58 -0500427
garciadeblas4a83e6e2018-12-04 14:55:09 +0100428 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI || echo $TO_REBUILD | grep -q KEYSTONE-DB ; then
lavado9a8df7c2018-10-24 09:35:34 -0500429 sg docker -c "docker pull mariadb:${KEYSTONEDB_TAG}" || FATAL "cannot get keystone-db docker image"
430 fi
431
garciadeblas4a83e6e2018-12-04 14:55:09 +0100432 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
433 sg docker -c "docker pull mysql:5" || FATAL "cannot get mysql docker image"
434 fi
435
Mike Marchettida8a9c42018-10-01 15:25:15 -0400436 if [ -n "$PULL_IMAGES" ]; then
437 sg docker -c "docker pull ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}" || FATAL "cannot pull MON docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400438 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MON ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200439 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/MON
440 git -C ${LWTEMPDIR}/MON checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100441 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 -0500442 fi
443
444 if [ -n "$PULL_IMAGES" ]; then
445 sg docker -c "docker pull ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}" || FATAL "cannot pull POL docker image"
garciadeblas4a83e6e2018-12-04 14:55:09 +0100446 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q POL ; then
lavado9a8df7c2018-10-24 09:35:34 -0500447 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/POL
448 git -C ${LWTEMPDIR}/POL checkout ${COMMIT_ID}
garciadeblas4a83e6e2018-12-04 14:55:09 +0100449 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 +0200450 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400451
452 if [ -n "$PULL_IMAGES" ]; then
453 sg docker -c "docker pull ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}" || FATAL "cannot pull NBI docker image"
lavado9a8df7c2018-10-24 09:35:34 -0500454 sg docker -c "docker pull ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}" || FATAL "cannot pull KEYSTONE docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400455 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200456 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NBI
457 git -C ${LWTEMPDIR}/NBI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100458 sg docker -c "docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t ${DOCKER_USER}/nbi --no-cache" || FATAL "cannot build NBI docker image"
459 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 +0200460 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400461
462 if [ -n "$PULL_IMAGES" ]; then
463 sg docker -c "docker pull ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}" || FATAL "cannot pull RO docker image"
464 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200465 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/RO
466 git -C ${LWTEMPDIR}/RO checkout ${COMMIT_ID}
tierno5cc8ac32019-11-25 10:33:25 +0000467 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 +0200468 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400469
470 if [ -n "$PULL_IMAGES" ]; then
471 sg docker -c "docker pull ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}" || FATAL "cannot pull LCM RO docker image"
472 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LCM ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200473 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LCM
474 git -C ${LWTEMPDIR}/LCM checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100475 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 +0200476 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400477
478 if [ -n "$PULL_IMAGES" ]; then
479 sg docker -c "docker pull ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}" || FATAL "cannot pull light-ui docker image"
480 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-UI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200481 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LW-UI
482 git -C ${LWTEMPDIR}/LW-UI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100483 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 +0200484 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400485
486 if [ -n "$PULL_IMAGES" ]; then
487 sg docker -c "docker pull ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}" || FATAL "cannot pull osmclient docker image"
488 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-osmclient; then
garciadeblas0d45bc82018-11-19 14:25:13 +0100489 sg docker -c "docker build -t ${DOCKER_USER}/osmclient ${BUILD_ARGS[@]} -f $OSM_DEVOPS/docker/osmclient ."
Mike Marchettib8420852018-09-13 13:45:06 -0400490 fi
lavado6ad812e2019-11-29 10:58:58 -0500491
492 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
493 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
494 fi
495
garciadeblasd8bc5c32018-05-09 17:37:56 +0200496 echo "Finished generation of docker images"
497}
498
garciadeblas5b857d32018-05-24 18:37:58 +0200499function cmp_overwrite() {
500 file1="$1"
501 file2="$2"
502 if ! $(cmp "${file1}" "${file2}" >/dev/null 2>&1); then
503 if [ -f "${file2}" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400504 ask_user "The file ${file2} already exists. Overwrite (y/N)? " n && cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200505 else
Mike Marchettib8420852018-09-13 13:45:06 -0400506 cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200507 fi
508 fi
509}
510
garciadeblasd8bc5c32018-05-09 17:37:56 +0200511function generate_docker_env_files() {
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200512 echo "Doing a backup of existing env files"
513 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
514 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
515 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
516 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lwui.env{,~}
517 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
518 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
519 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
520 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
521 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
522
garciadeblasd8bc5c32018-05-09 17:37:56 +0200523 echo "Generating docker env files"
vijaynag8339ed22019-07-25 17:10:58 +0530524 if [ -n "$KUBERNETES" ]; then
525 #Kubernetes resources
526 $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
527 else
528 # Docker-compose
529 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200530
vijaynag8339ed22019-07-25 17:10:58 +0530531 # Prometheus
lavado6ad812e2019-11-29 10:58:58 -0500532 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/files/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus.yml
533
534 # Grafana & Prometheus Exporter files
535 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/files
536 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/files/* $OSM_DOCKER_WORK_DIR/files/
vijaynag8339ed22019-07-25 17:10:58 +0530537 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200538
Benjamin Diazba2cca92018-11-08 21:07:15 -0300539 # LCM
540 if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
541 echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
542 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400543
Benjamin Diazba2cca92018-11-08 21:07:15 -0300544 if ! grep -Fq "OSMLCM_VCA_HOST" $OSM_DOCKER_WORK_DIR/lcm.env; then
545 echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
546 else
547 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_HOST.*|OSMLCM_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/lcm.env
548 fi
549
550 if ! grep -Fq "OSMLCM_VCA_SECRET" $OSM_DOCKER_WORK_DIR/lcm.env; then
551 echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
552 else
553 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_SECRET.*|OSMLCM_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/lcm.env
554 fi
555
garciadeblasaa3ddf42019-04-04 19:04:32 +0200556 if ! grep -Fq "OSMLCM_VCA_PUBKEY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblasec537902019-12-10 14:13:40 +0100557 echo "OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasaa3ddf42019-04-04 19:04:32 +0200558 else
garciadeblasec537902019-12-10 14:13:40 +0100559 $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 +0200560 fi
561
Adam Israelbe7676a2019-10-02 16:10:53 -0400562 if ! grep -Fq "OSMLCM_VCA_CACERT" $OSM_DOCKER_WORK_DIR/lcm.env; then
563 echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
564 else
565 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CACERT.*|OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/lcm.env
566 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -0300567
Adam Israel5ddc97f2019-09-03 18:11:12 -0400568 if ! grep -Fq "OSMLCM_VCA_APIPROXY" $OSM_DOCKER_WORK_DIR/lcm.env; then
569 echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
570 else
571 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_APIPROXY.*|OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
572 fi
573
garciadeblasa2e41842019-12-18 11:05:24 +0100574 if ! grep -Fq "OSMLCM_VCA_ENABLEOSUPGRADE" $OSM_DOCKER_WORK_DIR/lcm.env; then
575 echo "# OSMLCM_VCA_ENABLEOSUPGRADE=false" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
576 fi
577
578 if ! grep -Fq "OSMLCM_VCA_APTMIRROR" $OSM_DOCKER_WORK_DIR/lcm.env; then
579 echo "# OSMLCM_VCA_APTMIRROR=http://archive.ubuntu.com/ubuntu/" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
580 fi
581
Benjamin Diazba2cca92018-11-08 21:07:15 -0300582 # RO
583 MYSQL_ROOT_PASSWORD=$(generate_secret)
Mike Marchettib8420852018-09-13 13:45:06 -0400584 if [ ! -f $OSM_DOCKER_WORK_DIR/ro-db.env ]; then
585 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro-db.env
garciadeblas5b857d32018-05-24 18:37:58 +0200586 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400587 if [ ! -f $OSM_DOCKER_WORK_DIR/ro.env ]; then
588 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro.env
garciadeblas5b857d32018-05-24 18:37:58 +0200589 fi
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100590
Benjamin Diazba2cca92018-11-08 21:07:15 -0300591 # Keystone
Benjamin Diazba2cca92018-11-08 21:07:15 -0300592 KEYSTONE_DB_PASSWORD=$(generate_secret)
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100593 SERVICE_PASSWORD=$(generate_secret)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100594 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone-db.env ]; then
595 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone-db.env
596 fi
597 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone.env ]; then
598 echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100599 echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100600 echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100601 fi
602
Benjamin Diazba2cca92018-11-08 21:07:15 -0300603 # NBI
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100604 if [ ! -f $OSM_DOCKER_WORK_DIR/nbi.env ]; then
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100605 echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/nbi.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300606 echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/nbi.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100607 fi
608
Benjamin Diazba2cca92018-11-08 21:07:15 -0300609 # MON
610 if [ ! -f $OSM_DOCKER_WORK_DIR/mon.env ]; then
611 echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diaz9261c662019-02-25 17:18:51 -0300612 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 -0300613 fi
614
615 if ! grep -Fq "OS_NOTIFIER_URI" $OSM_DOCKER_WORK_DIR/mon.env; then
616 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
617 else
618 $WORKDIR_SUDO sed -i "s|OS_NOTIFIER_URI.*|OS_NOTIFIER_URI=http://$DEFAULT_IP:8662|g" $OSM_DOCKER_WORK_DIR/mon.env
619 fi
620
621 if ! grep -Fq "OSMMON_VCA_HOST" $OSM_DOCKER_WORK_DIR/mon.env; then
622 echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
623 else
624 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_HOST.*|OSMMON_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/mon.env
625 fi
626
627 if ! grep -Fq "OSMMON_VCA_SECRET" $OSM_DOCKER_WORK_DIR/mon.env; then
628 echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
629 else
630 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_SECRET.*|OSMMON_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/mon.env
631 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400632
Adam Israel6d8adf32019-12-05 15:46:54 -0500633 if ! grep -Fq "OSMMON_VCA_CACERT" $OSM_DOCKER_WORK_DIR/mon.env; then
634 echo "OSMMON_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
635 else
636 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_CACERT.*|OSMMON_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/mon.env
637 fi
638
639
Benjamin Diaz04560882019-02-26 17:25:07 -0300640 # POL
641 if [ ! -f $OSM_DOCKER_WORK_DIR/pol.env ]; then
642 echo "OSMPOL_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/pol" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/pol.env
643 fi
644
Benjamin Diaz4088a9b2019-05-21 15:11:49 -0300645 # LW-UI
646 if [ ! -f $OSM_DOCKER_WORK_DIR/lwui.env ]; then
647 echo "OSMUI_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/lwui" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lwui.env
648 fi
649
garciadeblasd8bc5c32018-05-09 17:37:56 +0200650 echo "Finished generation of docker env files"
651}
652
Mike Marchettib8420852018-09-13 13:45:06 -0400653function generate_osmclient_script () {
Mike Marchetti46d6efe2018-10-23 16:20:16 -0400654 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 -0400655 $WORKDIR_SUDO chmod +x "$OSM_DOCKER_WORK_DIR/osm"
656 echo "osmclient sidecar container can be found at: $OSM_DOCKER_WORK_DIR/osm"
657}
658
vijaynag8339ed22019-07-25 17:10:58 +0530659#installs kubernetes packages
660function install_kube() {
661 sudo apt-get update && sudo apt-get install -y apt-transport-https
662 curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
663 sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
664 sudo apt-get update
665 echo "Installing Kubernetes Packages ..."
666 sudo apt-get install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
667}
668
669#initializes kubernetes control plane
670function init_kubeadm() {
671 sudo swapoff -a
672 sudo kubeadm init --config $1
673 sleep 5
674}
675
676function kube_config_dir() {
677 [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes"
678 mkdir -p $HOME/.kube
679 sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
680 sudo chown $(id -u):$(id -g) $HOME/.kube/config
681}
682
683#deploys flannel as daemonsets
684function deploy_cni_provider() {
685 CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")"
686 trap 'rm -rf "${CNI_DIR}"' EXIT
687 wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR
688 kubectl apply -f $CNI_DIR
689 [ $? -ne 0 ] && FATAL "Cannot Install Flannel"
690}
691
692#creates secrets from env files which will be used by containers
693function kube_secrets(){
694 kubectl create ns $OSM_STACK_NAME
695 kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env
696 kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env
697 kubectl create secret generic nbi-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/nbi.env
698 kubectl create secret generic ro-db-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro-db.env
699 kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env
700 kubectl create secret generic keystone-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/keystone.env
701 kubectl create secret generic lwui-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lwui.env
702 kubectl create secret generic pol-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/pol.env
703}
704
705#deploys osm pods and services
706function deploy_osm_services() {
707 K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}')
708 kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
709 sleep 5
710 kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR
711}
712
713function parse_yaml() {
714 osm_services="nbi lcm ro pol mon light-ui keystone"
715 TAG=$1
716 for osm in $osm_services; do
717 $WORKDIR_SUDO sed -i "s/opensourcemano\/$osm:.*/opensourcemano\/$osm:$TAG/g" $OSM_K8S_WORK_DIR/$osm.yaml
718 done
719}
720
721function namespace_vol() {
722 osm_services="nbi lcm ro pol mon kafka mongo mysql"
723 for osm in $osm_services; do
724 $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml
725 done
726}
727
garciadeblasa3e26612018-05-30 17:58:55 +0200728function init_docker_swarm() {
garciadeblasd8bc5c32018-05-09 17:37:56 +0200729 if [ "${DEFAULT_MTU}" != "1500" ]; then
730 DOCKER_NETS=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
731 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";}'`
732 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"
733 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200734 sg docker -c "docker swarm init --advertise-addr ${DEFAULT_IP}"
garciadeblasa3e26612018-05-30 17:58:55 +0200735 return 0
736}
737
Mike Marchettib8420852018-09-13 13:45:06 -0400738function create_docker_network() {
739 echo "creating network"
740 sg docker -c "docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} net${OSM_STACK_NAME}"
741 echo "creating network DONE"
742}
743
garciadeblasa3e26612018-05-30 17:58:55 +0200744function deploy_lightweight() {
Mike Marchettib8420852018-09-13 13:45:06 -0400745
garciadeblasa3e26612018-05-30 17:58:55 +0200746 echo "Deploying lightweight build"
Mike Marchettib8420852018-09-13 13:45:06 -0400747 OSM_NBI_PORT=9999
748 OSM_RO_PORT=9090
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100749 OSM_KEYSTONE_PORT=5000
Mike Marchettib8420852018-09-13 13:45:06 -0400750 OSM_UI_PORT=80
lavadoafa54c72018-10-05 09:28:28 -0500751 OSM_MON_PORT=8662
lavado60216242018-10-10 23:44:28 +0200752 OSM_PROM_PORT=9090
garciadeblasa7b27dc2019-12-04 15:06:55 +0100753 OSM_PROM_CADVISOR_PORT=8080
lavado60216242018-10-10 23:44:28 +0200754 OSM_PROM_HOSTPORT=9091
lavado6ad812e2019-11-29 10:58:58 -0500755 OSM_GRAFANA_PORT=3000
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100756 [ -n "$INSTALL_ELK" ] && OSM_ELK_PORT=5601
lavado6ad812e2019-11-29 10:58:58 -0500757 #[ -n "$INSTALL_PERFMON" ] && OSM_PM_PORT=3000
lavado60216242018-10-10 23:44:28 +0200758
Mike Marchettib8420852018-09-13 13:45:06 -0400759 if [ -n "$NO_HOST_PORTS" ]; then
760 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT)
761 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100762 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400763 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -0500764 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +0200765 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +0100766 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -0500767 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT)
768 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100769 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400770 else
771 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT:$OSM_NBI_PORT)
772 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT:$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100773 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT:$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400774 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT:$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -0500775 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT:$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +0200776 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_HOSTPORT:$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +0100777 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT:$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -0500778 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT:$OSM_GRAFANA_PORT)
779 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT:$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100780 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT:$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400781 fi
782 echo "export ${OSM_PORTS[@]}" | $WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/osm_ports.sh
783 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 -0400784 echo "export TAG=${OSM_DOCKER_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Mike Marchettida8a9c42018-10-01 15:25:15 -0400785 echo "export DOCKER_USER=${DOCKER_USER}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -0300786 echo "export KAFKA_TAG=${KAFKA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado60216242018-10-10 23:44:28 +0200787 echo "export PROMETHEUS_TAG=${PROMETHEUS_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado9a8df7c2018-10-24 09:35:34 -0500788 echo "export KEYSTONEDB_TAG=${KEYSTONEDB_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado6ad812e2019-11-29 10:58:58 -0500789 echo "export PROMETHEUS_CADVISOR_TAG=${PROMETHEUS_CADVISOR_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
790 echo "export GRAFANA_TAG=${GRAFANA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -0300791
Mike Marchettib8420852018-09-13 13:45:06 -0400792 pushd $OSM_DOCKER_WORK_DIR
beierl63229a22019-05-30 14:42:04 -0400793 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 -0400794 popd
795
garciadeblasd8bc5c32018-05-09 17:37:56 +0200796 echo "Finished deployment of lightweight build"
797}
798
garciadeblas6c66abf2018-05-16 14:46:19 +0200799function deploy_elk() {
garciadeblase2aebfe2018-07-06 14:11:20 +0200800 echo "Pulling docker images for ELK"
lavado53eb8f52018-11-16 12:58:23 -0500801 sg docker -c "docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:${ELASTIC_VERSION}" || FATAL "cannot get elasticsearch docker image"
802 sg docker -c "docker pull docker.elastic.co/beats/metricbeat:${ELASTIC_VERSION}" || FATAL "cannot get metricbeat docker image"
803 sg docker -c "docker pull docker.elastic.co/beats/filebeat:${ELASTIC_VERSION}" || FATAL "cannot get filebeat docker image"
804 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 -0500805 sg docker -c "docker pull bobrik/curator:${ELASTIC_CURATOR_VERSION}" || FATAL "cannot get curator docker image"
garciadeblase2aebfe2018-07-06 14:11:20 +0200806 echo "Finished pulling elk docker images"
Mike Marchettib8420852018-09-13 13:45:06 -0400807 $WORKDIR_SUDO mkdir -p "$OSM_DOCKER_WORK_DIR/osm_elk"
808 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_elk/* $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas5b857d32018-05-24 18:37:58 +0200809 remove_stack osm_elk
garciadeblas6c66abf2018-05-16 14:46:19 +0200810 echo "Deploying ELK stack"
Mike Marchettib8420852018-09-13 13:45:06 -0400811 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 +0200812 echo "Waiting for ELK stack to be up and running"
813 time=0
garciadeblase2aebfe2018-07-06 14:11:20 +0200814 step=5
815 timelength=40
garciadeblas6c66abf2018-05-16 14:46:19 +0200816 elk_is_up=1
817 while [ $time -le $timelength ]; do
garciadeblase2aebfe2018-07-06 14:11:20 +0200818 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 +0200819 elk_is_up=0
820 break
821 fi
822 sleep $step
823 time=$((time+step))
824 done
825 if [ $elk_is_up -eq 0 ]; then
826 echo "ELK is up and running. Trying to create index pattern..."
827 #Create index pattern
828 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -0500829 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
830 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200831 #Make it the default index
garciadeblase2aebfe2018-07-06 14:11:20 +0200832 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +0200833 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -0500834 -d"{\"value\":\"filebeat-*\"}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200835 else
836 echo "Cannot connect to Kibana to create index pattern."
837 echo "Once Kibana is running, you can use the following instructions to create index pattern:"
838 echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -0500839 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
840 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}"'
garciadeblas6c66abf2018-05-16 14:46:19 +0200841 echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +0200842 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -0500843 -d"{\"value\":\"filebeat-*\"}"'
garciadeblas6c66abf2018-05-16 14:46:19 +0200844 fi
845 echo "Finished deployment of ELK stack"
846 return 0
847}
848
garciadeblasd8bc5c32018-05-09 17:37:56 +0200849function install_lightweight() {
garciadeblas0d45bc82018-11-19 14:25:13 +0100850 [ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
vijaynag8339ed22019-07-25 17:10:58 +0530851 [ -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 -0400852 [ ! -d "$OSM_DOCKER_WORK_DIR" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR
vijaynag8339ed22019-07-25 17:10:58 +0530853 [ -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 -0400854
garciadeblas183e5802018-12-13 18:20:54 +0100855 track checkingroot
garciadeblasd13a8aa2018-05-18 15:24:51 +0200856 [ "$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 +0100857 track noroot
vijaynag8339ed22019-07-25 17:10:58 +0530858
859 if [ -n "$KUBERNETES" ]; then
860 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
861 1. Install and configure LXD
862 2. Install juju
863 3. Install docker CE
864 4. Disable swap space
865 5. Install and initialize Kubernetes
866 as pre-requirements.
867 Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
868
869 else
870 [ -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
871 fi
garciadeblasfae5e972018-06-12 18:27:11 +0200872 track proceed
vijaynag8339ed22019-07-25 17:10:58 +0530873
garciadeblasd8bc5c32018-05-09 17:37:56 +0200874 echo "Installing lightweight build of OSM"
875 LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
876 trap 'rm -rf "${LWTEMPDIR}"' EXIT
877 DEFAULT_IF=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
garciadeblas8cd60772018-06-02 08:38:17 +0200878 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200879 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
garciadeblas8cd60772018-06-02 08:38:17 +0200880 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200881 DEFAULT_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
Mike Marchettib8420852018-09-13 13:45:06 -0400882
883 # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to
lavadoe07b1642018-10-25 10:58:34 -0500884 if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ]; then
David Garcia50d786e2020-03-30 14:49:40 +0200885 need_packages_lw="snapd"
garciadeblasd41f5482018-05-25 10:25:06 +0200886 echo -e "Checking required packages: $need_packages_lw"
887 dpkg -l $need_packages_lw &>/dev/null \
888 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
889 || sudo apt-get update \
890 || FATAL "failed to run apt-get update"
891 dpkg -l $need_packages_lw &>/dev/null \
892 || ! echo -e "Installing $need_packages_lw requires root privileges." \
893 || sudo apt-get install -y $need_packages_lw \
894 || FATAL "failed to install $need_packages_lw"
David Garcia50d786e2020-03-30 14:49:40 +0200895 install_lxd
garciadeblasd41f5482018-05-25 10:25:06 +0200896 fi
garciadeblasfae5e972018-06-12 18:27:11 +0200897 track prereqok
Mike Marchettib8420852018-09-13 13:45:06 -0400898
vijaynag8339ed22019-07-25 17:10:58 +0530899 [ -z "$INSTALL_NOJUJU" ] && install_juju
garciadeblas183e5802018-12-13 18:20:54 +0100900 track juju_install
vijaynag8339ed22019-07-25 17:10:58 +0530901
lavadoe07b1642018-10-25 10:58:34 -0500902 if [ -z "$OSM_VCA_HOST" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400903 juju_createcontroller
lavadoe07b1642018-10-25 10:58:34 -0500904 OSM_VCA_HOST=`sg lxd -c "juju show-controller $OSM_STACK_NAME"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
905 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
Mike Marchettib8420852018-09-13 13:45:06 -0400906 fi
garciadeblas183e5802018-12-13 18:20:54 +0100907 track juju_controller
vijaynag8339ed22019-07-25 17:10:58 +0530908
lavadoe07b1642018-10-25 10:58:34 -0500909 if [ -z "$OSM_VCA_SECRET" ]; then
910 OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME)
911 [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
Mike Marchettib8420852018-09-13 13:45:06 -0400912 fi
garciadeblasaa3ddf42019-04-04 19:04:32 +0200913 if [ -z "$OSM_VCA_PUBKEY" ]; then
914 OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
915 [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
916 fi
garciadeblasfc5bb142019-12-10 10:49:12 +0100917 if [ -z "$OSM_VCA_CACERT" ]; then
918 OSM_VCA_CACERT=$(juju controllers --format json | jq -r '.controllers["osm"]["ca-cert"]' | base64 | tr -d \\n)
919 [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
920 fi
Adam Israel5ddc97f2019-09-03 18:11:12 -0400921 if [ -z "$OSM_VCA_APIPROXY" ]; then
922 OSM_VCA_APIPROXY=$DEFAULT_IP
923 [ -z "$OSM_VCA_APIPROXY" ] && FATAL "Cannot obtain juju api proxy"
924 fi
925 juju_createproxy
garciadeblasfc5bb142019-12-10 10:49:12 +0100926 track juju
Adam Israel5ddc97f2019-09-03 18:11:12 -0400927
Benjamin Diazba2cca92018-11-08 21:07:15 -0300928 if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
929 OSM_DATABASE_COMMONKEY=$(generate_secret)
930 [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret"
931 fi
vijaynag8339ed22019-07-25 17:10:58 +0530932
garciadeblasa3e26612018-05-30 17:58:55 +0200933 [ -n "$INSTALL_NODOCKER" ] || install_docker_ce
garciadeblas6c66abf2018-05-16 14:46:19 +0200934 track docker_ce
vijaynag8339ed22019-07-25 17:10:58 +0530935
936 #Installs Kubernetes and deploys osm services
937 if [ -n "$KUBERNETES" ]; then
938 install_kube
939 track install_k8s
940 init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
941 kube_config_dir
942 track init_k8s
943 else
944 #install_docker_compose
945 [ -n "$INSTALL_NODOCKER" ] || init_docker_swarm
946 track docker_swarm
947 fi
948
Mike Marchettib8420852018-09-13 13:45:06 -0400949 [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
garciadeblas6c66abf2018-05-16 14:46:19 +0200950 track docker_build
vijaynag8339ed22019-07-25 17:10:58 +0530951
garciadeblasd8bc5c32018-05-09 17:37:56 +0200952 generate_docker_env_files
Mike Marchettib8420852018-09-13 13:45:06 -0400953
vijaynag8339ed22019-07-25 17:10:58 +0530954 if [ -n "$KUBERNETES" ]; then
garciadeblasb5a630f2020-03-05 18:32:16 +0000955 if [ -n "$INSTALL_K8S_MONITOR" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +0100956 # uninstall OSM MONITORING
957 uninstall_k8s_monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +0100958 track uninstall_k8s_monitoring
romeromonsere366b1a2019-11-19 19:49:26 +0100959 fi
vijaynag8339ed22019-07-25 17:10:58 +0530960 #remove old namespace
961 remove_k8s_namespace $OSM_STACK_NAME
962 deploy_cni_provider
963 kube_secrets
garciadeblasa7e128a2019-12-18 11:10:45 +0100964 [ ! $OSM_DOCKER_TAG == "7" ] && parse_yaml $OSM_DOCKER_TAG
vijaynag8339ed22019-07-25 17:10:58 +0530965 namespace_vol
966 deploy_osm_services
967 track deploy_osm_services_k8s
garciadeblasb5a630f2020-03-05 18:32:16 +0000968 if [ -n "$INSTALL_K8S_MONITOR" ]; then
garciadeblasfc5bb142019-12-10 10:49:12 +0100969 # install OSM MONITORING
970 install_k8s_monitoring
971 track install_k8s_monitoring
972 fi
vijaynag8339ed22019-07-25 17:10:58 +0530973 else
974 # remove old stack
975 remove_stack $OSM_STACK_NAME
976 create_docker_network
977 deploy_lightweight
978 generate_osmclient_script
979 track docker_deploy
lavado6ad812e2019-11-29 10:58:58 -0500980 install_prometheus_nodeexporter
garciadeblasfc5bb142019-12-10 10:49:12 +0100981 track nodeexporter
vijaynag8339ed22019-07-25 17:10:58 +0530982 [ -n "$INSTALL_VIMEMU" ] && install_vimemu && track vimemu
983 [ -n "$INSTALL_ELK" ] && deploy_elk && track elk
vijaynag8339ed22019-07-25 17:10:58 +0530984 fi
985
Mike Marchettib8420852018-09-13 13:45:06 -0400986 [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
garciadeblas6c66abf2018-05-16 14:46:19 +0200987 track osmclient
vijaynag8339ed22019-07-25 17:10:58 +0530988
garciadeblas44c02192019-12-09 01:36:57 +0100989 wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200990 track end
garciadeblasd8bc5c32018-05-09 17:37:56 +0200991 return 0
992}
993
994function install_vimemu() {
peusterm76353e42018-05-08 13:56:05 +0200995 echo "\nInstalling vim-emu"
996 EMUTEMPDIR="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX")"
997 trap 'rm -rf "${EMUTEMPDIR}"' EXIT
peusterma3a7d142020-02-07 10:12:29 +0100998 # install prerequisites (OVS is a must for the emulator to work)
999 sudo apt-get install openvswitch-switch
garciadeblasd8bc5c32018-05-09 17:37:56 +02001000 # clone vim-emu repository (attention: branch is currently master only)
1001 echo "Cloning vim-emu repository ..."
peusterm76353e42018-05-08 13:56:05 +02001002 git clone https://osm.etsi.org/gerrit/osm/vim-emu.git $EMUTEMPDIR
garciadeblasd8bc5c32018-05-09 17:37:56 +02001003 # build vim-emu docker
1004 echo "Building vim-emu Docker container..."
Mike Marchettib8420852018-09-13 13:45:06 -04001005
1006 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 +02001007 # start vim-emu container as daemon
1008 echo "Starting vim-emu Docker container 'vim-emu' ..."
peusterm76353e42018-05-08 13:56:05 +02001009 if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
1010 # in lightweight mode, the emulator needs to be attached to netOSM
Mike Marchettib8420852018-09-13 13:45:06 -04001011 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 +02001012 else
1013 # classic build mode
Mike Marchettib8420852018-09-13 13:45:06 -04001014 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 +02001015 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001016 echo "Waiting for 'vim-emu' container to start ..."
1017 sleep 5
Mike Marchettib8420852018-09-13 13:45:06 -04001018 export VIMEMU_HOSTNAME=$(sg docker -c "docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001019 echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
peusterm76353e42018-05-08 13:56:05 +02001020 # print vim-emu connection info
1021 echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001022 echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
peusterm76353e42018-05-08 13:56:05 +02001023 echo -e "To add the emulated VIM to OSM you should do:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001024 echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
1025}
1026
romeromonsere366b1a2019-11-19 19:49:26 +01001027function install_k8s_monitoring() {
1028 # install OSM monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +01001029 $WORKDIR_SUDO chmod +x $OSM_DEVOPS/installers/k8s/*.sh
romeromonsere366b1a2019-11-19 19:49:26 +01001030 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh
1031}
1032
1033function uninstall_k8s_monitoring() {
K Sai Kiran5e151f02019-12-11 14:50:09 +05301034 # uninstall OSM monitoring
romeromonsere366b1a2019-11-19 19:49:26 +01001035 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/uninstall_osm_k8s_monitoring.sh
1036}
1037
garciadeblasd8bc5c32018-05-09 17:37:56 +02001038function dump_vars(){
1039 echo "DEVELOP=$DEVELOP"
1040 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
1041 echo "UNINSTALL=$UNINSTALL"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001042 echo "UPDATE=$UPDATE"
1043 echo "RECONFIGURE=$RECONFIGURE"
1044 echo "TEST_INSTALLER=$TEST_INSTALLER"
1045 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
1046 echo "INSTALL_LXD=$INSTALL_LXD"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001047 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
garciadeblas6c66abf2018-05-16 14:46:19 +02001048 echo "INSTALL_ONLY=$INSTALL_ONLY"
1049 echo "INSTALL_ELK=$INSTALL_ELK"
lavado6ad812e2019-11-29 10:58:58 -05001050 #echo "INSTALL_PERFMON=$INSTALL_PERFMON"
garciadeblasb5a630f2020-03-05 18:32:16 +00001051 echo "INSTALL_K8S_MONITOR=$INSTALL_K8S_MONITOR"
garciadeblas0e596bc2018-05-28 16:04:42 +02001052 echo "TO_REBUILD=$TO_REBUILD"
garciadeblasd41f5482018-05-25 10:25:06 +02001053 echo "INSTALL_NOLXD=$INSTALL_NOLXD"
garciadeblasa3e26612018-05-30 17:58:55 +02001054 echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
garciadeblas0d45bc82018-11-19 14:25:13 +01001055 echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001056 echo "RELEASE=$RELEASE"
1057 echo "REPOSITORY=$REPOSITORY"
1058 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
1059 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001060 echo "OSM_DEVOPS=$OSM_DEVOPS"
1061 echo "OSM_VCA_HOST=$OSM_VCA_HOST"
1062 echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
garciadeblasaa3ddf42019-04-04 19:04:32 +02001063 echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001064 echo "NO_HOST_PORTS=$NO_HOST_PORTS"
1065 echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
1066 echo "WORKDIR_SUDO=$WORKDIR_SUDO"
1067 echo "OSM_WORK_DIR=$OSM_STACK_NAME"
1068 echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
1069 echo "DOCKER_USER=$DOCKER_USER"
1070 echo "OSM_STACK_NAME=$OSM_STACK_NAME"
1071 echo "PULL_IMAGES=$PULL_IMAGES"
vijaynag8339ed22019-07-25 17:10:58 +05301072 echo "KUBERNETES=$KUBERNETES"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001073 echo "SHOWOPTS=$SHOWOPTS"
1074 echo "Install from specific refspec (-b): $COMMIT_ID"
1075}
1076
1077function track(){
1078 ctime=`date +%s`
1079 duration=$((ctime - SESSION_ID))
1080 url="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
1081 #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
1082 event_name="bin"
garciadeblas6c66abf2018-05-16 14:46:19 +02001083 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name="binsrc"
1084 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name="lxd"
1085 [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name="lw"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001086 event_name="${event_name}_$1"
1087 url="${url}&event=${event_name}&ce_duration=${duration}"
1088 wget -q -O /dev/null $url
1089}
1090
1091UNINSTALL=""
1092DEVELOP=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001093UPDATE=""
1094RECONFIGURE=""
1095TEST_INSTALLER=""
1096INSTALL_LXD=""
1097SHOWOPTS=""
1098COMMIT_ID=""
1099ASSUME_YES=""
1100INSTALL_FROM_SOURCE=""
garciadeblasfc5bb142019-12-10 10:49:12 +01001101RELEASE="ReleaseSEVEN"
Mike Marchettib8420852018-09-13 13:45:06 -04001102REPOSITORY="stable"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001103INSTALL_VIMEMU=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001104LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
1105LXD_REPOSITORY_PATH=""
1106INSTALL_LIGHTWEIGHT="y"
garciadeblas6c66abf2018-05-16 14:46:19 +02001107INSTALL_ONLY=""
1108INSTALL_ELK=""
garciadeblas0e596bc2018-05-28 16:04:42 +02001109TO_REBUILD=""
garciadeblasd41f5482018-05-25 10:25:06 +02001110INSTALL_NOLXD=""
garciadeblasa3e26612018-05-30 17:58:55 +02001111INSTALL_NODOCKER=""
Mike Marchettib8420852018-09-13 13:45:06 -04001112INSTALL_NOJUJU=""
vijaynag8339ed22019-07-25 17:10:58 +05301113KUBERNETES=""
garciadeblasb5a630f2020-03-05 18:32:16 +00001114INSTALL_K8S_MONITOR=""
garciadeblas0d45bc82018-11-19 14:25:13 +01001115INSTALL_NOHOSTCLIENT=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001116SESSION_ID=`date +%s`
1117OSM_DEVOPS=
lavadoe07b1642018-10-25 10:58:34 -05001118OSM_VCA_HOST=
1119OSM_VCA_SECRET=
garciadeblasaa3ddf42019-04-04 19:04:32 +02001120OSM_VCA_PUBKEY=
Mike Marchettib8420852018-09-13 13:45:06 -04001121OSM_STACK_NAME=osm
1122NO_HOST_PORTS=""
1123DOCKER_NOBUILD=""
1124REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
garciadeblas870e60a2018-11-21 16:44:21 +01001125REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
Mike Marchettib8420852018-09-13 13:45:06 -04001126WORKDIR_SUDO=sudo
1127OSM_WORK_DIR="/etc/osm"
garciadeblas526f0fb2018-11-23 14:47:40 +01001128OSM_DOCKER_WORK_DIR="/etc/osm/docker"
vijaynag8339ed22019-07-25 17:10:58 +05301129OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
1130OSM_HOST_VOL="/var/lib/osm"
1131OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
Mike Marchetti13d76c82018-09-19 15:00:36 -04001132OSM_DOCKER_TAG=latest
garciadeblas0d45bc82018-11-19 14:25:13 +01001133DOCKER_USER=opensourcemano
1134PULL_IMAGES="y"
Benjamin Diazaa0af712018-10-04 14:02:34 -03001135KAFKA_TAG=2.11-1.0.2
lavado60216242018-10-10 23:44:28 +02001136PROMETHEUS_TAG=v2.4.3
lavado6ad812e2019-11-29 10:58:58 -05001137GRAFANA_TAG=latest
1138PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
1139PROMETHEUS_CADVISOR_TAG=latest
lavado9a8df7c2018-10-24 09:35:34 -05001140KEYSTONEDB_TAG=10
Benjamin Diazba2cca92018-11-08 21:07:15 -03001141OSM_DATABASE_COMMONKEY=
lavado53eb8f52018-11-16 12:58:23 -05001142ELASTIC_VERSION=6.4.2
lavado4e8662c2018-11-28 11:28:14 -05001143ELASTIC_CURATOR_VERSION=5.5.4
vijaynag8339ed22019-07-25 17:10:58 +05301144POD_NETWORK_CIDR=10.244.0.0/16
1145K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
1146RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
garciadeblasd8bc5c32018-05-09 17:37:56 +02001147
vijaynag01b68762020-02-03 08:46:36 +00001148while 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 +02001149 case "${o}" in
garciadeblasd8bc5c32018-05-09 17:37:56 +02001150 b)
1151 COMMIT_ID=${OPTARG}
garciadeblas0d45bc82018-11-19 14:25:13 +01001152 PULL_IMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001153 ;;
1154 r)
Mike Marchettib8420852018-09-13 13:45:06 -04001155 REPOSITORY="${OPTARG}"
1156 REPO_ARGS+=(-r "$REPOSITORY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001157 ;;
vijaynag8339ed22019-07-25 17:10:58 +05301158 c)
1159 [ "${OPTARG}" == "swarm" ] && continue
1160 [ "${OPTARG}" == "k8s" ] && KUBERNETES="y" && continue
1161 echo -e "Invalid argument for -i : ' $OPTARG'\n" >&2
1162 usage && exit 1
1163 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001164 k)
Mike Marchettib8420852018-09-13 13:45:06 -04001165 REPOSITORY_KEY="${OPTARG}"
1166 REPO_ARGS+=(-k "$REPOSITORY_KEY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001167 ;;
1168 u)
Mike Marchettib8420852018-09-13 13:45:06 -04001169 REPOSITORY_BASE="${OPTARG}"
1170 REPO_ARGS+=(-u "$REPOSITORY_BASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001171 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001172 R)
1173 RELEASE="${OPTARG}"
1174 REPO_ARGS+=(-R "$RELEASE")
garciadeblas0d45bc82018-11-19 14:25:13 +01001175 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001176 D)
1177 OSM_DEVOPS="${OPTARG}"
1178 ;;
garciadeblas6c66abf2018-05-16 14:46:19 +02001179 o)
1180 INSTALL_ONLY="y"
1181 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
1182 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblasb5a630f2020-03-05 18:32:16 +00001183 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001184 ;;
garciadeblas0e596bc2018-05-28 16:04:42 +02001185 m)
garciadeblas0e596bc2018-05-28 16:04:42 +02001186 [ "${OPTARG}" == "LW-UI" ] && TO_REBUILD="$TO_REBUILD LW-UI" && continue
govindappa79e51b92019-05-22 12:15:21 +05301187 [ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
1188 [ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
1189 [ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001190 [ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
govindappa79e51b92019-05-22 12:15:21 +05301191 [ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001192 [ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
1193 [ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
govindappa79e51b92019-05-22 12:15:21 +05301194 [ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
garciadeblasfc5bb142019-12-10 10:49:12 +01001195 [ "${OPTARG}" == "PROMETHEUS-CADVISOR" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS-CADVISOR" && continue
govindappa79e51b92019-05-22 12:15:21 +05301196 [ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
lavado6ad812e2019-11-29 10:58:58 -05001197 [ "${OPTARG}" == "GRAFANA" ] && TO_REBUILD="$TO_REBUILD GRAFANA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001198 [ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
1199 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001200 H)
1201 OSM_VCA_HOST="${OPTARG}"
1202 ;;
1203 S)
1204 OSM_VCA_SECRET="${OPTARG}"
1205 ;;
1206 s)
1207 OSM_STACK_NAME="${OPTARG}" && [ -n "$KUBERNETES" ] && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0
1208 ;;
1209 w)
1210 # when specifying workdir, do not use sudo for access
1211 WORKDIR_SUDO=
1212 OSM_WORK_DIR="${OPTARG}"
1213 ;;
1214 t)
1215 OSM_DOCKER_TAG="${OPTARG}"
1216 ;;
1217 U)
1218 DOCKER_USER="${OPTARG}"
1219 ;;
1220 P)
1221 OSM_VCA_PUBKEY=$(cat ${OPTARG})
1222 ;;
1223 A)
1224 OSM_VCA_APIPROXY="${OPTARG}"
1225 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001226 -)
1227 [ "${OPTARG}" == "help" ] && usage && exit 0
garciadeblas0d45bc82018-11-19 14:25:13 +01001228 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001229 [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
1230 [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001231 [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
1232 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
1233 [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
1234 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
garciadeblasd41f5482018-05-25 10:25:06 +02001235 [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
garciadeblasa3e26612018-05-30 17:58:55 +02001236 [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001237 [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001238 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001239 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001240 [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001241 [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
1242 [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
1243 [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
1244 [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
garciadeblas0d45bc82018-11-19 14:25:13 +01001245 [ "${OPTARG}" == "pullimages" ] && continue
garciadeblasb5a630f2020-03-05 18:32:16 +00001246 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001247 [ "${OPTARG}" == "charmed" ] && CHARMED="y" && continue
1248 [ "${OPTARG}" == "bundle" ] && continue
1249 [ "${OPTARG}" == "kubeconfig" ] && continue
1250 [ "${OPTARG}" == "lxdendpoint" ] && continue
1251 [ "${OPTARG}" == "lxdcert" ] && continue
1252 [ "${OPTARG}" == "microstack" ] && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001253 echo -e "Invalid option: '--$OPTARG'\n" >&2
1254 usage && exit 1
1255 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001256 :)
1257 echo "Option -$OPTARG requires an argument" >&2
1258 usage && exit 1
1259 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001260 \?)
1261 echo -e "Invalid option: '-$OPTARG'\n" >&2
1262 usage && exit 1
1263 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001264 h)
1265 usage && exit 0
1266 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001267 y)
1268 ASSUME_YES="y"
1269 ;;
1270 *)
1271 usage && exit 1
1272 ;;
1273 esac
1274done
1275
garciadeblas0e596bc2018-05-28 16:04:42 +02001276[ -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 +02001277
garciadeblasd8bc5c32018-05-09 17:37:56 +02001278if [ -n "$SHOWOPTS" ]; then
1279 dump_vars
1280 exit 0
1281fi
1282
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001283if [ -n "$CHARMED" ]; then
1284 if [ -n "$UNINSTALL" ]; then
1285 /usr/share/osm-devops/installers/charmed_uninstall.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D /usr/share/osm-devops -t $DOCKER_TAG "$@"
1286 else
1287 /usr/share/osm-devops/installers/charmed_install.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D /usr/share/osm-devops -t $DOCKER_TAG "$@"
1288 fi
1289
1290 echo "Your installation is now complete, follow these steps for configuring the osmclient:"
1291 echo
1292 echo "1. Get the NBI IP with the following command:"
1293 echo
1294 echo "juju status --format yaml | yq r - applications.nbi-k8s.address"
1295 echo
1296 echo "2. Create the OSM_HOSTNAME environment variable with the NBI IP"
1297 echo
1298 echo "export OSM_HOSTNAME=<NBI-IP>"
1299 echo
1300 echo "3. Add the previous command to your .bashrc for other Shell sessions"
1301 echo
1302 echo "export OSM_HOSTNAME=<previous-IP> >> ~/.bashrc"
1303 echo
1304 echo "DONE"
1305
1306 exit 0
1307fi
1308
garciadeblasd8bc5c32018-05-09 17:37:56 +02001309# if develop, we force master
1310[ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
1311
garciadeblasd8bc5c32018-05-09 17:37:56 +02001312need_packages="git jq wget curl tar"
1313echo -e "Checking required packages: $need_packages"
1314dpkg -l $need_packages &>/dev/null \
1315 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1316 || sudo apt-get update \
1317 || FATAL "failed to run apt-get update"
1318dpkg -l $need_packages &>/dev/null \
1319 || ! echo -e "Installing $need_packages requires root privileges." \
1320 || sudo apt-get install -y $need_packages \
1321 || FATAL "failed to install $need_packages"
1322
1323if [ -z "$OSM_DEVOPS" ]; then
Michael Marchettiee374142018-08-02 22:47:16 +02001324 if [ -n "$TEST_INSTALLER" ]; then
1325 echo -e "\nUsing local devops repo for OSM installation"
1326 OSM_DEVOPS="$(dirname $(realpath $(dirname $0)))"
1327 else
1328 echo -e "\nCreating temporary dir for OSM installation"
1329 OSM_DEVOPS="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
1330 trap 'rm -rf "$OSM_DEVOPS"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001331
Michael Marchettiee374142018-08-02 22:47:16 +02001332 git clone https://osm.etsi.org/gerrit/osm/devops.git $OSM_DEVOPS
garciadeblasd8bc5c32018-05-09 17:37:56 +02001333
Michael Marchettiee374142018-08-02 22:47:16 +02001334 if [ -z "$COMMIT_ID" ]; then
1335 echo -e "\nGuessing the current stable release"
1336 LATEST_STABLE_DEVOPS=`git -C $OSM_DEVOPS tag -l v[0-9].* | sort -V | tail -n1`
1337 [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
1338
1339 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
1340 COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
1341 else
1342 echo -e "\nDEVOPS Using commit $COMMIT_ID"
1343 fi
1344 git -C $OSM_DEVOPS checkout $COMMIT_ID
garciadeblasd8bc5c32018-05-09 17:37:56 +02001345 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001346fi
1347
garciadeblas3c25fab2019-11-18 17:24:43 +01001348. $OSM_DEVOPS/common/all_funcs
garciadeblasd8bc5c32018-05-09 17:37:56 +02001349
1350[ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight && echo -e "\nDONE" && exit 0
garciadeblas6c66abf2018-05-16 14:46:19 +02001351[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
lavado6ad812e2019-11-29 10:58:58 -05001352#[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
garciadeblas6c66abf2018-05-16 14:46:19 +02001353[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
garciadeblasb5a630f2020-03-05 18:32:16 +00001354[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_K8S_MONITOR" ] && install_k8s_monitoring
garciadeblas6c66abf2018-05-16 14:46:19 +02001355[ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
garciadeblasd8bc5c32018-05-09 17:37:56 +02001356
1357#Installation starts here
garciadeblas44c02192019-12-09 01:36:57 +01001358wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001359track start
1360
garciadeblasd8bc5c32018-05-09 17:37:56 +02001361[ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight && echo -e "\nDONE" && exit 0
1362echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
1363if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
1364 ! ask_user "The installation will take about 75-90 minutes. Continue (Y/n)? " y && echo "Cancelled!" && exit 1
1365fi
1366
1367echo -e "Checking required packages: lxd"
1368lxd --version &>/dev/null || FATAL "lxd not present, exiting."
1369[ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
1370
garciadeblasd8bc5c32018-05-09 17:37:56 +02001371# use local devops for containers
1372export OSM_USE_LOCAL_DEVOPS=true
garciadeblasd8bc5c32018-05-09 17:37:56 +02001373
1374#Install osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +02001375
1376#Install vim-emu (optional)
peusterm76353e42018-05-08 13:56:05 +02001377[ -n "$INSTALL_VIMEMU" ] && install_docker_ce && install_vimemu
garciadeblasd8bc5c32018-05-09 17:37:56 +02001378
garciadeblas44c02192019-12-09 01:36:57 +01001379wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblasd8bc5c32018-05-09 17:37:56 +02001380track end
1381echo -e "\nDONE"
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001382