Feature 10892/10893/8460: refactor of OSM installer
[osm/devops.git] / installers / uninstall_osm.sh
diff --git a/installers/uninstall_osm.sh b/installers/uninstall_osm.sh
new file mode 100755 (executable)
index 0000000..3af413b
--- /dev/null
@@ -0,0 +1,347 @@
+#!/bin/bash
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+
+#removes osm deployments and services
+function remove_k8s_namespace() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    kubectl delete ns $1
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function remove_volumes() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    k8_volume=$1
+    echo "Removing ${k8_volume}"
+    sudo rm -rf ${k8_volume}
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function remove_crontab_job() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    crontab -l | grep -v '${OSM_DEVOPS}/installers/update-juju-lxc-images'  | crontab -
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function uninstall_k8s_monitoring() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    # uninstall OSM monitoring
+    sudo $OSM_DEVOPS/installers/k8s/uninstall_osm_k8s_monitoring.sh
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+#Uninstall osmclient
+function uninstall_osmclient() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    sudo apt-get remove --purge -y python3-osmclient
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+#Uninstall OSM: remove deployments and services
+function uninstall_osm() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    echo -e "\nUninstalling OSM"
+    if [ -n "$INSTALL_K8S_MONITOR" ]; then
+        # uninstall OSM MONITORING
+        uninstall_k8s_monitoring
+    fi
+    remove_k8s_namespace $OSM_STACK_NAME
+    echo "Now osm docker images and volumes will be deleted"
+    # TODO: clean-up of images should take into account if other tags were used for specific modules
+    newgrp docker << EONG
+for module in ro lcm keystone nbi mon pol pla osmclient; do
+    docker image rm ${DOCKER_REGISTRY_URL}${DOCKER_USER}/${module}:${OSM_DOCKER_TAG}
+done
+EONG
+
+    sg docker -c "docker image rm ${DOCKER_REGISTRY_URL}${DOCKER_USER}/ng-ui:${OSM_DOCKER_TAG}"
+
+    OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
+    remove_volumes $OSM_NAMESPACE_VOL
+
+    echo "Removing $OSM_DOCKER_WORK_DIR"
+    sudo rm -rf $OSM_DOCKER_WORK_DIR
+    [ -z "$CONTROLLER_NAME" ] && sg lxd -c "juju kill-controller -t 0 -y $OSM_STACK_NAME"
+
+    remove_crontab_job
+
+    # Cleanup Openstack installer venv
+    if [ -d "$OPENSTACK_PYTHON_VENV" ]; then
+        rm -r $OPENSTACK_PYTHON_VENV
+    fi
+
+    [ -z "$INSTALL_NOHOSTCLIENT" ] && uninstall_osmclient
+    echo "Some docker images will be kept in case they are used by other docker stacks"
+    echo "To remove them, just run 'docker image prune' in a terminal"
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+    return 0
+}
+
+function ask_user(){
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
+    # Params: $1 text to ask;   $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
+    # Return: true(0) if user type 'yes'; false (1) if user type 'no'
+    read -e -p "$1" USER_CONFIRMATION
+    while true ; do
+        [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
+        [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
+        [ "${USER_CONFIRMATION,,}" == "yes" ] || [ "${USER_CONFIRMATION,,}" == "y" ] && return 0
+        [ "${USER_CONFIRMATION,,}" == "no" ]  || [ "${USER_CONFIRMATION,,}" == "n" ] && return 1
+        read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
+    done
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+LXD_VERSION=4.0
+JUJU_VERSION=2.9
+UNINSTALL=""
+DEVELOP=""
+UPDATE=""
+RECONFIGURE=""
+TEST_INSTALLER=""
+INSTALL_LXD=""
+SHOWOPTS=""
+COMMIT_ID=""
+ASSUME_YES=""
+APT_PROXY_URL=""
+INSTALL_FROM_SOURCE=""
+DEBUG_INSTALL=""
+RELEASE="ReleaseTEN"
+REPOSITORY="stable"
+INSTALL_VIMEMU=""
+INSTALL_PLA=""
+LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
+LXD_REPOSITORY_PATH=""
+INSTALL_LIGHTWEIGHT="y"
+INSTALL_TO_OPENSTACK=""
+OPENSTACK_OPENRC_FILE_OR_CLOUD=""
+OPENSTACK_PUBLIC_NET_NAME=""
+OPENSTACK_ATTACH_VOLUME="false"
+OPENSTACK_SSH_KEY_FILE=""
+OPENSTACK_USERDATA_FILE=""
+OPENSTACK_VM_NAME="server-osm"
+OPENSTACK_PYTHON_VENV="$HOME/.virtual-envs/osm"
+INSTALL_ONLY=""
+TO_REBUILD=""
+INSTALL_NOLXD=""
+INSTALL_NODOCKER=""
+INSTALL_NOJUJU=""
+INSTALL_K8S_MONITOR=""
+INSTALL_NOHOSTCLIENT=""
+INSTALL_CACHELXDIMAGES=""
+OSM_DEVOPS=
+OSM_VCA_HOST=
+OSM_VCA_SECRET=
+OSM_VCA_PUBKEY=
+OSM_VCA_CLOUDNAME="localhost"
+OSM_VCA_K8S_CLOUDNAME="k8scloud"
+OSM_STACK_NAME=osm
+NO_HOST_PORTS=""
+DOCKER_NOBUILD=""
+REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
+REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
+OSM_WORK_DIR="/etc/osm"
+OSM_DOCKER_WORK_DIR="/etc/osm/docker"
+OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
+OSM_HOST_VOL="/var/lib/osm"
+OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
+OSM_DOCKER_TAG=latest
+DOCKER_USER=opensourcemano
+PULL_IMAGES="y"
+KAFKA_TAG=2.11-1.0.2
+PROMETHEUS_TAG=v2.4.3
+GRAFANA_TAG=latest
+PROMETHEUS_NODE_EXPORTER_TAG=0.18.1
+PROMETHEUS_CADVISOR_TAG=latest
+KEYSTONEDB_TAG=10
+OSM_DATABASE_COMMONKEY=
+ELASTIC_VERSION=6.4.2
+ELASTIC_CURATOR_VERSION=5.5.4
+POD_NETWORK_CIDR=10.244.0.0/16
+K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
+RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
+DOCKER_REGISTRY_URL=
+DOCKER_PROXY_URL=
+MODULE_DOCKER_TAG=
+
+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
+        a)
+            APT_PROXY_URL=${OPTARG}
+            ;;
+        b)
+            COMMIT_ID=${OPTARG}
+            PULL_IMAGES=""
+            ;;
+        r)
+            REPOSITORY="${OPTARG}"
+            REPO_ARGS+=(-r "$REPOSITORY")
+            ;;
+        k)
+            REPOSITORY_KEY="${OPTARG}"
+            REPO_ARGS+=(-k "$REPOSITORY_KEY")
+            ;;
+        u)
+            REPOSITORY_BASE="${OPTARG}"
+            REPO_ARGS+=(-u "$REPOSITORY_BASE")
+            ;;
+        R)
+            RELEASE="${OPTARG}"
+            REPO_ARGS+=(-R "$RELEASE")
+            ;;
+        D)
+            OSM_DEVOPS="${OPTARG}"
+            ;;
+        o)
+            INSTALL_ONLY="y"
+            [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
+            ;;
+        O)
+            INSTALL_TO_OPENSTACK="y"
+            if [ -n "${OPTARG}" ]; then
+                OPENSTACK_OPENRC_FILE_OR_CLOUD="${OPTARG}"
+            else
+                echo -e "Invalid argument for -O : ' $OPTARG'\n" >&2
+                usage && exit 1
+            fi
+            ;;
+        f)
+            OPENSTACK_SSH_KEY_FILE="${OPTARG}"
+            ;;
+        F)
+            OPENSTACK_USERDATA_FILE="${OPTARG}"
+            ;;
+        N)
+            OPENSTACK_PUBLIC_NET_NAME="${OPTARG}"
+            ;;
+        m)
+            [ "${OPTARG}" == "NG-UI" ] && TO_REBUILD="$TO_REBUILD NG-UI" && continue
+            [ "${OPTARG}" == "NBI" ] && TO_REBUILD="$TO_REBUILD NBI" && continue
+            [ "${OPTARG}" == "LCM" ] && TO_REBUILD="$TO_REBUILD LCM" && continue
+            [ "${OPTARG}" == "RO" ] && TO_REBUILD="$TO_REBUILD RO" && continue
+            [ "${OPTARG}" == "MON" ] && TO_REBUILD="$TO_REBUILD MON" && continue
+            [ "${OPTARG}" == "POL" ] && TO_REBUILD="$TO_REBUILD POL" && continue
+            [ "${OPTARG}" == "PLA" ] && TO_REBUILD="$TO_REBUILD PLA" && continue
+            [ "${OPTARG}" == "osmclient" ] && TO_REBUILD="$TO_REBUILD osmclient" && continue
+            [ "${OPTARG}" == "KAFKA" ] && TO_REBUILD="$TO_REBUILD KAFKA" && continue
+            [ "${OPTARG}" == "MONGO" ] && TO_REBUILD="$TO_REBUILD MONGO" && continue
+            [ "${OPTARG}" == "PROMETHEUS" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS" && continue
+            [ "${OPTARG}" == "PROMETHEUS-CADVISOR" ] && TO_REBUILD="$TO_REBUILD PROMETHEUS-CADVISOR" && continue
+            [ "${OPTARG}" == "KEYSTONE-DB" ] && TO_REBUILD="$TO_REBUILD KEYSTONE-DB" && continue
+            [ "${OPTARG}" == "GRAFANA" ] && TO_REBUILD="$TO_REBUILD GRAFANA" && continue
+            [ "${OPTARG}" == "NONE" ] && TO_REBUILD="$TO_REBUILD NONE" && continue
+            ;;
+        H)
+            OSM_VCA_HOST="${OPTARG}"
+            ;;
+        S)
+            OSM_VCA_SECRET="${OPTARG}"
+            ;;
+        s)
+            OSM_STACK_NAME="${OPTARG}" && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0
+            ;;
+        t)
+            OSM_DOCKER_TAG="${OPTARG}"
+            REPO_ARGS+=(-t "$OSM_DOCKER_TAG")
+            ;;
+        U)
+            DOCKER_USER="${OPTARG}"
+            ;;
+        P)
+            OSM_VCA_PUBKEY=$(cat ${OPTARG})
+            ;;
+        A)
+            OSM_VCA_APIPROXY="${OPTARG}"
+            ;;
+        l)
+            LXD_CLOUD_FILE="${OPTARG}"
+            ;;
+        L)
+            LXD_CRED_FILE="${OPTARG}"
+            ;;
+        K)
+            CONTROLLER_NAME="${OPTARG}"
+            ;;
+        d)
+            DOCKER_REGISTRY_URL="${OPTARG}"
+            ;;
+        p)
+            DOCKER_PROXY_URL="${OPTARG}"
+            ;;
+        T)
+            MODULE_DOCKER_TAG="${OPTARG}"
+            ;;
+        -)
+            [ "${OPTARG}" == "help" ] && usage && exit 0
+            [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && PULL_IMAGES="" && continue
+            [ "${OPTARG}" == "debug" ] && DEBUG_INSTALL="--debug" && continue
+            [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
+            [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
+            [ "${OPTARG}" == "update" ] && UPDATE="y" && continue
+            [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE="y" && continue
+            [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
+            [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
+            [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
+            [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
+            [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
+            [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
+            [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="--nojuju" && continue
+            [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
+            [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
+            [ "${OPTARG}" == "pullimages" ] && continue
+            [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
+            [ "${OPTARG}" == "charmed" ] && CHARMED="y" && continue
+            [ "${OPTARG}" == "bundle" ] && continue
+            [ "${OPTARG}" == "k8s" ] && continue
+            [ "${OPTARG}" == "lxd" ] && continue
+            [ "${OPTARG}" == "lxd-cred" ] && continue
+            [ "${OPTARG}" == "microstack" ] && continue
+            [ "${OPTARG}" == "overlay" ] && continue
+            [ "${OPTARG}" == "only-vca" ] && continue
+            [ "${OPTARG}" == "vca" ] && continue
+            [ "${OPTARG}" == "ha" ] && continue
+            [ "${OPTARG}" == "tag" ] && continue
+            [ "${OPTARG}" == "registry" ] && continue
+            [ "${OPTARG}" == "pla" ] && INSTALL_PLA="y" && continue
+            [ "${OPTARG}" == "volume" ] && OPENSTACK_ATTACH_VOLUME="true" && continue
+            [ "${OPTARG}" == "nocachelxdimages" ] && continue
+            [ "${OPTARG}" == "cachelxdimages" ] && INSTALL_CACHELXDIMAGES="--cachelxdimages" && continue
+            echo -e "Invalid option: '--$OPTARG'\n" >&2
+            usage && exit 1
+            ;;
+        :)
+            echo "Option -$OPTARG requires an argument" >&2
+            usage && exit 1
+            ;;
+        \?)
+            echo -e "Invalid option: '-$OPTARG'\n" >&2
+            usage && exit 1
+            ;;
+        h)
+            usage && exit 0
+            ;;
+        y)
+            ASSUME_YES="y"
+            ;;
+        *)
+            usage && exit 1
+            ;;
+    esac
+done
+
+source $OSM_DEVOPS/common/all_funcs
+
+uninstall_osm
+