Bug 1530: Limit IP addresses
[osm/devops.git] / installers / full_install_osm.sh
index e5b135e..7594984 100755 (executable)
@@ -139,6 +139,20 @@ function generate_secret() {
     [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
+function check_packages() {
+    NEEDED_PACKAGES="$1"
+    echo -e "Checking required packages: ${NEEDED_PACKAGES}"
+    for PACKAGE in ${NEEDED_PACKAGES} ; do
+        dpkg -L ${PACKAGE} &>/dev/null
+        if [ $? -ne 0 ]; then
+            echo -e "Package ${PACKAGE} is not installed. Updating apt"
+            sudo apt-get update
+            sudo apt-get install -y ${PACKAGE} || FATAL "failed to install ${PACKAGE}"
+        fi
+    done
+    echo -e "Required packages are present: ${NEEDED_PACKAGES}"
+}
+
 function install_lxd() {
     [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     # Apply sysctl production values for optimal performance
@@ -549,8 +563,7 @@ function parse_yaml() {
 }
 
 function update_manifest_files() {
-    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
-    osm_services="nbi lcm ro pol mon ng-ui keystone pla"
+    osm_services="nbi lcm ro pol mon ng-ui keystone pla prometheus"
     list_of_services=""
     for module in $osm_services; do
         module_upper="${module^^}"
@@ -608,15 +621,15 @@ EOF"
         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 apt_proxy_configured
+    track prereq apt_proxy_configured_ok
     [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
 function install_osm() {
     [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
-    track checkingroot
+    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 noroot
+    track checks noroot_ok
 
     [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following
     1. Install and configure LXD
@@ -626,7 +639,7 @@ function install_osm() {
     5. Install and initialize Kubernetes
     as pre-requirements.
     Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1
-    track proceed
+    track checks proceed_ok
 
     echo "Installing OSM"
 
@@ -634,7 +647,7 @@ function install_osm() {
     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]}'`
+    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
@@ -642,45 +655,37 @@ function install_osm() {
 
     # 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
-        need_packages_lw="snapd"
-        echo -e "Checking required packages: $need_packages_lw"
-        dpkg -l $need_packages_lw &>/dev/null \
-          || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
-          || sudo apt-get update \
-          || FATAL "failed to run apt-get update"
-        dpkg -l $need_packages_lw &>/dev/null \
-          || ! echo -e "Installing $need_packages_lw requires root privileges." \
-          || sudo apt-get install -y $need_packages_lw \
-          || FATAL "failed to install $need_packages_lw"
+        check_packages "snapd"
         install_lxd
     fi
 
-    track prereqok
+    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}
+        $OSM_DEVOPS/installers/install_docker_ce.sh ${DOCKER_CE_OPTS} || FATAL_TRACK docker_ce "install_docker_ce.sh failed"
     fi
 
-    track docker_ce
+    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}
-    track k8scluster
+    $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}
+    $OSM_DEVOPS/installers/install_juju.sh ${JUJU_OPTS} || FATAL_TRACK juju "install_juju.sh failed"
     set_vca_variables
-    track juju
+    track juju juju_ok
 
     if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
         OSM_DATABASE_COMMONKEY=$(generate_secret)
@@ -689,42 +694,46 @@ function install_osm() {
 
     # Deploy OSM services
     [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
-    track docker_build
+    track docker_images docker_images_ok
 
     generate_k8s_manifest_files
-    track manifest_files
+    track osm_files manifest_files_ok
     generate_docker_env_files
-    track env_files
+    track osm_files env_files_ok
 
     deploy_charmed_services
+    track deploy_osm deploy_charmed_services_ok
     kube_secrets
+    track deploy_osm kube_secrets_ok
     update_manifest_files
+    track deploy_osm update_manifest_files_ok
     namespace_vol
+    track deploy_osm namespace_vol_ok
     deploy_osm_services
+    track deploy_osm deploy_osm_services_k8s_ok
     if [ -n "$INSTALL_PLA"]; then
         # optional PLA install
         deploy_osm_pla_service
-        track deploy_osm_pla
+        track deploy_osm deploy_osm_pla_ok
     fi
-    track deploy_osm_services_k8s
     if [ -n "$INSTALL_K8S_MONITOR" ]; then
         # install OSM MONITORING
         install_k8s_monitoring
-        track install_k8s_monitoring
+        track deploy_osm install_k8s_monitoring_ok
     fi
 
     [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
-    track osmclient
+    track osmclient osmclient_ok
 
     echo -e "Checking OSM health state..."
     $OSM_DEVOPS/installers/osm_health.sh -s ${OSM_STACK_NAME} -k || \
-    echo -e "OSM is not healthy, but will probably converge to a healthy state soon." && \
+    (echo -e "OSM is not healthy, but will probably converge to a healthy state soon." && \
     echo -e "Check OSM status with: kubectl -n ${OSM_STACK_NAME} get all" && \
-    track osm_unhealthy
-    track after_healthcheck
+    track healthchecks osm_unhealthy didnotconverge)
+    track healthchecks after_healthcheck_ok
 
     add_local_k8scluster
-    track add_local_k8scluster
+    track final_ops add_local_k8scluster_ok
 
     wget -q -O- https://osm-download.etsi.org/ftp/osm-11.0-eleven/README2.txt &> /dev/null
     track end
@@ -791,7 +800,7 @@ function install_k8s_monitoring() {
     [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     # install OSM monitoring
     sudo chmod +x $OSM_DEVOPS/installers/k8s/*.sh
-    sudo $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh
+    sudo $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh || FATAL_TRACK install_k8s_monitoring "k8s/install_osm_k8s_monitoring.sh failed"
     [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
@@ -925,6 +934,7 @@ RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
 DOCKER_REGISTRY_URL=
 DOCKER_PROXY_URL=
 MODULE_DOCKER_TAG=
+OSM_INSTALLATION_TYPE="Default"
 
 while getopts ":a:b:r:n:k:u:R:D:o:O:m:N:H:S:s:t:U:P:A:l:L:K:d:p:T:f:F:-: hy" o; do
     case "${o}" in
@@ -1052,7 +1062,7 @@ while getopts ":a:b:r:n:k:u:R:D:o:O:m:N:H:S:s:t:U:P:A:l:L:K:d:p:T:f:F:-: hy" o;
             [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
             [ "${OPTARG}" == "pullimages" ] && continue
             [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
-            [ "${OPTARG}" == "charmed" ] && CHARMED="y" && continue
+            [ "${OPTARG}" == "charmed" ] && CHARMED="y" && OSM_INSTALLATION_TYPE="Charmed" && continue
             [ "${OPTARG}" == "bundle" ] && continue
             [ "${OPTARG}" == "k8s" ] && continue
             [ "${OPTARG}" == "lxd" ] && continue
@@ -1099,9 +1109,12 @@ source $OSM_DEVOPS/common/all_funcs
 # Uninstall if "--uninstall"
 if [ -n "$UNINSTALL" ]; then
     if [ -n "$CHARMED" ]; then
-        ${OSM_DEVOPS}/installers/charmed_uninstall.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D $OSM_DEVOPS -t $DOCKER_TAG "$@"
+        track start release $RELEASE none none docker_tag $OSM_DOCKER_TAG none none installation_type $OSM_INSTALLATION_TYPE none none
+        ${OSM_DEVOPS}/installers/charmed_uninstall.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D $OSM_DEVOPS -t $DOCKER_TAG "$@" || \
+        FATAL_TRACK charmed_uninstall "charmed_uninstall.sh failed"
     else
-        ${OSM_DEVOPS}/installers/uninstall_osm.sh "$@"
+        ${OSM_DEVOPS}/installers/uninstall_osm.sh "$@" || \
+        FATAL_TRACK community_uninstall "uninstall_osm.sh failed"
     fi
     echo -e "\nDONE"
     exit 0
@@ -1109,7 +1122,8 @@ fi
 
 # Charmed installation
 if [ -n "$CHARMED" ]; then
-    ${OSM_DEVOPS}/installers/charmed_install.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D $OSM_DEVOPS -t $DOCKER_TAG "$@"
+    ${OSM_DEVOPS}/installers/charmed_install.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D $OSM_DEVOPS -t $DOCKER_TAG "$@" || \
+    FATAL_TRACK charmed_install "charmed_install.sh failed"
     echo -e "\nDONE"
     exit 0
 fi
@@ -1129,17 +1143,8 @@ fi
 # if develop, we force master
 [ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
 
-need_packages="git wget curl tar"
-
-echo -e "Checking required packages: $need_packages"
-dpkg -l $need_packages &>/dev/null \
-  || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
-  || sudo apt-get update \
-  || FATAL "failed to run apt-get update"
-dpkg -l $need_packages &>/dev/null \
-  || ! echo -e "Installing $need_packages requires root privileges." \
-  || sudo apt-get install -y $need_packages \
-  || FATAL "failed to install $need_packages"
+check_packages "git wget curl tar"
+
 sudo snap install jq
 if [ -z "$OSM_DEVOPS" ]; then
     if [ -n "$TEST_INSTALLER" ]; then
@@ -1173,22 +1178,11 @@ OSM_K8S_WORK_DIR="$OSM_DOCKER_WORK_DIR/osm_pods" && OSM_NAMESPACE_VOL="${OSM_HOS
 
 #Installation starts here
 wget -q -O- https://osm-download.etsi.org/ftp/osm-11.0-eleven/README.txt &> /dev/null
-OSM_INSTALLATION_ID="$(date +%s)-$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)"
+export OSM_TRACK_INSTALLATION_ID="$(date +%s)-$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)"
 
-track start release $RELEASE none none docker_tag $OSM_DOCKER_TAG none none
+track start release $RELEASE none none docker_tag $OSM_DOCKER_TAG none none installation_type $OSM_INSTALLATION_TYPE none none
 
 install_osm
-echo -e "\nDONE" && exit 0
-echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
-if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
-    ! ask_user "The installation will take about 75-90 minutes. Continue (Y/n)? " y && echo "Cancelled!" && exit 1
-fi
-
-echo -e "Checking required packages: lxd"
-lxd --version &>/dev/null || FATAL "lxd not present, exiting."
-[ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
-
-wget -q -O- https://osm-download.etsi.org/ftp/osm-11.0-eleven/README2.txt &> /dev/null
-track end
 echo -e "\nDONE"
+exit 0