blob: d40782f862086df3053fe22f9d587c3a331de3c0 [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() {
232 sudo apt-get update
233 sudo apt-get install -y lxd
234 newgrp lxd
235 lxd init --auto
236 lxd waitready
237 lxc network create lxdbr0 ipv4.address=auto ipv4.nat=true ipv6.address=none ipv6.nat=false
238 DEFAULT_INTERFACE=$(route -n | awk '$1~/^0.0.0.0/ {print $8}')
239 DEFAULT_MTU=$(ip addr show $DEFAULT_INTERFACE | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
240 lxc profile device set default eth0 mtu $DEFAULT_MTU
241 #sudo systemctl stop lxd-bridge
242 #sudo systemctl --system daemon-reload
243 #sudo systemctl enable lxd-bridge
244 #sudo systemctl start lxd-bridge
245}
246
247function ask_user(){
248 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
249 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
250 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
251 read -e -p "$1" USER_CONFIRMATION
252 while true ; do
253 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
254 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
255 [ "${USER_CONFIRMATION,,}" == "yes" ] || [ "${USER_CONFIRMATION,,}" == "y" ] && return 0
256 [ "${USER_CONFIRMATION,,}" == "no" ] || [ "${USER_CONFIRMATION,,}" == "n" ] && return 1
257 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
258 done
259}
260
garciadeblasd8bc5c32018-05-09 17:37:56 +0200261function install_osmclient(){
262 CLIENT_RELEASE=${RELEASE#"-R "}
263 CLIENT_REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
264 CLIENT_REPOSITORY=${REPOSITORY#"-r "}
garciadeblasd8bc5c32018-05-09 17:37:56 +0200265 CLIENT_REPOSITORY_BASE=${REPOSITORY_BASE#"-u "}
266 key_location=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
267 curl $key_location | sudo apt-key add -
garciadeblas078f5982019-11-27 15:06:06 +0100268 sudo add-apt-repository -y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient IM"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200269 sudo apt-get update
garciadeblas078f5982019-11-27 15:06:06 +0100270 sudo apt-get install -y python3-pip
271 sudo -H LC_ALL=C python3 -m pip install -U pip
garciadeblasa9954892020-01-22 16:05:05 +0100272 sudo -H LC_ALL=C python3 -m pip install -U python-magic pyangbind verboselogs
garciadeblasda89ee72019-11-28 02:19:59 +0100273 sudo apt-get install -y python3-osm-im python3-osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +0200274 #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
275 #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
276 #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
277 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME=`lxc list | awk '($2=="SO-ub"){print $6}'`
278 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME=`lxc list | awk '($2=="RO"){print $6}'`
garciadeblasd8bc5c32018-05-09 17:37:56 +0200279 echo -e "\nOSM client installed"
garciadeblasc3226982018-11-27 11:32:47 +0100280 if [ -z "$INSTALL_LIGHTWEIGHT" ]; then
281 echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
282 echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
283 echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
284 else
285 echo -e "OSM client assumes that OSM host is running in localhost (127.0.0.1)."
286 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:"
287 echo " export OSM_HOSTNAME=<OSM_host>"
288 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +0200289 return 0
290}
291
lavado6ad812e2019-11-29 10:58:58 -0500292function install_prometheus_nodeexporter(){
lavadoc26d90b2019-12-06 18:11:36 -0500293 if (systemctl -q is-active node_exporter)
294 then
295 echo "Node Exporter is already running."
296 else
297 echo "Node Exporter is not active, installing..."
298 if getent passwd node_exporter > /dev/null 2>&1; then
299 echo "node_exporter user exists"
300 else
301 echo "Creating user node_exporter"
302 sudo useradd --no-create-home --shell /bin/false node_exporter
303 fi
304 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/
305 sudo tar -C /tmp -xf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz
306 sudo cp /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64/node_exporter /usr/local/bin
307 sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
308 sudo rm -rf node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64*
309 sudo cp ${OSM_DEVOPS}/installers/docker/files/node_exporter.service /etc/systemd/system/node_exporter.service
310 sudo systemctl daemon-reload
311 sudo systemctl restart node_exporter
312 sudo systemctl enable node_exporter
313 echo "Node Exporter has been activated in this host."
314 fi
lavado6ad812e2019-11-29 10:58:58 -0500315 return 0
316}
317
lavado1e4a88c2019-12-03 16:19:59 -0500318function uninstall_prometheus_nodeexporter(){
319 sudo systemctl stop node_exporter
320 sudo systemctl disable node_exporter
321 sudo rm /etc/systemd/system/node_exporter.service
322 sudo systemctl daemon-reload
323 sudo userdel node_exporter
324 sudo rm /usr/local/bin/node_exporter
325 return 0
326}
327
garciadeblasd8bc5c32018-05-09 17:37:56 +0200328function install_docker_ce() {
329 # installs and configures Docker CE
330 echo "Installing Docker CE ..."
331 sudo apt-get -qq update
332 sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
333 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
334 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
335 sudo apt-get -qq update
336 sudo apt-get install -y docker-ce
337 echo "Adding user to group 'docker'"
338 sudo groupadd -f docker
339 sudo usermod -aG docker $USER
garciadeblasd8bc5c32018-05-09 17:37:56 +0200340 sleep 2
341 sudo service docker restart
342 echo "... restarted Docker service"
garciadeblas67ce97c2018-05-18 10:22:09 +0200343 sg docker -c "docker version" || FATAL "Docker installation failed"
344 echo "... Docker CE installation done"
345 return 0
garciadeblasd8bc5c32018-05-09 17:37:56 +0200346}
347
348function install_docker_compose() {
349 # installs and configures docker-compose
350 echo "Installing Docker Compose ..."
351 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
352 sudo chmod +x /usr/local/bin/docker-compose
353 echo "... Docker Compose installation done"
354}
355
356function install_juju() {
357 echo "Installing juju"
Adam Israel41587482019-11-06 10:45:43 -0500358 sudo snap install juju --classic
garciadeblasd41f5482018-05-25 10:25:06 +0200359 [ -z "$INSTALL_NOLXD" ] && sudo dpkg-reconfigure -p medium lxd
Dominik4763cfe2019-11-27 12:15:50 +0100360 [[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200361 echo "Finished installation of juju"
Mike Marchettib8420852018-09-13 13:45:06 -0400362 return 0
363}
364
365function juju_createcontroller() {
Adam Israel8232e562018-11-21 16:47:45 -0500366 if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then
Mike Marchettib8420852018-09-13 13:45:06 -0400367 # Not found created, create the controller
garciadeblas85bb41a2020-01-15 18:20:14 +0100368 sudo usermod -a -G lxd ${USER}
Mike Marchettib8420852018-09-13 13:45:06 -0400369 sg lxd -c "juju bootstrap --bootstrap-series=xenial localhost $OSM_STACK_NAME"
370 fi
Adam Israel8232e562018-11-21 16:47:45 -0500371 [ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200372}
373
Adam Israel5ddc97f2019-09-03 18:11:12 -0400374function juju_createproxy() {
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100375 check_install_iptables_persistent
Adam Israel43fb44d2019-11-06 10:37:25 -0500376
David Garcia26432d42019-12-11 12:22:35 +0100377 if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
378 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 -0400379 sudo netfilter-persistent save
380 fi
381}
382
garciadeblasd8bc5c32018-05-09 17:37:56 +0200383function generate_docker_images() {
384 echo "Pulling and generating docker images"
Michael Marchettiee374142018-08-02 22:47:16 +0200385 _build_from=$COMMIT_ID
386 [ -z "$_build_from" ] && _build_from="master"
387
388 echo "OSM Docker images generated from $_build_from"
389
Mike Marchettib8420852018-09-13 13:45:06 -0400390 BUILD_ARGS+=(--build-arg REPOSITORY="$REPOSITORY")
391 BUILD_ARGS+=(--build-arg RELEASE="$RELEASE")
392 BUILD_ARGS+=(--build-arg REPOSITORY_KEY="$REPOSITORY_KEY")
393 BUILD_ARGS+=(--build-arg REPOSITORY_BASE="$REPOSITORY_BASE")
lavado60216242018-10-10 23:44:28 +0200394
garciadeblas0e596bc2018-05-28 16:04:42 +0200395 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q KAFKA ; then
396 sg docker -c "docker pull wurstmeister/zookeeper" || FATAL "cannot get zookeeper docker image"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300397 sg docker -c "docker pull wurstmeister/kafka:${KAFKA_TAG}" || FATAL "cannot get kafka docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200398 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400399
garciadeblas0e596bc2018-05-28 16:04:42 +0200400 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MONGO ; then
401 sg docker -c "docker pull mongo" || FATAL "cannot get mongo docker image"
402 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400403
lavado60216242018-10-10 23:44:28 +0200404 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
405 sg docker -c "docker pull prom/prometheus:${PROMETHEUS_TAG}" || FATAL "cannot get prometheus docker image"
406 fi
407
garciadeblasfc5bb142019-12-10 10:49:12 +0100408 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS-CADVISOR ; then
409 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
410 fi
411
lavado6ad812e2019-11-29 10:58:58 -0500412 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q GRAFANA ; then
413 sg docker -c "docker pull grafana/grafana:${GRAFANA_TAG}" || FATAL "cannot get grafana docker image"
garciadeblasfc5bb142019-12-10 10:49:12 +0100414 fi
lavado6ad812e2019-11-29 10:58:58 -0500415
garciadeblas4a83e6e2018-12-04 14:55:09 +0100416 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI || echo $TO_REBUILD | grep -q KEYSTONE-DB ; then
lavado9a8df7c2018-10-24 09:35:34 -0500417 sg docker -c "docker pull mariadb:${KEYSTONEDB_TAG}" || FATAL "cannot get keystone-db docker image"
418 fi
419
garciadeblas4a83e6e2018-12-04 14:55:09 +0100420 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
421 sg docker -c "docker pull mysql:5" || FATAL "cannot get mysql docker image"
422 fi
423
Mike Marchettida8a9c42018-10-01 15:25:15 -0400424 if [ -n "$PULL_IMAGES" ]; then
425 sg docker -c "docker pull ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}" || FATAL "cannot pull MON docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400426 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MON ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200427 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/MON
428 git -C ${LWTEMPDIR}/MON checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100429 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 -0500430 fi
431
432 if [ -n "$PULL_IMAGES" ]; then
433 sg docker -c "docker pull ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}" || FATAL "cannot pull POL docker image"
garciadeblas4a83e6e2018-12-04 14:55:09 +0100434 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q POL ; then
lavado9a8df7c2018-10-24 09:35:34 -0500435 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/POL
436 git -C ${LWTEMPDIR}/POL checkout ${COMMIT_ID}
garciadeblas4a83e6e2018-12-04 14:55:09 +0100437 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 +0200438 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400439
440 if [ -n "$PULL_IMAGES" ]; then
441 sg docker -c "docker pull ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}" || FATAL "cannot pull NBI docker image"
lavado9a8df7c2018-10-24 09:35:34 -0500442 sg docker -c "docker pull ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}" || FATAL "cannot pull KEYSTONE docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400443 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200444 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NBI
445 git -C ${LWTEMPDIR}/NBI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100446 sg docker -c "docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t ${DOCKER_USER}/nbi --no-cache" || FATAL "cannot build NBI docker image"
447 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 +0200448 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400449
450 if [ -n "$PULL_IMAGES" ]; then
451 sg docker -c "docker pull ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}" || FATAL "cannot pull RO docker image"
452 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200453 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/RO
454 git -C ${LWTEMPDIR}/RO checkout ${COMMIT_ID}
tierno5cc8ac32019-11-25 10:33:25 +0000455 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 +0200456 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400457
458 if [ -n "$PULL_IMAGES" ]; then
459 sg docker -c "docker pull ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}" || FATAL "cannot pull LCM RO docker image"
460 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LCM ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200461 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LCM
462 git -C ${LWTEMPDIR}/LCM checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100463 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 +0200464 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400465
466 if [ -n "$PULL_IMAGES" ]; then
467 sg docker -c "docker pull ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}" || FATAL "cannot pull light-ui docker image"
468 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-UI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200469 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LW-UI
470 git -C ${LWTEMPDIR}/LW-UI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100471 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 +0200472 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400473
474 if [ -n "$PULL_IMAGES" ]; then
475 sg docker -c "docker pull ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}" || FATAL "cannot pull osmclient docker image"
476 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-osmclient; then
garciadeblas0d45bc82018-11-19 14:25:13 +0100477 sg docker -c "docker build -t ${DOCKER_USER}/osmclient ${BUILD_ARGS[@]} -f $OSM_DEVOPS/docker/osmclient ."
Mike Marchettib8420852018-09-13 13:45:06 -0400478 fi
lavado6ad812e2019-11-29 10:58:58 -0500479
480 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
481 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
482 fi
483
garciadeblasd8bc5c32018-05-09 17:37:56 +0200484 echo "Finished generation of docker images"
485}
486
garciadeblas5b857d32018-05-24 18:37:58 +0200487function cmp_overwrite() {
488 file1="$1"
489 file2="$2"
490 if ! $(cmp "${file1}" "${file2}" >/dev/null 2>&1); then
491 if [ -f "${file2}" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400492 ask_user "The file ${file2} already exists. Overwrite (y/N)? " n && cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200493 else
Mike Marchettib8420852018-09-13 13:45:06 -0400494 cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200495 fi
496 fi
497}
498
garciadeblasd8bc5c32018-05-09 17:37:56 +0200499function generate_docker_env_files() {
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200500 echo "Doing a backup of existing env files"
501 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
502 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
503 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
504 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lwui.env{,~}
505 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
506 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
507 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
508 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
509 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
510
garciadeblasd8bc5c32018-05-09 17:37:56 +0200511 echo "Generating docker env files"
vijaynag8339ed22019-07-25 17:10:58 +0530512 if [ -n "$KUBERNETES" ]; then
513 #Kubernetes resources
514 $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
515 else
516 # Docker-compose
517 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200518
vijaynag8339ed22019-07-25 17:10:58 +0530519 # Prometheus
lavado6ad812e2019-11-29 10:58:58 -0500520 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/files/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus.yml
521
522 # Grafana & Prometheus Exporter files
523 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/files
524 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/files/* $OSM_DOCKER_WORK_DIR/files/
vijaynag8339ed22019-07-25 17:10:58 +0530525 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200526
Benjamin Diazba2cca92018-11-08 21:07:15 -0300527 # LCM
528 if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
529 echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
530 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400531
Benjamin Diazba2cca92018-11-08 21:07:15 -0300532 if ! grep -Fq "OSMLCM_VCA_HOST" $OSM_DOCKER_WORK_DIR/lcm.env; then
533 echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
534 else
535 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_HOST.*|OSMLCM_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/lcm.env
536 fi
537
538 if ! grep -Fq "OSMLCM_VCA_SECRET" $OSM_DOCKER_WORK_DIR/lcm.env; then
539 echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
540 else
541 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_SECRET.*|OSMLCM_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/lcm.env
542 fi
543
garciadeblasaa3ddf42019-04-04 19:04:32 +0200544 if ! grep -Fq "OSMLCM_VCA_PUBKEY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblasec537902019-12-10 14:13:40 +0100545 echo "OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasaa3ddf42019-04-04 19:04:32 +0200546 else
garciadeblasec537902019-12-10 14:13:40 +0100547 $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 +0200548 fi
549
Adam Israelbe7676a2019-10-02 16:10:53 -0400550 if ! grep -Fq "OSMLCM_VCA_CACERT" $OSM_DOCKER_WORK_DIR/lcm.env; then
551 echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
552 else
553 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CACERT.*|OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/lcm.env
554 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -0300555
Adam Israel5ddc97f2019-09-03 18:11:12 -0400556 if ! grep -Fq "OSMLCM_VCA_APIPROXY" $OSM_DOCKER_WORK_DIR/lcm.env; then
557 echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
558 else
559 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_APIPROXY.*|OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
560 fi
561
garciadeblasa2e41842019-12-18 11:05:24 +0100562 if ! grep -Fq "OSMLCM_VCA_ENABLEOSUPGRADE" $OSM_DOCKER_WORK_DIR/lcm.env; then
563 echo "# OSMLCM_VCA_ENABLEOSUPGRADE=false" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
564 fi
565
566 if ! grep -Fq "OSMLCM_VCA_APTMIRROR" $OSM_DOCKER_WORK_DIR/lcm.env; then
567 echo "# OSMLCM_VCA_APTMIRROR=http://archive.ubuntu.com/ubuntu/" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
568 fi
569
Benjamin Diazba2cca92018-11-08 21:07:15 -0300570 # RO
571 MYSQL_ROOT_PASSWORD=$(generate_secret)
Mike Marchettib8420852018-09-13 13:45:06 -0400572 if [ ! -f $OSM_DOCKER_WORK_DIR/ro-db.env ]; then
573 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro-db.env
garciadeblas5b857d32018-05-24 18:37:58 +0200574 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400575 if [ ! -f $OSM_DOCKER_WORK_DIR/ro.env ]; then
576 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro.env
garciadeblas5b857d32018-05-24 18:37:58 +0200577 fi
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100578
Benjamin Diazba2cca92018-11-08 21:07:15 -0300579 # Keystone
Benjamin Diazba2cca92018-11-08 21:07:15 -0300580 KEYSTONE_DB_PASSWORD=$(generate_secret)
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100581 SERVICE_PASSWORD=$(generate_secret)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100582 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone-db.env ]; then
583 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone-db.env
584 fi
585 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone.env ]; then
586 echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100587 echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100588 echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100589 fi
590
Benjamin Diazba2cca92018-11-08 21:07:15 -0300591 # NBI
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100592 if [ ! -f $OSM_DOCKER_WORK_DIR/nbi.env ]; then
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100593 echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/nbi.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300594 echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/nbi.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100595 fi
596
Benjamin Diazba2cca92018-11-08 21:07:15 -0300597 # MON
598 if [ ! -f $OSM_DOCKER_WORK_DIR/mon.env ]; then
599 echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diaz9261c662019-02-25 17:18:51 -0300600 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 -0300601 fi
602
603 if ! grep -Fq "OS_NOTIFIER_URI" $OSM_DOCKER_WORK_DIR/mon.env; then
604 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
605 else
606 $WORKDIR_SUDO sed -i "s|OS_NOTIFIER_URI.*|OS_NOTIFIER_URI=http://$DEFAULT_IP:8662|g" $OSM_DOCKER_WORK_DIR/mon.env
607 fi
608
609 if ! grep -Fq "OSMMON_VCA_HOST" $OSM_DOCKER_WORK_DIR/mon.env; then
610 echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
611 else
612 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_HOST.*|OSMMON_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/mon.env
613 fi
614
615 if ! grep -Fq "OSMMON_VCA_SECRET" $OSM_DOCKER_WORK_DIR/mon.env; then
616 echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
617 else
618 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_SECRET.*|OSMMON_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/mon.env
619 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400620
Adam Israel6d8adf32019-12-05 15:46:54 -0500621 if ! grep -Fq "OSMMON_VCA_CACERT" $OSM_DOCKER_WORK_DIR/mon.env; then
622 echo "OSMMON_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
623 else
624 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_CACERT.*|OSMMON_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/mon.env
625 fi
626
627
Benjamin Diaz04560882019-02-26 17:25:07 -0300628 # POL
629 if [ ! -f $OSM_DOCKER_WORK_DIR/pol.env ]; then
630 echo "OSMPOL_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/pol" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/pol.env
631 fi
632
Benjamin Diaz4088a9b2019-05-21 15:11:49 -0300633 # LW-UI
634 if [ ! -f $OSM_DOCKER_WORK_DIR/lwui.env ]; then
635 echo "OSMUI_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/lwui" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lwui.env
636 fi
637
garciadeblasd8bc5c32018-05-09 17:37:56 +0200638 echo "Finished generation of docker env files"
639}
640
Mike Marchettib8420852018-09-13 13:45:06 -0400641function generate_osmclient_script () {
Mike Marchetti46d6efe2018-10-23 16:20:16 -0400642 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 -0400643 $WORKDIR_SUDO chmod +x "$OSM_DOCKER_WORK_DIR/osm"
644 echo "osmclient sidecar container can be found at: $OSM_DOCKER_WORK_DIR/osm"
645}
646
vijaynag8339ed22019-07-25 17:10:58 +0530647#installs kubernetes packages
648function install_kube() {
649 sudo apt-get update && sudo apt-get install -y apt-transport-https
650 curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
651 sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
652 sudo apt-get update
653 echo "Installing Kubernetes Packages ..."
654 sudo apt-get install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
655}
656
657#initializes kubernetes control plane
658function init_kubeadm() {
659 sudo swapoff -a
660 sudo kubeadm init --config $1
661 sleep 5
662}
663
664function kube_config_dir() {
665 [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes"
666 mkdir -p $HOME/.kube
667 sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
668 sudo chown $(id -u):$(id -g) $HOME/.kube/config
669}
670
671#deploys flannel as daemonsets
672function deploy_cni_provider() {
673 CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")"
674 trap 'rm -rf "${CNI_DIR}"' EXIT
675 wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR
676 kubectl apply -f $CNI_DIR
677 [ $? -ne 0 ] && FATAL "Cannot Install Flannel"
678}
679
680#creates secrets from env files which will be used by containers
681function kube_secrets(){
682 kubectl create ns $OSM_STACK_NAME
683 kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env
684 kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env
685 kubectl create secret generic nbi-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/nbi.env
686 kubectl create secret generic ro-db-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro-db.env
687 kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env
688 kubectl create secret generic keystone-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/keystone.env
689 kubectl create secret generic lwui-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lwui.env
690 kubectl create secret generic pol-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/pol.env
691}
692
693#deploys osm pods and services
694function deploy_osm_services() {
695 K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}')
696 kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
697 sleep 5
698 kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR
699}
700
701function parse_yaml() {
702 osm_services="nbi lcm ro pol mon light-ui keystone"
703 TAG=$1
704 for osm in $osm_services; do
705 $WORKDIR_SUDO sed -i "s/opensourcemano\/$osm:.*/opensourcemano\/$osm:$TAG/g" $OSM_K8S_WORK_DIR/$osm.yaml
706 done
707}
708
709function namespace_vol() {
710 osm_services="nbi lcm ro pol mon kafka mongo mysql"
711 for osm in $osm_services; do
712 $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml
713 done
714}
715
garciadeblasa3e26612018-05-30 17:58:55 +0200716function init_docker_swarm() {
garciadeblasd8bc5c32018-05-09 17:37:56 +0200717 if [ "${DEFAULT_MTU}" != "1500" ]; then
718 DOCKER_NETS=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
719 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";}'`
720 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"
721 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200722 sg docker -c "docker swarm init --advertise-addr ${DEFAULT_IP}"
garciadeblasa3e26612018-05-30 17:58:55 +0200723 return 0
724}
725
Mike Marchettib8420852018-09-13 13:45:06 -0400726function create_docker_network() {
727 echo "creating network"
728 sg docker -c "docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} net${OSM_STACK_NAME}"
729 echo "creating network DONE"
730}
731
garciadeblasa3e26612018-05-30 17:58:55 +0200732function deploy_lightweight() {
Mike Marchettib8420852018-09-13 13:45:06 -0400733
garciadeblasa3e26612018-05-30 17:58:55 +0200734 echo "Deploying lightweight build"
Mike Marchettib8420852018-09-13 13:45:06 -0400735 OSM_NBI_PORT=9999
736 OSM_RO_PORT=9090
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100737 OSM_KEYSTONE_PORT=5000
Mike Marchettib8420852018-09-13 13:45:06 -0400738 OSM_UI_PORT=80
lavadoafa54c72018-10-05 09:28:28 -0500739 OSM_MON_PORT=8662
lavado60216242018-10-10 23:44:28 +0200740 OSM_PROM_PORT=9090
garciadeblasa7b27dc2019-12-04 15:06:55 +0100741 OSM_PROM_CADVISOR_PORT=8080
lavado60216242018-10-10 23:44:28 +0200742 OSM_PROM_HOSTPORT=9091
lavado6ad812e2019-11-29 10:58:58 -0500743 OSM_GRAFANA_PORT=3000
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100744 [ -n "$INSTALL_ELK" ] && OSM_ELK_PORT=5601
lavado6ad812e2019-11-29 10:58:58 -0500745 #[ -n "$INSTALL_PERFMON" ] && OSM_PM_PORT=3000
lavado60216242018-10-10 23:44:28 +0200746
Mike Marchettib8420852018-09-13 13:45:06 -0400747 if [ -n "$NO_HOST_PORTS" ]; then
748 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT)
749 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100750 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400751 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -0500752 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +0200753 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +0100754 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -0500755 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT)
756 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100757 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400758 else
759 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT:$OSM_NBI_PORT)
760 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT:$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100761 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT:$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400762 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT:$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -0500763 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT:$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +0200764 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_HOSTPORT:$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +0100765 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT:$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -0500766 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT:$OSM_GRAFANA_PORT)
767 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT:$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100768 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT:$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400769 fi
770 echo "export ${OSM_PORTS[@]}" | $WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/osm_ports.sh
771 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 -0400772 echo "export TAG=${OSM_DOCKER_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Mike Marchettida8a9c42018-10-01 15:25:15 -0400773 echo "export DOCKER_USER=${DOCKER_USER}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -0300774 echo "export KAFKA_TAG=${KAFKA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado60216242018-10-10 23:44:28 +0200775 echo "export PROMETHEUS_TAG=${PROMETHEUS_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado9a8df7c2018-10-24 09:35:34 -0500776 echo "export KEYSTONEDB_TAG=${KEYSTONEDB_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado6ad812e2019-11-29 10:58:58 -0500777 echo "export PROMETHEUS_CADVISOR_TAG=${PROMETHEUS_CADVISOR_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
778 echo "export GRAFANA_TAG=${GRAFANA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -0300779
Mike Marchettib8420852018-09-13 13:45:06 -0400780 pushd $OSM_DOCKER_WORK_DIR
beierl63229a22019-05-30 14:42:04 -0400781 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 -0400782 popd
783
garciadeblasd8bc5c32018-05-09 17:37:56 +0200784 echo "Finished deployment of lightweight build"
785}
786
garciadeblas6c66abf2018-05-16 14:46:19 +0200787function deploy_elk() {
garciadeblase2aebfe2018-07-06 14:11:20 +0200788 echo "Pulling docker images for ELK"
lavado53eb8f52018-11-16 12:58:23 -0500789 sg docker -c "docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:${ELASTIC_VERSION}" || FATAL "cannot get elasticsearch docker image"
790 sg docker -c "docker pull docker.elastic.co/beats/metricbeat:${ELASTIC_VERSION}" || FATAL "cannot get metricbeat docker image"
791 sg docker -c "docker pull docker.elastic.co/beats/filebeat:${ELASTIC_VERSION}" || FATAL "cannot get filebeat docker image"
792 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 -0500793 sg docker -c "docker pull bobrik/curator:${ELASTIC_CURATOR_VERSION}" || FATAL "cannot get curator docker image"
garciadeblase2aebfe2018-07-06 14:11:20 +0200794 echo "Finished pulling elk docker images"
Mike Marchettib8420852018-09-13 13:45:06 -0400795 $WORKDIR_SUDO mkdir -p "$OSM_DOCKER_WORK_DIR/osm_elk"
796 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_elk/* $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas5b857d32018-05-24 18:37:58 +0200797 remove_stack osm_elk
garciadeblas6c66abf2018-05-16 14:46:19 +0200798 echo "Deploying ELK stack"
Mike Marchettib8420852018-09-13 13:45:06 -0400799 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 +0200800 echo "Waiting for ELK stack to be up and running"
801 time=0
garciadeblase2aebfe2018-07-06 14:11:20 +0200802 step=5
803 timelength=40
garciadeblas6c66abf2018-05-16 14:46:19 +0200804 elk_is_up=1
805 while [ $time -le $timelength ]; do
garciadeblase2aebfe2018-07-06 14:11:20 +0200806 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 +0200807 elk_is_up=0
808 break
809 fi
810 sleep $step
811 time=$((time+step))
812 done
813 if [ $elk_is_up -eq 0 ]; then
814 echo "ELK is up and running. Trying to create index pattern..."
815 #Create index pattern
816 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -0500817 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
818 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200819 #Make it the default index
garciadeblase2aebfe2018-07-06 14:11:20 +0200820 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +0200821 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -0500822 -d"{\"value\":\"filebeat-*\"}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200823 else
824 echo "Cannot connect to Kibana to create index pattern."
825 echo "Once Kibana is running, you can use the following instructions to create index pattern:"
826 echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -0500827 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
828 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}"'
garciadeblas6c66abf2018-05-16 14:46:19 +0200829 echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +0200830 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -0500831 -d"{\"value\":\"filebeat-*\"}"'
garciadeblas6c66abf2018-05-16 14:46:19 +0200832 fi
833 echo "Finished deployment of ELK stack"
834 return 0
835}
836
garciadeblasd8bc5c32018-05-09 17:37:56 +0200837function install_lightweight() {
garciadeblas0d45bc82018-11-19 14:25:13 +0100838 [ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
vijaynag8339ed22019-07-25 17:10:58 +0530839 [ -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 -0400840 [ ! -d "$OSM_DOCKER_WORK_DIR" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR
vijaynag8339ed22019-07-25 17:10:58 +0530841 [ -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 -0400842
garciadeblas183e5802018-12-13 18:20:54 +0100843 track checkingroot
garciadeblasd13a8aa2018-05-18 15:24:51 +0200844 [ "$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 +0100845 track noroot
vijaynag8339ed22019-07-25 17:10:58 +0530846
847 if [ -n "$KUBERNETES" ]; then
848 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
849 1. Install and configure LXD
850 2. Install juju
851 3. Install docker CE
852 4. Disable swap space
853 5. Install and initialize Kubernetes
854 as pre-requirements.
855 Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
856
857 else
858 [ -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
859 fi
garciadeblasfae5e972018-06-12 18:27:11 +0200860 track proceed
vijaynag8339ed22019-07-25 17:10:58 +0530861
garciadeblasd8bc5c32018-05-09 17:37:56 +0200862 echo "Installing lightweight build of OSM"
863 LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
864 trap 'rm -rf "${LWTEMPDIR}"' EXIT
865 DEFAULT_IF=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
garciadeblas8cd60772018-06-02 08:38:17 +0200866 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200867 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
garciadeblas8cd60772018-06-02 08:38:17 +0200868 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200869 DEFAULT_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
Mike Marchettib8420852018-09-13 13:45:06 -0400870
871 # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to
lavadoe07b1642018-10-25 10:58:34 -0500872 if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ]; then
garciadeblasbd925e42018-06-14 14:32:12 +0200873 need_packages_lw="lxd snapd"
garciadeblasd41f5482018-05-25 10:25:06 +0200874 echo -e "Checking required packages: $need_packages_lw"
875 dpkg -l $need_packages_lw &>/dev/null \
876 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
877 || sudo apt-get update \
878 || FATAL "failed to run apt-get update"
879 dpkg -l $need_packages_lw &>/dev/null \
880 || ! echo -e "Installing $need_packages_lw requires root privileges." \
881 || sudo apt-get install -y $need_packages_lw \
882 || FATAL "failed to install $need_packages_lw"
883 fi
garciadeblasfae5e972018-06-12 18:27:11 +0200884 track prereqok
Mike Marchettib8420852018-09-13 13:45:06 -0400885
vijaynag8339ed22019-07-25 17:10:58 +0530886 [ -z "$INSTALL_NOJUJU" ] && install_juju
garciadeblas183e5802018-12-13 18:20:54 +0100887 track juju_install
vijaynag8339ed22019-07-25 17:10:58 +0530888
lavadoe07b1642018-10-25 10:58:34 -0500889 if [ -z "$OSM_VCA_HOST" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400890 juju_createcontroller
lavadoe07b1642018-10-25 10:58:34 -0500891 OSM_VCA_HOST=`sg lxd -c "juju show-controller $OSM_STACK_NAME"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
892 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
Mike Marchettib8420852018-09-13 13:45:06 -0400893 fi
garciadeblas183e5802018-12-13 18:20:54 +0100894 track juju_controller
vijaynag8339ed22019-07-25 17:10:58 +0530895
lavadoe07b1642018-10-25 10:58:34 -0500896 if [ -z "$OSM_VCA_SECRET" ]; then
897 OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME)
898 [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
Mike Marchettib8420852018-09-13 13:45:06 -0400899 fi
garciadeblasaa3ddf42019-04-04 19:04:32 +0200900 if [ -z "$OSM_VCA_PUBKEY" ]; then
901 OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
902 [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
903 fi
garciadeblasfc5bb142019-12-10 10:49:12 +0100904 if [ -z "$OSM_VCA_CACERT" ]; then
905 OSM_VCA_CACERT=$(juju controllers --format json | jq -r '.controllers["osm"]["ca-cert"]' | base64 | tr -d \\n)
906 [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
907 fi
Adam Israel5ddc97f2019-09-03 18:11:12 -0400908 if [ -z "$OSM_VCA_APIPROXY" ]; then
909 OSM_VCA_APIPROXY=$DEFAULT_IP
910 [ -z "$OSM_VCA_APIPROXY" ] && FATAL "Cannot obtain juju api proxy"
911 fi
912 juju_createproxy
garciadeblasfc5bb142019-12-10 10:49:12 +0100913 track juju
Adam Israel5ddc97f2019-09-03 18:11:12 -0400914
Benjamin Diazba2cca92018-11-08 21:07:15 -0300915 if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
916 OSM_DATABASE_COMMONKEY=$(generate_secret)
917 [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret"
918 fi
vijaynag8339ed22019-07-25 17:10:58 +0530919
garciadeblasa3e26612018-05-30 17:58:55 +0200920 [ -n "$INSTALL_NODOCKER" ] || install_docker_ce
garciadeblas6c66abf2018-05-16 14:46:19 +0200921 track docker_ce
vijaynag8339ed22019-07-25 17:10:58 +0530922
923 #Installs Kubernetes and deploys osm services
924 if [ -n "$KUBERNETES" ]; then
925 install_kube
926 track install_k8s
927 init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
928 kube_config_dir
929 track init_k8s
930 else
931 #install_docker_compose
932 [ -n "$INSTALL_NODOCKER" ] || init_docker_swarm
933 track docker_swarm
934 fi
935
Mike Marchettib8420852018-09-13 13:45:06 -0400936 [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
garciadeblas6c66abf2018-05-16 14:46:19 +0200937 track docker_build
vijaynag8339ed22019-07-25 17:10:58 +0530938
garciadeblasd8bc5c32018-05-09 17:37:56 +0200939 generate_docker_env_files
Mike Marchettib8420852018-09-13 13:45:06 -0400940
vijaynag8339ed22019-07-25 17:10:58 +0530941 if [ -n "$KUBERNETES" ]; then
garciadeblasb5a630f2020-03-05 18:32:16 +0000942 if [ -n "$INSTALL_K8S_MONITOR" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +0100943 # uninstall OSM MONITORING
944 uninstall_k8s_monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +0100945 track uninstall_k8s_monitoring
romeromonsere366b1a2019-11-19 19:49:26 +0100946 fi
vijaynag8339ed22019-07-25 17:10:58 +0530947 #remove old namespace
948 remove_k8s_namespace $OSM_STACK_NAME
949 deploy_cni_provider
950 kube_secrets
garciadeblasa7e128a2019-12-18 11:10:45 +0100951 [ ! $OSM_DOCKER_TAG == "7" ] && parse_yaml $OSM_DOCKER_TAG
vijaynag8339ed22019-07-25 17:10:58 +0530952 namespace_vol
953 deploy_osm_services
954 track deploy_osm_services_k8s
garciadeblasb5a630f2020-03-05 18:32:16 +0000955 if [ -n "$INSTALL_K8S_MONITOR" ]; then
garciadeblasfc5bb142019-12-10 10:49:12 +0100956 # install OSM MONITORING
957 install_k8s_monitoring
958 track install_k8s_monitoring
959 fi
vijaynag8339ed22019-07-25 17:10:58 +0530960 else
961 # remove old stack
962 remove_stack $OSM_STACK_NAME
963 create_docker_network
964 deploy_lightweight
965 generate_osmclient_script
966 track docker_deploy
lavado6ad812e2019-11-29 10:58:58 -0500967 install_prometheus_nodeexporter
garciadeblasfc5bb142019-12-10 10:49:12 +0100968 track nodeexporter
vijaynag8339ed22019-07-25 17:10:58 +0530969 [ -n "$INSTALL_VIMEMU" ] && install_vimemu && track vimemu
970 [ -n "$INSTALL_ELK" ] && deploy_elk && track elk
vijaynag8339ed22019-07-25 17:10:58 +0530971 fi
972
Mike Marchettib8420852018-09-13 13:45:06 -0400973 [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
garciadeblas6c66abf2018-05-16 14:46:19 +0200974 track osmclient
vijaynag8339ed22019-07-25 17:10:58 +0530975
garciadeblas44c02192019-12-09 01:36:57 +0100976 wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200977 track end
garciadeblasd8bc5c32018-05-09 17:37:56 +0200978 return 0
979}
980
981function install_vimemu() {
peusterm76353e42018-05-08 13:56:05 +0200982 echo "\nInstalling vim-emu"
983 EMUTEMPDIR="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX")"
984 trap 'rm -rf "${EMUTEMPDIR}"' EXIT
peusterma3a7d142020-02-07 10:12:29 +0100985 # install prerequisites (OVS is a must for the emulator to work)
986 sudo apt-get install openvswitch-switch
garciadeblasd8bc5c32018-05-09 17:37:56 +0200987 # clone vim-emu repository (attention: branch is currently master only)
988 echo "Cloning vim-emu repository ..."
peusterm76353e42018-05-08 13:56:05 +0200989 git clone https://osm.etsi.org/gerrit/osm/vim-emu.git $EMUTEMPDIR
garciadeblasd8bc5c32018-05-09 17:37:56 +0200990 # build vim-emu docker
991 echo "Building vim-emu Docker container..."
Mike Marchettib8420852018-09-13 13:45:06 -0400992
993 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 +0200994 # start vim-emu container as daemon
995 echo "Starting vim-emu Docker container 'vim-emu' ..."
peusterm76353e42018-05-08 13:56:05 +0200996 if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
997 # in lightweight mode, the emulator needs to be attached to netOSM
Mike Marchettib8420852018-09-13 13:45:06 -0400998 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 +0200999 else
1000 # classic build mode
Mike Marchettib8420852018-09-13 13:45:06 -04001001 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 +02001002 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001003 echo "Waiting for 'vim-emu' container to start ..."
1004 sleep 5
Mike Marchettib8420852018-09-13 13:45:06 -04001005 export VIMEMU_HOSTNAME=$(sg docker -c "docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001006 echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
peusterm76353e42018-05-08 13:56:05 +02001007 # print vim-emu connection info
1008 echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001009 echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
peusterm76353e42018-05-08 13:56:05 +02001010 echo -e "To add the emulated VIM to OSM you should do:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001011 echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
1012}
1013
romeromonsere366b1a2019-11-19 19:49:26 +01001014function install_k8s_monitoring() {
1015 # install OSM monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +01001016 $WORKDIR_SUDO chmod +x $OSM_DEVOPS/installers/k8s/*.sh
romeromonsere366b1a2019-11-19 19:49:26 +01001017 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh
1018}
1019
1020function uninstall_k8s_monitoring() {
K Sai Kiran5e151f02019-12-11 14:50:09 +05301021 # uninstall OSM monitoring
romeromonsere366b1a2019-11-19 19:49:26 +01001022 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/uninstall_osm_k8s_monitoring.sh
1023}
1024
garciadeblasd8bc5c32018-05-09 17:37:56 +02001025function dump_vars(){
1026 echo "DEVELOP=$DEVELOP"
1027 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
1028 echo "UNINSTALL=$UNINSTALL"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001029 echo "UPDATE=$UPDATE"
1030 echo "RECONFIGURE=$RECONFIGURE"
1031 echo "TEST_INSTALLER=$TEST_INSTALLER"
1032 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
1033 echo "INSTALL_LXD=$INSTALL_LXD"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001034 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
garciadeblas6c66abf2018-05-16 14:46:19 +02001035 echo "INSTALL_ONLY=$INSTALL_ONLY"
1036 echo "INSTALL_ELK=$INSTALL_ELK"
lavado6ad812e2019-11-29 10:58:58 -05001037 #echo "INSTALL_PERFMON=$INSTALL_PERFMON"
garciadeblasb5a630f2020-03-05 18:32:16 +00001038 echo "INSTALL_K8S_MONITOR=$INSTALL_K8S_MONITOR"
garciadeblas0e596bc2018-05-28 16:04:42 +02001039 echo "TO_REBUILD=$TO_REBUILD"
garciadeblasd41f5482018-05-25 10:25:06 +02001040 echo "INSTALL_NOLXD=$INSTALL_NOLXD"
garciadeblasa3e26612018-05-30 17:58:55 +02001041 echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
garciadeblas0d45bc82018-11-19 14:25:13 +01001042 echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001043 echo "RELEASE=$RELEASE"
1044 echo "REPOSITORY=$REPOSITORY"
1045 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
1046 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001047 echo "OSM_DEVOPS=$OSM_DEVOPS"
1048 echo "OSM_VCA_HOST=$OSM_VCA_HOST"
1049 echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
garciadeblasaa3ddf42019-04-04 19:04:32 +02001050 echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001051 echo "NO_HOST_PORTS=$NO_HOST_PORTS"
1052 echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
1053 echo "WORKDIR_SUDO=$WORKDIR_SUDO"
1054 echo "OSM_WORK_DIR=$OSM_STACK_NAME"
1055 echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
1056 echo "DOCKER_USER=$DOCKER_USER"
1057 echo "OSM_STACK_NAME=$OSM_STACK_NAME"
1058 echo "PULL_IMAGES=$PULL_IMAGES"
vijaynag8339ed22019-07-25 17:10:58 +05301059 echo "KUBERNETES=$KUBERNETES"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001060 echo "SHOWOPTS=$SHOWOPTS"
1061 echo "Install from specific refspec (-b): $COMMIT_ID"
1062}
1063
1064function track(){
1065 ctime=`date +%s`
1066 duration=$((ctime - SESSION_ID))
1067 url="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
1068 #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
1069 event_name="bin"
garciadeblas6c66abf2018-05-16 14:46:19 +02001070 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name="binsrc"
1071 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name="lxd"
1072 [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name="lw"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001073 event_name="${event_name}_$1"
1074 url="${url}&event=${event_name}&ce_duration=${duration}"
1075 wget -q -O /dev/null $url
1076}
1077
1078UNINSTALL=""
1079DEVELOP=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001080UPDATE=""
1081RECONFIGURE=""
1082TEST_INSTALLER=""
1083INSTALL_LXD=""
1084SHOWOPTS=""
1085COMMIT_ID=""
1086ASSUME_YES=""
1087INSTALL_FROM_SOURCE=""
garciadeblasfc5bb142019-12-10 10:49:12 +01001088RELEASE="ReleaseSEVEN"
Mike Marchettib8420852018-09-13 13:45:06 -04001089REPOSITORY="stable"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001090INSTALL_VIMEMU=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001091LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
1092LXD_REPOSITORY_PATH=""
1093INSTALL_LIGHTWEIGHT="y"
garciadeblas6c66abf2018-05-16 14:46:19 +02001094INSTALL_ONLY=""
1095INSTALL_ELK=""
garciadeblas0e596bc2018-05-28 16:04:42 +02001096TO_REBUILD=""
garciadeblasd41f5482018-05-25 10:25:06 +02001097INSTALL_NOLXD=""
garciadeblasa3e26612018-05-30 17:58:55 +02001098INSTALL_NODOCKER=""
Mike Marchettib8420852018-09-13 13:45:06 -04001099INSTALL_NOJUJU=""
vijaynag8339ed22019-07-25 17:10:58 +05301100KUBERNETES=""
garciadeblasb5a630f2020-03-05 18:32:16 +00001101INSTALL_K8S_MONITOR=""
garciadeblas0d45bc82018-11-19 14:25:13 +01001102INSTALL_NOHOSTCLIENT=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001103SESSION_ID=`date +%s`
1104OSM_DEVOPS=
lavadoe07b1642018-10-25 10:58:34 -05001105OSM_VCA_HOST=
1106OSM_VCA_SECRET=
garciadeblasaa3ddf42019-04-04 19:04:32 +02001107OSM_VCA_PUBKEY=
Mike Marchettib8420852018-09-13 13:45:06 -04001108OSM_STACK_NAME=osm
1109NO_HOST_PORTS=""
1110DOCKER_NOBUILD=""
1111REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
garciadeblas870e60a2018-11-21 16:44:21 +01001112REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
Mike Marchettib8420852018-09-13 13:45:06 -04001113WORKDIR_SUDO=sudo
1114OSM_WORK_DIR="/etc/osm"
garciadeblas526f0fb2018-11-23 14:47:40 +01001115OSM_DOCKER_WORK_DIR="/etc/osm/docker"
vijaynag8339ed22019-07-25 17:10:58 +05301116OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
1117OSM_HOST_VOL="/var/lib/osm"
1118OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
Mike Marchetti13d76c82018-09-19 15:00:36 -04001119OSM_DOCKER_TAG=latest
garciadeblas0d45bc82018-11-19 14:25:13 +01001120DOCKER_USER=opensourcemano
1121PULL_IMAGES="y"
Benjamin Diazaa0af712018-10-04 14:02:34 -03001122KAFKA_TAG=2.11-1.0.2
lavado60216242018-10-10 23:44:28 +02001123PROMETHEUS_TAG=v2.4.3
lavado6ad812e2019-11-29 10:58:58 -05001124GRAFANA_TAG=latest
1125PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
1126PROMETHEUS_CADVISOR_TAG=latest
lavado9a8df7c2018-10-24 09:35:34 -05001127KEYSTONEDB_TAG=10
Benjamin Diazba2cca92018-11-08 21:07:15 -03001128OSM_DATABASE_COMMONKEY=
lavado53eb8f52018-11-16 12:58:23 -05001129ELASTIC_VERSION=6.4.2
lavado4e8662c2018-11-28 11:28:14 -05001130ELASTIC_CURATOR_VERSION=5.5.4
vijaynag8339ed22019-07-25 17:10:58 +05301131POD_NETWORK_CIDR=10.244.0.0/16
1132K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
1133RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
garciadeblasd8bc5c32018-05-09 17:37:56 +02001134
vijaynag01b68762020-02-03 08:46:36 +00001135while 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 +02001136 case "${o}" in
garciadeblasd8bc5c32018-05-09 17:37:56 +02001137 b)
1138 COMMIT_ID=${OPTARG}
garciadeblas0d45bc82018-11-19 14:25:13 +01001139 PULL_IMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001140 ;;
1141 r)
Mike Marchettib8420852018-09-13 13:45:06 -04001142 REPOSITORY="${OPTARG}"
1143 REPO_ARGS+=(-r "$REPOSITORY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001144 ;;
vijaynag8339ed22019-07-25 17:10:58 +05301145 c)
1146 [ "${OPTARG}" == "swarm" ] && continue
1147 [ "${OPTARG}" == "k8s" ] && KUBERNETES="y" && continue
1148 echo -e "Invalid argument for -i : ' $OPTARG'\n" >&2
1149 usage && exit 1
1150 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001151 k)
Mike Marchettib8420852018-09-13 13:45:06 -04001152 REPOSITORY_KEY="${OPTARG}"
1153 REPO_ARGS+=(-k "$REPOSITORY_KEY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001154 ;;
1155 u)
Mike Marchettib8420852018-09-13 13:45:06 -04001156 REPOSITORY_BASE="${OPTARG}"
1157 REPO_ARGS+=(-u "$REPOSITORY_BASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001158 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001159 R)
1160 RELEASE="${OPTARG}"
1161 REPO_ARGS+=(-R "$RELEASE")
garciadeblas0d45bc82018-11-19 14:25:13 +01001162 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001163 D)
1164 OSM_DEVOPS="${OPTARG}"
1165 ;;
garciadeblas6c66abf2018-05-16 14:46:19 +02001166 o)
1167 INSTALL_ONLY="y"
1168 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
1169 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblasb5a630f2020-03-05 18:32:16 +00001170 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001171 ;;
garciadeblas0e596bc2018-05-28 16:04:42 +02001172 m)
garciadeblas0e596bc2018-05-28 16:04:42 +02001173 [ "${OPTARG}" == "LW-UI" ] && TO_REBUILD="$TO_REBUILD LW-UI" && continue
govindappa79e51b92019-05-22 12:15:21 +05301174 [ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
1175 [ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
1176 [ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001177 [ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
govindappa79e51b92019-05-22 12:15:21 +05301178 [ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001179 [ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
1180 [ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
govindappa79e51b92019-05-22 12:15:21 +05301181 [ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
garciadeblasfc5bb142019-12-10 10:49:12 +01001182 [ "${OPTARG}" == "PROMETHEUS-CADVISOR" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS-CADVISOR" && continue
govindappa79e51b92019-05-22 12:15:21 +05301183 [ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
lavado6ad812e2019-11-29 10:58:58 -05001184 [ "${OPTARG}" == "GRAFANA" ] && TO_REBUILD="$TO_REBUILD GRAFANA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001185 [ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
1186 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001187 H)
1188 OSM_VCA_HOST="${OPTARG}"
1189 ;;
1190 S)
1191 OSM_VCA_SECRET="${OPTARG}"
1192 ;;
1193 s)
1194 OSM_STACK_NAME="${OPTARG}" && [ -n "$KUBERNETES" ] && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0
1195 ;;
1196 w)
1197 # when specifying workdir, do not use sudo for access
1198 WORKDIR_SUDO=
1199 OSM_WORK_DIR="${OPTARG}"
1200 ;;
1201 t)
1202 OSM_DOCKER_TAG="${OPTARG}"
1203 ;;
1204 U)
1205 DOCKER_USER="${OPTARG}"
1206 ;;
1207 P)
1208 OSM_VCA_PUBKEY=$(cat ${OPTARG})
1209 ;;
1210 A)
1211 OSM_VCA_APIPROXY="${OPTARG}"
1212 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001213 -)
1214 [ "${OPTARG}" == "help" ] && usage && exit 0
garciadeblas0d45bc82018-11-19 14:25:13 +01001215 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001216 [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
1217 [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001218 [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
1219 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
1220 [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
1221 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
garciadeblasd41f5482018-05-25 10:25:06 +02001222 [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
garciadeblasa3e26612018-05-30 17:58:55 +02001223 [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001224 [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001225 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001226 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001227 [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001228 [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
1229 [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
1230 [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
1231 [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
garciadeblas0d45bc82018-11-19 14:25:13 +01001232 [ "${OPTARG}" == "pullimages" ] && continue
garciadeblasb5a630f2020-03-05 18:32:16 +00001233 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001234 echo -e "Invalid option: '--$OPTARG'\n" >&2
1235 usage && exit 1
1236 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001237 :)
1238 echo "Option -$OPTARG requires an argument" >&2
1239 usage && exit 1
1240 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001241 \?)
1242 echo -e "Invalid option: '-$OPTARG'\n" >&2
1243 usage && exit 1
1244 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001245 h)
1246 usage && exit 0
1247 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001248 y)
1249 ASSUME_YES="y"
1250 ;;
1251 *)
1252 usage && exit 1
1253 ;;
1254 esac
1255done
1256
garciadeblas0e596bc2018-05-28 16:04:42 +02001257[ -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 +02001258
garciadeblasd8bc5c32018-05-09 17:37:56 +02001259if [ -n "$SHOWOPTS" ]; then
1260 dump_vars
1261 exit 0
1262fi
1263
garciadeblasd8bc5c32018-05-09 17:37:56 +02001264# if develop, we force master
1265[ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
1266
garciadeblasd8bc5c32018-05-09 17:37:56 +02001267need_packages="git jq wget curl tar"
1268echo -e "Checking required packages: $need_packages"
1269dpkg -l $need_packages &>/dev/null \
1270 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1271 || sudo apt-get update \
1272 || FATAL "failed to run apt-get update"
1273dpkg -l $need_packages &>/dev/null \
1274 || ! echo -e "Installing $need_packages requires root privileges." \
1275 || sudo apt-get install -y $need_packages \
1276 || FATAL "failed to install $need_packages"
1277
1278if [ -z "$OSM_DEVOPS" ]; then
Michael Marchettiee374142018-08-02 22:47:16 +02001279 if [ -n "$TEST_INSTALLER" ]; then
1280 echo -e "\nUsing local devops repo for OSM installation"
1281 OSM_DEVOPS="$(dirname $(realpath $(dirname $0)))"
1282 else
1283 echo -e "\nCreating temporary dir for OSM installation"
1284 OSM_DEVOPS="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
1285 trap 'rm -rf "$OSM_DEVOPS"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001286
Michael Marchettiee374142018-08-02 22:47:16 +02001287 git clone https://osm.etsi.org/gerrit/osm/devops.git $OSM_DEVOPS
garciadeblasd8bc5c32018-05-09 17:37:56 +02001288
Michael Marchettiee374142018-08-02 22:47:16 +02001289 if [ -z "$COMMIT_ID" ]; then
1290 echo -e "\nGuessing the current stable release"
1291 LATEST_STABLE_DEVOPS=`git -C $OSM_DEVOPS tag -l v[0-9].* | sort -V | tail -n1`
1292 [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
1293
1294 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
1295 COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
1296 else
1297 echo -e "\nDEVOPS Using commit $COMMIT_ID"
1298 fi
1299 git -C $OSM_DEVOPS checkout $COMMIT_ID
garciadeblasd8bc5c32018-05-09 17:37:56 +02001300 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001301fi
1302
garciadeblas3c25fab2019-11-18 17:24:43 +01001303. $OSM_DEVOPS/common/all_funcs
garciadeblasd8bc5c32018-05-09 17:37:56 +02001304
1305[ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight && echo -e "\nDONE" && exit 0
garciadeblas6c66abf2018-05-16 14:46:19 +02001306[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
lavado6ad812e2019-11-29 10:58:58 -05001307#[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
garciadeblas6c66abf2018-05-16 14:46:19 +02001308[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
garciadeblasb5a630f2020-03-05 18:32:16 +00001309[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_K8S_MONITOR" ] && install_k8s_monitoring
garciadeblas6c66abf2018-05-16 14:46:19 +02001310[ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
garciadeblasd8bc5c32018-05-09 17:37:56 +02001311
1312#Installation starts here
garciadeblas44c02192019-12-09 01:36:57 +01001313wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001314track start
1315
garciadeblasd8bc5c32018-05-09 17:37:56 +02001316[ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight && echo -e "\nDONE" && exit 0
1317echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
1318if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
1319 ! ask_user "The installation will take about 75-90 minutes. Continue (Y/n)? " y && echo "Cancelled!" && exit 1
1320fi
1321
1322echo -e "Checking required packages: lxd"
1323lxd --version &>/dev/null || FATAL "lxd not present, exiting."
1324[ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
1325
garciadeblasd8bc5c32018-05-09 17:37:56 +02001326# use local devops for containers
1327export OSM_USE_LOCAL_DEVOPS=true
garciadeblasd8bc5c32018-05-09 17:37:56 +02001328
1329#Install osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +02001330
1331#Install vim-emu (optional)
peusterm76353e42018-05-08 13:56:05 +02001332[ -n "$INSTALL_VIMEMU" ] && install_docker_ce && install_vimemu
garciadeblasd8bc5c32018-05-09 17:37:56 +02001333
garciadeblas44c02192019-12-09 01:36:57 +01001334wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblasd8bc5c32018-05-09 17:37:56 +02001335track end
1336echo -e "\nDONE"