blob: 9e4132ca807f28cfd61b4aa14ddeff43d3d38ae9 [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
garciadeblasb5a630f2020-03-05 18:32:16 +0000167 if [ -n "$INSTALL_K8S_MONITOR" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +0100168 # 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
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100206#Safe unattended install of iptables-persistent
207function check_install_iptables_persistent(){
208 echo -e "\nChecking required packages: iptables-persistent"
209 if dpkg -l iptables-persistent &>/dev/null; then
210 echo -e " Not installed.\nInstalling iptables-persistent requires root privileges"
211 echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections
212 echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections
213 sudo apt-get -yq install iptables-persistent
214 fi
215}
216
garciadeblasd8bc5c32018-05-09 17:37:56 +0200217#Configure NAT rules, based on the current IP addresses of containers
218function nat(){
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100219 check_install_iptables_persistent
220
garciadeblasd8bc5c32018-05-09 17:37:56 +0200221 echo -e "\nConfiguring NAT rules"
222 echo -e " Required root privileges"
223 sudo $OSM_DEVOPS/installers/nat_osm
224}
225
226function FATAL(){
227 echo "FATAL error: Cannot install OSM due to \"$1\""
228 exit 1
229}
230
garciadeblasd8bc5c32018-05-09 17:37:56 +0200231function install_lxd() {
David Garcia50d786e2020-03-30 14:49:40 +0200232 # Apply sysctl production values for optimal performance
233 sudo cp /usr/share/osm-devops/installers/60-lxd-production.conf /etc/sysctl.d/60-lxd-production.conf
234 sudo sysctl --system
235
236 # Install LXD snap
237 sudo apt-get remove --purge -y liblxc1 lxc-common lxcfs lxd lxd-client
238 sudo snap install lxd --channel=3.0/stable
239
240 # Configure LXD
241 sudo usermod -a -G lxd `whoami`
242 cat /usr/share/osm-devops/installers/lxd-preseed.conf | sg lxd -c "lxd init --preseed"
243 sg lxd -c "lxd waitready"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200244 DEFAULT_INTERFACE=$(route -n | awk '$1~/^0.0.0.0/ {print $8}')
245 DEFAULT_MTU=$(ip addr show $DEFAULT_INTERFACE | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
David Garcia50d786e2020-03-30 14:49:40 +0200246 sg lxd -c "lxc profile device set default eth0 mtu $DEFAULT_MTU"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200247 #sudo systemctl stop lxd-bridge
248 #sudo systemctl --system daemon-reload
249 #sudo systemctl enable lxd-bridge
250 #sudo systemctl start lxd-bridge
251}
252
253function ask_user(){
254 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
255 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
256 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
257 read -e -p "$1" USER_CONFIRMATION
258 while true ; do
259 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
260 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
261 [ "${USER_CONFIRMATION,,}" == "yes" ] || [ "${USER_CONFIRMATION,,}" == "y" ] && return 0
262 [ "${USER_CONFIRMATION,,}" == "no" ] || [ "${USER_CONFIRMATION,,}" == "n" ] && return 1
263 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
264 done
265}
266
garciadeblasd8bc5c32018-05-09 17:37:56 +0200267function install_osmclient(){
268 CLIENT_RELEASE=${RELEASE#"-R "}
269 CLIENT_REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
270 CLIENT_REPOSITORY=${REPOSITORY#"-r "}
garciadeblasd8bc5c32018-05-09 17:37:56 +0200271 CLIENT_REPOSITORY_BASE=${REPOSITORY_BASE#"-u "}
272 key_location=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
273 curl $key_location | sudo apt-key add -
garciadeblas078f5982019-11-27 15:06:06 +0100274 sudo add-apt-repository -y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient IM"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200275 sudo apt-get update
garciadeblas078f5982019-11-27 15:06:06 +0100276 sudo apt-get install -y python3-pip
277 sudo -H LC_ALL=C python3 -m pip install -U pip
garciadeblasa9954892020-01-22 16:05:05 +0100278 sudo -H LC_ALL=C python3 -m pip install -U python-magic pyangbind verboselogs
garciadeblasda89ee72019-11-28 02:19:59 +0100279 sudo apt-get install -y python3-osm-im python3-osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +0200280 #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
281 #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
282 #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
283 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME=`lxc list | awk '($2=="SO-ub"){print $6}'`
284 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME=`lxc list | awk '($2=="RO"){print $6}'`
garciadeblasd8bc5c32018-05-09 17:37:56 +0200285 echo -e "\nOSM client installed"
garciadeblasc3226982018-11-27 11:32:47 +0100286 if [ -z "$INSTALL_LIGHTWEIGHT" ]; then
287 echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
288 echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
289 echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
290 else
291 echo -e "OSM client assumes that OSM host is running in localhost (127.0.0.1)."
292 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:"
293 echo " export OSM_HOSTNAME=<OSM_host>"
294 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +0200295 return 0
296}
297
lavado6ad812e2019-11-29 10:58:58 -0500298function install_prometheus_nodeexporter(){
lavadoc26d90b2019-12-06 18:11:36 -0500299 if (systemctl -q is-active node_exporter)
300 then
301 echo "Node Exporter is already running."
302 else
303 echo "Node Exporter is not active, installing..."
304 if getent passwd node_exporter > /dev/null 2>&1; then
305 echo "node_exporter user exists"
306 else
307 echo "Creating user node_exporter"
308 sudo useradd --no-create-home --shell /bin/false node_exporter
309 fi
310 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/
311 sudo tar -C /tmp -xf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz
312 sudo cp /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64/node_exporter /usr/local/bin
313 sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
314 sudo rm -rf node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64*
315 sudo cp ${OSM_DEVOPS}/installers/docker/files/node_exporter.service /etc/systemd/system/node_exporter.service
316 sudo systemctl daemon-reload
317 sudo systemctl restart node_exporter
318 sudo systemctl enable node_exporter
319 echo "Node Exporter has been activated in this host."
320 fi
lavado6ad812e2019-11-29 10:58:58 -0500321 return 0
322}
323
lavado1e4a88c2019-12-03 16:19:59 -0500324function uninstall_prometheus_nodeexporter(){
325 sudo systemctl stop node_exporter
326 sudo systemctl disable node_exporter
327 sudo rm /etc/systemd/system/node_exporter.service
328 sudo systemctl daemon-reload
329 sudo userdel node_exporter
330 sudo rm /usr/local/bin/node_exporter
331 return 0
332}
333
garciadeblasd8bc5c32018-05-09 17:37:56 +0200334function install_docker_ce() {
335 # installs and configures Docker CE
336 echo "Installing Docker CE ..."
337 sudo apt-get -qq update
338 sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
339 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
340 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
341 sudo apt-get -qq update
342 sudo apt-get install -y docker-ce
343 echo "Adding user to group 'docker'"
344 sudo groupadd -f docker
345 sudo usermod -aG docker $USER
garciadeblasd8bc5c32018-05-09 17:37:56 +0200346 sleep 2
347 sudo service docker restart
348 echo "... restarted Docker service"
garciadeblas67ce97c2018-05-18 10:22:09 +0200349 sg docker -c "docker version" || FATAL "Docker installation failed"
350 echo "... Docker CE installation done"
351 return 0
garciadeblasd8bc5c32018-05-09 17:37:56 +0200352}
353
354function install_docker_compose() {
355 # installs and configures docker-compose
356 echo "Installing Docker Compose ..."
357 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
358 sudo chmod +x /usr/local/bin/docker-compose
359 echo "... Docker Compose installation done"
360}
361
362function install_juju() {
363 echo "Installing juju"
Adam Israel41587482019-11-06 10:45:43 -0500364 sudo snap install juju --classic
Dominik4763cfe2019-11-27 12:15:50 +0100365 [[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200366 echo "Finished installation of juju"
Mike Marchettib8420852018-09-13 13:45:06 -0400367 return 0
368}
369
370function juju_createcontroller() {
Adam Israel8232e562018-11-21 16:47:45 -0500371 if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then
Mike Marchettib8420852018-09-13 13:45:06 -0400372 # Not found created, create the controller
garciadeblas85bb41a2020-01-15 18:20:14 +0100373 sudo usermod -a -G lxd ${USER}
Mike Marchettib8420852018-09-13 13:45:06 -0400374 sg lxd -c "juju bootstrap --bootstrap-series=xenial localhost $OSM_STACK_NAME"
375 fi
Adam Israel8232e562018-11-21 16:47:45 -0500376 [ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200377}
378
Adam Israel5ddc97f2019-09-03 18:11:12 -0400379function juju_createproxy() {
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100380 check_install_iptables_persistent
Adam Israel43fb44d2019-11-06 10:37:25 -0500381
David Garcia26432d42019-12-11 12:22:35 +0100382 if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
383 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 -0400384 sudo netfilter-persistent save
385 fi
386}
387
garciadeblasd8bc5c32018-05-09 17:37:56 +0200388function generate_docker_images() {
389 echo "Pulling and generating docker images"
Michael Marchettiee374142018-08-02 22:47:16 +0200390 _build_from=$COMMIT_ID
391 [ -z "$_build_from" ] && _build_from="master"
392
393 echo "OSM Docker images generated from $_build_from"
394
Mike Marchettib8420852018-09-13 13:45:06 -0400395 BUILD_ARGS+=(--build-arg REPOSITORY="$REPOSITORY")
396 BUILD_ARGS+=(--build-arg RELEASE="$RELEASE")
397 BUILD_ARGS+=(--build-arg REPOSITORY_KEY="$REPOSITORY_KEY")
398 BUILD_ARGS+=(--build-arg REPOSITORY_BASE="$REPOSITORY_BASE")
lavado60216242018-10-10 23:44:28 +0200399
garciadeblas0e596bc2018-05-28 16:04:42 +0200400 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q KAFKA ; then
401 sg docker -c "docker pull wurstmeister/zookeeper" || FATAL "cannot get zookeeper docker image"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300402 sg docker -c "docker pull wurstmeister/kafka:${KAFKA_TAG}" || FATAL "cannot get kafka docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200403 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400404
garciadeblas0e596bc2018-05-28 16:04:42 +0200405 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MONGO ; then
406 sg docker -c "docker pull mongo" || FATAL "cannot get mongo docker image"
407 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400408
lavado60216242018-10-10 23:44:28 +0200409 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
410 sg docker -c "docker pull prom/prometheus:${PROMETHEUS_TAG}" || FATAL "cannot get prometheus docker image"
411 fi
412
garciadeblasfc5bb142019-12-10 10:49:12 +0100413 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS-CADVISOR ; then
414 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
415 fi
416
lavado6ad812e2019-11-29 10:58:58 -0500417 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q GRAFANA ; then
418 sg docker -c "docker pull grafana/grafana:${GRAFANA_TAG}" || FATAL "cannot get grafana docker image"
garciadeblasfc5bb142019-12-10 10:49:12 +0100419 fi
lavado6ad812e2019-11-29 10:58:58 -0500420
garciadeblas4a83e6e2018-12-04 14:55:09 +0100421 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI || echo $TO_REBUILD | grep -q KEYSTONE-DB ; then
lavado9a8df7c2018-10-24 09:35:34 -0500422 sg docker -c "docker pull mariadb:${KEYSTONEDB_TAG}" || FATAL "cannot get keystone-db docker image"
423 fi
424
garciadeblas4a83e6e2018-12-04 14:55:09 +0100425 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
426 sg docker -c "docker pull mysql:5" || FATAL "cannot get mysql docker image"
427 fi
428
Mike Marchettida8a9c42018-10-01 15:25:15 -0400429 if [ -n "$PULL_IMAGES" ]; then
430 sg docker -c "docker pull ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}" || FATAL "cannot pull MON docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400431 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MON ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200432 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/MON
433 git -C ${LWTEMPDIR}/MON checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100434 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 -0500435 fi
436
437 if [ -n "$PULL_IMAGES" ]; then
438 sg docker -c "docker pull ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}" || FATAL "cannot pull POL docker image"
garciadeblas4a83e6e2018-12-04 14:55:09 +0100439 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q POL ; then
lavado9a8df7c2018-10-24 09:35:34 -0500440 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/POL
441 git -C ${LWTEMPDIR}/POL checkout ${COMMIT_ID}
garciadeblas4a83e6e2018-12-04 14:55:09 +0100442 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 +0200443 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400444
445 if [ -n "$PULL_IMAGES" ]; then
446 sg docker -c "docker pull ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}" || FATAL "cannot pull NBI docker image"
lavado9a8df7c2018-10-24 09:35:34 -0500447 sg docker -c "docker pull ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}" || FATAL "cannot pull KEYSTONE docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400448 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200449 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NBI
450 git -C ${LWTEMPDIR}/NBI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100451 sg docker -c "docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t ${DOCKER_USER}/nbi --no-cache" || FATAL "cannot build NBI docker image"
452 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 +0200453 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400454
455 if [ -n "$PULL_IMAGES" ]; then
456 sg docker -c "docker pull ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}" || FATAL "cannot pull RO docker image"
457 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200458 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/RO
459 git -C ${LWTEMPDIR}/RO checkout ${COMMIT_ID}
tierno5cc8ac32019-11-25 10:33:25 +0000460 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 +0200461 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400462
463 if [ -n "$PULL_IMAGES" ]; then
464 sg docker -c "docker pull ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}" || FATAL "cannot pull LCM RO docker image"
465 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LCM ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200466 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LCM
467 git -C ${LWTEMPDIR}/LCM checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100468 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 +0200469 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400470
471 if [ -n "$PULL_IMAGES" ]; then
472 sg docker -c "docker pull ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}" || FATAL "cannot pull light-ui docker image"
473 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-UI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200474 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LW-UI
475 git -C ${LWTEMPDIR}/LW-UI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100476 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 +0200477 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400478
479 if [ -n "$PULL_IMAGES" ]; then
480 sg docker -c "docker pull ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}" || FATAL "cannot pull osmclient docker image"
481 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-osmclient; then
garciadeblas0d45bc82018-11-19 14:25:13 +0100482 sg docker -c "docker build -t ${DOCKER_USER}/osmclient ${BUILD_ARGS[@]} -f $OSM_DEVOPS/docker/osmclient ."
Mike Marchettib8420852018-09-13 13:45:06 -0400483 fi
lavado6ad812e2019-11-29 10:58:58 -0500484
485 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
486 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
487 fi
488
garciadeblasd8bc5c32018-05-09 17:37:56 +0200489 echo "Finished generation of docker images"
490}
491
garciadeblas5b857d32018-05-24 18:37:58 +0200492function cmp_overwrite() {
493 file1="$1"
494 file2="$2"
495 if ! $(cmp "${file1}" "${file2}" >/dev/null 2>&1); then
496 if [ -f "${file2}" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400497 ask_user "The file ${file2} already exists. Overwrite (y/N)? " n && cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200498 else
Mike Marchettib8420852018-09-13 13:45:06 -0400499 cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200500 fi
501 fi
502}
503
garciadeblasd8bc5c32018-05-09 17:37:56 +0200504function generate_docker_env_files() {
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200505 echo "Doing a backup of existing env files"
506 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
507 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
508 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
509 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lwui.env{,~}
510 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
511 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
512 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
513 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
514 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
515
garciadeblasd8bc5c32018-05-09 17:37:56 +0200516 echo "Generating docker env files"
vijaynag8339ed22019-07-25 17:10:58 +0530517 if [ -n "$KUBERNETES" ]; then
518 #Kubernetes resources
519 $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
520 else
521 # Docker-compose
522 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200523
vijaynag8339ed22019-07-25 17:10:58 +0530524 # Prometheus
lavado6ad812e2019-11-29 10:58:58 -0500525 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/files/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus.yml
526
527 # Grafana & Prometheus Exporter files
528 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/files
529 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/files/* $OSM_DOCKER_WORK_DIR/files/
vijaynag8339ed22019-07-25 17:10:58 +0530530 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200531
Benjamin Diazba2cca92018-11-08 21:07:15 -0300532 # LCM
533 if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
534 echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
535 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400536
Benjamin Diazba2cca92018-11-08 21:07:15 -0300537 if ! grep -Fq "OSMLCM_VCA_HOST" $OSM_DOCKER_WORK_DIR/lcm.env; then
538 echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
539 else
540 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_HOST.*|OSMLCM_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/lcm.env
541 fi
542
543 if ! grep -Fq "OSMLCM_VCA_SECRET" $OSM_DOCKER_WORK_DIR/lcm.env; then
544 echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
545 else
546 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_SECRET.*|OSMLCM_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/lcm.env
547 fi
548
garciadeblasaa3ddf42019-04-04 19:04:32 +0200549 if ! grep -Fq "OSMLCM_VCA_PUBKEY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblasec537902019-12-10 14:13:40 +0100550 echo "OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasaa3ddf42019-04-04 19:04:32 +0200551 else
garciadeblasec537902019-12-10 14:13:40 +0100552 $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 +0200553 fi
554
Adam Israelbe7676a2019-10-02 16:10:53 -0400555 if ! grep -Fq "OSMLCM_VCA_CACERT" $OSM_DOCKER_WORK_DIR/lcm.env; then
556 echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
557 else
558 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CACERT.*|OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/lcm.env
559 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -0300560
Adam Israel5ddc97f2019-09-03 18:11:12 -0400561 if ! grep -Fq "OSMLCM_VCA_APIPROXY" $OSM_DOCKER_WORK_DIR/lcm.env; then
562 echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
563 else
564 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_APIPROXY.*|OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
565 fi
566
garciadeblasa2e41842019-12-18 11:05:24 +0100567 if ! grep -Fq "OSMLCM_VCA_ENABLEOSUPGRADE" $OSM_DOCKER_WORK_DIR/lcm.env; then
568 echo "# OSMLCM_VCA_ENABLEOSUPGRADE=false" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
569 fi
570
571 if ! grep -Fq "OSMLCM_VCA_APTMIRROR" $OSM_DOCKER_WORK_DIR/lcm.env; then
572 echo "# OSMLCM_VCA_APTMIRROR=http://archive.ubuntu.com/ubuntu/" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
573 fi
574
Benjamin Diazba2cca92018-11-08 21:07:15 -0300575 # RO
576 MYSQL_ROOT_PASSWORD=$(generate_secret)
Mike Marchettib8420852018-09-13 13:45:06 -0400577 if [ ! -f $OSM_DOCKER_WORK_DIR/ro-db.env ]; then
578 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro-db.env
garciadeblas5b857d32018-05-24 18:37:58 +0200579 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400580 if [ ! -f $OSM_DOCKER_WORK_DIR/ro.env ]; then
581 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro.env
garciadeblas5b857d32018-05-24 18:37:58 +0200582 fi
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100583
Benjamin Diazba2cca92018-11-08 21:07:15 -0300584 # Keystone
Benjamin Diazba2cca92018-11-08 21:07:15 -0300585 KEYSTONE_DB_PASSWORD=$(generate_secret)
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100586 SERVICE_PASSWORD=$(generate_secret)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100587 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone-db.env ]; then
588 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone-db.env
589 fi
590 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone.env ]; then
591 echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100592 echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100593 echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100594 fi
595
Benjamin Diazba2cca92018-11-08 21:07:15 -0300596 # NBI
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100597 if [ ! -f $OSM_DOCKER_WORK_DIR/nbi.env ]; then
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100598 echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/nbi.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300599 echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/nbi.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100600 fi
601
Benjamin Diazba2cca92018-11-08 21:07:15 -0300602 # MON
603 if [ ! -f $OSM_DOCKER_WORK_DIR/mon.env ]; then
604 echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diaz9261c662019-02-25 17:18:51 -0300605 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 -0300606 fi
607
608 if ! grep -Fq "OS_NOTIFIER_URI" $OSM_DOCKER_WORK_DIR/mon.env; then
609 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
610 else
611 $WORKDIR_SUDO sed -i "s|OS_NOTIFIER_URI.*|OS_NOTIFIER_URI=http://$DEFAULT_IP:8662|g" $OSM_DOCKER_WORK_DIR/mon.env
612 fi
613
614 if ! grep -Fq "OSMMON_VCA_HOST" $OSM_DOCKER_WORK_DIR/mon.env; then
615 echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
616 else
617 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_HOST.*|OSMMON_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/mon.env
618 fi
619
620 if ! grep -Fq "OSMMON_VCA_SECRET" $OSM_DOCKER_WORK_DIR/mon.env; then
621 echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
622 else
623 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_SECRET.*|OSMMON_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/mon.env
624 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400625
Adam Israel6d8adf32019-12-05 15:46:54 -0500626 if ! grep -Fq "OSMMON_VCA_CACERT" $OSM_DOCKER_WORK_DIR/mon.env; then
627 echo "OSMMON_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
628 else
629 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_CACERT.*|OSMMON_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/mon.env
630 fi
631
632
Benjamin Diaz04560882019-02-26 17:25:07 -0300633 # POL
634 if [ ! -f $OSM_DOCKER_WORK_DIR/pol.env ]; then
635 echo "OSMPOL_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/pol" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/pol.env
636 fi
637
Benjamin Diaz4088a9b2019-05-21 15:11:49 -0300638 # LW-UI
639 if [ ! -f $OSM_DOCKER_WORK_DIR/lwui.env ]; then
640 echo "OSMUI_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/lwui" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lwui.env
641 fi
642
garciadeblasd8bc5c32018-05-09 17:37:56 +0200643 echo "Finished generation of docker env files"
644}
645
Mike Marchettib8420852018-09-13 13:45:06 -0400646function generate_osmclient_script () {
Mike Marchetti46d6efe2018-10-23 16:20:16 -0400647 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 -0400648 $WORKDIR_SUDO chmod +x "$OSM_DOCKER_WORK_DIR/osm"
649 echo "osmclient sidecar container can be found at: $OSM_DOCKER_WORK_DIR/osm"
650}
651
vijaynag8339ed22019-07-25 17:10:58 +0530652#installs kubernetes packages
653function install_kube() {
654 sudo apt-get update && sudo apt-get install -y apt-transport-https
655 curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
656 sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
657 sudo apt-get update
658 echo "Installing Kubernetes Packages ..."
659 sudo apt-get install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
660}
661
662#initializes kubernetes control plane
663function init_kubeadm() {
664 sudo swapoff -a
665 sudo kubeadm init --config $1
666 sleep 5
667}
668
669function kube_config_dir() {
670 [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes"
671 mkdir -p $HOME/.kube
672 sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
673 sudo chown $(id -u):$(id -g) $HOME/.kube/config
674}
675
676#deploys flannel as daemonsets
677function deploy_cni_provider() {
678 CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")"
679 trap 'rm -rf "${CNI_DIR}"' EXIT
680 wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR
681 kubectl apply -f $CNI_DIR
682 [ $? -ne 0 ] && FATAL "Cannot Install Flannel"
683}
684
685#creates secrets from env files which will be used by containers
686function kube_secrets(){
687 kubectl create ns $OSM_STACK_NAME
688 kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env
689 kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env
690 kubectl create secret generic nbi-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/nbi.env
691 kubectl create secret generic ro-db-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro-db.env
692 kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env
693 kubectl create secret generic keystone-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/keystone.env
694 kubectl create secret generic lwui-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lwui.env
695 kubectl create secret generic pol-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/pol.env
696}
697
698#deploys osm pods and services
699function deploy_osm_services() {
700 K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}')
701 kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
702 sleep 5
703 kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR
704}
705
706function parse_yaml() {
707 osm_services="nbi lcm ro pol mon light-ui keystone"
708 TAG=$1
709 for osm in $osm_services; do
710 $WORKDIR_SUDO sed -i "s/opensourcemano\/$osm:.*/opensourcemano\/$osm:$TAG/g" $OSM_K8S_WORK_DIR/$osm.yaml
711 done
712}
713
714function namespace_vol() {
715 osm_services="nbi lcm ro pol mon kafka mongo mysql"
716 for osm in $osm_services; do
717 $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml
718 done
719}
720
garciadeblasa3e26612018-05-30 17:58:55 +0200721function init_docker_swarm() {
garciadeblasd8bc5c32018-05-09 17:37:56 +0200722 if [ "${DEFAULT_MTU}" != "1500" ]; then
723 DOCKER_NETS=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
724 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";}'`
725 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"
726 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200727 sg docker -c "docker swarm init --advertise-addr ${DEFAULT_IP}"
garciadeblasa3e26612018-05-30 17:58:55 +0200728 return 0
729}
730
Mike Marchettib8420852018-09-13 13:45:06 -0400731function create_docker_network() {
732 echo "creating network"
733 sg docker -c "docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} net${OSM_STACK_NAME}"
734 echo "creating network DONE"
735}
736
garciadeblasa3e26612018-05-30 17:58:55 +0200737function deploy_lightweight() {
Mike Marchettib8420852018-09-13 13:45:06 -0400738
garciadeblasa3e26612018-05-30 17:58:55 +0200739 echo "Deploying lightweight build"
Mike Marchettib8420852018-09-13 13:45:06 -0400740 OSM_NBI_PORT=9999
741 OSM_RO_PORT=9090
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100742 OSM_KEYSTONE_PORT=5000
Mike Marchettib8420852018-09-13 13:45:06 -0400743 OSM_UI_PORT=80
lavadoafa54c72018-10-05 09:28:28 -0500744 OSM_MON_PORT=8662
lavado60216242018-10-10 23:44:28 +0200745 OSM_PROM_PORT=9090
garciadeblasa7b27dc2019-12-04 15:06:55 +0100746 OSM_PROM_CADVISOR_PORT=8080
lavado60216242018-10-10 23:44:28 +0200747 OSM_PROM_HOSTPORT=9091
lavado6ad812e2019-11-29 10:58:58 -0500748 OSM_GRAFANA_PORT=3000
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100749 [ -n "$INSTALL_ELK" ] && OSM_ELK_PORT=5601
lavado6ad812e2019-11-29 10:58:58 -0500750 #[ -n "$INSTALL_PERFMON" ] && OSM_PM_PORT=3000
lavado60216242018-10-10 23:44:28 +0200751
Mike Marchettib8420852018-09-13 13:45:06 -0400752 if [ -n "$NO_HOST_PORTS" ]; then
753 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT)
754 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100755 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400756 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -0500757 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +0200758 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +0100759 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -0500760 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT)
761 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100762 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400763 else
764 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT:$OSM_NBI_PORT)
765 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT:$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100766 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT:$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400767 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT:$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -0500768 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT:$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +0200769 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_HOSTPORT:$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +0100770 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT:$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -0500771 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT:$OSM_GRAFANA_PORT)
772 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT:$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100773 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT:$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400774 fi
775 echo "export ${OSM_PORTS[@]}" | $WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/osm_ports.sh
776 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 -0400777 echo "export TAG=${OSM_DOCKER_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Mike Marchettida8a9c42018-10-01 15:25:15 -0400778 echo "export DOCKER_USER=${DOCKER_USER}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -0300779 echo "export KAFKA_TAG=${KAFKA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado60216242018-10-10 23:44:28 +0200780 echo "export PROMETHEUS_TAG=${PROMETHEUS_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado9a8df7c2018-10-24 09:35:34 -0500781 echo "export KEYSTONEDB_TAG=${KEYSTONEDB_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado6ad812e2019-11-29 10:58:58 -0500782 echo "export PROMETHEUS_CADVISOR_TAG=${PROMETHEUS_CADVISOR_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
783 echo "export GRAFANA_TAG=${GRAFANA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -0300784
Mike Marchettib8420852018-09-13 13:45:06 -0400785 pushd $OSM_DOCKER_WORK_DIR
beierl63229a22019-05-30 14:42:04 -0400786 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 -0400787 popd
788
garciadeblasd8bc5c32018-05-09 17:37:56 +0200789 echo "Finished deployment of lightweight build"
790}
791
garciadeblas6c66abf2018-05-16 14:46:19 +0200792function deploy_elk() {
garciadeblase2aebfe2018-07-06 14:11:20 +0200793 echo "Pulling docker images for ELK"
lavado53eb8f52018-11-16 12:58:23 -0500794 sg docker -c "docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:${ELASTIC_VERSION}" || FATAL "cannot get elasticsearch docker image"
795 sg docker -c "docker pull docker.elastic.co/beats/metricbeat:${ELASTIC_VERSION}" || FATAL "cannot get metricbeat docker image"
796 sg docker -c "docker pull docker.elastic.co/beats/filebeat:${ELASTIC_VERSION}" || FATAL "cannot get filebeat docker image"
797 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 -0500798 sg docker -c "docker pull bobrik/curator:${ELASTIC_CURATOR_VERSION}" || FATAL "cannot get curator docker image"
garciadeblase2aebfe2018-07-06 14:11:20 +0200799 echo "Finished pulling elk docker images"
Mike Marchettib8420852018-09-13 13:45:06 -0400800 $WORKDIR_SUDO mkdir -p "$OSM_DOCKER_WORK_DIR/osm_elk"
801 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_elk/* $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas5b857d32018-05-24 18:37:58 +0200802 remove_stack osm_elk
garciadeblas6c66abf2018-05-16 14:46:19 +0200803 echo "Deploying ELK stack"
Mike Marchettib8420852018-09-13 13:45:06 -0400804 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 +0200805 echo "Waiting for ELK stack to be up and running"
806 time=0
garciadeblase2aebfe2018-07-06 14:11:20 +0200807 step=5
808 timelength=40
garciadeblas6c66abf2018-05-16 14:46:19 +0200809 elk_is_up=1
810 while [ $time -le $timelength ]; do
garciadeblase2aebfe2018-07-06 14:11:20 +0200811 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 +0200812 elk_is_up=0
813 break
814 fi
815 sleep $step
816 time=$((time+step))
817 done
818 if [ $elk_is_up -eq 0 ]; then
819 echo "ELK is up and running. Trying to create index pattern..."
820 #Create index pattern
821 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -0500822 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
823 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200824 #Make it the default index
garciadeblase2aebfe2018-07-06 14:11:20 +0200825 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +0200826 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -0500827 -d"{\"value\":\"filebeat-*\"}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200828 else
829 echo "Cannot connect to Kibana to create index pattern."
830 echo "Once Kibana is running, you can use the following instructions to create index pattern:"
831 echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -0500832 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
833 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}"'
garciadeblas6c66abf2018-05-16 14:46:19 +0200834 echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +0200835 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -0500836 -d"{\"value\":\"filebeat-*\"}"'
garciadeblas6c66abf2018-05-16 14:46:19 +0200837 fi
838 echo "Finished deployment of ELK stack"
839 return 0
840}
841
garciadeblasd8bc5c32018-05-09 17:37:56 +0200842function install_lightweight() {
garciadeblas0d45bc82018-11-19 14:25:13 +0100843 [ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
vijaynag8339ed22019-07-25 17:10:58 +0530844 [ -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 -0400845 [ ! -d "$OSM_DOCKER_WORK_DIR" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR
vijaynag8339ed22019-07-25 17:10:58 +0530846 [ -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 -0400847
garciadeblas183e5802018-12-13 18:20:54 +0100848 track checkingroot
garciadeblasd13a8aa2018-05-18 15:24:51 +0200849 [ "$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 +0100850 track noroot
vijaynag8339ed22019-07-25 17:10:58 +0530851
852 if [ -n "$KUBERNETES" ]; then
853 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
854 1. Install and configure LXD
855 2. Install juju
856 3. Install docker CE
857 4. Disable swap space
858 5. Install and initialize Kubernetes
859 as pre-requirements.
860 Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
861
862 else
863 [ -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
864 fi
garciadeblasfae5e972018-06-12 18:27:11 +0200865 track proceed
vijaynag8339ed22019-07-25 17:10:58 +0530866
garciadeblasd8bc5c32018-05-09 17:37:56 +0200867 echo "Installing lightweight build of OSM"
868 LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
869 trap 'rm -rf "${LWTEMPDIR}"' EXIT
870 DEFAULT_IF=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
garciadeblas8cd60772018-06-02 08:38:17 +0200871 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200872 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
garciadeblas8cd60772018-06-02 08:38:17 +0200873 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200874 DEFAULT_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
Mike Marchettib8420852018-09-13 13:45:06 -0400875
876 # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to
lavadoe07b1642018-10-25 10:58:34 -0500877 if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ]; then
David Garcia50d786e2020-03-30 14:49:40 +0200878 need_packages_lw="snapd"
garciadeblasd41f5482018-05-25 10:25:06 +0200879 echo -e "Checking required packages: $need_packages_lw"
880 dpkg -l $need_packages_lw &>/dev/null \
881 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
882 || sudo apt-get update \
883 || FATAL "failed to run apt-get update"
884 dpkg -l $need_packages_lw &>/dev/null \
885 || ! echo -e "Installing $need_packages_lw requires root privileges." \
886 || sudo apt-get install -y $need_packages_lw \
887 || FATAL "failed to install $need_packages_lw"
David Garcia50d786e2020-03-30 14:49:40 +0200888 install_lxd
garciadeblasd41f5482018-05-25 10:25:06 +0200889 fi
garciadeblasfae5e972018-06-12 18:27:11 +0200890 track prereqok
Mike Marchettib8420852018-09-13 13:45:06 -0400891
vijaynag8339ed22019-07-25 17:10:58 +0530892 [ -z "$INSTALL_NOJUJU" ] && install_juju
garciadeblas183e5802018-12-13 18:20:54 +0100893 track juju_install
vijaynag8339ed22019-07-25 17:10:58 +0530894
lavadoe07b1642018-10-25 10:58:34 -0500895 if [ -z "$OSM_VCA_HOST" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400896 juju_createcontroller
lavadoe07b1642018-10-25 10:58:34 -0500897 OSM_VCA_HOST=`sg lxd -c "juju show-controller $OSM_STACK_NAME"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
898 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
Mike Marchettib8420852018-09-13 13:45:06 -0400899 fi
garciadeblas183e5802018-12-13 18:20:54 +0100900 track juju_controller
vijaynag8339ed22019-07-25 17:10:58 +0530901
lavadoe07b1642018-10-25 10:58:34 -0500902 if [ -z "$OSM_VCA_SECRET" ]; then
903 OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME)
904 [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
Mike Marchettib8420852018-09-13 13:45:06 -0400905 fi
garciadeblasaa3ddf42019-04-04 19:04:32 +0200906 if [ -z "$OSM_VCA_PUBKEY" ]; then
907 OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
908 [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
909 fi
garciadeblasfc5bb142019-12-10 10:49:12 +0100910 if [ -z "$OSM_VCA_CACERT" ]; then
911 OSM_VCA_CACERT=$(juju controllers --format json | jq -r '.controllers["osm"]["ca-cert"]' | base64 | tr -d \\n)
912 [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
913 fi
Adam Israel5ddc97f2019-09-03 18:11:12 -0400914 if [ -z "$OSM_VCA_APIPROXY" ]; then
915 OSM_VCA_APIPROXY=$DEFAULT_IP
916 [ -z "$OSM_VCA_APIPROXY" ] && FATAL "Cannot obtain juju api proxy"
917 fi
918 juju_createproxy
garciadeblasfc5bb142019-12-10 10:49:12 +0100919 track juju
Adam Israel5ddc97f2019-09-03 18:11:12 -0400920
Benjamin Diazba2cca92018-11-08 21:07:15 -0300921 if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
922 OSM_DATABASE_COMMONKEY=$(generate_secret)
923 [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret"
924 fi
vijaynag8339ed22019-07-25 17:10:58 +0530925
garciadeblasa3e26612018-05-30 17:58:55 +0200926 [ -n "$INSTALL_NODOCKER" ] || install_docker_ce
garciadeblas6c66abf2018-05-16 14:46:19 +0200927 track docker_ce
vijaynag8339ed22019-07-25 17:10:58 +0530928
929 #Installs Kubernetes and deploys osm services
930 if [ -n "$KUBERNETES" ]; then
931 install_kube
932 track install_k8s
933 init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
934 kube_config_dir
935 track init_k8s
936 else
937 #install_docker_compose
938 [ -n "$INSTALL_NODOCKER" ] || init_docker_swarm
939 track docker_swarm
940 fi
941
Mike Marchettib8420852018-09-13 13:45:06 -0400942 [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
garciadeblas6c66abf2018-05-16 14:46:19 +0200943 track docker_build
vijaynag8339ed22019-07-25 17:10:58 +0530944
garciadeblasd8bc5c32018-05-09 17:37:56 +0200945 generate_docker_env_files
Mike Marchettib8420852018-09-13 13:45:06 -0400946
vijaynag8339ed22019-07-25 17:10:58 +0530947 if [ -n "$KUBERNETES" ]; then
garciadeblasb5a630f2020-03-05 18:32:16 +0000948 if [ -n "$INSTALL_K8S_MONITOR" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +0100949 # uninstall OSM MONITORING
950 uninstall_k8s_monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +0100951 track uninstall_k8s_monitoring
romeromonsere366b1a2019-11-19 19:49:26 +0100952 fi
vijaynag8339ed22019-07-25 17:10:58 +0530953 #remove old namespace
954 remove_k8s_namespace $OSM_STACK_NAME
955 deploy_cni_provider
956 kube_secrets
garciadeblasa7e128a2019-12-18 11:10:45 +0100957 [ ! $OSM_DOCKER_TAG == "7" ] && parse_yaml $OSM_DOCKER_TAG
vijaynag8339ed22019-07-25 17:10:58 +0530958 namespace_vol
959 deploy_osm_services
960 track deploy_osm_services_k8s
garciadeblasb5a630f2020-03-05 18:32:16 +0000961 if [ -n "$INSTALL_K8S_MONITOR" ]; then
garciadeblasfc5bb142019-12-10 10:49:12 +0100962 # install OSM MONITORING
963 install_k8s_monitoring
964 track install_k8s_monitoring
965 fi
vijaynag8339ed22019-07-25 17:10:58 +0530966 else
967 # remove old stack
968 remove_stack $OSM_STACK_NAME
969 create_docker_network
970 deploy_lightweight
971 generate_osmclient_script
972 track docker_deploy
lavado6ad812e2019-11-29 10:58:58 -0500973 install_prometheus_nodeexporter
garciadeblasfc5bb142019-12-10 10:49:12 +0100974 track nodeexporter
vijaynag8339ed22019-07-25 17:10:58 +0530975 [ -n "$INSTALL_VIMEMU" ] && install_vimemu && track vimemu
976 [ -n "$INSTALL_ELK" ] && deploy_elk && track elk
vijaynag8339ed22019-07-25 17:10:58 +0530977 fi
978
Mike Marchettib8420852018-09-13 13:45:06 -0400979 [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
garciadeblas6c66abf2018-05-16 14:46:19 +0200980 track osmclient
vijaynag8339ed22019-07-25 17:10:58 +0530981
garciadeblas44c02192019-12-09 01:36:57 +0100982 wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200983 track end
garciadeblasd8bc5c32018-05-09 17:37:56 +0200984 return 0
985}
986
987function install_vimemu() {
peusterm76353e42018-05-08 13:56:05 +0200988 echo "\nInstalling vim-emu"
989 EMUTEMPDIR="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX")"
990 trap 'rm -rf "${EMUTEMPDIR}"' EXIT
peusterma3a7d142020-02-07 10:12:29 +0100991 # install prerequisites (OVS is a must for the emulator to work)
992 sudo apt-get install openvswitch-switch
garciadeblasd8bc5c32018-05-09 17:37:56 +0200993 # clone vim-emu repository (attention: branch is currently master only)
994 echo "Cloning vim-emu repository ..."
peusterm76353e42018-05-08 13:56:05 +0200995 git clone https://osm.etsi.org/gerrit/osm/vim-emu.git $EMUTEMPDIR
garciadeblasd8bc5c32018-05-09 17:37:56 +0200996 # build vim-emu docker
997 echo "Building vim-emu Docker container..."
Mike Marchettib8420852018-09-13 13:45:06 -0400998
999 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 +02001000 # start vim-emu container as daemon
1001 echo "Starting vim-emu Docker container 'vim-emu' ..."
peusterm76353e42018-05-08 13:56:05 +02001002 if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
1003 # in lightweight mode, the emulator needs to be attached to netOSM
Mike Marchettib8420852018-09-13 13:45:06 -04001004 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 +02001005 else
1006 # classic build mode
Mike Marchettib8420852018-09-13 13:45:06 -04001007 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 +02001008 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001009 echo "Waiting for 'vim-emu' container to start ..."
1010 sleep 5
Mike Marchettib8420852018-09-13 13:45:06 -04001011 export VIMEMU_HOSTNAME=$(sg docker -c "docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001012 echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
peusterm76353e42018-05-08 13:56:05 +02001013 # print vim-emu connection info
1014 echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001015 echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
peusterm76353e42018-05-08 13:56:05 +02001016 echo -e "To add the emulated VIM to OSM you should do:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001017 echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
1018}
1019
romeromonsere366b1a2019-11-19 19:49:26 +01001020function install_k8s_monitoring() {
1021 # install OSM monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +01001022 $WORKDIR_SUDO chmod +x $OSM_DEVOPS/installers/k8s/*.sh
romeromonsere366b1a2019-11-19 19:49:26 +01001023 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh
1024}
1025
1026function uninstall_k8s_monitoring() {
K Sai Kiran5e151f02019-12-11 14:50:09 +05301027 # uninstall OSM monitoring
romeromonsere366b1a2019-11-19 19:49:26 +01001028 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/uninstall_osm_k8s_monitoring.sh
1029}
1030
garciadeblasd8bc5c32018-05-09 17:37:56 +02001031function dump_vars(){
1032 echo "DEVELOP=$DEVELOP"
1033 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
1034 echo "UNINSTALL=$UNINSTALL"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001035 echo "UPDATE=$UPDATE"
1036 echo "RECONFIGURE=$RECONFIGURE"
1037 echo "TEST_INSTALLER=$TEST_INSTALLER"
1038 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
1039 echo "INSTALL_LXD=$INSTALL_LXD"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001040 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
garciadeblas6c66abf2018-05-16 14:46:19 +02001041 echo "INSTALL_ONLY=$INSTALL_ONLY"
1042 echo "INSTALL_ELK=$INSTALL_ELK"
lavado6ad812e2019-11-29 10:58:58 -05001043 #echo "INSTALL_PERFMON=$INSTALL_PERFMON"
garciadeblasb5a630f2020-03-05 18:32:16 +00001044 echo "INSTALL_K8S_MONITOR=$INSTALL_K8S_MONITOR"
garciadeblas0e596bc2018-05-28 16:04:42 +02001045 echo "TO_REBUILD=$TO_REBUILD"
garciadeblasd41f5482018-05-25 10:25:06 +02001046 echo "INSTALL_NOLXD=$INSTALL_NOLXD"
garciadeblasa3e26612018-05-30 17:58:55 +02001047 echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
garciadeblas0d45bc82018-11-19 14:25:13 +01001048 echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001049 echo "RELEASE=$RELEASE"
1050 echo "REPOSITORY=$REPOSITORY"
1051 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
1052 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001053 echo "OSM_DEVOPS=$OSM_DEVOPS"
1054 echo "OSM_VCA_HOST=$OSM_VCA_HOST"
1055 echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
garciadeblasaa3ddf42019-04-04 19:04:32 +02001056 echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001057 echo "NO_HOST_PORTS=$NO_HOST_PORTS"
1058 echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
1059 echo "WORKDIR_SUDO=$WORKDIR_SUDO"
1060 echo "OSM_WORK_DIR=$OSM_STACK_NAME"
1061 echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
1062 echo "DOCKER_USER=$DOCKER_USER"
1063 echo "OSM_STACK_NAME=$OSM_STACK_NAME"
1064 echo "PULL_IMAGES=$PULL_IMAGES"
vijaynag8339ed22019-07-25 17:10:58 +05301065 echo "KUBERNETES=$KUBERNETES"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001066 echo "SHOWOPTS=$SHOWOPTS"
1067 echo "Install from specific refspec (-b): $COMMIT_ID"
1068}
1069
1070function track(){
1071 ctime=`date +%s`
1072 duration=$((ctime - SESSION_ID))
1073 url="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
1074 #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
1075 event_name="bin"
garciadeblas6c66abf2018-05-16 14:46:19 +02001076 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name="binsrc"
1077 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name="lxd"
1078 [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name="lw"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001079 event_name="${event_name}_$1"
1080 url="${url}&event=${event_name}&ce_duration=${duration}"
1081 wget -q -O /dev/null $url
1082}
1083
1084UNINSTALL=""
1085DEVELOP=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001086UPDATE=""
1087RECONFIGURE=""
1088TEST_INSTALLER=""
1089INSTALL_LXD=""
1090SHOWOPTS=""
1091COMMIT_ID=""
1092ASSUME_YES=""
1093INSTALL_FROM_SOURCE=""
garciadeblasfc5bb142019-12-10 10:49:12 +01001094RELEASE="ReleaseSEVEN"
Mike Marchettib8420852018-09-13 13:45:06 -04001095REPOSITORY="stable"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001096INSTALL_VIMEMU=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001097LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
1098LXD_REPOSITORY_PATH=""
1099INSTALL_LIGHTWEIGHT="y"
garciadeblas6c66abf2018-05-16 14:46:19 +02001100INSTALL_ONLY=""
1101INSTALL_ELK=""
garciadeblas0e596bc2018-05-28 16:04:42 +02001102TO_REBUILD=""
garciadeblasd41f5482018-05-25 10:25:06 +02001103INSTALL_NOLXD=""
garciadeblasa3e26612018-05-30 17:58:55 +02001104INSTALL_NODOCKER=""
Mike Marchettib8420852018-09-13 13:45:06 -04001105INSTALL_NOJUJU=""
vijaynag8339ed22019-07-25 17:10:58 +05301106KUBERNETES=""
garciadeblasb5a630f2020-03-05 18:32:16 +00001107INSTALL_K8S_MONITOR=""
garciadeblas0d45bc82018-11-19 14:25:13 +01001108INSTALL_NOHOSTCLIENT=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001109SESSION_ID=`date +%s`
1110OSM_DEVOPS=
lavadoe07b1642018-10-25 10:58:34 -05001111OSM_VCA_HOST=
1112OSM_VCA_SECRET=
garciadeblasaa3ddf42019-04-04 19:04:32 +02001113OSM_VCA_PUBKEY=
Mike Marchettib8420852018-09-13 13:45:06 -04001114OSM_STACK_NAME=osm
1115NO_HOST_PORTS=""
1116DOCKER_NOBUILD=""
1117REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
garciadeblas870e60a2018-11-21 16:44:21 +01001118REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
Mike Marchettib8420852018-09-13 13:45:06 -04001119WORKDIR_SUDO=sudo
1120OSM_WORK_DIR="/etc/osm"
garciadeblas526f0fb2018-11-23 14:47:40 +01001121OSM_DOCKER_WORK_DIR="/etc/osm/docker"
vijaynag8339ed22019-07-25 17:10:58 +05301122OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
1123OSM_HOST_VOL="/var/lib/osm"
1124OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
Mike Marchetti13d76c82018-09-19 15:00:36 -04001125OSM_DOCKER_TAG=latest
garciadeblas0d45bc82018-11-19 14:25:13 +01001126DOCKER_USER=opensourcemano
1127PULL_IMAGES="y"
Benjamin Diazaa0af712018-10-04 14:02:34 -03001128KAFKA_TAG=2.11-1.0.2
lavado60216242018-10-10 23:44:28 +02001129PROMETHEUS_TAG=v2.4.3
lavado6ad812e2019-11-29 10:58:58 -05001130GRAFANA_TAG=latest
1131PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
1132PROMETHEUS_CADVISOR_TAG=latest
lavado9a8df7c2018-10-24 09:35:34 -05001133KEYSTONEDB_TAG=10
Benjamin Diazba2cca92018-11-08 21:07:15 -03001134OSM_DATABASE_COMMONKEY=
lavado53eb8f52018-11-16 12:58:23 -05001135ELASTIC_VERSION=6.4.2
lavado4e8662c2018-11-28 11:28:14 -05001136ELASTIC_CURATOR_VERSION=5.5.4
vijaynag8339ed22019-07-25 17:10:58 +05301137POD_NETWORK_CIDR=10.244.0.0/16
1138K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
1139RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
garciadeblasd8bc5c32018-05-09 17:37:56 +02001140
vijaynag01b68762020-02-03 08:46:36 +00001141while 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 +02001142 case "${o}" in
garciadeblasd8bc5c32018-05-09 17:37:56 +02001143 b)
1144 COMMIT_ID=${OPTARG}
garciadeblas0d45bc82018-11-19 14:25:13 +01001145 PULL_IMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001146 ;;
1147 r)
Mike Marchettib8420852018-09-13 13:45:06 -04001148 REPOSITORY="${OPTARG}"
1149 REPO_ARGS+=(-r "$REPOSITORY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001150 ;;
vijaynag8339ed22019-07-25 17:10:58 +05301151 c)
1152 [ "${OPTARG}" == "swarm" ] && continue
1153 [ "${OPTARG}" == "k8s" ] && KUBERNETES="y" && continue
1154 echo -e "Invalid argument for -i : ' $OPTARG'\n" >&2
1155 usage && exit 1
1156 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001157 k)
Mike Marchettib8420852018-09-13 13:45:06 -04001158 REPOSITORY_KEY="${OPTARG}"
1159 REPO_ARGS+=(-k "$REPOSITORY_KEY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001160 ;;
1161 u)
Mike Marchettib8420852018-09-13 13:45:06 -04001162 REPOSITORY_BASE="${OPTARG}"
1163 REPO_ARGS+=(-u "$REPOSITORY_BASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001164 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001165 R)
1166 RELEASE="${OPTARG}"
1167 REPO_ARGS+=(-R "$RELEASE")
garciadeblas0d45bc82018-11-19 14:25:13 +01001168 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001169 D)
1170 OSM_DEVOPS="${OPTARG}"
1171 ;;
garciadeblas6c66abf2018-05-16 14:46:19 +02001172 o)
1173 INSTALL_ONLY="y"
1174 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
1175 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblasb5a630f2020-03-05 18:32:16 +00001176 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001177 ;;
garciadeblas0e596bc2018-05-28 16:04:42 +02001178 m)
garciadeblas0e596bc2018-05-28 16:04:42 +02001179 [ "${OPTARG}" == "LW-UI" ] && TO_REBUILD="$TO_REBUILD LW-UI" && continue
govindappa79e51b92019-05-22 12:15:21 +05301180 [ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
1181 [ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
1182 [ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001183 [ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
govindappa79e51b92019-05-22 12:15:21 +05301184 [ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001185 [ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
1186 [ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
govindappa79e51b92019-05-22 12:15:21 +05301187 [ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
garciadeblasfc5bb142019-12-10 10:49:12 +01001188 [ "${OPTARG}" == "PROMETHEUS-CADVISOR" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS-CADVISOR" && continue
govindappa79e51b92019-05-22 12:15:21 +05301189 [ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
lavado6ad812e2019-11-29 10:58:58 -05001190 [ "${OPTARG}" == "GRAFANA" ] && TO_REBUILD="$TO_REBUILD GRAFANA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001191 [ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
1192 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001193 H)
1194 OSM_VCA_HOST="${OPTARG}"
1195 ;;
1196 S)
1197 OSM_VCA_SECRET="${OPTARG}"
1198 ;;
1199 s)
1200 OSM_STACK_NAME="${OPTARG}" && [ -n "$KUBERNETES" ] && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0
1201 ;;
1202 w)
1203 # when specifying workdir, do not use sudo for access
1204 WORKDIR_SUDO=
1205 OSM_WORK_DIR="${OPTARG}"
1206 ;;
1207 t)
1208 OSM_DOCKER_TAG="${OPTARG}"
1209 ;;
1210 U)
1211 DOCKER_USER="${OPTARG}"
1212 ;;
1213 P)
1214 OSM_VCA_PUBKEY=$(cat ${OPTARG})
1215 ;;
1216 A)
1217 OSM_VCA_APIPROXY="${OPTARG}"
1218 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001219 -)
1220 [ "${OPTARG}" == "help" ] && usage && exit 0
garciadeblas0d45bc82018-11-19 14:25:13 +01001221 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001222 [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
1223 [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001224 [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
1225 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
1226 [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
1227 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
garciadeblasd41f5482018-05-25 10:25:06 +02001228 [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
garciadeblasa3e26612018-05-30 17:58:55 +02001229 [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001230 [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001231 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001232 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001233 [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001234 [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
1235 [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
1236 [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
1237 [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
garciadeblas0d45bc82018-11-19 14:25:13 +01001238 [ "${OPTARG}" == "pullimages" ] && continue
garciadeblasb5a630f2020-03-05 18:32:16 +00001239 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001240 echo -e "Invalid option: '--$OPTARG'\n" >&2
1241 usage && exit 1
1242 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001243 :)
1244 echo "Option -$OPTARG requires an argument" >&2
1245 usage && exit 1
1246 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001247 \?)
1248 echo -e "Invalid option: '-$OPTARG'\n" >&2
1249 usage && exit 1
1250 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001251 h)
1252 usage && exit 0
1253 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001254 y)
1255 ASSUME_YES="y"
1256 ;;
1257 *)
1258 usage && exit 1
1259 ;;
1260 esac
1261done
1262
garciadeblas0e596bc2018-05-28 16:04:42 +02001263[ -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 +02001264
garciadeblasd8bc5c32018-05-09 17:37:56 +02001265if [ -n "$SHOWOPTS" ]; then
1266 dump_vars
1267 exit 0
1268fi
1269
garciadeblasd8bc5c32018-05-09 17:37:56 +02001270# if develop, we force master
1271[ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
1272
garciadeblasd8bc5c32018-05-09 17:37:56 +02001273need_packages="git jq wget curl tar"
1274echo -e "Checking required packages: $need_packages"
1275dpkg -l $need_packages &>/dev/null \
1276 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1277 || sudo apt-get update \
1278 || FATAL "failed to run apt-get update"
1279dpkg -l $need_packages &>/dev/null \
1280 || ! echo -e "Installing $need_packages requires root privileges." \
1281 || sudo apt-get install -y $need_packages \
1282 || FATAL "failed to install $need_packages"
1283
1284if [ -z "$OSM_DEVOPS" ]; then
Michael Marchettiee374142018-08-02 22:47:16 +02001285 if [ -n "$TEST_INSTALLER" ]; then
1286 echo -e "\nUsing local devops repo for OSM installation"
1287 OSM_DEVOPS="$(dirname $(realpath $(dirname $0)))"
1288 else
1289 echo -e "\nCreating temporary dir for OSM installation"
1290 OSM_DEVOPS="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
1291 trap 'rm -rf "$OSM_DEVOPS"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001292
Michael Marchettiee374142018-08-02 22:47:16 +02001293 git clone https://osm.etsi.org/gerrit/osm/devops.git $OSM_DEVOPS
garciadeblasd8bc5c32018-05-09 17:37:56 +02001294
Michael Marchettiee374142018-08-02 22:47:16 +02001295 if [ -z "$COMMIT_ID" ]; then
1296 echo -e "\nGuessing the current stable release"
1297 LATEST_STABLE_DEVOPS=`git -C $OSM_DEVOPS tag -l v[0-9].* | sort -V | tail -n1`
1298 [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
1299
1300 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
1301 COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
1302 else
1303 echo -e "\nDEVOPS Using commit $COMMIT_ID"
1304 fi
1305 git -C $OSM_DEVOPS checkout $COMMIT_ID
garciadeblasd8bc5c32018-05-09 17:37:56 +02001306 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001307fi
1308
garciadeblas3c25fab2019-11-18 17:24:43 +01001309. $OSM_DEVOPS/common/all_funcs
garciadeblasd8bc5c32018-05-09 17:37:56 +02001310
1311[ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight && echo -e "\nDONE" && exit 0
garciadeblas6c66abf2018-05-16 14:46:19 +02001312[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
lavado6ad812e2019-11-29 10:58:58 -05001313#[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
garciadeblas6c66abf2018-05-16 14:46:19 +02001314[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
garciadeblasb5a630f2020-03-05 18:32:16 +00001315[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_K8S_MONITOR" ] && install_k8s_monitoring
garciadeblas6c66abf2018-05-16 14:46:19 +02001316[ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
garciadeblasd8bc5c32018-05-09 17:37:56 +02001317
1318#Installation starts here
garciadeblas44c02192019-12-09 01:36:57 +01001319wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001320track start
1321
garciadeblasd8bc5c32018-05-09 17:37:56 +02001322[ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight && echo -e "\nDONE" && exit 0
1323echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
1324if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
1325 ! ask_user "The installation will take about 75-90 minutes. Continue (Y/n)? " y && echo "Cancelled!" && exit 1
1326fi
1327
1328echo -e "Checking required packages: lxd"
1329lxd --version &>/dev/null || FATAL "lxd not present, exiting."
1330[ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
1331
garciadeblasd8bc5c32018-05-09 17:37:56 +02001332# use local devops for containers
1333export OSM_USE_LOCAL_DEVOPS=true
garciadeblasd8bc5c32018-05-09 17:37:56 +02001334
1335#Install osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +02001336
1337#Install vim-emu (optional)
peusterm76353e42018-05-08 13:56:05 +02001338[ -n "$INSTALL_VIMEMU" ] && install_docker_ce && install_vimemu
garciadeblasd8bc5c32018-05-09 17:37:56 +02001339
garciadeblas44c02192019-12-09 01:36:57 +01001340wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblasd8bc5c32018-05-09 17:37:56 +02001341track end
1342echo -e "\nDONE"