+#deploys osm pods and services
+function deploy_osm_services() {
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+ kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+#deploy charmed services
+function deploy_charmed_services() {
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+ juju add-model $OSM_STACK_NAME $OSM_VCA_K8S_CLOUDNAME
+ juju deploy ch:mongodb-k8s -m $OSM_STACK_NAME
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function deploy_osm_pla_service() {
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+ # corresponding to namespace_vol
+ sudo sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_DOCKER_WORK_DIR/osm_pla/pla.yaml
+ # corresponding to deploy_osm_services
+ kubectl apply -n $OSM_STACK_NAME -f $OSM_DOCKER_WORK_DIR/osm_pla
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function parse_yaml() {
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+ TAG=$1
+ shift
+ services=$@
+ for module in $services; do
+ if [ "$module" == "pla" ]; then
+ if [ -n "$INSTALL_PLA" ]; then
+ echo "Updating K8s manifest file from opensourcemano\/${module}:.* to ${DOCKER_REGISTRY_URL}${DOCKER_USER}\/${module}:${TAG}"
+ sudo sed -i "s#opensourcemano/pla:.*#${DOCKER_REGISTRY_URL}${DOCKER_USER}/pla:${TAG}#g" ${OSM_DOCKER_WORK_DIR}/osm_pla/pla.yaml
+ fi
+ else
+ echo "Updating K8s manifest file from opensourcemano\/${module}:.* to ${DOCKER_REGISTRY_URL}${DOCKER_USER}\/${module}:${TAG}"
+ sudo sed -i "s#opensourcemano/${module}:.*#${DOCKER_REGISTRY_URL}${DOCKER_USER}/${module}:${TAG}#g" ${OSM_K8S_WORK_DIR}/${module}.yaml
+ fi
+ done
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function update_manifest_files() {
+ osm_services="nbi lcm ro pol mon ng-ui keystone pla prometheus"
+ list_of_services=""
+ for module in $osm_services; do
+ module_upper="${module^^}"
+ if ! echo $TO_REBUILD | grep -q $module_upper ; then
+ list_of_services="$list_of_services $module"
+ fi
+ done
+ if [ ! "$OSM_DOCKER_TAG" == "11" ]; then
+ parse_yaml $OSM_DOCKER_TAG $list_of_services
+ fi
+ if [ -n "$MODULE_DOCKER_TAG" ]; then
+ parse_yaml $MODULE_DOCKER_TAG $list_of_services_to_rebuild
+ fi
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function namespace_vol() {
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+ osm_services="nbi lcm ro pol mon kafka mysql prometheus"
+ for osm in $osm_services; do
+ sudo sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml
+ done
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function add_local_k8scluster() {
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+ /usr/bin/osm --all-projects vim-create \
+ --name _system-osm-vim \
+ --account_type dummy \
+ --auth_url http://dummy \
+ --user osm --password osm --tenant osm \
+ --description "dummy" \
+ --config '{management_network_name: mgmt}'
+ /usr/bin/osm --all-projects k8scluster-add \
+ --creds ${HOME}/.kube/config \
+ --vim _system-osm-vim \
+ --k8s-nets '{"net1": null}' \
+ --version '1.15' \
+ --description "OSM Internal Cluster" \
+ _system-osm-k8s
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function configure_apt_proxy() {
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+ OSM_APT_PROXY=$1
+ OSM_APT_PROXY_FILE="/etc/apt/apt.conf.d/osm-apt"
+ echo "Configuring apt proxy in file ${OSM_APT_PROXY_FILE}"
+ if [ ! -f ${OSM_APT_PROXY_FILE} ]; then
+ sudo bash -c "cat <<EOF > ${OSM_APT_PROXY}
+Acquire::http { Proxy \"${OSM_APT_PROXY}\"; }
+EOF"
+ else
+ sudo sed -i "s|Proxy.*|Proxy \"${OSM_APT_PROXY}\"; }|" ${OSM_APT_PROXY_FILE}
+ fi
+ sudo apt-get update || FATAL "Configured apt proxy, but couldn't run 'apt-get update'. Check ${OSM_APT_PROXY_FILE}"
+ track prereq apt_proxy_configured_ok
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function install_osm() {
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+
+ trap ctrl_c INT
+ track start release $RELEASE none none docker_tag $OSM_DOCKER_TAG none none installation_type $OSM_INSTALLATION_TYPE none none
+
+ track checks checkingroot_ok
+ [ "$USER" == "root" ] && FATAL "You are running the installer as root. The installer is prepared to be executed as a normal user with sudo privileges."
+ track checks noroot_ok
+
+ [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
+ 1. Install and configure LXD
+ 2. Install juju
+ 3. Install docker CE
+ 4. Disable swap space
+ 5. Install and initialize Kubernetes
+ as pre-requirements.
+ Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
+ track checks proceed_ok
+
+ echo "Installing OSM"
+
+ echo "Determining IP address of the interface with the default route"
+ DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5; exit}')
+ [ -z "$DEFAULT_IF" ] && DEFAULT_IF=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}')
+ [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
+ DEFAULT_IP=`ip -o -4 a s ${DEFAULT_IF} |awk '{split($4,a,"/"); print a[1]; exit}'`
+ [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
+
+ # configure apt proxy
+ [ -n "$APT_PROXY_URL" ] && configure_apt_proxy $APT_PROXY_URL
+
+ # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to
+ if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ] && [ -z "$LXD_CLOUD_FILE" ]; then
+ install_lxd
+ fi
+
+ track prereq prereqok_ok
+
+ if [ ! -n "$INSTALL_NODOCKER" ]; then
+ DOCKER_CE_OPTS="-D ${OSM_DEVOPS} ${DEBUG_INSTALL}"
+ [ -n "${DOCKER_PROXY_URL}" ] && DOCKER_CE_OPTS="${DOCKER_CE_OPTS} -p ${DOCKER_PROXY_URL}"
+ $OSM_DEVOPS/installers/install_docker_ce.sh ${DOCKER_CE_OPTS} || FATAL_TRACK docker_ce "install_docker_ce.sh failed"
+ fi
+
+ track docker_ce docker_ce_ok
+
+ echo "Creating folders for installation"
+ [ ! -d "$OSM_DOCKER_WORK_DIR" ] && sudo mkdir -p $OSM_DOCKER_WORK_DIR
+ [ ! -d "$OSM_DOCKER_WORK_DIR/osm_pla" -a -n "$INSTALL_PLA" ] && sudo mkdir -p $OSM_DOCKER_WORK_DIR/osm_pla
+ sudo cp -b $OSM_DEVOPS/installers/docker/cluster-config.yaml $OSM_DOCKER_WORK_DIR/cluster-config.yaml
+
+ $OSM_DEVOPS/installers/install_kubeadm_cluster.sh -i ${DEFAULT_IP} -d ${OSM_DOCKER_WORK_DIR} -D ${OSM_DEVOPS} ${DEBUG_INSTALL} || \
+ FATAL_TRACK k8scluster "install_kubeadm_cluster.sh failed"
+ track k8scluster k8scluster_ok
+
+ JUJU_OPTS="-D ${OSM_DEVOPS} -s ${OSM_STACK_NAME} -i ${DEFAULT_IP} ${DEBUG_INSTALL} ${INSTALL_NOJUJU} ${INSTALL_CACHELXDIMAGES}"
+ [ -n "${OSM_VCA_HOST}" ] && JUJU_OPTS="$JUJU_OPTS -H ${OSM_VCA_HOST}"
+ [ -n "${LXD_CLOUD_FILE}" ] && JUJU_OPTS="$JUJU_OPTS -l ${LXD_CLOUD_FILE}"
+ [ -n "${LXD_CRED_FILE}" ] && JUJU_OPTS="$JUJU_OPTS -L ${LXD_CRED_FILE}"
+ [ -n "${CONTROLLER_NAME}" ] && JUJU_OPTS="$JUJU_OPTS -K ${CONTROLLER_NAME}"
+ $OSM_DEVOPS/installers/install_juju.sh ${JUJU_OPTS} || FATAL_TRACK juju "install_juju.sh failed"
+ set_vca_variables
+ track juju juju_ok
+
+ if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
+ OSM_DATABASE_COMMONKEY=$(generate_secret)
+ [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret"
+ fi
+
+ # Deploy OSM services
+ [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
+ track docker_images docker_images_ok
+
+ generate_k8s_manifest_files
+ track osm_files manifest_files_ok