blob: 7d06ba8b3da8b316bd38612dcdaa96a44f4c562e [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"
magnussonl1bbe9452020-02-25 13:43:17 +010038 echo -e " --pla: install the PLA module for placement support"
39 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, PLA, NONE)"
garciadeblasfc5bb142019-12-10 10:49:12 +010040 echo -e " -o <ADDON>: ONLY (un)installs one of the addons (vimemu, elk_stack)"
garciadeblase990f662018-05-18 11:43:39 +020041 echo -e " -D <devops path> use local devops installation path"
Mike Marchettib8420852018-09-13 13:45:06 -040042 echo -e " -w <work dir> Location to store runtime installation"
Mike Marchetti13d76c82018-09-19 15:00:36 -040043 echo -e " -t <docker tag> specify osm docker tag (default is latest)"
David Garcia79f4f532020-04-07 12:59:34 +020044 echo -e " -l: LXD cloud yaml file"
45 echo -e " -L: LXD credentials yaml file"
David Garcia404ae122020-04-28 11:47:55 +020046 echo -e " -K: Specifies the name of the controller to use - The controller must be already bootstrapped"
David Garcia79f4f532020-04-07 12:59:34 +020047 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 +020048 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 -040049 echo -e " --nojuju: do not juju, assumes already installed"
50 echo -e " --nodockerbuild:do not build docker images (use existing locally cached images)"
51 echo -e " --nohostports: do not expose docker ports to host (useful for creating multiple instances of osm on the same host)"
52 echo -e " --nohostclient: do not install the osmclient"
garciadeblase990f662018-05-18 11:43:39 +020053 echo -e " --uninstall: uninstall OSM: remove the containers and delete NAT rules"
54 echo -e " --source: install OSM from source code using the latest stable tag"
garciadeblasd8bc5c32018-05-09 17:37:56 +020055 echo -e " --develop: (deprecated, use '-b master') install OSM from source code using the master branch"
Mike Marchettida8a9c42018-10-01 15:25:15 -040056 echo -e " --pullimages: pull/run osm images from docker.io/opensourcemano"
romeromonsere366b1a2019-11-19 19:49:26 +010057 echo -e " --k8s_monitor: install the OSM kubernetes moitoring with prometheus and grafana"
garciadeblasd8bc5c32018-05-09 17:37:56 +020058# echo -e " --reconfigure: reconfigure the modules (DO NOT change NAT rules)"
garciadeblasd8bc5c32018-05-09 17:37:56 +020059# echo -e " --update: update to the latest stable release or to the latest commit if using a specific branch"
60 echo -e " --showopts: print chosen options and exit (only for debugging)"
61 echo -e " -y: do not prompt for confirmation, assumes yes"
garciadeblasd8bc5c32018-05-09 17:37:56 +020062 echo -e " -h / --help: print this help"
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +010063 echo -e " --charmed: install OSM with charms"
64 echo -e " --bundle <bundle path>: Specify with which bundle to deploy OSM with charms (--charmed option)"
65 echo -e " --kubeconfig <kubeconfig path>: Specify with which kubernetes to deploy OSM with charms (--charmed option)"
David Garcia404ae122020-04-28 11:47:55 +020066 echo -e " --controller <name>: Specifies the name of the controller to use - The controller must be already bootstrapped (--charmed option)"
67 echo -e " --lxd-cloud <yaml path>: Takes a YAML file as a parameter with the LXD Cloud information (--charmed option)"
68 echo -e " --lxd-credentials <yaml path>: Takes a YAML file as a parameter with the LXD Credentials information (--charmed option)"
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +010069 echo -e " --microstack: Installs microstack as a vim. (--charmed option)"
David Garcia69388c22020-05-07 12:14:19 +020070 echo -e " --tag: Docker image tag"
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +010071
garciadeblasd8bc5c32018-05-09 17:37:56 +020072}
73
Mike Marchettib8420852018-09-13 13:45:06 -040074# takes a juju/accounts.yaml file and returns the password specific
Adam Israel8232e562018-11-21 16:47:45 -050075# for a controller. I wrote this using only bash tools to minimize
Mike Marchettib8420852018-09-13 13:45:06 -040076# additions of other packages
77function parse_juju_password {
78 password_file="${HOME}/.local/share/juju/accounts.yaml"
79 local controller_name=$1
80 local s='[[:space:]]*' w='[a-zA-Z0-9_-]*' fs=$(echo @|tr @ '\034')
81 sed -ne "s|^\($s\):|\1|" \
82 -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
83 -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $password_file |
84 awk -F$fs -v controller=$controller_name '{
85 indent = length($1)/2;
86 vname[indent] = $2;
87 for (i in vname) {if (i > indent) {delete vname[i]}}
88 if (length($3) > 0) {
89 vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
90 if (match(vn,controller) && match($2,"password")) {
91 printf("%s",$3);
92 }
93 }
94 }'
95}
96
Benjamin Diazba2cca92018-11-08 21:07:15 -030097function generate_secret() {
98 head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32
99}
100
Mike Marchettib8420852018-09-13 13:45:06 -0400101function remove_volumes() {
vijaynag8339ed22019-07-25 17:10:58 +0530102 if [ -n "$KUBERNETES" ]; then
103 k8_volume=$1
104 echo "Removing ${k8_volume}"
105 $WORKDIR_SUDO rm -rf ${k8_volume}
106 else
107 stack=$1
garciadeblasac550f22019-12-11 11:17:06 +0100108 volumes="mongo_db mon_db osm_packages ro_db pol_db prom_db ro"
vijaynag8339ed22019-07-25 17:10:58 +0530109 for volume in $volumes; do
110 sg docker -c "docker volume rm ${stack}_${volume}"
111 done
112 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400113}
114
115function remove_network() {
116 stack=$1
117 sg docker -c "docker network rm net${stack}"
118}
119
Dominik Fleischmann6c63e2d2019-11-29 12:25:38 +0100120function remove_iptables() {
121 stack=$1
122 if [ -z "$OSM_VCA_HOST" ]; then
123 OSM_VCA_HOST=`sg lxd -c "juju show-controller ${stack}"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
124 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
125 fi
126
David Garcia26432d42019-12-11 12:22:35 +0100127 if [ -z "$DEFAULT_IP" ]; then
garciadeblas0a311ee2020-05-04 06:49:50 +0000128 DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5}')
129 [ -z "$DEFAULT_IF" ] && DEFAULT_IF=$(route -n |awk '$1~/^0.0.0.0/ {print $8}')
David Garcia26432d42019-12-11 12:22:35 +0100130 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
131 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
132 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
133 fi
134
135 if sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
136 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 +0100137 sudo netfilter-persistent save
138 fi
139}
140
garciadeblas5b857d32018-05-24 18:37:58 +0200141function remove_stack() {
142 stack=$1
garciadeblas5ef98212018-05-28 09:25:36 +0200143 if sg docker -c "docker stack ps ${stack}" ; then
garciadeblas5b857d32018-05-24 18:37:58 +0200144 echo -e "\nRemoving stack ${stack}" && sg docker -c "docker stack rm ${stack}"
145 COUNTER=0
146 result=1
147 while [ ${COUNTER} -lt 30 ]; do
148 result=$(sg docker -c "docker stack ps ${stack}" | wc -l)
149 #echo "Dockers running: $result"
150 if [ "${result}" == "0" ]; then
151 break
152 fi
153 let COUNTER=COUNTER+1
154 sleep 1
155 done
garciadeblasd8bc5c32018-05-09 17:37:56 +0200156 if [ "${result}" == "0" ]; then
garciadeblas5b857d32018-05-24 18:37:58 +0200157 echo "All dockers of the stack ${stack} were removed"
158 else
159 FATAL "Some dockers of the stack ${stack} could not be removed. Could not clean it."
garciadeblasd8bc5c32018-05-09 17:37:56 +0200160 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200161 sleep 5
garciadeblasd8bc5c32018-05-09 17:37:56 +0200162 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200163}
164
vijaynag8339ed22019-07-25 17:10:58 +0530165#removes osm deployments and services
166function remove_k8s_namespace() {
167 kubectl delete ns $1
168}
169
garciadeblas5b857d32018-05-24 18:37:58 +0200170#Uninstall lightweight OSM: remove dockers
171function uninstall_lightweight() {
garciadeblas282ff4e2018-07-10 09:16:30 +0200172 if [ -n "$INSTALL_ONLY" ]; then
173 if [ -n "$INSTALL_ELK" ]; then
174 echo -e "\nUninstalling OSM ELK stack"
175 remove_stack osm_elk
Mike Marchettib8420852018-09-13 13:45:06 -0400176 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas282ff4e2018-07-10 09:16:30 +0200177 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200178 else
179 echo -e "\nUninstalling OSM"
vijaynag8339ed22019-07-25 17:10:58 +0530180 if [ -n "$KUBERNETES" ]; then
garciadeblasb5a630f2020-03-05 18:32:16 +0000181 if [ -n "$INSTALL_K8S_MONITOR" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +0100182 # uninstall OSM MONITORING
183 uninstall_k8s_monitoring
184 fi
vijaynag8339ed22019-07-25 17:10:58 +0530185 remove_k8s_namespace $OSM_STACK_NAME
186 else
Dominik4763cfe2019-11-27 12:15:50 +0100187
vijaynag8339ed22019-07-25 17:10:58 +0530188 remove_stack $OSM_STACK_NAME
189 remove_stack osm_elk
vijaynag8339ed22019-07-25 17:10:58 +0530190 fi
garciadeblas282ff4e2018-07-10 09:16:30 +0200191 echo "Now osm docker images and volumes will be deleted"
192 newgrp docker << EONG
lavado02ad4b02018-11-28 11:30:48 -0500193 docker image rm ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}
194 docker image rm ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}
195 docker image rm ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}
196 docker image rm ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}
197 docker image rm ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}
198 docker image rm ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}
199 docker image rm ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}
magnussonl1bbe9452020-02-25 13:43:17 +0100200 docker image rm ${DOCKER_USER}/pla:${OSM_DOCKER_TAG}
lavado02ad4b02018-11-28 11:30:48 -0500201 docker image rm ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}
garciadeblas83ca1322018-05-22 18:31:14 +0200202EONG
vijaynag8339ed22019-07-25 17:10:58 +0530203
204 if [ -n "$KUBERNETES" ]; then
205 OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
206 remove_volumes $OSM_NAMESPACE_VOL
207 else
208 remove_volumes $OSM_STACK_NAME
209 remove_network $OSM_STACK_NAME
210 fi
David Garcia404ae122020-04-28 11:47:55 +0200211 [ -z "$CONTROLLER_NAME" ] && remove_iptables $OSM_STACK_NAME
Mike Marchettib8420852018-09-13 13:45:06 -0400212 echo "Removing $OSM_DOCKER_WORK_DIR"
213 $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR
David Garcia404ae122020-04-28 11:47:55 +0200214 [ -z "$CONTROLLER_NAME" ] && sg lxd -c "juju destroy-controller --destroy-all-models --yes $OSM_STACK_NAME"
garciadeblas282ff4e2018-07-10 09:16:30 +0200215 fi
216 echo "Some docker images will be kept in case they are used by other docker stacks"
217 echo "To remove them, just run 'docker image prune' in a terminal"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200218 return 0
219}
220
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100221#Safe unattended install of iptables-persistent
222function check_install_iptables_persistent(){
223 echo -e "\nChecking required packages: iptables-persistent"
224 if dpkg -l iptables-persistent &>/dev/null; then
225 echo -e " Not installed.\nInstalling iptables-persistent requires root privileges"
226 echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections
227 echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections
228 sudo apt-get -yq install iptables-persistent
229 fi
230}
231
garciadeblasd8bc5c32018-05-09 17:37:56 +0200232#Configure NAT rules, based on the current IP addresses of containers
233function nat(){
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100234 check_install_iptables_persistent
235
garciadeblasd8bc5c32018-05-09 17:37:56 +0200236 echo -e "\nConfiguring NAT rules"
237 echo -e " Required root privileges"
238 sudo $OSM_DEVOPS/installers/nat_osm
239}
240
241function FATAL(){
242 echo "FATAL error: Cannot install OSM due to \"$1\""
243 exit 1
244}
245
garciadeblasd8bc5c32018-05-09 17:37:56 +0200246function install_lxd() {
David Garcia50d786e2020-03-30 14:49:40 +0200247 # Apply sysctl production values for optimal performance
248 sudo cp /usr/share/osm-devops/installers/60-lxd-production.conf /etc/sysctl.d/60-lxd-production.conf
249 sudo sysctl --system
250
251 # Install LXD snap
252 sudo apt-get remove --purge -y liblxc1 lxc-common lxcfs lxd lxd-client
David Garcia42375212020-04-27 19:07:49 +0200253 sudo snap install lxd
David Garcia404ae122020-04-28 11:47:55 +0200254 sudo apt-get install zfsutils-linux -y
David Garcia50d786e2020-03-30 14:49:40 +0200255
256 # Configure LXD
257 sudo usermod -a -G lxd `whoami`
David Garcia404ae122020-04-28 11:47:55 +0200258 cat /usr/share/osm-devops/installers/lxd-preseed.conf | sed 's/^config: {}/config:\n core.https_address: '$DEFAULT_IP':8443/' | sg lxd -c "lxd init --preseed"
David Garcia50d786e2020-03-30 14:49:40 +0200259 sg lxd -c "lxd waitready"
garciadeblas0a311ee2020-05-04 06:49:50 +0000260 DEFAULT_INTERFACE=$(ip route list|awk '$1=="default" {print $5}')
261 [ -z "$DEFAULT_INTERFACE" ] && DEFAULT_INTERFACE=$(route -n |awk '$1~/^0.0.0.0/ {print $8}')
garciadeblasd8bc5c32018-05-09 17:37:56 +0200262 DEFAULT_MTU=$(ip addr show $DEFAULT_INTERFACE | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
David Garcia50d786e2020-03-30 14:49:40 +0200263 sg lxd -c "lxc profile device set default eth0 mtu $DEFAULT_MTU"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200264 #sudo systemctl stop lxd-bridge
265 #sudo systemctl --system daemon-reload
266 #sudo systemctl enable lxd-bridge
267 #sudo systemctl start lxd-bridge
268}
269
270function ask_user(){
271 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
272 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
273 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
274 read -e -p "$1" USER_CONFIRMATION
275 while true ; do
276 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
277 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
278 [ "${USER_CONFIRMATION,,}" == "yes" ] || [ "${USER_CONFIRMATION,,}" == "y" ] && return 0
279 [ "${USER_CONFIRMATION,,}" == "no" ] || [ "${USER_CONFIRMATION,,}" == "n" ] && return 1
280 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
281 done
282}
283
garciadeblasd8bc5c32018-05-09 17:37:56 +0200284function install_osmclient(){
285 CLIENT_RELEASE=${RELEASE#"-R "}
286 CLIENT_REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
287 CLIENT_REPOSITORY=${REPOSITORY#"-r "}
garciadeblasd8bc5c32018-05-09 17:37:56 +0200288 CLIENT_REPOSITORY_BASE=${REPOSITORY_BASE#"-u "}
289 key_location=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
290 curl $key_location | sudo apt-key add -
garciadeblas078f5982019-11-27 15:06:06 +0100291 sudo add-apt-repository -y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient IM"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200292 sudo apt-get update
garciadeblas078f5982019-11-27 15:06:06 +0100293 sudo apt-get install -y python3-pip
294 sudo -H LC_ALL=C python3 -m pip install -U pip
garciadeblasa9954892020-01-22 16:05:05 +0100295 sudo -H LC_ALL=C python3 -m pip install -U python-magic pyangbind verboselogs
garciadeblasda89ee72019-11-28 02:19:59 +0100296 sudo apt-get install -y python3-osm-im python3-osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +0200297 #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
298 #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
299 #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
300 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME=`lxc list | awk '($2=="SO-ub"){print $6}'`
301 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME=`lxc list | awk '($2=="RO"){print $6}'`
garciadeblasd8bc5c32018-05-09 17:37:56 +0200302 echo -e "\nOSM client installed"
garciadeblasc3226982018-11-27 11:32:47 +0100303 if [ -z "$INSTALL_LIGHTWEIGHT" ]; then
304 echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
305 echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
306 echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
307 else
308 echo -e "OSM client assumes that OSM host is running in localhost (127.0.0.1)."
309 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:"
310 echo " export OSM_HOSTNAME=<OSM_host>"
311 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +0200312 return 0
313}
314
lavado6ad812e2019-11-29 10:58:58 -0500315function install_prometheus_nodeexporter(){
lavadoc26d90b2019-12-06 18:11:36 -0500316 if (systemctl -q is-active node_exporter)
317 then
318 echo "Node Exporter is already running."
319 else
320 echo "Node Exporter is not active, installing..."
321 if getent passwd node_exporter > /dev/null 2>&1; then
322 echo "node_exporter user exists"
323 else
324 echo "Creating user node_exporter"
325 sudo useradd --no-create-home --shell /bin/false node_exporter
326 fi
garciadeblas82671062020-04-29 13:24:19 +0000327 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/
lavadoc26d90b2019-12-06 18:11:36 -0500328 sudo tar -C /tmp -xf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz
329 sudo cp /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64/node_exporter /usr/local/bin
330 sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
garciadeblas82671062020-04-29 13:24:19 +0000331 sudo rm -rf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64*
lavado71906482020-04-13 17:02:00 -0500332 sudo cp ${OSM_DEVOPS}/installers/docker/prometheus/node_exporter.service /etc/systemd/system/node_exporter.service
lavadoc26d90b2019-12-06 18:11:36 -0500333 sudo systemctl daemon-reload
334 sudo systemctl restart node_exporter
335 sudo systemctl enable node_exporter
336 echo "Node Exporter has been activated in this host."
337 fi
lavado6ad812e2019-11-29 10:58:58 -0500338 return 0
339}
340
lavado1e4a88c2019-12-03 16:19:59 -0500341function uninstall_prometheus_nodeexporter(){
342 sudo systemctl stop node_exporter
343 sudo systemctl disable node_exporter
344 sudo rm /etc/systemd/system/node_exporter.service
345 sudo systemctl daemon-reload
346 sudo userdel node_exporter
347 sudo rm /usr/local/bin/node_exporter
348 return 0
349}
350
garciadeblasd8bc5c32018-05-09 17:37:56 +0200351function install_docker_ce() {
352 # installs and configures Docker CE
353 echo "Installing Docker CE ..."
354 sudo apt-get -qq update
355 sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
356 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
357 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
358 sudo apt-get -qq update
359 sudo apt-get install -y docker-ce
360 echo "Adding user to group 'docker'"
361 sudo groupadd -f docker
362 sudo usermod -aG docker $USER
garciadeblasd8bc5c32018-05-09 17:37:56 +0200363 sleep 2
364 sudo service docker restart
365 echo "... restarted Docker service"
garciadeblas67ce97c2018-05-18 10:22:09 +0200366 sg docker -c "docker version" || FATAL "Docker installation failed"
367 echo "... Docker CE installation done"
368 return 0
garciadeblasd8bc5c32018-05-09 17:37:56 +0200369}
370
371function install_docker_compose() {
372 # installs and configures docker-compose
373 echo "Installing Docker Compose ..."
374 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
375 sudo chmod +x /usr/local/bin/docker-compose
376 echo "... Docker Compose installation done"
377}
378
379function install_juju() {
380 echo "Installing juju"
Adam Israel41587482019-11-06 10:45:43 -0500381 sudo snap install juju --classic
Dominik4763cfe2019-11-27 12:15:50 +0100382 [[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200383 echo "Finished installation of juju"
Mike Marchettib8420852018-09-13 13:45:06 -0400384 return 0
385}
386
387function juju_createcontroller() {
Adam Israel8232e562018-11-21 16:47:45 -0500388 if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then
Mike Marchettib8420852018-09-13 13:45:06 -0400389 # Not found created, create the controller
garciadeblas85bb41a2020-01-15 18:20:14 +0100390 sudo usermod -a -G lxd ${USER}
David Garcia404ae122020-04-28 11:47:55 +0200391 sg lxd -c "juju bootstrap $OSM_VCA_CLOUDNAME $OSM_STACK_NAME"
Mike Marchettib8420852018-09-13 13:45:06 -0400392 fi
Adam Israel8232e562018-11-21 16:47:45 -0500393 [ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200394}
395
Adam Israel5ddc97f2019-09-03 18:11:12 -0400396function juju_createproxy() {
Francisco-Javier Ramón Salguero4205c192020-02-22 01:45:41 +0100397 check_install_iptables_persistent
Adam Israel43fb44d2019-11-06 10:37:25 -0500398
David Garcia26432d42019-12-11 12:22:35 +0100399 if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
400 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 -0400401 sudo netfilter-persistent save
402 fi
403}
404
garciadeblasd8bc5c32018-05-09 17:37:56 +0200405function generate_docker_images() {
406 echo "Pulling and generating docker images"
Michael Marchettiee374142018-08-02 22:47:16 +0200407 _build_from=$COMMIT_ID
408 [ -z "$_build_from" ] && _build_from="master"
409
410 echo "OSM Docker images generated from $_build_from"
411
Mike Marchettib8420852018-09-13 13:45:06 -0400412 BUILD_ARGS+=(--build-arg REPOSITORY="$REPOSITORY")
413 BUILD_ARGS+=(--build-arg RELEASE="$RELEASE")
414 BUILD_ARGS+=(--build-arg REPOSITORY_KEY="$REPOSITORY_KEY")
415 BUILD_ARGS+=(--build-arg REPOSITORY_BASE="$REPOSITORY_BASE")
lavado60216242018-10-10 23:44:28 +0200416
garciadeblas0e596bc2018-05-28 16:04:42 +0200417 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q KAFKA ; then
418 sg docker -c "docker pull wurstmeister/zookeeper" || FATAL "cannot get zookeeper docker image"
Benjamin Diazaa0af712018-10-04 14:02:34 -0300419 sg docker -c "docker pull wurstmeister/kafka:${KAFKA_TAG}" || FATAL "cannot get kafka docker image"
garciadeblas0e596bc2018-05-28 16:04:42 +0200420 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400421
garciadeblas0e596bc2018-05-28 16:04:42 +0200422 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MONGO ; then
423 sg docker -c "docker pull mongo" || FATAL "cannot get mongo docker image"
424 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400425
lavado60216242018-10-10 23:44:28 +0200426 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
427 sg docker -c "docker pull prom/prometheus:${PROMETHEUS_TAG}" || FATAL "cannot get prometheus docker image"
428 fi
429
garciadeblasfc5bb142019-12-10 10:49:12 +0100430 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS-CADVISOR ; then
431 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
432 fi
433
lavado6ad812e2019-11-29 10:58:58 -0500434 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q GRAFANA ; then
435 sg docker -c "docker pull grafana/grafana:${GRAFANA_TAG}" || FATAL "cannot get grafana docker image"
garciadeblasfc5bb142019-12-10 10:49:12 +0100436 fi
lavado6ad812e2019-11-29 10:58:58 -0500437
garciadeblas4a83e6e2018-12-04 14:55:09 +0100438 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI || echo $TO_REBUILD | grep -q KEYSTONE-DB ; then
lavado9a8df7c2018-10-24 09:35:34 -0500439 sg docker -c "docker pull mariadb:${KEYSTONEDB_TAG}" || FATAL "cannot get keystone-db docker image"
440 fi
441
garciadeblas4a83e6e2018-12-04 14:55:09 +0100442 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
443 sg docker -c "docker pull mysql:5" || FATAL "cannot get mysql docker image"
444 fi
445
Mike Marchettida8a9c42018-10-01 15:25:15 -0400446 if [ -n "$PULL_IMAGES" ]; then
447 sg docker -c "docker pull ${DOCKER_USER}/mon:${OSM_DOCKER_TAG}" || FATAL "cannot pull MON docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400448 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MON ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200449 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/MON
450 git -C ${LWTEMPDIR}/MON checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100451 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 -0500452 fi
453
454 if [ -n "$PULL_IMAGES" ]; then
455 sg docker -c "docker pull ${DOCKER_USER}/pol:${OSM_DOCKER_TAG}" || FATAL "cannot pull POL docker image"
garciadeblas4a83e6e2018-12-04 14:55:09 +0100456 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q POL ; then
lavado9a8df7c2018-10-24 09:35:34 -0500457 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/POL
458 git -C ${LWTEMPDIR}/POL checkout ${COMMIT_ID}
garciadeblas4a83e6e2018-12-04 14:55:09 +0100459 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 +0200460 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400461
magnussonl1bbe9452020-02-25 13:43:17 +0100462 if [ -n "$PULL_IMAGES" -a -n "$INSTALL_PLA" ]; then
463 sg docker -c "docker pull ${DOCKER_USER}/pla:${OSM_DOCKER_TAG}" || FATAL "cannot pull PLA docker image"
464 elif [ -z "$TO_REBUILD" -a -n "$INSTALL_PLA" ] || echo $TO_REBUILD | grep -q PLA ; then
465 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/PLA
466 git -C ${LWTEMPDIR}/PLA checkout ${COMMIT_ID}
467 sg docker -c "docker build ${LWTEMPDIR}/PLA -f ${LWTEMPDIR}/PLA/docker/Dockerfile -t ${DOCKER_USER}/pla --no-cache" || FATAL "cannot build PLA docker image"
468 fi
469
Mike Marchettida8a9c42018-10-01 15:25:15 -0400470 if [ -n "$PULL_IMAGES" ]; then
471 sg docker -c "docker pull ${DOCKER_USER}/nbi:${OSM_DOCKER_TAG}" || FATAL "cannot pull NBI docker image"
lavado9a8df7c2018-10-24 09:35:34 -0500472 sg docker -c "docker pull ${DOCKER_USER}/keystone:${OSM_DOCKER_TAG}" || FATAL "cannot pull KEYSTONE docker image"
Mike Marchettida8a9c42018-10-01 15:25:15 -0400473 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200474 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NBI
475 git -C ${LWTEMPDIR}/NBI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100476 sg docker -c "docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t ${DOCKER_USER}/nbi --no-cache" || FATAL "cannot build NBI docker image"
477 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 +0200478 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400479
480 if [ -n "$PULL_IMAGES" ]; then
481 sg docker -c "docker pull ${DOCKER_USER}/ro:${OSM_DOCKER_TAG}" || FATAL "cannot pull RO docker image"
482 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q RO ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200483 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/RO
484 git -C ${LWTEMPDIR}/RO checkout ${COMMIT_ID}
tierno5cc8ac32019-11-25 10:33:25 +0000485 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 +0200486 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400487
488 if [ -n "$PULL_IMAGES" ]; then
489 sg docker -c "docker pull ${DOCKER_USER}/lcm:${OSM_DOCKER_TAG}" || FATAL "cannot pull LCM RO docker image"
490 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LCM ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200491 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LCM
492 git -C ${LWTEMPDIR}/LCM checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100493 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 +0200494 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400495
496 if [ -n "$PULL_IMAGES" ]; then
497 sg docker -c "docker pull ${DOCKER_USER}/light-ui:${OSM_DOCKER_TAG}" || FATAL "cannot pull light-ui docker image"
498 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-UI ; then
garciadeblas0e596bc2018-05-28 16:04:42 +0200499 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LW-UI
500 git -C ${LWTEMPDIR}/LW-UI checkout ${COMMIT_ID}
garciadeblas0d45bc82018-11-19 14:25:13 +0100501 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 +0200502 fi
Mike Marchettida8a9c42018-10-01 15:25:15 -0400503
504 if [ -n "$PULL_IMAGES" ]; then
505 sg docker -c "docker pull ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}" || FATAL "cannot pull osmclient docker image"
506 elif [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q LW-osmclient; then
garciadeblas0d45bc82018-11-19 14:25:13 +0100507 sg docker -c "docker build -t ${DOCKER_USER}/osmclient ${BUILD_ARGS[@]} -f $OSM_DEVOPS/docker/osmclient ."
Mike Marchettib8420852018-09-13 13:45:06 -0400508 fi
lavado6ad812e2019-11-29 10:58:58 -0500509
510 if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then
511 sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image"
512 fi
513
garciadeblasd8bc5c32018-05-09 17:37:56 +0200514 echo "Finished generation of docker images"
515}
516
garciadeblas5b857d32018-05-24 18:37:58 +0200517function cmp_overwrite() {
518 file1="$1"
519 file2="$2"
520 if ! $(cmp "${file1}" "${file2}" >/dev/null 2>&1); then
521 if [ -f "${file2}" ]; then
Mike Marchettib8420852018-09-13 13:45:06 -0400522 ask_user "The file ${file2} already exists. Overwrite (y/N)? " n && cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200523 else
Mike Marchettib8420852018-09-13 13:45:06 -0400524 cp -b ${file1} ${file2}
garciadeblas5b857d32018-05-24 18:37:58 +0200525 fi
526 fi
527}
528
garciadeblasd8bc5c32018-05-09 17:37:56 +0200529function generate_docker_env_files() {
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200530 echo "Doing a backup of existing env files"
531 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
532 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
533 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
534 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lwui.env{,~}
535 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
536 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
537 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
538 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
539 $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
540
garciadeblasd8bc5c32018-05-09 17:37:56 +0200541 echo "Generating docker env files"
vijaynag8339ed22019-07-25 17:10:58 +0530542 if [ -n "$KUBERNETES" ]; then
543 #Kubernetes resources
544 $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
545 else
546 # Docker-compose
547 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
magnussonl1bbe9452020-02-25 13:43:17 +0100548 if [ -n "$INSTALL_PLA" ]; then
549 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_pla/docker-compose.yaml $OSM_DOCKER_WORK_DIR/osm_pla/docker-compose.yaml
550 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200551
lavado71906482020-04-13 17:02:00 -0500552 # Prometheus files
553 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/prometheus
554 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/prometheus/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus/prometheus.yml
lavado6ad812e2019-11-29 10:58:58 -0500555
lavado71906482020-04-13 17:02:00 -0500556 # Grafana files
557 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/grafana
558 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/dashboards-osm.yml $OSM_DOCKER_WORK_DIR/grafana/dashboards-osm.yml
559 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/datasource-prometheus.yml $OSM_DOCKER_WORK_DIR/grafana/datasource-prometheus.yml
560 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-sample-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-sample-dashboard.json
561 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-system-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-system-dashboard.json
562
563 # Prometheus Exporters files
564 $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/prometheus_exporters
565 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/prometheus_exporters/node_exporter.service $OSM_DOCKER_WORK_DIR/prometheus_exporters/node_exporter.service
vijaynag8339ed22019-07-25 17:10:58 +0530566 fi
garciadeblasf9f6d9d2019-10-16 09:33:35 +0200567
Benjamin Diazba2cca92018-11-08 21:07:15 -0300568 # LCM
569 if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
570 echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
571 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400572
Benjamin Diazba2cca92018-11-08 21:07:15 -0300573 if ! grep -Fq "OSMLCM_VCA_HOST" $OSM_DOCKER_WORK_DIR/lcm.env; then
574 echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
575 else
576 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_HOST.*|OSMLCM_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/lcm.env
577 fi
578
579 if ! grep -Fq "OSMLCM_VCA_SECRET" $OSM_DOCKER_WORK_DIR/lcm.env; then
580 echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
581 else
582 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_SECRET.*|OSMLCM_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/lcm.env
583 fi
584
garciadeblasaa3ddf42019-04-04 19:04:32 +0200585 if ! grep -Fq "OSMLCM_VCA_PUBKEY" $OSM_DOCKER_WORK_DIR/lcm.env; then
garciadeblasec537902019-12-10 14:13:40 +0100586 echo "OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
garciadeblasaa3ddf42019-04-04 19:04:32 +0200587 else
garciadeblasec537902019-12-10 14:13:40 +0100588 $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 +0200589 fi
590
Adam Israelbe7676a2019-10-02 16:10:53 -0400591 if ! grep -Fq "OSMLCM_VCA_CACERT" $OSM_DOCKER_WORK_DIR/lcm.env; then
592 echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
593 else
594 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CACERT.*|OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/lcm.env
595 fi
Benjamin Diazba2cca92018-11-08 21:07:15 -0300596
Adam Israel5ddc97f2019-09-03 18:11:12 -0400597 if ! grep -Fq "OSMLCM_VCA_APIPROXY" $OSM_DOCKER_WORK_DIR/lcm.env; then
598 echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
599 else
600 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_APIPROXY.*|OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
601 fi
602
garciadeblasa2e41842019-12-18 11:05:24 +0100603 if ! grep -Fq "OSMLCM_VCA_ENABLEOSUPGRADE" $OSM_DOCKER_WORK_DIR/lcm.env; then
604 echo "# OSMLCM_VCA_ENABLEOSUPGRADE=false" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
605 fi
606
607 if ! grep -Fq "OSMLCM_VCA_APTMIRROR" $OSM_DOCKER_WORK_DIR/lcm.env; then
608 echo "# OSMLCM_VCA_APTMIRROR=http://archive.ubuntu.com/ubuntu/" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
609 fi
610
David Garcia79f4f532020-04-07 12:59:34 +0200611 if ! grep -Fq "OSMLCM_VCA_CLOUD" $OSM_DOCKER_WORK_DIR/lcm.env; then
612 echo "OSMLCM_VCA_CLOUD=${OSM_VCA_CLOUDNAME}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
613 else
614 $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CLOUD.*|OSMLCM_VCA_CLOUD=${OSM_VCA_CLOUDNAME}|g" $OSM_DOCKER_WORK_DIR/lcm.env
615 fi
616
Benjamin Diazba2cca92018-11-08 21:07:15 -0300617 # RO
618 MYSQL_ROOT_PASSWORD=$(generate_secret)
Mike Marchettib8420852018-09-13 13:45:06 -0400619 if [ ! -f $OSM_DOCKER_WORK_DIR/ro-db.env ]; then
620 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro-db.env
garciadeblas5b857d32018-05-24 18:37:58 +0200621 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400622 if [ ! -f $OSM_DOCKER_WORK_DIR/ro.env ]; then
623 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro.env
garciadeblas5b857d32018-05-24 18:37:58 +0200624 fi
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100625
Benjamin Diazba2cca92018-11-08 21:07:15 -0300626 # Keystone
Benjamin Diazba2cca92018-11-08 21:07:15 -0300627 KEYSTONE_DB_PASSWORD=$(generate_secret)
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100628 SERVICE_PASSWORD=$(generate_secret)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100629 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone-db.env ]; then
630 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone-db.env
631 fi
632 if [ ! -f $OSM_DOCKER_WORK_DIR/keystone.env ]; then
633 echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100634 echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100635 echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100636 fi
637
Benjamin Diazba2cca92018-11-08 21:07:15 -0300638 # NBI
Eduardo Sousae193dfd2018-09-21 11:37:49 +0100639 if [ ! -f $OSM_DOCKER_WORK_DIR/nbi.env ]; then
Eduardo Sousac50ed8f2019-04-08 17:17:54 +0100640 echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/nbi.env
Benjamin Diazba2cca92018-11-08 21:07:15 -0300641 echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/nbi.env
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100642 fi
643
Benjamin Diazba2cca92018-11-08 21:07:15 -0300644 # MON
645 if [ ! -f $OSM_DOCKER_WORK_DIR/mon.env ]; then
646 echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
Benjamin Diaz9261c662019-02-25 17:18:51 -0300647 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 -0300648 fi
649
650 if ! grep -Fq "OS_NOTIFIER_URI" $OSM_DOCKER_WORK_DIR/mon.env; then
651 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
652 else
653 $WORKDIR_SUDO sed -i "s|OS_NOTIFIER_URI.*|OS_NOTIFIER_URI=http://$DEFAULT_IP:8662|g" $OSM_DOCKER_WORK_DIR/mon.env
654 fi
655
656 if ! grep -Fq "OSMMON_VCA_HOST" $OSM_DOCKER_WORK_DIR/mon.env; then
657 echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
658 else
659 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_HOST.*|OSMMON_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/mon.env
660 fi
661
662 if ! grep -Fq "OSMMON_VCA_SECRET" $OSM_DOCKER_WORK_DIR/mon.env; then
663 echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
664 else
665 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_SECRET.*|OSMMON_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/mon.env
666 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400667
Adam Israel6d8adf32019-12-05 15:46:54 -0500668 if ! grep -Fq "OSMMON_VCA_CACERT" $OSM_DOCKER_WORK_DIR/mon.env; then
669 echo "OSMMON_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
670 else
671 $WORKDIR_SUDO sed -i "s|OSMMON_VCA_CACERT.*|OSMMON_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/mon.env
672 fi
673
674
Benjamin Diaz04560882019-02-26 17:25:07 -0300675 # POL
676 if [ ! -f $OSM_DOCKER_WORK_DIR/pol.env ]; then
677 echo "OSMPOL_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/pol" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/pol.env
678 fi
679
Benjamin Diaz4088a9b2019-05-21 15:11:49 -0300680 # LW-UI
681 if [ ! -f $OSM_DOCKER_WORK_DIR/lwui.env ]; then
682 echo "OSMUI_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/lwui" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lwui.env
683 fi
684
garciadeblasd8bc5c32018-05-09 17:37:56 +0200685 echo "Finished generation of docker env files"
686}
687
Mike Marchettib8420852018-09-13 13:45:06 -0400688function generate_osmclient_script () {
Mike Marchetti46d6efe2018-10-23 16:20:16 -0400689 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 -0400690 $WORKDIR_SUDO chmod +x "$OSM_DOCKER_WORK_DIR/osm"
691 echo "osmclient sidecar container can be found at: $OSM_DOCKER_WORK_DIR/osm"
692}
693
vijaynag8339ed22019-07-25 17:10:58 +0530694#installs kubernetes packages
695function install_kube() {
696 sudo apt-get update && sudo apt-get install -y apt-transport-https
697 curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
698 sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
699 sudo apt-get update
700 echo "Installing Kubernetes Packages ..."
701 sudo apt-get install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
702}
703
704#initializes kubernetes control plane
705function init_kubeadm() {
706 sudo swapoff -a
707 sudo kubeadm init --config $1
708 sleep 5
709}
710
711function kube_config_dir() {
712 [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes"
713 mkdir -p $HOME/.kube
714 sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
715 sudo chown $(id -u):$(id -g) $HOME/.kube/config
716}
717
718#deploys flannel as daemonsets
719function deploy_cni_provider() {
720 CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")"
721 trap 'rm -rf "${CNI_DIR}"' EXIT
722 wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR
723 kubectl apply -f $CNI_DIR
724 [ $? -ne 0 ] && FATAL "Cannot Install Flannel"
725}
726
727#creates secrets from env files which will be used by containers
728function kube_secrets(){
729 kubectl create ns $OSM_STACK_NAME
730 kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env
731 kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env
732 kubectl create secret generic nbi-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/nbi.env
733 kubectl create secret generic ro-db-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro-db.env
734 kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env
735 kubectl create secret generic keystone-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/keystone.env
736 kubectl create secret generic lwui-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lwui.env
737 kubectl create secret generic pol-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/pol.env
738}
739
740#deploys osm pods and services
741function deploy_osm_services() {
742 K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}')
743 kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
744 sleep 5
745 kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR
746}
747
magnussonl1bbe9452020-02-25 13:43:17 +0100748function deploy_osm_pla_service() {
749 # corresponding to parse_yaml
750 [ ! $OSM_DOCKER_TAG == "7" ] && $WORKDIR_SUDO sed -i "s/opensourcemano\/pla:.*/opensourcemano\/pla:$OSM_DOCKER_TAG/g" $OSM_DOCKER_WORK_DIR/osm_pla/pla.yaml
751 # corresponding to namespace_vol
752 $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_DOCKER_WORK_DIR/osm_pla/pla.yaml
753 # corresponding to deploy_osm_services
754 kubectl apply -n $OSM_STACK_NAME -f $OSM_DOCKER_WORK_DIR/osm_pla
755}
756
vijaynag8339ed22019-07-25 17:10:58 +0530757function parse_yaml() {
758 osm_services="nbi lcm ro pol mon light-ui keystone"
759 TAG=$1
760 for osm in $osm_services; do
761 $WORKDIR_SUDO sed -i "s/opensourcemano\/$osm:.*/opensourcemano\/$osm:$TAG/g" $OSM_K8S_WORK_DIR/$osm.yaml
762 done
763}
764
765function namespace_vol() {
766 osm_services="nbi lcm ro pol mon kafka mongo mysql"
767 for osm in $osm_services; do
768 $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml
769 done
770}
771
garciadeblasa3e26612018-05-30 17:58:55 +0200772function init_docker_swarm() {
garciadeblasd8bc5c32018-05-09 17:37:56 +0200773 if [ "${DEFAULT_MTU}" != "1500" ]; then
774 DOCKER_NETS=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
775 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";}'`
776 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"
777 fi
garciadeblas5b857d32018-05-24 18:37:58 +0200778 sg docker -c "docker swarm init --advertise-addr ${DEFAULT_IP}"
garciadeblasa3e26612018-05-30 17:58:55 +0200779 return 0
780}
781
Mike Marchettib8420852018-09-13 13:45:06 -0400782function create_docker_network() {
783 echo "creating network"
784 sg docker -c "docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} net${OSM_STACK_NAME}"
785 echo "creating network DONE"
786}
787
garciadeblasa3e26612018-05-30 17:58:55 +0200788function deploy_lightweight() {
Mike Marchettib8420852018-09-13 13:45:06 -0400789
garciadeblasa3e26612018-05-30 17:58:55 +0200790 echo "Deploying lightweight build"
Mike Marchettib8420852018-09-13 13:45:06 -0400791 OSM_NBI_PORT=9999
792 OSM_RO_PORT=9090
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100793 OSM_KEYSTONE_PORT=5000
Mike Marchettib8420852018-09-13 13:45:06 -0400794 OSM_UI_PORT=80
lavadoafa54c72018-10-05 09:28:28 -0500795 OSM_MON_PORT=8662
lavado60216242018-10-10 23:44:28 +0200796 OSM_PROM_PORT=9090
garciadeblasa7b27dc2019-12-04 15:06:55 +0100797 OSM_PROM_CADVISOR_PORT=8080
lavado60216242018-10-10 23:44:28 +0200798 OSM_PROM_HOSTPORT=9091
lavado6ad812e2019-11-29 10:58:58 -0500799 OSM_GRAFANA_PORT=3000
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100800 [ -n "$INSTALL_ELK" ] && OSM_ELK_PORT=5601
lavado6ad812e2019-11-29 10:58:58 -0500801 #[ -n "$INSTALL_PERFMON" ] && OSM_PM_PORT=3000
lavado60216242018-10-10 23:44:28 +0200802
Mike Marchettib8420852018-09-13 13:45:06 -0400803 if [ -n "$NO_HOST_PORTS" ]; then
804 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT)
805 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100806 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400807 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -0500808 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +0200809 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +0100810 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -0500811 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT)
812 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100813 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400814 else
815 OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT:$OSM_NBI_PORT)
816 OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT:$OSM_RO_PORT)
Eduardo Sousa09a1e972018-09-21 11:06:32 +0100817 OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT:$OSM_KEYSTONE_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400818 OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT:$OSM_UI_PORT)
lavadoafa54c72018-10-05 09:28:28 -0500819 OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT:$OSM_MON_PORT)
lavado60216242018-10-10 23:44:28 +0200820 OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_HOSTPORT:$OSM_PROM_PORT)
garciadeblasa7b27dc2019-12-04 15:06:55 +0100821 OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT:$OSM_PROM_CADVISOR_PORT)
lavado6ad812e2019-11-29 10:58:58 -0500822 OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT:$OSM_GRAFANA_PORT)
823 #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT:$OSM_PM_PORT)
Eduardo Sousae00c8f92018-10-08 10:36:17 +0100824 [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT:$OSM_ELK_PORT)
Mike Marchettib8420852018-09-13 13:45:06 -0400825 fi
826 echo "export ${OSM_PORTS[@]}" | $WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/osm_ports.sh
827 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 -0400828 echo "export TAG=${OSM_DOCKER_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Mike Marchettida8a9c42018-10-01 15:25:15 -0400829 echo "export DOCKER_USER=${DOCKER_USER}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -0300830 echo "export KAFKA_TAG=${KAFKA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado60216242018-10-10 23:44:28 +0200831 echo "export PROMETHEUS_TAG=${PROMETHEUS_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado9a8df7c2018-10-24 09:35:34 -0500832 echo "export KEYSTONEDB_TAG=${KEYSTONEDB_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
lavado6ad812e2019-11-29 10:58:58 -0500833 echo "export PROMETHEUS_CADVISOR_TAG=${PROMETHEUS_CADVISOR_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
834 echo "export GRAFANA_TAG=${GRAFANA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
Benjamin Diazaa0af712018-10-04 14:02:34 -0300835
Mike Marchettib8420852018-09-13 13:45:06 -0400836 pushd $OSM_DOCKER_WORK_DIR
magnussonl1bbe9452020-02-25 13:43:17 +0100837 if [ -n "$INSTALL_PLA" ]; then
838 sg docker -c ". ./osm_ports.sh; docker stack deploy -c $OSM_DOCKER_WORK_DIR/docker-compose.yaml -c $OSM_DOCKER_WORK_DIR/osm_pla/docker-compose.yaml $OSM_STACK_NAME"
839 else
840 sg docker -c ". ./osm_ports.sh; docker stack deploy -c $OSM_DOCKER_WORK_DIR/docker-compose.yaml $OSM_STACK_NAME"
841 fi
Mike Marchettib8420852018-09-13 13:45:06 -0400842 popd
843
garciadeblasd8bc5c32018-05-09 17:37:56 +0200844 echo "Finished deployment of lightweight build"
845}
846
garciadeblas6c66abf2018-05-16 14:46:19 +0200847function deploy_elk() {
garciadeblase2aebfe2018-07-06 14:11:20 +0200848 echo "Pulling docker images for ELK"
lavado53eb8f52018-11-16 12:58:23 -0500849 sg docker -c "docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:${ELASTIC_VERSION}" || FATAL "cannot get elasticsearch docker image"
850 sg docker -c "docker pull docker.elastic.co/beats/metricbeat:${ELASTIC_VERSION}" || FATAL "cannot get metricbeat docker image"
851 sg docker -c "docker pull docker.elastic.co/beats/filebeat:${ELASTIC_VERSION}" || FATAL "cannot get filebeat docker image"
852 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 -0500853 sg docker -c "docker pull bobrik/curator:${ELASTIC_CURATOR_VERSION}" || FATAL "cannot get curator docker image"
garciadeblase2aebfe2018-07-06 14:11:20 +0200854 echo "Finished pulling elk docker images"
Mike Marchettib8420852018-09-13 13:45:06 -0400855 $WORKDIR_SUDO mkdir -p "$OSM_DOCKER_WORK_DIR/osm_elk"
856 $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_elk/* $OSM_DOCKER_WORK_DIR/osm_elk
garciadeblas5b857d32018-05-24 18:37:58 +0200857 remove_stack osm_elk
garciadeblas6c66abf2018-05-16 14:46:19 +0200858 echo "Deploying ELK stack"
Mike Marchettib8420852018-09-13 13:45:06 -0400859 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 +0200860 echo "Waiting for ELK stack to be up and running"
861 time=0
garciadeblase2aebfe2018-07-06 14:11:20 +0200862 step=5
863 timelength=40
garciadeblas6c66abf2018-05-16 14:46:19 +0200864 elk_is_up=1
865 while [ $time -le $timelength ]; do
garciadeblase2aebfe2018-07-06 14:11:20 +0200866 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 +0200867 elk_is_up=0
868 break
869 fi
870 sleep $step
871 time=$((time+step))
872 done
873 if [ $elk_is_up -eq 0 ]; then
874 echo "ELK is up and running. Trying to create index pattern..."
875 #Create index pattern
876 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -0500877 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
878 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200879 #Make it the default index
garciadeblase2aebfe2018-07-06 14:11:20 +0200880 curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +0200881 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -0500882 -d"{\"value\":\"filebeat-*\"}" 2>/dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +0200883 else
884 echo "Cannot connect to Kibana to create index pattern."
885 echo "Once Kibana is running, you can use the following instructions to create index pattern:"
886 echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
lavado53eb8f52018-11-16 12:58:23 -0500887 "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
888 -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}"'
garciadeblas6c66abf2018-05-16 14:46:19 +0200889 echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
garciadeblas5b857d32018-05-24 18:37:58 +0200890 "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
lavado53eb8f52018-11-16 12:58:23 -0500891 -d"{\"value\":\"filebeat-*\"}"'
garciadeblas6c66abf2018-05-16 14:46:19 +0200892 fi
893 echo "Finished deployment of ELK stack"
894 return 0
895}
896
garciadeblasd8bc5c32018-05-09 17:37:56 +0200897function install_lightweight() {
garciadeblas0d45bc82018-11-19 14:25:13 +0100898 [ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
vijaynag8339ed22019-07-25 17:10:58 +0530899 [ -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 -0400900 [ ! -d "$OSM_DOCKER_WORK_DIR" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR
magnussonl1bbe9452020-02-25 13:43:17 +0100901 [ ! -d "$OSM_DOCKER_WORK_DIR/osm_pla" -a -n "$INSTALL_PLA" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/osm_pla
vijaynag8339ed22019-07-25 17:10:58 +0530902 [ -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 -0400903
garciadeblas183e5802018-12-13 18:20:54 +0100904 track checkingroot
garciadeblasd13a8aa2018-05-18 15:24:51 +0200905 [ "$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 +0100906 track noroot
vijaynag8339ed22019-07-25 17:10:58 +0530907
908 if [ -n "$KUBERNETES" ]; then
909 [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
910 1. Install and configure LXD
911 2. Install juju
912 3. Install docker CE
913 4. Disable swap space
914 5. Install and initialize Kubernetes
915 as pre-requirements.
916 Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
917
918 else
919 [ -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
920 fi
garciadeblasfae5e972018-06-12 18:27:11 +0200921 track proceed
vijaynag8339ed22019-07-25 17:10:58 +0530922
garciadeblasd8bc5c32018-05-09 17:37:56 +0200923 echo "Installing lightweight build of OSM"
924 LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
925 trap 'rm -rf "${LWTEMPDIR}"' EXIT
garciadeblas0a311ee2020-05-04 06:49:50 +0000926 DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5}')
927 [ -z "$DEFAULT_IF" ] && DEFAULT_IF=$(route -n |awk '$1~/^0.0.0.0/ {print $8}')
garciadeblas8cd60772018-06-02 08:38:17 +0200928 [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200929 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
garciadeblas8cd60772018-06-02 08:38:17 +0200930 [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
garciadeblasd8bc5c32018-05-09 17:37:56 +0200931 DEFAULT_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
Mike Marchettib8420852018-09-13 13:45:06 -0400932
933 # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to
David Garcia79f4f532020-04-07 12:59:34 +0200934 if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ] && [ -z "$LXD_CLOUD_FILE" ]; then
David Garcia50d786e2020-03-30 14:49:40 +0200935 need_packages_lw="snapd"
garciadeblasd41f5482018-05-25 10:25:06 +0200936 echo -e "Checking required packages: $need_packages_lw"
937 dpkg -l $need_packages_lw &>/dev/null \
938 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
939 || sudo apt-get update \
940 || FATAL "failed to run apt-get update"
941 dpkg -l $need_packages_lw &>/dev/null \
942 || ! echo -e "Installing $need_packages_lw requires root privileges." \
943 || sudo apt-get install -y $need_packages_lw \
944 || FATAL "failed to install $need_packages_lw"
David Garcia50d786e2020-03-30 14:49:40 +0200945 install_lxd
garciadeblasd41f5482018-05-25 10:25:06 +0200946 fi
David Garcia79f4f532020-04-07 12:59:34 +0200947
garciadeblasfae5e972018-06-12 18:27:11 +0200948 track prereqok
Mike Marchettib8420852018-09-13 13:45:06 -0400949
vijaynag8339ed22019-07-25 17:10:58 +0530950 [ -z "$INSTALL_NOJUJU" ] && install_juju
garciadeblas183e5802018-12-13 18:20:54 +0100951 track juju_install
vijaynag8339ed22019-07-25 17:10:58 +0530952
lavadoe07b1642018-10-25 10:58:34 -0500953 if [ -z "$OSM_VCA_HOST" ]; then
David Garcia404ae122020-04-28 11:47:55 +0200954 if [ -z "$CONTROLLER_NAME" ]; then
955 if [ -n "$LXD_CLOUD_FILE" ]; then
956 [ -z "$LXD_CRED_FILE" ] && FATAL "The installer needs the LXD credential yaml if the LXD is external"
957 OSM_VCA_CLOUDNAME="lxd-cloud"
958 juju add-cloud $OSM_VCA_CLOUDNAME $LXD_CLOUD_FILE --force || juju update-cloud $OSM_VCA_CLOUDNAME --client -f $LXD_CLOUD_FILE
959 juju add-credential $OSM_VCA_CLOUDNAME -f $LXD_CRED_FILE || juju update-credential $OSM_VCA_CLOUDNAME lxd-cloud-creds -f $LXD_CRED_FILE
960 fi
961 juju_createcontroller
962 else
963 OSM_VCA_CLOUDNAME="lxd-cloud"
964 if [ -n "$LXD_CLOUD_FILE" ]; then
965 [ -z "$LXD_CRED_FILE" ] && FATAL "The installer needs the LXD credential yaml if the LXD is external"
966 juju add-cloud -c $CONTROLLER_NAME $OSM_VCA_CLOUDNAME $LXD_CLOUD_FILE --force || juju update-cloud lxd-cloud -c $CONTROLLER_NAME -f $LXD_CLOUD_FILE
967 juju add-credential -c $CONTROLLER_NAME $OSM_VCA_CLOUDNAME -f $LXD_CRED_FILE || juju update-credential lxd-cloud -c $CONTROLLER_NAME -f $LXD_CRED_FILE
968 else
969 mkdir -p ~/.osm
970 cat << EOF > ~/.osm/lxd-cloud.yaml
971clouds:
972 lxd-cloud:
973 type: lxd
974 auth-types: [certificate]
975 endpoint: "https://$DEFAULT_IP:8443"
976 config:
977 ssl-hostname-verification: false
978EOF
979 openssl req -nodes -new -x509 -keyout ~/.osm/client.key -out ~/.osm/client.crt -days 365 -subj "/C=FR/ST=Nice/L=Nice/O=ETSI/OU=OSM/CN=osm.etsi.org"
980 local server_cert=`cat /var/snap/lxd/common/lxd/server.crt | sed 's/^/ /'`
981 local client_cert=`cat ~/.osm/client.crt | sed 's/^/ /'`
982 local client_key=`cat ~/.osm/client.key | sed 's/^/ /'`
983 cat << EOF > ~/.osm/lxd-credentials.yaml
984credentials:
985 lxd-cloud:
986 lxd-cloud:
987 auth-type: certificate
988 server-cert: |
989$server_cert
990 client-cert: |
991$client_cert
992 client-key: |
993$client_key
994EOF
995 lxc config trust add local: ~/.osm/client.crt
996 juju add-cloud -c $CONTROLLER_NAME $OSM_VCA_CLOUDNAME ~/.osm/lxd-cloud.yaml --force || juju update-cloud lxd-cloud -c $CONTROLLER_NAME -f ~/.osm/lxd-cloud.yaml
997 juju add-credential -c $CONTROLLER_NAME $OSM_VCA_CLOUDNAME -f ~/.osm/lxd-credentials.yaml || juju update-credential lxd-cloud -c $CONTROLLER_NAME -f ~/.osm/lxd-credentials.yaml
998 fi
999 fi
1000 [ -z "$CONTROLLER_NAME" ] && OSM_VCA_HOST=`sg lxd -c "juju show-controller $OSM_STACK_NAME"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
1001 [ -n "$CONTROLLER_NAME" ] && OSM_VCA_HOST=`juju show-controller $CONTROLLER_NAME |grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
lavadoe07b1642018-10-25 10:58:34 -05001002 [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
Mike Marchettib8420852018-09-13 13:45:06 -04001003 fi
garciadeblas183e5802018-12-13 18:20:54 +01001004 track juju_controller
vijaynag8339ed22019-07-25 17:10:58 +05301005
lavadoe07b1642018-10-25 10:58:34 -05001006 if [ -z "$OSM_VCA_SECRET" ]; then
David Garcia404ae122020-04-28 11:47:55 +02001007 [ -z "$CONTROLLER_NAME" ] && OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME)
1008 [ -n "$CONTROLLER_NAME" ] && OSM_VCA_SECRET=$(parse_juju_password $CONTROLLER_NAME)
lavadoe07b1642018-10-25 10:58:34 -05001009 [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
Mike Marchettib8420852018-09-13 13:45:06 -04001010 fi
garciadeblasaa3ddf42019-04-04 19:04:32 +02001011 if [ -z "$OSM_VCA_PUBKEY" ]; then
1012 OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
1013 [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
1014 fi
garciadeblasfc5bb142019-12-10 10:49:12 +01001015 if [ -z "$OSM_VCA_CACERT" ]; then
David Garcia404ae122020-04-28 11:47:55 +02001016 [ -z "$CONTROLLER_NAME" ] && OSM_VCA_CACERT=$(juju controllers --format json | jq -r --arg controller $OSM_STACK_NAME '.controllers[$controller]["ca-cert"]' | base64 | tr -d \\n)
1017 [ -n "$CONTROLLER_NAME" ] && OSM_VCA_CACERT=$(juju controllers --format json | jq -r --arg controller $CONTROLLER_NAME '.controllers[$controller]["ca-cert"]' | base64 | tr -d \\n)
garciadeblasfc5bb142019-12-10 10:49:12 +01001018 [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
1019 fi
Adam Israel5ddc97f2019-09-03 18:11:12 -04001020 if [ -z "$OSM_VCA_APIPROXY" ]; then
1021 OSM_VCA_APIPROXY=$DEFAULT_IP
1022 [ -z "$OSM_VCA_APIPROXY" ] && FATAL "Cannot obtain juju api proxy"
1023 fi
1024 juju_createproxy
garciadeblasfc5bb142019-12-10 10:49:12 +01001025 track juju
Adam Israel5ddc97f2019-09-03 18:11:12 -04001026
Benjamin Diazba2cca92018-11-08 21:07:15 -03001027 if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
1028 OSM_DATABASE_COMMONKEY=$(generate_secret)
1029 [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret"
1030 fi
vijaynag8339ed22019-07-25 17:10:58 +05301031
garciadeblasa3e26612018-05-30 17:58:55 +02001032 [ -n "$INSTALL_NODOCKER" ] || install_docker_ce
garciadeblas6c66abf2018-05-16 14:46:19 +02001033 track docker_ce
vijaynag8339ed22019-07-25 17:10:58 +05301034
1035 #Installs Kubernetes and deploys osm services
1036 if [ -n "$KUBERNETES" ]; then
1037 install_kube
1038 track install_k8s
1039 init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
1040 kube_config_dir
1041 track init_k8s
1042 else
1043 #install_docker_compose
1044 [ -n "$INSTALL_NODOCKER" ] || init_docker_swarm
1045 track docker_swarm
1046 fi
1047
Mike Marchettib8420852018-09-13 13:45:06 -04001048 [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
garciadeblas6c66abf2018-05-16 14:46:19 +02001049 track docker_build
vijaynag8339ed22019-07-25 17:10:58 +05301050
garciadeblasd8bc5c32018-05-09 17:37:56 +02001051 generate_docker_env_files
Mike Marchettib8420852018-09-13 13:45:06 -04001052
vijaynag8339ed22019-07-25 17:10:58 +05301053 if [ -n "$KUBERNETES" ]; then
garciadeblasb5a630f2020-03-05 18:32:16 +00001054 if [ -n "$INSTALL_K8S_MONITOR" ]; then
romeromonsere366b1a2019-11-19 19:49:26 +01001055 # uninstall OSM MONITORING
1056 uninstall_k8s_monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +01001057 track uninstall_k8s_monitoring
romeromonsere366b1a2019-11-19 19:49:26 +01001058 fi
vijaynag8339ed22019-07-25 17:10:58 +05301059 #remove old namespace
1060 remove_k8s_namespace $OSM_STACK_NAME
1061 deploy_cni_provider
1062 kube_secrets
garciadeblasa7e128a2019-12-18 11:10:45 +01001063 [ ! $OSM_DOCKER_TAG == "7" ] && parse_yaml $OSM_DOCKER_TAG
vijaynag8339ed22019-07-25 17:10:58 +05301064 namespace_vol
1065 deploy_osm_services
magnussonl1bbe9452020-02-25 13:43:17 +01001066 if [ -n "$INSTALL_PLA"]; then
1067 # optional PLA install
1068 deploy_osm_pla_service
1069 fi
vijaynag8339ed22019-07-25 17:10:58 +05301070 track deploy_osm_services_k8s
garciadeblasb5a630f2020-03-05 18:32:16 +00001071 if [ -n "$INSTALL_K8S_MONITOR" ]; then
garciadeblasfc5bb142019-12-10 10:49:12 +01001072 # install OSM MONITORING
1073 install_k8s_monitoring
1074 track install_k8s_monitoring
1075 fi
vijaynag8339ed22019-07-25 17:10:58 +05301076 else
1077 # remove old stack
1078 remove_stack $OSM_STACK_NAME
1079 create_docker_network
1080 deploy_lightweight
1081 generate_osmclient_script
1082 track docker_deploy
lavado6ad812e2019-11-29 10:58:58 -05001083 install_prometheus_nodeexporter
garciadeblasfc5bb142019-12-10 10:49:12 +01001084 track nodeexporter
vijaynag8339ed22019-07-25 17:10:58 +05301085 [ -n "$INSTALL_VIMEMU" ] && install_vimemu && track vimemu
1086 [ -n "$INSTALL_ELK" ] && deploy_elk && track elk
vijaynag8339ed22019-07-25 17:10:58 +05301087 fi
1088
Mike Marchettib8420852018-09-13 13:45:06 -04001089 [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
garciadeblas6c66abf2018-05-16 14:46:19 +02001090 track osmclient
vijaynag8339ed22019-07-25 17:10:58 +05301091
garciadeblas44c02192019-12-09 01:36:57 +01001092 wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001093 track end
garciadeblasd8bc5c32018-05-09 17:37:56 +02001094 return 0
1095}
1096
1097function install_vimemu() {
peusterm76353e42018-05-08 13:56:05 +02001098 echo "\nInstalling vim-emu"
1099 EMUTEMPDIR="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX")"
1100 trap 'rm -rf "${EMUTEMPDIR}"' EXIT
peusterma3a7d142020-02-07 10:12:29 +01001101 # install prerequisites (OVS is a must for the emulator to work)
1102 sudo apt-get install openvswitch-switch
garciadeblasd8bc5c32018-05-09 17:37:56 +02001103 # clone vim-emu repository (attention: branch is currently master only)
1104 echo "Cloning vim-emu repository ..."
peusterm76353e42018-05-08 13:56:05 +02001105 git clone https://osm.etsi.org/gerrit/osm/vim-emu.git $EMUTEMPDIR
garciadeblasd8bc5c32018-05-09 17:37:56 +02001106 # build vim-emu docker
1107 echo "Building vim-emu Docker container..."
Mike Marchettib8420852018-09-13 13:45:06 -04001108
1109 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 +02001110 # start vim-emu container as daemon
1111 echo "Starting vim-emu Docker container 'vim-emu' ..."
peusterm76353e42018-05-08 13:56:05 +02001112 if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
1113 # in lightweight mode, the emulator needs to be attached to netOSM
Mike Marchettib8420852018-09-13 13:45:06 -04001114 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 +02001115 else
1116 # classic build mode
Mike Marchettib8420852018-09-13 13:45:06 -04001117 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 +02001118 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001119 echo "Waiting for 'vim-emu' container to start ..."
1120 sleep 5
Mike Marchettib8420852018-09-13 13:45:06 -04001121 export VIMEMU_HOSTNAME=$(sg docker -c "docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001122 echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
peusterm76353e42018-05-08 13:56:05 +02001123 # print vim-emu connection info
1124 echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001125 echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
peusterm76353e42018-05-08 13:56:05 +02001126 echo -e "To add the emulated VIM to OSM you should do:"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001127 echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
1128}
1129
romeromonsere366b1a2019-11-19 19:49:26 +01001130function install_k8s_monitoring() {
1131 # install OSM monitoring
garciadeblasfc5bb142019-12-10 10:49:12 +01001132 $WORKDIR_SUDO chmod +x $OSM_DEVOPS/installers/k8s/*.sh
romeromonsere366b1a2019-11-19 19:49:26 +01001133 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh
1134}
1135
1136function uninstall_k8s_monitoring() {
K Sai Kiran5e151f02019-12-11 14:50:09 +05301137 # uninstall OSM monitoring
romeromonsere366b1a2019-11-19 19:49:26 +01001138 $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/uninstall_osm_k8s_monitoring.sh
1139}
1140
garciadeblasd8bc5c32018-05-09 17:37:56 +02001141function dump_vars(){
1142 echo "DEVELOP=$DEVELOP"
1143 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
1144 echo "UNINSTALL=$UNINSTALL"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001145 echo "UPDATE=$UPDATE"
1146 echo "RECONFIGURE=$RECONFIGURE"
1147 echo "TEST_INSTALLER=$TEST_INSTALLER"
1148 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
magnussonl1bbe9452020-02-25 13:43:17 +01001149 echo "INSTALL_PLA=$INSTALL_PLA"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001150 echo "INSTALL_LXD=$INSTALL_LXD"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001151 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
garciadeblas6c66abf2018-05-16 14:46:19 +02001152 echo "INSTALL_ONLY=$INSTALL_ONLY"
1153 echo "INSTALL_ELK=$INSTALL_ELK"
lavado6ad812e2019-11-29 10:58:58 -05001154 #echo "INSTALL_PERFMON=$INSTALL_PERFMON"
garciadeblasb5a630f2020-03-05 18:32:16 +00001155 echo "INSTALL_K8S_MONITOR=$INSTALL_K8S_MONITOR"
garciadeblas0e596bc2018-05-28 16:04:42 +02001156 echo "TO_REBUILD=$TO_REBUILD"
garciadeblasd41f5482018-05-25 10:25:06 +02001157 echo "INSTALL_NOLXD=$INSTALL_NOLXD"
garciadeblasa3e26612018-05-30 17:58:55 +02001158 echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
garciadeblas0d45bc82018-11-19 14:25:13 +01001159 echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001160 echo "RELEASE=$RELEASE"
1161 echo "REPOSITORY=$REPOSITORY"
1162 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
1163 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001164 echo "OSM_DEVOPS=$OSM_DEVOPS"
1165 echo "OSM_VCA_HOST=$OSM_VCA_HOST"
1166 echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
garciadeblasaa3ddf42019-04-04 19:04:32 +02001167 echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
garciadeblas0d45bc82018-11-19 14:25:13 +01001168 echo "NO_HOST_PORTS=$NO_HOST_PORTS"
1169 echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
1170 echo "WORKDIR_SUDO=$WORKDIR_SUDO"
1171 echo "OSM_WORK_DIR=$OSM_STACK_NAME"
1172 echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
1173 echo "DOCKER_USER=$DOCKER_USER"
1174 echo "OSM_STACK_NAME=$OSM_STACK_NAME"
1175 echo "PULL_IMAGES=$PULL_IMAGES"
vijaynag8339ed22019-07-25 17:10:58 +05301176 echo "KUBERNETES=$KUBERNETES"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001177 echo "SHOWOPTS=$SHOWOPTS"
1178 echo "Install from specific refspec (-b): $COMMIT_ID"
1179}
1180
1181function track(){
1182 ctime=`date +%s`
1183 duration=$((ctime - SESSION_ID))
1184 url="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
1185 #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
1186 event_name="bin"
garciadeblas6c66abf2018-05-16 14:46:19 +02001187 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name="binsrc"
1188 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name="lxd"
1189 [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name="lw"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001190 event_name="${event_name}_$1"
1191 url="${url}&event=${event_name}&ce_duration=${duration}"
1192 wget -q -O /dev/null $url
1193}
1194
1195UNINSTALL=""
1196DEVELOP=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001197UPDATE=""
1198RECONFIGURE=""
1199TEST_INSTALLER=""
1200INSTALL_LXD=""
1201SHOWOPTS=""
1202COMMIT_ID=""
1203ASSUME_YES=""
1204INSTALL_FROM_SOURCE=""
garciadeblasfc5bb142019-12-10 10:49:12 +01001205RELEASE="ReleaseSEVEN"
Mike Marchettib8420852018-09-13 13:45:06 -04001206REPOSITORY="stable"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001207INSTALL_VIMEMU=""
magnussonl1bbe9452020-02-25 13:43:17 +01001208INSTALL_PLA=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001209LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
1210LXD_REPOSITORY_PATH=""
1211INSTALL_LIGHTWEIGHT="y"
garciadeblas6c66abf2018-05-16 14:46:19 +02001212INSTALL_ONLY=""
1213INSTALL_ELK=""
garciadeblas0e596bc2018-05-28 16:04:42 +02001214TO_REBUILD=""
garciadeblasd41f5482018-05-25 10:25:06 +02001215INSTALL_NOLXD=""
garciadeblasa3e26612018-05-30 17:58:55 +02001216INSTALL_NODOCKER=""
Mike Marchettib8420852018-09-13 13:45:06 -04001217INSTALL_NOJUJU=""
vijaynag8339ed22019-07-25 17:10:58 +05301218KUBERNETES=""
garciadeblasb5a630f2020-03-05 18:32:16 +00001219INSTALL_K8S_MONITOR=""
garciadeblas0d45bc82018-11-19 14:25:13 +01001220INSTALL_NOHOSTCLIENT=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001221SESSION_ID=`date +%s`
1222OSM_DEVOPS=
lavadoe07b1642018-10-25 10:58:34 -05001223OSM_VCA_HOST=
1224OSM_VCA_SECRET=
garciadeblasaa3ddf42019-04-04 19:04:32 +02001225OSM_VCA_PUBKEY=
David Garcia79f4f532020-04-07 12:59:34 +02001226OSM_VCA_CLOUDNAME="localhost"
Mike Marchettib8420852018-09-13 13:45:06 -04001227OSM_STACK_NAME=osm
1228NO_HOST_PORTS=""
1229DOCKER_NOBUILD=""
1230REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
garciadeblas870e60a2018-11-21 16:44:21 +01001231REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
Mike Marchettib8420852018-09-13 13:45:06 -04001232WORKDIR_SUDO=sudo
1233OSM_WORK_DIR="/etc/osm"
garciadeblas526f0fb2018-11-23 14:47:40 +01001234OSM_DOCKER_WORK_DIR="/etc/osm/docker"
vijaynag8339ed22019-07-25 17:10:58 +05301235OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
1236OSM_HOST_VOL="/var/lib/osm"
1237OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
Mike Marchetti13d76c82018-09-19 15:00:36 -04001238OSM_DOCKER_TAG=latest
garciadeblas0d45bc82018-11-19 14:25:13 +01001239DOCKER_USER=opensourcemano
1240PULL_IMAGES="y"
Benjamin Diazaa0af712018-10-04 14:02:34 -03001241KAFKA_TAG=2.11-1.0.2
lavado60216242018-10-10 23:44:28 +02001242PROMETHEUS_TAG=v2.4.3
lavado6ad812e2019-11-29 10:58:58 -05001243GRAFANA_TAG=latest
1244PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
1245PROMETHEUS_CADVISOR_TAG=latest
lavado9a8df7c2018-10-24 09:35:34 -05001246KEYSTONEDB_TAG=10
Benjamin Diazba2cca92018-11-08 21:07:15 -03001247OSM_DATABASE_COMMONKEY=
lavado53eb8f52018-11-16 12:58:23 -05001248ELASTIC_VERSION=6.4.2
lavado4e8662c2018-11-28 11:28:14 -05001249ELASTIC_CURATOR_VERSION=5.5.4
vijaynag8339ed22019-07-25 17:10:58 +05301250POD_NETWORK_CIDR=10.244.0.0/16
1251K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
1252RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
garciadeblasd8bc5c32018-05-09 17:37:56 +02001253
David Garcia404ae122020-04-28 11:47:55 +02001254while getopts ":b:r:c:k:u:R:D:o:m:H:S:s:w:t:U:P:A:l:L:K:-: hy" o; do
garciadeblasd8bc5c32018-05-09 17:37:56 +02001255 case "${o}" in
garciadeblasd8bc5c32018-05-09 17:37:56 +02001256 b)
1257 COMMIT_ID=${OPTARG}
garciadeblas0d45bc82018-11-19 14:25:13 +01001258 PULL_IMAGES=""
garciadeblasd8bc5c32018-05-09 17:37:56 +02001259 ;;
1260 r)
Mike Marchettib8420852018-09-13 13:45:06 -04001261 REPOSITORY="${OPTARG}"
1262 REPO_ARGS+=(-r "$REPOSITORY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001263 ;;
vijaynag8339ed22019-07-25 17:10:58 +05301264 c)
1265 [ "${OPTARG}" == "swarm" ] && continue
1266 [ "${OPTARG}" == "k8s" ] && KUBERNETES="y" && continue
1267 echo -e "Invalid argument for -i : ' $OPTARG'\n" >&2
1268 usage && exit 1
1269 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001270 k)
Mike Marchettib8420852018-09-13 13:45:06 -04001271 REPOSITORY_KEY="${OPTARG}"
1272 REPO_ARGS+=(-k "$REPOSITORY_KEY")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001273 ;;
1274 u)
Mike Marchettib8420852018-09-13 13:45:06 -04001275 REPOSITORY_BASE="${OPTARG}"
1276 REPO_ARGS+=(-u "$REPOSITORY_BASE")
garciadeblasd8bc5c32018-05-09 17:37:56 +02001277 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001278 R)
1279 RELEASE="${OPTARG}"
1280 REPO_ARGS+=(-R "$RELEASE")
garciadeblas0d45bc82018-11-19 14:25:13 +01001281 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001282 D)
1283 OSM_DEVOPS="${OPTARG}"
1284 ;;
garciadeblas6c66abf2018-05-16 14:46:19 +02001285 o)
1286 INSTALL_ONLY="y"
1287 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
1288 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblasb5a630f2020-03-05 18:32:16 +00001289 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001290 ;;
garciadeblas0e596bc2018-05-28 16:04:42 +02001291 m)
garciadeblas0e596bc2018-05-28 16:04:42 +02001292 [ "${OPTARG}" == "LW-UI" ] && TO_REBUILD="$TO_REBUILD LW-UI" && continue
govindappa79e51b92019-05-22 12:15:21 +05301293 [ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
1294 [ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
1295 [ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001296 [ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
govindappa79e51b92019-05-22 12:15:21 +05301297 [ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001298 [ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
1299 [ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
govindappa79e51b92019-05-22 12:15:21 +05301300 [ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
garciadeblasfc5bb142019-12-10 10:49:12 +01001301 [ "${OPTARG}" == "PROMETHEUS-CADVISOR" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS-CADVISOR" && continue
govindappa79e51b92019-05-22 12:15:21 +05301302 [ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
lavado6ad812e2019-11-29 10:58:58 -05001303 [ "${OPTARG}" == "GRAFANA" ] && TO_REBUILD="$TO_REBUILD GRAFANA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001304 [ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
magnussonl1bbe9452020-02-25 13:43:17 +01001305 [ "${OPTARG}" == "PLA" ] && TO_REBUILD="$TO_REBUILD PLA" && continue
garciadeblas0e596bc2018-05-28 16:04:42 +02001306 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001307 H)
1308 OSM_VCA_HOST="${OPTARG}"
1309 ;;
1310 S)
1311 OSM_VCA_SECRET="${OPTARG}"
1312 ;;
1313 s)
1314 OSM_STACK_NAME="${OPTARG}" && [ -n "$KUBERNETES" ] && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0
1315 ;;
1316 w)
1317 # when specifying workdir, do not use sudo for access
1318 WORKDIR_SUDO=
1319 OSM_WORK_DIR="${OPTARG}"
1320 ;;
1321 t)
1322 OSM_DOCKER_TAG="${OPTARG}"
1323 ;;
1324 U)
1325 DOCKER_USER="${OPTARG}"
1326 ;;
1327 P)
1328 OSM_VCA_PUBKEY=$(cat ${OPTARG})
1329 ;;
1330 A)
1331 OSM_VCA_APIPROXY="${OPTARG}"
1332 ;;
David Garcia79f4f532020-04-07 12:59:34 +02001333 l)
1334 LXD_CLOUD_FILE="${OPTARG}"
1335 ;;
1336 L)
1337 LXD_CRED_FILE="${OPTARG}"
1338 ;;
David Garcia404ae122020-04-28 11:47:55 +02001339 K)
1340 CONTROLLER_NAME="${OPTARG}"
1341 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001342 -)
1343 [ "${OPTARG}" == "help" ] && usage && exit 0
garciadeblas0d45bc82018-11-19 14:25:13 +01001344 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001345 [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
1346 [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001347 [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
1348 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
1349 [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
1350 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
garciadeblasd41f5482018-05-25 10:25:06 +02001351 [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
garciadeblasa3e26612018-05-30 17:58:55 +02001352 [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001353 [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001354 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
garciadeblas6c66abf2018-05-16 14:46:19 +02001355 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001356 [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
Mike Marchettib8420852018-09-13 13:45:06 -04001357 [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
1358 [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
1359 [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
1360 [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
garciadeblas0d45bc82018-11-19 14:25:13 +01001361 [ "${OPTARG}" == "pullimages" ] && continue
garciadeblasb5a630f2020-03-05 18:32:16 +00001362 [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001363 [ "${OPTARG}" == "charmed" ] && CHARMED="y" && continue
1364 [ "${OPTARG}" == "bundle" ] && continue
1365 [ "${OPTARG}" == "kubeconfig" ] && continue
1366 [ "${OPTARG}" == "lxdendpoint" ] && continue
1367 [ "${OPTARG}" == "lxdcert" ] && continue
1368 [ "${OPTARG}" == "microstack" ] && continue
David Garcia69388c22020-05-07 12:14:19 +02001369 [ "${OPTARG}" == "tag" ] && continue
magnussonl1bbe9452020-02-25 13:43:17 +01001370 [ "${OPTARG}" == "pla" ] && INSTALL_PLA="y" && continue
garciadeblasd8bc5c32018-05-09 17:37:56 +02001371 echo -e "Invalid option: '--$OPTARG'\n" >&2
1372 usage && exit 1
1373 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001374 :)
1375 echo "Option -$OPTARG requires an argument" >&2
1376 usage && exit 1
1377 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001378 \?)
1379 echo -e "Invalid option: '-$OPTARG'\n" >&2
1380 usage && exit 1
1381 ;;
garciadeblas25e87d22020-01-31 14:27:29 +01001382 h)
1383 usage && exit 0
1384 ;;
garciadeblasd8bc5c32018-05-09 17:37:56 +02001385 y)
1386 ASSUME_YES="y"
1387 ;;
1388 *)
1389 usage && exit 1
1390 ;;
1391 esac
1392done
1393
garciadeblas0e596bc2018-05-28 16:04:42 +02001394[ -n "$TO_REBUILD" ] && [ "$TO_REBUILD" != " NONE" ] && echo $TO_REBUILD | grep -q NONE && FATAL "Incompatible option: -m NONE cannot be used with other -m options"
magnussonl1bbe9452020-02-25 13:43:17 +01001395[ -n "$TO_REBUILD" ] && [ "$TO_REBUILD" == " PLA" ] && [ -z "$INSTALL_PLA" ] && FATAL "Incompatible option: -m PLA cannot be used without --pla option"
garciadeblas6c66abf2018-05-16 14:46:19 +02001396
garciadeblasd8bc5c32018-05-09 17:37:56 +02001397if [ -n "$SHOWOPTS" ]; then
1398 dump_vars
1399 exit 0
1400fi
1401
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001402if [ -n "$CHARMED" ]; then
1403 if [ -n "$UNINSTALL" ]; then
1404 /usr/share/osm-devops/installers/charmed_uninstall.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D /usr/share/osm-devops -t $DOCKER_TAG "$@"
1405 else
1406 /usr/share/osm-devops/installers/charmed_install.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D /usr/share/osm-devops -t $DOCKER_TAG "$@"
1407 fi
1408
1409 echo "Your installation is now complete, follow these steps for configuring the osmclient:"
1410 echo
1411 echo "1. Get the NBI IP with the following command:"
1412 echo
1413 echo "juju status --format yaml | yq r - applications.nbi-k8s.address"
1414 echo
1415 echo "2. Create the OSM_HOSTNAME environment variable with the NBI IP"
1416 echo
1417 echo "export OSM_HOSTNAME=<NBI-IP>"
1418 echo
1419 echo "3. Add the previous command to your .bashrc for other Shell sessions"
1420 echo
1421 echo "export OSM_HOSTNAME=<previous-IP> >> ~/.bashrc"
1422 echo
1423 echo "DONE"
1424
1425 exit 0
1426fi
1427
garciadeblasd8bc5c32018-05-09 17:37:56 +02001428# if develop, we force master
1429[ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
1430
David Garcia404ae122020-04-28 11:47:55 +02001431need_packages="git wget curl tar"
garciadeblasd8bc5c32018-05-09 17:37:56 +02001432echo -e "Checking required packages: $need_packages"
1433dpkg -l $need_packages &>/dev/null \
1434 || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
1435 || sudo apt-get update \
1436 || FATAL "failed to run apt-get update"
1437dpkg -l $need_packages &>/dev/null \
1438 || ! echo -e "Installing $need_packages requires root privileges." \
1439 || sudo apt-get install -y $need_packages \
1440 || FATAL "failed to install $need_packages"
David Garcia404ae122020-04-28 11:47:55 +02001441sudo snap install jq
garciadeblasd8bc5c32018-05-09 17:37:56 +02001442if [ -z "$OSM_DEVOPS" ]; then
Michael Marchettiee374142018-08-02 22:47:16 +02001443 if [ -n "$TEST_INSTALLER" ]; then
1444 echo -e "\nUsing local devops repo for OSM installation"
1445 OSM_DEVOPS="$(dirname $(realpath $(dirname $0)))"
1446 else
1447 echo -e "\nCreating temporary dir for OSM installation"
1448 OSM_DEVOPS="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
1449 trap 'rm -rf "$OSM_DEVOPS"' EXIT
garciadeblasd8bc5c32018-05-09 17:37:56 +02001450
Michael Marchettiee374142018-08-02 22:47:16 +02001451 git clone https://osm.etsi.org/gerrit/osm/devops.git $OSM_DEVOPS
garciadeblasd8bc5c32018-05-09 17:37:56 +02001452
Michael Marchettiee374142018-08-02 22:47:16 +02001453 if [ -z "$COMMIT_ID" ]; then
1454 echo -e "\nGuessing the current stable release"
1455 LATEST_STABLE_DEVOPS=`git -C $OSM_DEVOPS tag -l v[0-9].* | sort -V | tail -n1`
1456 [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
1457
1458 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
1459 COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
1460 else
1461 echo -e "\nDEVOPS Using commit $COMMIT_ID"
1462 fi
1463 git -C $OSM_DEVOPS checkout $COMMIT_ID
garciadeblasd8bc5c32018-05-09 17:37:56 +02001464 fi
garciadeblasd8bc5c32018-05-09 17:37:56 +02001465fi
1466
garciadeblas3c25fab2019-11-18 17:24:43 +01001467. $OSM_DEVOPS/common/all_funcs
garciadeblasd8bc5c32018-05-09 17:37:56 +02001468
1469[ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight && echo -e "\nDONE" && exit 0
garciadeblas6c66abf2018-05-16 14:46:19 +02001470[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
lavado6ad812e2019-11-29 10:58:58 -05001471#[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
garciadeblas6c66abf2018-05-16 14:46:19 +02001472[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
garciadeblasb5a630f2020-03-05 18:32:16 +00001473[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_K8S_MONITOR" ] && install_k8s_monitoring
garciadeblas6c66abf2018-05-16 14:46:19 +02001474[ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
garciadeblasd8bc5c32018-05-09 17:37:56 +02001475
1476#Installation starts here
garciadeblas44c02192019-12-09 01:36:57 +01001477wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README.txt &> /dev/null
garciadeblas6c66abf2018-05-16 14:46:19 +02001478track start
1479
garciadeblasd8bc5c32018-05-09 17:37:56 +02001480[ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight && echo -e "\nDONE" && exit 0
1481echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
1482if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
1483 ! ask_user "The installation will take about 75-90 minutes. Continue (Y/n)? " y && echo "Cancelled!" && exit 1
1484fi
1485
1486echo -e "Checking required packages: lxd"
1487lxd --version &>/dev/null || FATAL "lxd not present, exiting."
1488[ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
1489
garciadeblasd8bc5c32018-05-09 17:37:56 +02001490# use local devops for containers
1491export OSM_USE_LOCAL_DEVOPS=true
garciadeblasd8bc5c32018-05-09 17:37:56 +02001492
1493#Install osmclient
garciadeblasd8bc5c32018-05-09 17:37:56 +02001494
1495#Install vim-emu (optional)
peusterm76353e42018-05-08 13:56:05 +02001496[ -n "$INSTALL_VIMEMU" ] && install_docker_ce && install_vimemu
garciadeblasd8bc5c32018-05-09 17:37:56 +02001497
garciadeblas44c02192019-12-09 01:36:57 +01001498wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/null
garciadeblasd8bc5c32018-05-09 17:37:56 +02001499track end
1500echo -e "\nDONE"
Dominik Fleischmann5e4a7512020-03-06 14:05:06 +01001501