diff --git a/installers/full_install_osm.sh b/installers/full_install_osm.sh
index 90e5c1f..6689919 100755
--- a/installers/full_install_osm.sh
+++ b/installers/full_install_osm.sh
@@ -1,5 +1,4 @@
 #!/bin/bash
-#   Copyright 2016 Telefónica Investigación y Desarrollo S.A.U.
 #
 #   Licensed under the Apache License, Version 2.0 (the "License");
 #   you may not use this file except in compliance with the License.
@@ -12,8 +11,10 @@
 #   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.
+#
 
 function usage(){
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     echo -e "usage: $0 [OPTIONS]"
     echo -e "Install OSM from binaries or source code (by default, from binaries)"
     echo -e "  OPTIONS"
@@ -28,18 +29,16 @@
     echo -e "                     -b v2.0            (v2.0 branch)"
     echo -e "                     -b tags/v1.1.0     (a specific tag)"
     echo -e "                     ..."
-    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"
+    echo -e "     -a <apt proxy url>: use this apt proxy url when downloading apt packages (air-gapped installation)"
     echo -e "     -s <stack name> or <namespace>  user defined stack name when installed using swarm or namespace when installed using k8s, default is osm"
     echo -e "     -H <VCA host>   use specific juju host controller IP"
     echo -e "     -S <VCA secret> use VCA/juju secret key"
     echo -e "     -P <VCA pubkey> use VCA/juju public key file"
     echo -e "     -C <VCA cacert> use VCA/juju CA certificate file"
     echo -e "     -A <VCA apiproxy> use VCA/juju API proxy"
-    echo -e "     --vimemu:       additionally deploy the VIM emulator as a docker container"
-    echo -e "     --elk_stack:    additionally deploy an ELK docker stack for event logging"
     echo -e "     --pla:          install the PLA module for placement support"
     echo -e "     -m <MODULE>:    install OSM but only rebuild or pull the specified docker images (NG-UI, NBI, LCM, RO, MON, POL, PLA, KAFKA, MONGO, PROMETHEUS, PROMETHEUS-CADVISOR, KEYSTONE-DB, NONE)"
-    echo -e "     -o <ADDON>:     ONLY (un)installs one of the addons (vimemu, elk_stack, k8s_monitor)"
+    echo -e "     -o <ADDON>:     ONLY (un)installs one of the addons (k8s_monitor)"
     echo -e "     -O <openrc file path/cloud name>: Install OSM to an OpenStack infrastructure. <openrc file/cloud name> is required. If a <cloud name> is used, the clouds.yaml file should be under ~/.config/openstack/ or /etc/openstack/"
     echo -e "     -N <openstack public network name/ID>: Public network name required to setup OSM to OpenStack"
     echo -e "     -f <path to SSH public key>: Public SSH key to use to deploy OSM to OpenStack"
@@ -53,7 +52,9 @@
     echo -e "     -d <docker registry URL> use docker registry URL instead of dockerhub"
     echo -e "     -p <docker proxy URL> set docker proxy URL as part of docker CE configuration"
     echo -e "     -T <docker tag> specify docker tag for the modules specified with option -m"
+    echo -e "     --debug:        debug mode"
     echo -e "     --nocachelxdimages:  do not cache local lxd images, do not create cronjob for that cache (will save installation time, might affect instantiation time)"
+    echo -e "     --cachelxdimages:  cache local lxd images, create cronjob for that cache (will make installation longer)"
     echo -e "     --nolxd:        do not install and configure LXD, allowing unattended installations (assumes LXD is already installed and confifured)"
     echo -e "     --nodocker:     do not install docker, do not initialize a swarm (assumes docker is already installed and a swarm has been initialized)"
     echo -e "     --nojuju:       do not juju, assumes already installed"
@@ -80,210 +81,66 @@
     echo -e "     [--ha]:                      Installs High Availability bundle. (--charmed option)"
     echo -e "     [--tag]:                     Docker image tag. (--charmed option)"
     echo -e "     [--registry]:                Docker registry with optional credentials as user:pass@hostname:port (--charmed option)"
-
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
 # takes a juju/accounts.yaml file and returns the password specific
 # for a controller. I wrote this using only bash tools to minimize
 # additions of other packages
 function parse_juju_password {
-   password_file="${HOME}/.local/share/juju/accounts.yaml"
-   local controller_name=$1
-   local s='[[:space:]]*' w='[a-zA-Z0-9_-]*' fs=$(echo @|tr @ '\034')
-   sed -ne "s|^\($s\):|\1|" \
-        -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
-        -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $password_file |
-   awk -F$fs -v controller=$controller_name '{
-      indent = length($1)/2;
-      vname[indent] = $2;
-      for (i in vname) {if (i > indent) {delete vname[i]}}
-      if (length($3) > 0) {
-         vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
-         if (match(vn,controller) && match($2,"password")) {
-             printf("%s",$3);
-         }
-      }
-   }'
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    password_file="${HOME}/.local/share/juju/accounts.yaml"
+    local controller_name=$1
+    local s='[[:space:]]*' w='[a-zA-Z0-9_-]*' fs=$(echo @|tr @ '\034')
+    sed -ne "s|^\($s\):|\1|" \
+         -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
+         -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $password_file |
+    awk -F$fs -v controller=$controller_name '{
+        indent = length($1)/2;
+        vname[indent] = $2;
+        for (i in vname) {if (i > indent) {delete vname[i]}}
+        if (length($3) > 0) {
+            vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
+            if (match(vn,controller) && match($2,"password")) {
+                printf("%s",$3);
+            }
+        }
+    }'
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function set_vca_variables() {
+    OSM_VCA_CLOUDNAME="lxd-cloud"
+    [ -n "$OSM_VCA_HOST" ] && OSM_VCA_CLOUDNAME="localhost"
+    if [ -z "$OSM_VCA_HOST" ]; then
+        [ -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}'`
+        [ -n "$CONTROLLER_NAME" ] && OSM_VCA_HOST=`juju show-controller $CONTROLLER_NAME |grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
+        [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
+    fi
+    if [ -z "$OSM_VCA_SECRET" ]; then
+        [ -z "$CONTROLLER_NAME" ] && OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME)
+        [ -n "$CONTROLLER_NAME" ] && OSM_VCA_SECRET=$(parse_juju_password $CONTROLLER_NAME)
+        [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
+    fi
+    if [ -z "$OSM_VCA_PUBKEY" ]; then
+        OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
+        [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
+    fi
+    if [ -z "$OSM_VCA_CACERT" ]; then
+        [ -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)
+        [ -n "$CONTROLLER_NAME" ] && OSM_VCA_CACERT=$(juju controllers --format json | jq -r --arg controller $CONTROLLER_NAME '.controllers[$controller]["ca-cert"]' | base64 | tr -d \\n)
+        [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
+    fi
 }
 
 function generate_secret() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32
-}
-
-function remove_volumes() {
-    if [ -n "$KUBERNETES" ]; then
-        k8_volume=$1
-        echo "Removing ${k8_volume}"
-        $WORKDIR_SUDO rm -rf ${k8_volume}
-    else
-        stack=$1
-        volumes="mongo_db mon_db osm_packages ro_db pol_db prom_db ro"
-        for volume in $volumes; do
-            sg docker -c "docker volume rm ${stack}_${volume}"
-        done
-    fi
-}
-
-function remove_network() {
-    stack=$1
-    sg docker -c "docker network rm net${stack}"
-}
-
-function remove_iptables() {
-    stack=$1
-    if [ -z "$OSM_VCA_HOST" ]; then
-        OSM_VCA_HOST=`sg lxd -c "juju show-controller ${stack}"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
-        [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
-    fi
-
-    if [ -z "$DEFAULT_IP" ]; then
-        DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5; exit}')
-        [ -z "$DEFAULT_IF" ] && DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5; 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 |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
-        [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
-    fi
-
-    if sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
-        sudo iptables -t nat -D PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
-        sudo netfilter-persistent save
-    fi
-}
-
-function remove_stack() {
-    stack=$1
-    if sg docker -c "docker stack ps ${stack}" ; then
-        echo -e "\nRemoving stack ${stack}" && sg docker -c "docker stack rm ${stack}"
-        COUNTER=0
-        result=1
-        while [ ${COUNTER} -lt 30 ]; do
-            result=$(sg docker -c "docker stack ps ${stack}" | wc -l)
-            #echo "Dockers running: $result"
-            if [ "${result}" == "0" ]; then
-                break
-            fi
-            let COUNTER=COUNTER+1
-            sleep 1
-        done
-        if [ "${result}" == "0" ]; then
-            echo "All dockers of the stack ${stack} were removed"
-        else
-            FATAL "Some dockers of the stack ${stack} could not be removed. Could not clean it."
-        fi
-        sleep 5
-    fi
-}
-
-#removes osm deployments and services
-function remove_k8s_namespace() {
-    kubectl delete ns $1
-}
-
-#removes helm only if there is nothing deployed in helm
-function remove_helm() {
-    if [ "$(helm ls -q)" == "" ] ; then
-        sudo helm reset --force
-        sudo rm /usr/local/bin/helm
-        rm -rf $HOME/.helm
-    fi
-}
-
-function remove_crontab_job() {
-    crontab -l | grep -v '${OSM_DEVOPS}/installers/update-juju-lxc-images'  | crontab -
-}
-
-#Uninstall osmclient
-function uninstall_osmclient() {
-    sudo apt-get remove --purge -y python-osmclient
-    sudo apt-get remove --purge -y python3-osmclient
-}
-
-#Uninstall lightweight OSM: remove dockers
-function uninstall_lightweight() {
-    if [ -n "$INSTALL_ONLY" ]; then
-        if [ -n "$INSTALL_ELK" ]; then
-            echo -e "\nUninstalling OSM ELK stack"
-            remove_stack osm_elk
-            $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR/osm_elk
-        fi
-    else
-        echo -e "\nUninstalling OSM"
-        if [ -n "$KUBERNETES" ]; then
-            if [ -n "$INSTALL_K8S_MONITOR" ]; then
-                # uninstall OSM MONITORING
-                uninstall_k8s_monitoring
-            fi
-            remove_k8s_namespace $OSM_STACK_NAME
-        else
-            remove_stack $OSM_STACK_NAME
-            remove_stack osm_elk
-        fi
-        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}"
-
-        if [ -n "$KUBERNETES" ]; then
-            OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
-            remove_volumes $OSM_NAMESPACE_VOL
-        else
-            remove_volumes $OSM_STACK_NAME
-            remove_network $OSM_STACK_NAME
-            [ -z "$CONTROLLER_NAME" ] && remove_iptables $OSM_STACK_NAME
-        fi
-        echo "Removing $OSM_DOCKER_WORK_DIR"
-        $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR
-        [ -z "$CONTROLLER_NAME" ] && sg lxd -c "juju kill-controller -t 0 -y $OSM_STACK_NAME"
-    fi
-    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"
-    return 0
-}
-
-#Safe unattended install of iptables-persistent
-function check_install_iptables_persistent(){
-    echo -e "\nChecking required packages: iptables-persistent"
-    if ! dpkg -l iptables-persistent &>/dev/null; then
-        echo -e "    Not installed.\nInstalling iptables-persistent requires root privileges"
-        echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections
-        echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections
-        sudo apt-get -yq install iptables-persistent
-    fi
-}
-
-#Configure NAT rules, based on the current IP addresses of containers
-function nat(){
-    check_install_iptables_persistent
-
-    echo -e "\nConfiguring NAT rules"
-    echo -e "   Required root privileges"
-    sudo $OSM_DEVOPS/installers/nat_osm
-}
-
-function FATAL(){
-    echo "FATAL error: Cannot install OSM due to \"$1\""
-    exit 1
-}
-
-function update_juju_images(){
-    crontab -l | grep update-juju-lxc-images || (crontab -l 2>/dev/null; echo "0 4 * * 6 $USER ${OSM_DEVOPS}/installers/update-juju-lxc-images --xenial --bionic") | crontab -
-    ${OSM_DEVOPS}/installers/update-juju-lxc-images --xenial --bionic
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
 function install_lxd() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     # Apply sysctl production values for optimal performance
     sudo cp ${OSM_DEVOPS}/installers/60-lxd-production.conf /etc/sysctl.d/60-lxd-production.conf
     sudo sysctl --system
@@ -296,21 +153,24 @@
     sudo usermod -a -G lxd `whoami`
     cat ${OSM_DEVOPS}/installers/lxd-preseed.conf | sed 's/^config: {}/config:\n  core.https_address: '$DEFAULT_IP':8443/' | sg lxd -c "lxd init --preseed"
     sg lxd -c "lxd waitready"
-    DEFAULT_INTERFACE=$(ip route list|awk '$1=="default" {print $5; exit}')
-    [ -z "$DEFAULT_INTERFACE" ] && DEFAULT_INTERFACE=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}')
-    DEFAULT_MTU=$(ip addr show $DEFAULT_INTERFACE | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
+    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_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
     sg lxd -c "lxc profile device set default eth0 mtu $DEFAULT_MTU"
     sg lxd -c "lxc network set lxdbr0 bridge.mtu $DEFAULT_MTU"
     #sudo systemctl stop lxd-bridge
     #sudo systemctl --system daemon-reload
     #sudo systemctl enable lxd-bridge
     #sudo systemctl start lxd-bridge
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
 function ask_user(){
     # 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'
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     read -e -p "$1" USER_CONFIRMATION
     while true ; do
         [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
@@ -319,15 +179,17 @@
         [ "${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
 }
 
 function install_osmclient(){
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     CLIENT_RELEASE=${RELEASE#"-R "}
     CLIENT_REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
     CLIENT_REPOSITORY=${REPOSITORY#"-r "}
     CLIENT_REPOSITORY_BASE=${REPOSITORY_BASE#"-u "}
     key_location=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
-    curl $key_location | sudo apt-key add -
+    curl $key_location | sudo APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add -
     sudo add-apt-repository -y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient IM"
     sudo apt-get update
     sudo apt-get install -y python3-pip
@@ -341,9 +203,6 @@
         sudo apt-get install -y libcurl4-openssl-dev libssl-dev
         python3 -m pip install -r /usr/lib/python3/dist-packages/osmclient/requirements.txt
     fi
-    #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
-    #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
-    #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
     [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME=`lxc list | awk '($2=="SO-ub"){print $6}'`
     [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME=`lxc list | awk '($2=="RO"){print $6}'`
     echo -e "\nOSM client installed"
@@ -356,180 +215,20 @@
         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:"
         echo "     export OSM_HOSTNAME=<OSM_host>"
     fi
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
     return 0
 }
 
-function install_prometheus_nodeexporter(){
-    if (systemctl -q is-active node_exporter)
-        then
-            echo "Node Exporter is already running."
-        else
-            echo "Node Exporter is not active, installing..."
-            if getent passwd node_exporter > /dev/null 2>&1; then
-                echo "node_exporter user exists"
-            else
-                echo "Creating user node_exporter"
-                sudo useradd --no-create-home --shell /bin/false node_exporter
-            fi
-            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/
-            sudo tar -C /tmp -xf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz
-            sudo cp /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64/node_exporter /usr/local/bin
-            sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
-            sudo rm -rf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64*
-            sudo cp ${OSM_DEVOPS}/installers/docker/prometheus_exporters/node_exporter.service /etc/systemd/system/node_exporter.service
-            sudo systemctl daemon-reload
-            sudo systemctl restart node_exporter
-            sudo systemctl enable node_exporter
-            echo "Node Exporter has been activated in this host."
-    fi
-    return 0
-}
-
-function uninstall_prometheus_nodeexporter(){
-    sudo systemctl stop node_exporter
-    sudo systemctl disable node_exporter
-    sudo rm /etc/systemd/system/node_exporter.service
-    sudo systemctl daemon-reload
-    sudo userdel node_exporter
-    sudo rm /usr/local/bin/node_exporter
-    return 0
-}
-
-function install_docker_ce() {
-    # installs and configures Docker CE
-    echo "Installing Docker CE ..."
-    sudo apt-get -qq update
-    sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
-    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
-    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
-    sudo apt-get -qq update
-    sudo apt-get install -y docker-ce
-    echo "Adding user to group 'docker'"
-    sudo groupadd -f docker
-    sudo usermod -aG docker $USER
-    sleep 2
-    sudo service docker restart
-    echo "... restarted Docker service"
-    if [ -n "${DOCKER_PROXY_URL}" ]; then
-        echo "Configuring docker proxy ..."
-        if [ -f /etc/docker/daemon.json ]; then
-            if grep -q registry-mirrors /etc/docker/daemon.json; then
-                sudo sed -i "s|registry-mirrors.*|registry-mirrors\": [\"${DOCKER_PROXY_URL}\"] |" /etc/docker/daemon.json
-            else
-                sudo sed -i "s|{|{\n  \"registry-mirrors\": [\"${DOCKER_PROXY_URL}\"],|" /etc/docker/daemon.json
-            fi
-        else
-            sudo bash -c "cat << EOF > /etc/docker/daemon.json
-{
-  \"registry-mirrors\": [\"${DOCKER_PROXY_URL}\"]
-}
-EOF"
-        fi
-        sudo systemctl daemon-reload
-        sudo service docker restart
-        echo "... restarted Docker service again"
-    fi
-    sg docker -c "docker version" || FATAL "Docker installation failed"
-    echo "... Docker CE installation done"
-    return 0
-}
-
-function install_docker_compose() {
-    # installs and configures docker-compose
-    echo "Installing Docker Compose ..."
-    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
-    sudo chmod +x /usr/local/bin/docker-compose
-    echo "... Docker Compose installation done"
-}
-
-function install_juju() {
-    echo "Installing juju"
-    sudo snap install juju --classic --channel=$JUJU_VERSION/stable
-    [[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}"
-    [ -n "$INSTALL_NOCACHELXDIMAGES" ] || update_juju_images
-    echo "Finished installation of juju"
-    return 0
-}
-
-function juju_createcontroller() {
-    if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then
-        # Not found created, create the controller
-        sudo usermod -a -G lxd ${USER}
-        sg lxd -c "juju bootstrap --bootstrap-series=xenial --agent-version=$JUJU_AGENT_VERSION $OSM_VCA_CLOUDNAME $OSM_STACK_NAME"
-    fi
-    [ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed"
-    juju controller-config features=[k8s-operators]
-}
-
-function juju_addk8s() {
-    cat $HOME/.kube/config | juju add-k8s $OSM_VCA_K8S_CLOUDNAME --controller $OSM_STACK_NAME --storage openebs-hostpath \
-    || FATAL "Failed to add K8s endpoint and credential for controller $OSM_STACK_NAME in cloud $OSM_VCA_K8S_CLOUDNAME"
-}
-
-function juju_createcontroller_k8s(){
-    cat $HOME/.kube/config | juju add-k8s $OSM_VCA_K8S_CLOUDNAME --client \
-    || FATAL "Failed to add K8s endpoint and credential for client in cloud $OSM_VCA_K8S_CLOUDNAME"
-    juju bootstrap $OSM_VCA_K8S_CLOUDNAME $OSM_STACK_NAME  \
-            --config controller-service-type=loadbalancer \
-            --agent-version=$JUJU_AGENT_VERSION \
-    || FATAL "Failed to bootstrap controller $OSM_STACK_NAME in cloud $OSM_VCA_K8S_CLOUDNAME"
-}
-
-function juju_addlxd_cloud(){
-    mkdir -p /tmp/.osm
-    OSM_VCA_CLOUDNAME="lxd-cloud"
-    LXDENDPOINT=$DEFAULT_IP
-    LXD_CLOUD=/tmp/.osm/lxd-cloud.yaml
-    LXD_CREDENTIALS=/tmp/.osm/lxd-credentials.yaml
-
-    cat << EOF > $LXD_CLOUD
-clouds:
-  $OSM_VCA_CLOUDNAME:
-    type: lxd
-    auth-types: [certificate]
-    endpoint: "https://$LXDENDPOINT:8443"
-    config:
-      ssl-hostname-verification: false
-EOF
-    openssl req -nodes -new -x509 -keyout /tmp/.osm/client.key -out /tmp/.osm/client.crt -days 365 -subj "/C=FR/ST=Nice/L=Nice/O=ETSI/OU=OSM/CN=osm.etsi.org"
-    local server_cert=`cat /var/snap/lxd/common/lxd/server.crt | sed 's/^/        /'`
-    local client_cert=`cat /tmp/.osm/client.crt | sed 's/^/        /'`
-    local client_key=`cat /tmp/.osm/client.key | sed 's/^/        /'`
-
-    cat << EOF > $LXD_CREDENTIALS
-credentials:
-  $OSM_VCA_CLOUDNAME:
-    lxd-cloud:
-      auth-type: certificate
-      server-cert: |
-$server_cert
-      client-cert: |
-$client_cert
-      client-key: |
-$client_key
-EOF
-    lxc config trust add local: /tmp/.osm/client.crt
-    juju add-cloud -c $OSM_STACK_NAME $OSM_VCA_CLOUDNAME $LXD_CLOUD --force
-    juju add-credential -c $OSM_STACK_NAME $OSM_VCA_CLOUDNAME -f $LXD_CREDENTIALS
-    sg lxd -c "lxd waitready"
-    juju controller-config features=[k8s-operators]
-}
-
-function juju_createproxy() {
-    check_install_iptables_persistent
-
-    if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
-        sudo iptables -t nat -A PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
-        sudo netfilter-persistent save
-    fi
-}
-
 function docker_login() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     echo "Docker login"
-    sg docker -c "docker login -u ${DOCKER_REGISTRY_USER} -p ${DOCKER_REGISTRY_PASSWORD}"
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG "Docker registry user: ${DOCKER_REGISTRY_USER}"
+    sg docker -c "docker login -u ${DOCKER_REGISTRY_USER} -p ${DOCKER_REGISTRY_PASSWORD} --password-stdin"
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
 function generate_docker_images() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     echo "Pulling and generating docker images"
     [ -n "${DOCKER_REGISTRY_URL}" ] && docker_login
 
@@ -582,7 +281,8 @@
         _build_from=$COMMIT_ID
         [ -z "$_build_from" ] && _build_from="latest"
         echo "OSM Docker images generated from $_build_from"
-
+        LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
+        trap 'rm -rf "${LWTEMPDIR}"' EXIT
         for module in MON POL NBI KEYSTONE RO LCM NG-UI PLA; do
             if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q ${module} ; then
                 module_lower=${module,,}
@@ -605,9 +305,11 @@
     fi
 
     echo "Finished pulling and generating docker images"
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
 function cmp_overwrite() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     file1="$1"
     file2="$2"
     if ! $(cmp "${file1}" "${file2}" >/dev/null 2>&1); then
@@ -617,364 +319,181 @@
             cp -b ${file1} ${file2}
         fi
     fi
-}
-
-function generate_docker_compose_files() {
-    $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml
-    $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose-ngui.yaml $OSM_DOCKER_WORK_DIR/docker-compose-ui.yaml
-    if [ -n "$INSTALL_PLA" ]; then
-        $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_pla/docker-compose.yaml $OSM_DOCKER_WORK_DIR/osm_pla/docker-compose.yaml
-    fi
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
 function generate_k8s_manifest_files() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     #Kubernetes resources
-    $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
-    $WORKDIR_SUDO rm -f $OSM_K8S_WORK_DIR/mongo.yaml
+    sudo cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR
+    sudo rm -f $OSM_K8S_WORK_DIR/mongo.yaml
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
 function generate_prometheus_grafana_files() {
-    [ -n "$KUBERNETES" ] && return
+    #this only works with docker swarm
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     # Prometheus files
-    $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/prometheus
-    $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/prometheus/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus/prometheus.yml
+    sudo mkdir -p $OSM_DOCKER_WORK_DIR/prometheus
+    sudo cp -b ${OSM_DEVOPS}/installers/docker/prometheus/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus/prometheus.yml
 
     # Grafana files
-    $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/grafana
-    $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/dashboards-osm.yml $OSM_DOCKER_WORK_DIR/grafana/dashboards-osm.yml
-    $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/datasource-prometheus.yml $OSM_DOCKER_WORK_DIR/grafana/datasource-prometheus.yml
-    $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-sample-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-sample-dashboard.json
-    $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-system-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-system-dashboard.json
+    sudo mkdir -p $OSM_DOCKER_WORK_DIR/grafana
+    sudo cp -b ${OSM_DEVOPS}/installers/docker/grafana/dashboards-osm.yml $OSM_DOCKER_WORK_DIR/grafana/dashboards-osm.yml
+    sudo cp -b ${OSM_DEVOPS}/installers/docker/grafana/datasource-prometheus.yml $OSM_DOCKER_WORK_DIR/grafana/datasource-prometheus.yml
+    sudo cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-sample-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-sample-dashboard.json
+    sudo cp -b ${OSM_DEVOPS}/installers/docker/grafana/osm-system-dashboard.json $OSM_DOCKER_WORK_DIR/grafana/osm-system-dashboard.json
 
     # Prometheus Exporters files
-    $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/prometheus_exporters
-    $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/prometheus_exporters/node_exporter.service $OSM_DOCKER_WORK_DIR/prometheus_exporters/node_exporter.service
+    sudo mkdir -p $OSM_DOCKER_WORK_DIR/prometheus_exporters
+    sudo cp -b ${OSM_DEVOPS}/installers/docker/prometheus_exporters/node_exporter.service $OSM_DOCKER_WORK_DIR/prometheus_exporters/node_exporter.service
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
 function generate_docker_env_files() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     echo "Doing a backup of existing env files"
-    $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
-    $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
-    $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
-    $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
-    $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
-    $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
-    $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
-    $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
+    sudo cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~}
+    sudo cp $OSM_DOCKER_WORK_DIR/keystone.env{,~}
+    sudo cp $OSM_DOCKER_WORK_DIR/lcm.env{,~}
+    sudo cp $OSM_DOCKER_WORK_DIR/mon.env{,~}
+    sudo cp $OSM_DOCKER_WORK_DIR/nbi.env{,~}
+    sudo cp $OSM_DOCKER_WORK_DIR/pol.env{,~}
+    sudo cp $OSM_DOCKER_WORK_DIR/ro-db.env{,~}
+    sudo cp $OSM_DOCKER_WORK_DIR/ro.env{,~}
 
     echo "Generating docker env files"
     # LCM
     if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then
-        echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
+        echo "OSMLCM_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
     fi
 
     if ! grep -Fq "OSMLCM_VCA_HOST" $OSM_DOCKER_WORK_DIR/lcm.env; then
-        echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
+        echo "OSMLCM_VCA_HOST=${OSM_VCA_HOST}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
     else
-        $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_HOST.*|OSMLCM_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/lcm.env
+        sudo sed -i "s|OSMLCM_VCA_HOST.*|OSMLCM_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/lcm.env
     fi
 
     if ! grep -Fq "OSMLCM_VCA_SECRET" $OSM_DOCKER_WORK_DIR/lcm.env; then
-        echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
+        echo "OSMLCM_VCA_SECRET=${OSM_VCA_SECRET}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
     else
-        $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_SECRET.*|OSMLCM_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/lcm.env
+        sudo sed -i "s|OSMLCM_VCA_SECRET.*|OSMLCM_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/lcm.env
     fi
 
     if ! grep -Fq "OSMLCM_VCA_PUBKEY" $OSM_DOCKER_WORK_DIR/lcm.env; then
-        echo "OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
+        echo "OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
     else
-        $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_PUBKEY.*|OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
+        sudo sed -i "s|OSMLCM_VCA_PUBKEY.*|OSMLCM_VCA_PUBKEY=${OSM_VCA_PUBKEY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
     fi
 
     if ! grep -Fq "OSMLCM_VCA_CACERT" $OSM_DOCKER_WORK_DIR/lcm.env; then
-        echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
+        echo "OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
     else
-        $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CACERT.*|OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/lcm.env
+        sudo sed -i "s|OSMLCM_VCA_CACERT.*|OSMLCM_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/lcm.env
     fi
 
     if [ -n "$OSM_VCA_APIPROXY" ]; then
         if ! grep -Fq "OSMLCM_VCA_APIPROXY" $OSM_DOCKER_WORK_DIR/lcm.env; then
-            echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
+            echo "OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
         else
-            $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_APIPROXY.*|OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
+            sudo sed -i "s|OSMLCM_VCA_APIPROXY.*|OSMLCM_VCA_APIPROXY=${OSM_VCA_APIPROXY}|g" $OSM_DOCKER_WORK_DIR/lcm.env
         fi
     fi
 
     if ! grep -Fq "OSMLCM_VCA_ENABLEOSUPGRADE" $OSM_DOCKER_WORK_DIR/lcm.env; then
-        echo "# OSMLCM_VCA_ENABLEOSUPGRADE=false" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
+        echo "# OSMLCM_VCA_ENABLEOSUPGRADE=false" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
     fi
 
     if ! grep -Fq "OSMLCM_VCA_APTMIRROR" $OSM_DOCKER_WORK_DIR/lcm.env; then
-        echo "# OSMLCM_VCA_APTMIRROR=http://archive.ubuntu.com/ubuntu/" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
+        echo "# OSMLCM_VCA_APTMIRROR=http://archive.ubuntu.com/ubuntu/" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
     fi
 
     if ! grep -Fq "OSMLCM_VCA_CLOUD" $OSM_DOCKER_WORK_DIR/lcm.env; then
-        echo "OSMLCM_VCA_CLOUD=${OSM_VCA_CLOUDNAME}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
+        echo "OSMLCM_VCA_CLOUD=${OSM_VCA_CLOUDNAME}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
     else
-        $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_CLOUD.*|OSMLCM_VCA_CLOUD=${OSM_VCA_CLOUDNAME}|g" $OSM_DOCKER_WORK_DIR/lcm.env
+        sudo sed -i "s|OSMLCM_VCA_CLOUD.*|OSMLCM_VCA_CLOUD=${OSM_VCA_CLOUDNAME}|g" $OSM_DOCKER_WORK_DIR/lcm.env
     fi
 
     if ! grep -Fq "OSMLCM_VCA_K8S_CLOUD" $OSM_DOCKER_WORK_DIR/lcm.env; then
-        echo "OSMLCM_VCA_K8S_CLOUD=${OSM_VCA_K8S_CLOUDNAME}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/lcm.env
+        echo "OSMLCM_VCA_K8S_CLOUD=${OSM_VCA_K8S_CLOUDNAME}" | sudo tee -a $OSM_DOCKER_WORK_DIR/lcm.env
     else
-        $WORKDIR_SUDO sed -i "s|OSMLCM_VCA_K8S_CLOUD.*|OSMLCM_VCA_K8S_CLOUD=${OSM_VCA_K8S_CLOUDNAME}|g" $OSM_DOCKER_WORK_DIR/lcm.env
+        sudo sed -i "s|OSMLCM_VCA_K8S_CLOUD.*|OSMLCM_VCA_K8S_CLOUD=${OSM_VCA_K8S_CLOUDNAME}|g" $OSM_DOCKER_WORK_DIR/lcm.env
     fi
 
     # RO
     MYSQL_ROOT_PASSWORD=$(generate_secret)
     if [ ! -f $OSM_DOCKER_WORK_DIR/ro-db.env ]; then
-        echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro-db.env
+        echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo tee $OSM_DOCKER_WORK_DIR/ro-db.env
     fi
     if [ ! -f $OSM_DOCKER_WORK_DIR/ro.env ]; then
-        echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/ro.env
+        echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo tee $OSM_DOCKER_WORK_DIR/ro.env
     fi
     if ! grep -Fq "OSMRO_DATABASE_COMMONKEY" $OSM_DOCKER_WORK_DIR/ro.env; then
-        echo "OSMRO_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/ro.env
+        echo "OSMRO_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/ro.env
     fi
 
     # Keystone
     KEYSTONE_DB_PASSWORD=$(generate_secret)
     SERVICE_PASSWORD=$(generate_secret)
     if [ ! -f $OSM_DOCKER_WORK_DIR/keystone-db.env ]; then
-        echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone-db.env
+        echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo tee $OSM_DOCKER_WORK_DIR/keystone-db.env
     fi
     if [ ! -f $OSM_DOCKER_WORK_DIR/keystone.env ]; then
-        echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/keystone.env
-        echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
-        echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/keystone.env
+        echo "ROOT_DB_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo tee $OSM_DOCKER_WORK_DIR/keystone.env
+        echo "KEYSTONE_DB_PASSWORD=${KEYSTONE_DB_PASSWORD}" |sudo tee -a $OSM_DOCKER_WORK_DIR/keystone.env
+        echo "SERVICE_PASSWORD=${SERVICE_PASSWORD}" |sudo tee -a $OSM_DOCKER_WORK_DIR/keystone.env
     fi
 
     # NBI
     if [ ! -f $OSM_DOCKER_WORK_DIR/nbi.env ]; then
-        echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |$WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/nbi.env
-        echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/nbi.env
+        echo "OSMNBI_AUTHENTICATION_SERVICE_PASSWORD=${SERVICE_PASSWORD}" |sudo tee $OSM_DOCKER_WORK_DIR/nbi.env
+        echo "OSMNBI_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/nbi.env
     fi
 
     # MON
     if [ ! -f $OSM_DOCKER_WORK_DIR/mon.env ]; then
-        echo "OSMMON_KEYSTONE_SERVICE_PASSWORD=${SERVICE_PASSWORD}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
-        echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
-        echo "OSMMON_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/mon" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
+        echo "OSMMON_KEYSTONE_SERVICE_PASSWORD=${SERVICE_PASSWORD}" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
+        echo "OSMMON_DATABASE_COMMONKEY=${OSM_DATABASE_COMMONKEY}" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
+        echo "OSMMON_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/mon" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
     fi
 
     if ! grep -Fq "OS_NOTIFIER_URI" $OSM_DOCKER_WORK_DIR/mon.env; then
-        echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |$WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
+        echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
     else
-        $WORKDIR_SUDO sed -i "s|OS_NOTIFIER_URI.*|OS_NOTIFIER_URI=http://$DEFAULT_IP:8662|g" $OSM_DOCKER_WORK_DIR/mon.env
+        sudo sed -i "s|OS_NOTIFIER_URI.*|OS_NOTIFIER_URI=http://$DEFAULT_IP:8662|g" $OSM_DOCKER_WORK_DIR/mon.env
     fi
 
     if ! grep -Fq "OSMMON_VCA_HOST" $OSM_DOCKER_WORK_DIR/mon.env; then
-        echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
+        echo "OSMMON_VCA_HOST=${OSM_VCA_HOST}" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
     else
-        $WORKDIR_SUDO sed -i "s|OSMMON_VCA_HOST.*|OSMMON_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/mon.env
+        sudo sed -i "s|OSMMON_VCA_HOST.*|OSMMON_VCA_HOST=$OSM_VCA_HOST|g" $OSM_DOCKER_WORK_DIR/mon.env
     fi
 
     if ! grep -Fq "OSMMON_VCA_SECRET" $OSM_DOCKER_WORK_DIR/mon.env; then
-        echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
+        echo "OSMMON_VCA_SECRET=${OSM_VCA_SECRET}" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
     else
-        $WORKDIR_SUDO sed -i "s|OSMMON_VCA_SECRET.*|OSMMON_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/mon.env
+        sudo sed -i "s|OSMMON_VCA_SECRET.*|OSMMON_VCA_SECRET=$OSM_VCA_SECRET|g" $OSM_DOCKER_WORK_DIR/mon.env
     fi
 
     if ! grep -Fq "OSMMON_VCA_CACERT" $OSM_DOCKER_WORK_DIR/mon.env; then
-        echo "OSMMON_VCA_CACERT=${OSM_VCA_CACERT}" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/mon.env
+        echo "OSMMON_VCA_CACERT=${OSM_VCA_CACERT}" | sudo tee -a $OSM_DOCKER_WORK_DIR/mon.env
     else
-        $WORKDIR_SUDO sed -i "s|OSMMON_VCA_CACERT.*|OSMMON_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/mon.env
+        sudo sed -i "s|OSMMON_VCA_CACERT.*|OSMMON_VCA_CACERT=${OSM_VCA_CACERT}|g" $OSM_DOCKER_WORK_DIR/mon.env
     fi
 
 
     # POL
     if [ ! -f $OSM_DOCKER_WORK_DIR/pol.env ]; then
-        echo "OSMPOL_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/pol" | $WORKDIR_SUDO tee -a $OSM_DOCKER_WORK_DIR/pol.env
+        echo "OSMPOL_SQL_DATABASE_URI=mysql://root:${MYSQL_ROOT_PASSWORD}@mysql:3306/pol" | sudo tee -a $OSM_DOCKER_WORK_DIR/pol.env
     fi
 
     echo "Finished generation of docker env files"
-}
-
-function generate_osmclient_script () {
-    echo "docker run -ti --network net${OSM_STACK_NAME} ${DOCKER_REGISTRY_URL}${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG}" | $WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/osm
-    $WORKDIR_SUDO chmod +x "$OSM_DOCKER_WORK_DIR/osm"
-    echo "osmclient sidecar container can be found at: $OSM_DOCKER_WORK_DIR/osm"
-}
-
-#installs kubernetes packages
-function install_kube() {
-    sudo apt-get update && sudo apt-get install -y apt-transport-https
-    curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
-    sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
-    sudo apt-get update
-    echo "Installing Kubernetes Packages ..."
-    K8S_VERSION=1.20.11-00
-    sudo apt-get install -y kubelet=${K8S_VERSION} kubeadm=${K8S_VERSION} kubectl=${K8S_VERSION}
-    sudo apt-mark hold kubelet kubeadm kubectl
-}
-
-#initializes kubernetes control plane
-function init_kubeadm() {
-    sudo swapoff -a
-    sudo sed -i.bak '/.*none.*swap/s/^\(.*\)$/#\1/g' /etc/fstab
-    sudo kubeadm init --config $1
-    sleep 5
-}
-
-function kube_config_dir() {
-    [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes"
-    mkdir -p $HOME/.kube
-    sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
-    sudo chown $(id -u):$(id -g) $HOME/.kube/config
-}
-
-function install_k8s_storageclass() {
-    echo "Installing OpenEBS"
-    helm repo add openebs https://openebs.github.io/charts
-    helm repo update
-    helm install --create-namespace --namespace openebs openebs openebs/openebs --version 1.12.0
-    helm ls -n openebs
-    local storageclass_timeout=400
-    local counter=0
-    local storageclass_ready=""
-    echo "Waiting for storageclass"
-    while (( counter < storageclass_timeout ))
-    do
-        kubectl get storageclass openebs-hostpath &> /dev/null
-
-        if [ $? -eq 0 ] ; then
-            echo "Storageclass available"
-            storageclass_ready="y"
-            break
-        else
-            counter=$((counter + 15))
-            sleep 15
-        fi
-    done
-    [ -n "$storageclass_ready" ] || FATAL "Storageclass not ready after $storageclass_timeout seconds. Cannot install openebs"
-    kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
-}
-
-function install_k8s_metallb() {
-    METALLB_IP_RANGE=$DEFAULT_IP/32
-    kubectl apply -f ${OSM_DEVOPS}/installers/k8s/metallb/metallb.yaml \
-    || FATAL "Cannot install MetalLB"
-    echo "apiVersion: v1
-kind: ConfigMap
-metadata:
-  namespace: metallb-system
-  name: config
-data:
-  config: |
-    address-pools:
-    - name: default
-      protocol: layer2
-      addresses:
-      - $METALLB_IP_RANGE" | kubectl apply -f - \
-    || FATAL "Cannot apply MetalLB ConfigMap"
-}
-
-#installs metallb from helm
-function install_helm_metallb() {
-    METALLB_IP_RANGE=$DEFAULT_IP/32
-    echo "configInline:
-  address-pools:
-   - name: default
-     protocol: layer2
-     addresses:
-     - $METALLB_IP_RANGE" | sudo tee -a $OSM_DOCKER_WORK_DIR/metallb-config.yaml
-    helm repo add metallb https://metallb.github.io/metallb
-    helm install --create-namespace --namespace metallb-system metallb metallb/metallb -f $OSM_DOCKER_WORK_DIR/metallb-config.yaml
-}
-
-#checks openebs and metallb readiness
-function check_for_readiness() {
-    # Default input values
-    sampling_period=2       # seconds
-    time_for_readiness=20   # seconds ready
-    time_for_failure=200    # seconds broken
-    OPENEBS_NAMESPACE=openebs
-    METALLB_NAMESPACE=metallb-system
-    # STACK_NAME=osm          # By default, "osm"
-
-    # Equivalent number of samples
-    oks_threshold=$((time_for_readiness/${sampling_period}))     # No. ok samples to declare the system ready
-    failures_threshold=$((time_for_failure/${sampling_period}))  # No. nok samples to declare the system broken
-    failures_in_a_row=0
-    oks_in_a_row=0
-
-    ####################################################################################
-    # Loop to check system readiness
-    ####################################################################################
-    while [[ (${failures_in_a_row} -lt ${failures_threshold}) && (${oks_in_a_row} -lt ${oks_threshold}) ]]
-    do
-        # State of OpenEBS
-        OPENEBS_STATE=$(kubectl get pod -n ${OPENEBS_NAMESPACE} --no-headers 2>&1)
-        OPENEBS_READY=$(echo "${OPENEBS_STATE}" | awk '$2=="1/1" || $2=="2/2" {printf ("%s\t%s\t\n", $1, $2)}')
-        OPENEBS_NOT_READY=$(echo "${OPENEBS_STATE}" | awk '$2!="1/1" && $2!="2/2" {printf ("%s\t%s\t\n", $1, $2)}')
-        COUNT_OPENEBS_READY=$(echo "${OPENEBS_READY}"| grep -v -e '^$' | wc -l)
-        COUNT_OPENEBS_NOT_READY=$(echo "${OPENEBS_NOT_READY}" | grep -v -e '^$' | wc -l)
-
-        # State of MetalLB
-        METALLB_STATE=$(kubectl get pod -n ${METALLB_NAMESPACE} --no-headers 2>&1)
-        METALLB_READY=$(echo "${METALLB_STATE}" | awk '$2=="1/1" || $2=="2/2" {printf ("%s\t%s\t\n", $1, $2)}')
-        METALLB_NOT_READY=$(echo "${METALLB_STATE}" | awk '$2!="1/1" && $2!="2/2" {printf ("%s\t%s\t\n", $1, $2)}')
-        COUNT_METALLB_READY=$(echo "${METALLB_READY}" | grep -v -e '^$' | wc -l)
-        COUNT_METALLB_NOT_READY=$(echo "${METALLB_NOT_READY}" | grep -v -e '^$' | wc -l)
-
-        # OK sample
-        if [[ $((${COUNT_OPENEBS_NOT_READY}+${COUNT_METALLB_NOT_READY})) -eq 0 ]]
-        then
-            ((++oks_in_a_row))
-            failures_in_a_row=0
-            echo -ne ===\> Successful checks: "${oks_in_a_row}"/${oks_threshold}\\r
-        # NOK sample
-        else
-            ((++failures_in_a_row))
-            oks_in_a_row=0
-            echo
-            echo Bootstraping... "${failures_in_a_row}" checks of ${failures_threshold}
-
-            # Reports failed pods in OpenEBS
-            if [[ "${COUNT_OPENEBS_NOT_READY}" -ne 0 ]]
-            then
-                echo "OpenEBS: Waiting for ${COUNT_OPENEBS_NOT_READY} of $((${COUNT_OPENEBS_NOT_READY}+${COUNT_OPENEBS_READY})) pods to be ready:"
-                echo "${OPENEBS_NOT_READY}"
-                echo
-            fi
-
-            # Reports failed statefulsets
-            if [[ "${COUNT_METALLB_NOT_READY}" -ne 0 ]]
-            then
-                echo "MetalLB: Waiting for ${COUNT_METALLB_NOT_READY} of $((${COUNT_METALLB_NOT_READY}+${COUNT_METALLB_READY})) pods to be ready:"
-                echo "${METALLB_NOT_READY}"
-                echo
-            fi
-        fi
-
-        #------------ NEXT SAMPLE
-        sleep ${sampling_period}
-    done
-
-    ####################################################################################
-    # OUTCOME
-    ####################################################################################
-    if [[ (${failures_in_a_row} -ge ${failures_threshold}) ]]
-    then
-        echo
-        FATAL "K8S CLUSTER IS BROKEN"
-    else
-        echo
-        echo "K8S CLUSTER IS READY"
-    fi
-}
-
-#deploys flannel as daemonsets
-function deploy_cni_provider() {
-    CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")"
-    trap 'rm -rf "${CNI_DIR}"' EXIT
-    wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR
-    kubectl apply -f $CNI_DIR
-    [ $? -ne 0 ] && FATAL "Cannot Install Flannel"
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
 #creates secrets from env files which will be used by containers
 function kube_secrets(){
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     kubectl create ns $OSM_STACK_NAME
     kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env
     kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env
@@ -983,50 +502,35 @@
     kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env
     kubectl create secret generic keystone-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/keystone.env
     kubectl create secret generic pol-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/pol.env
-}
-
-#taints K8s master node
-function taint_master_node() {
-    K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}')
-    kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
-    sleep 5
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
 #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
-    $WORKDIR_SUDO  sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_DOCKER_WORK_DIR/osm_pla/pla.yaml
+    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
-}
-
-#Install Helm v3
-function install_helm() {
-    helm > /dev/null 2>&1
-    if [ $? != 0 ] ; then
-        # Helm is not installed. Install helm
-        echo "Helm is not installed, installing ..."
-        curl https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz --output helm-v3.6.3.tar.gz
-        tar -zxvf helm-v3.6.3.tar.gz
-        sudo mv linux-amd64/helm /usr/local/bin/helm
-        rm -r linux-amd64
-        rm helm-v3.6.3.tar.gz
-        helm repo add stable https://charts.helm.sh/stable
-        helm repo update
-    fi
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
 function parse_yaml() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     TAG=$1
     shift
     services=$@
@@ -1034,16 +538,18 @@
         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}"
-                $WORKDIR_SUDO sed -i "s#opensourcemano/pla:.*#${DOCKER_REGISTRY_URL}${DOCKER_USER}/pla:${TAG}#g" ${OSM_DOCKER_WORK_DIR}/osm_pla/pla.yaml
+                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}"
-            $WORKDIR_SUDO sed -i "s#opensourcemano/${module}:.*#${DOCKER_REGISTRY_URL}${DOCKER_USER}/${module}:${TAG}#g" ${OSM_K8S_WORK_DIR}/${module}.yaml
+            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() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     osm_services="nbi lcm ro pol mon ng-ui keystone pla"
     list_of_services=""
     for module in $osm_services; do
@@ -1058,142 +564,20 @@
     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
-        $WORKDIR_SUDO  sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml
+        sudo  sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml
     done
-}
-
-function init_docker_swarm() {
-    if [ "${DEFAULT_MTU}" != "1500" ]; then
-      DOCKER_NETS=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
-      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";}'`
-      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"
-    fi
-    sg docker -c "docker swarm init --advertise-addr ${DEFAULT_IP}"
-    return 0
-}
-
-function create_docker_network() {
-    echo "creating network"
-    sg docker -c "docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} net${OSM_STACK_NAME}"
-    echo "creating network DONE"
-}
-
-function deploy_lightweight() {
-
-    echo "Deploying lightweight build"
-    OSM_NBI_PORT=9999
-    OSM_RO_PORT=9090
-    OSM_KEYSTONE_PORT=5000
-    OSM_UI_PORT=80
-    OSM_MON_PORT=8662
-    OSM_PROM_PORT=9090
-    OSM_PROM_CADVISOR_PORT=8080
-    OSM_PROM_HOSTPORT=9091
-    OSM_GRAFANA_PORT=3000
-    [ -n "$INSTALL_ELK" ] && OSM_ELK_PORT=5601
-    #[ -n "$INSTALL_PERFMON" ] && OSM_PM_PORT=3000
-
-    if [ -n "$NO_HOST_PORTS" ]; then
-        OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT)
-        OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT)
-        OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT)
-        OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT)
-        OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT)
-        OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_PORT)
-        OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT)
-        OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT)
-        #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT)
-        [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT)
-    else
-        OSM_PORTS+=(OSM_NBI_PORTS=$OSM_NBI_PORT:$OSM_NBI_PORT)
-        OSM_PORTS+=(OSM_RO_PORTS=$OSM_RO_PORT:$OSM_RO_PORT)
-        OSM_PORTS+=(OSM_KEYSTONE_PORTS=$OSM_KEYSTONE_PORT:$OSM_KEYSTONE_PORT)
-        OSM_PORTS+=(OSM_UI_PORTS=$OSM_UI_PORT:$OSM_UI_PORT)
-        OSM_PORTS+=(OSM_MON_PORTS=$OSM_MON_PORT:$OSM_MON_PORT)
-        OSM_PORTS+=(OSM_PROM_PORTS=$OSM_PROM_HOSTPORT:$OSM_PROM_PORT)
-        OSM_PORTS+=(OSM_PROM_CADVISOR_PORTS=$OSM_PROM_CADVISOR_PORT:$OSM_PROM_CADVISOR_PORT)
-        OSM_PORTS+=(OSM_GRAFANA_PORTS=$OSM_GRAFANA_PORT:$OSM_GRAFANA_PORT)
-        #[ -n "$INSTALL_PERFMON" ] && OSM_PORTS+=(OSM_PM_PORTS=$OSM_PM_PORT:$OSM_PM_PORT)
-        [ -n "$INSTALL_ELK" ] && OSM_PORTS+=(OSM_ELK_PORTS=$OSM_ELK_PORT:$OSM_ELK_PORT)
-    fi
-    echo "export ${OSM_PORTS[@]}" | $WORKDIR_SUDO tee $OSM_DOCKER_WORK_DIR/osm_ports.sh
-    echo "export OSM_NETWORK=net${OSM_STACK_NAME}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
-    echo "export TAG=${OSM_DOCKER_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
-    echo "export DOCKER_USER=${DOCKER_USER}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
-    echo "export KAFKA_TAG=${KAFKA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
-    echo "export PROMETHEUS_TAG=${PROMETHEUS_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
-    echo "export KEYSTONEDB_TAG=${KEYSTONEDB_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
-    echo "export PROMETHEUS_CADVISOR_TAG=${PROMETHEUS_CADVISOR_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
-    echo "export GRAFANA_TAG=${GRAFANA_TAG}" | $WORKDIR_SUDO tee --append $OSM_DOCKER_WORK_DIR/osm_ports.sh
-
-    pushd $OSM_DOCKER_WORK_DIR
-    if [ -n "$INSTALL_PLA" ]; then
-        track deploy_osm_pla
-        sg docker -c ". ./osm_ports.sh; docker stack deploy -c $OSM_DOCKER_WORK_DIR/docker-compose.yaml -c $OSM_DOCKER_WORK_DIR/docker-compose-ui.yaml -c $OSM_DOCKER_WORK_DIR/osm_pla/docker-compose.yaml $OSM_STACK_NAME"
-    else
-        sg docker -c ". ./osm_ports.sh; docker stack deploy -c $OSM_DOCKER_WORK_DIR/docker-compose.yaml -c $OSM_DOCKER_WORK_DIR/docker-compose-ui.yaml $OSM_STACK_NAME"
-    fi
-    popd
-
-    echo "Finished deployment of lightweight build"
-}
-
-function deploy_elk() {
-    echo "Pulling docker images for ELK"
-    sg docker -c "docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:${ELASTIC_VERSION}" || FATAL "cannot get elasticsearch docker image"
-    sg docker -c "docker pull docker.elastic.co/beats/metricbeat:${ELASTIC_VERSION}" || FATAL "cannot get metricbeat docker image"
-    sg docker -c "docker pull docker.elastic.co/beats/filebeat:${ELASTIC_VERSION}" || FATAL "cannot get filebeat docker image"
-    sg docker -c "docker pull docker.elastic.co/kibana/kibana-oss:${ELASTIC_VERSION}" || FATAL "cannot get kibana docker image"
-    sg docker -c "docker pull bobrik/curator:${ELASTIC_CURATOR_VERSION}" || FATAL "cannot get curator docker image"
-    echo "Finished pulling elk docker images"
-    $WORKDIR_SUDO mkdir -p "$OSM_DOCKER_WORK_DIR/osm_elk"
-    $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/osm_elk/* $OSM_DOCKER_WORK_DIR/osm_elk
-    remove_stack osm_elk
-    echo "Deploying ELK stack"
-    sg docker -c "OSM_NETWORK=net${OSM_STACK_NAME} docker stack deploy -c $OSM_DOCKER_WORK_DIR/osm_elk/docker-compose.yml osm_elk"
-    echo "Waiting for ELK stack to be up and running"
-    time=0
-    step=5
-    timelength=40
-    elk_is_up=1
-    while [ $time -le $timelength ]; do
-        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
-            elk_is_up=0
-            break
-        fi
-        sleep $step
-        time=$((time+step))
-    done
-    if [ $elk_is_up -eq 0 ]; then
-        echo "ELK is up and running. Trying to create index pattern..."
-        #Create index pattern
-        curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
-          "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
-          -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}" 2>/dev/null
-        #Make it the default index
-        curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
-          "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
-          -d"{\"value\":\"filebeat-*\"}" 2>/dev/null
-    else
-        echo "Cannot connect to Kibana to create index pattern."
-        echo "Once Kibana is running, you can use the following instructions to create index pattern:"
-        echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
-          "http://127.0.0.1:5601/api/saved_objects/index-pattern/filebeat-*" \
-          -d"{\"attributes\":{\"title\":\"filebeat-*\",\"timeFieldName\":\"@timestamp\"}}"'
-        echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
-          "http://127.0.0.1:5601/api/kibana/settings/defaultIndex" \
-          -d"{\"value\":\"filebeat-*\"}"'
-    fi
-    echo "Finished deployment of ELK stack"
-    return 0
+    [ -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 \
@@ -1208,37 +592,53 @@
       --version '1.15' \
       --description "OSM Internal Cluster" \
       _system-osm-k8s
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
-function install_lightweight() {
+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 apt_proxy_configured
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function install_osm() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     track checkingroot
     [ "$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
 
-    if [ -n "$KUBERNETES" ]; then
-        [ -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
-
-    else
-        [ -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
-    fi
+    [ -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 proceed
 
-    echo "Installing lightweight build of OSM"
-    LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
-    trap 'rm -rf "${LWTEMPDIR}"' EXIT
+    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]}'`
     [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
-    DEFAULT_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
+
+    # 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
@@ -1257,128 +657,25 @@
 
     track prereqok
 
-    [ -n "$INSTALL_NODOCKER" ] || (install_docker_ce && track docker_ce)
+    [ -n "$INSTALL_NODOCKER" ] || $OSM_DEVOPS/installers/install_docker_ce.sh -p $DOCKER_PROXY_URL -D $OSM_DEVOPS $DEBUG_INSTALL
+
+    track docker_ce
 
     echo "Creating folders for installation"
-    [ ! -d "$OSM_DOCKER_WORK_DIR" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR
-    [ ! -d "$OSM_DOCKER_WORK_DIR/osm_pla" -a -n "$INSTALL_PLA" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR/osm_pla
-    [ -n "$KUBERNETES" ] && $WORKDIR_SUDO cp -b $OSM_DEVOPS/installers/docker/cluster-config.yaml $OSM_DOCKER_WORK_DIR/cluster-config.yaml
+    [ ! -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
 
-    #Installs Kubernetes
-    if [ -n "$KUBERNETES" ]; then
-        install_kube
-        track install_k8s
-        init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
-        kube_config_dir
-        track init_k8s
-        if [ -n "$INSTALL_K8S_MONITOR" ]; then
-            # uninstall OSM MONITORING
-            uninstall_k8s_monitoring
-            track uninstall_k8s_monitoring
-        fi
-        #remove old namespace
-        remove_k8s_namespace $OSM_STACK_NAME
-        deploy_cni_provider
-        taint_master_node
-        install_helm
-        track install_helm
-        install_k8s_storageclass
-        track k8s_storageclass
-        install_helm_metallb
-        track k8s_metallb
-        check_for_readiness
-    else
-        #install_docker_compose
-        [ -n "$INSTALL_NODOCKER" ] || init_docker_swarm
-        track docker_swarm
-    fi
+    $OSM_DEVOPS/installers/install_kubeadm_cluster.sh -i ${DEFAULT_IP} -d ${OSM_DOCKER_WORK_DIR} -D ${OSM_DEVOPS} ${DEBUG_INSTALL}
+    track k8scluster
 
-    [ -z "$INSTALL_NOJUJU" ] && install_juju
-    track juju_install
-
-    if [ -z "$OSM_VCA_HOST" ]; then
-        if [ -z "$CONTROLLER_NAME" ]; then
-
-            if [ -n "$KUBERNETES" ]; then
-                juju_createcontroller_k8s
-                juju_addlxd_cloud
-            else
-                if [ -n "$LXD_CLOUD_FILE" ]; then
-                    [ -z "$LXD_CRED_FILE" ] && FATAL "The installer needs the LXD credential yaml if the LXD is external"
-                    OSM_VCA_CLOUDNAME="lxd-cloud"
-                    juju add-cloud $OSM_VCA_CLOUDNAME $LXD_CLOUD_FILE --force || juju update-cloud $OSM_VCA_CLOUDNAME --client -f $LXD_CLOUD_FILE
-                    juju add-credential $OSM_VCA_CLOUDNAME -f $LXD_CRED_FILE || juju update-credential $OSM_VCA_CLOUDNAME lxd-cloud-creds -f $LXD_CRED_FILE
-                fi
-                juju_createcontroller
-                juju_createproxy
-            fi
-        else
-            OSM_VCA_CLOUDNAME="lxd-cloud"
-            if [ -n "$LXD_CLOUD_FILE" ]; then
-                [ -z "$LXD_CRED_FILE" ] && FATAL "The installer needs the LXD credential yaml if the LXD is external"
-                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
-                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
-            else
-                mkdir -p ~/.osm
-                cat << EOF > ~/.osm/lxd-cloud.yaml
-clouds:
-  lxd-cloud:
-    type: lxd
-    auth-types: [certificate]
-    endpoint: "https://$DEFAULT_IP:8443"
-    config:
-      ssl-hostname-verification: false
-EOF
-                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"
-                local server_cert=`cat /var/snap/lxd/common/lxd/server.crt | sed 's/^/        /'`
-                local client_cert=`cat ~/.osm/client.crt | sed 's/^/        /'`
-                local client_key=`cat ~/.osm/client.key | sed 's/^/        /'`
-                cat << EOF > ~/.osm/lxd-credentials.yaml
-credentials:
-  lxd-cloud:
-    lxd-cloud:
-      auth-type: certificate
-      server-cert: |
-$server_cert
-      client-cert: |
-$client_cert
-      client-key: |
-$client_key
-EOF
-                lxc config trust add local: ~/.osm/client.crt
-                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
-                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
-            fi
-        fi
-        [ -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}'`
-        [ -n "$CONTROLLER_NAME" ] && OSM_VCA_HOST=`juju show-controller $CONTROLLER_NAME |grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
-        [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
-    fi
-    track juju_controller
-
-    if [ -z "$OSM_VCA_SECRET" ]; then
-        [ -z "$CONTROLLER_NAME" ] && OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME)
-        [ -n "$CONTROLLER_NAME" ] && OSM_VCA_SECRET=$(parse_juju_password $CONTROLLER_NAME)
-        [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret"
-    fi
-    if [ -z "$OSM_VCA_PUBKEY" ]; then
-        OSM_VCA_PUBKEY=$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)
-        [ -z "$OSM_VCA_PUBKEY" ] && FATAL "Cannot obtain juju public key"
-    fi
-    if [ -z "$OSM_VCA_CACERT" ]; then
-        [ -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)
-        [ -n "$CONTROLLER_NAME" ] && OSM_VCA_CACERT=$(juju controllers --format json | jq -r --arg controller $CONTROLLER_NAME '.controllers[$controller]["ca-cert"]' | base64 | tr -d \\n)
-       [ -z "$OSM_VCA_CACERT" ] && FATAL "Cannot obtain juju CA certificate"
-    fi
-
-    # Set OSM_VCA_APIPROXY only when it is not a k8s installation
-    if [ -z "$KUBERNETES" ]; then
-        if [ -z "$OSM_VCA_APIPROXY" ]; then
-            OSM_VCA_APIPROXY=$DEFAULT_IP
-            [ -z "$OSM_VCA_APIPROXY" ] && FATAL "Cannot obtain juju api proxy"
-        fi
-        juju_createproxy
-    fi
+    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}
+    set_vca_variables
     track juju
 
     if [ -z "$OSM_DATABASE_COMMONKEY" ]; then
@@ -1390,80 +687,58 @@
     [ -z "$DOCKER_NOBUILD" ] && generate_docker_images
     track docker_build
 
-    if [ -n "$KUBERNETES" ]; then
-        generate_k8s_manifest_files
-    else
-        generate_docker_compose_files
-    fi
+    generate_k8s_manifest_files
     track manifest_files
-    generate_prometheus_grafana_files
     generate_docker_env_files
     track env_files
 
-    if [ -n "$KUBERNETES" ]; then
-        deploy_charmed_services
-        kube_secrets
-        update_manifest_files
-        namespace_vol
-        deploy_osm_services
-        if [ -n "$INSTALL_PLA"]; then
-            # optional PLA install
-            deploy_osm_pla_service
-            track deploy_osm_pla
-        fi
-        track deploy_osm_services_k8s
-        if [ -n "$INSTALL_K8S_MONITOR" ]; then
-            # install OSM MONITORING
-            install_k8s_monitoring
-            track install_k8s_monitoring
-        fi
-    else
-        # remove old stack
-        remove_stack $OSM_STACK_NAME
-        create_docker_network
-        deploy_lightweight
-        generate_osmclient_script
-        track docker_deploy
-        install_prometheus_nodeexporter
-        track nodeexporter
-        [ -n "$INSTALL_VIMEMU" ] && install_vimemu && track vimemu
-        [ -n "$INSTALL_ELK" ] && deploy_elk && track elk
+    deploy_charmed_services
+    kube_secrets
+    update_manifest_files
+    namespace_vol
+    deploy_osm_services
+    if [ -n "$INSTALL_PLA"]; then
+        # optional PLA install
+        deploy_osm_pla_service
+        track deploy_osm_pla
+    fi
+    track deploy_osm_services_k8s
+    if [ -n "$INSTALL_K8S_MONITOR" ]; then
+        # install OSM MONITORING
+        install_k8s_monitoring
+        track install_k8s_monitoring
     fi
 
     [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient
     track osmclient
 
     echo -e "Checking OSM health state..."
-    if [ -n "$KUBERNETES" ]; then
-        $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 "Check OSM status with: kubectl -n ${OSM_STACK_NAME} get all" && \
-        track osm_unhealthy
-    else
-        $OSM_DEVOPS/installers/osm_health.sh -s ${OSM_STACK_NAME} || \
-        echo -e "OSM is not healthy, but will probably converge to a healthy state soon." && \
-        echo -e "Check OSM status with: docker service ls; docker stack ps ${OSM_STACK_NAME}" && \
-        track osm_unhealthy
-    fi
+    $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 "Check OSM status with: kubectl -n ${OSM_STACK_NAME} get all" && \
+    track osm_unhealthy
     track after_healthcheck
 
-    [ -n "$KUBERNETES" ] && add_local_k8scluster
+    add_local_k8scluster
     track add_local_k8scluster
 
     wget -q -O- https://osm-download.etsi.org/ftp/osm-10.0-ten/README2.txt &> /dev/null
     track end
+    sudo find /etc/osm
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
     return 0
 }
 
 function install_to_openstack() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
 
     if [ -z "$2" ]; then
         FATAL "OpenStack installer requires a valid external network name"
     fi
 
     # Install Pip for Python3
-    $WORKDIR_SUDO apt install -y python3-pip python3-venv
-    $WORKDIR_SUDO -H LC_ALL=C python3 -m pip install -U pip
+    sudo apt install -y python3-pip python3-venv
+    sudo -H LC_ALL=C python3 -m pip install -U pip
 
     # Create a venv to avoid conflicts with the host installation
     python3 -m venv $OPENSTACK_PYTHON_VENV
@@ -1504,121 +779,74 @@
     # Exit from venv
     deactivate
 
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
     return 0
 }
 
-function install_vimemu() {
-    echo "\nInstalling vim-emu"
-    EMUTEMPDIR="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX")"
-    trap 'rm -rf "${EMUTEMPDIR}"' EXIT
-    # install prerequisites (OVS is a must for the emulator to work)
-    sudo apt-get install openvswitch-switch
-    # clone vim-emu repository (attention: branch is currently master only)
-    echo "Cloning vim-emu repository ..."
-    git clone https://osm.etsi.org/gerrit/osm/vim-emu.git $EMUTEMPDIR
-    # build vim-emu docker
-    echo "Building vim-emu Docker container..."
-
-    sg docker -c "docker build -t vim-emu-img -f $EMUTEMPDIR/Dockerfile --no-cache $EMUTEMPDIR/" || FATAL "cannot build vim-emu-img docker image"
-    # start vim-emu container as daemon
-    echo "Starting vim-emu Docker container 'vim-emu' ..."
-    if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
-        # in lightweight mode, the emulator needs to be attached to netOSM
-        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"
-    else
-        # classic build mode
-        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"
-    fi
-    echo "Waiting for 'vim-emu' container to start ..."
-    sleep 5
-    export VIMEMU_HOSTNAME=$(sg docker -c "docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu")
-    echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
-    # print vim-emu connection info
-    echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
-    echo "     export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
-    echo -e "To add the emulated VIM to OSM you should do:"
-    echo "     osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
-}
-
 function install_k8s_monitoring() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     # install OSM monitoring
-    $WORKDIR_SUDO chmod +x $OSM_DEVOPS/installers/k8s/*.sh
-    $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh
-}
-
-function uninstall_k8s_monitoring() {
-    # uninstall OSM monitoring
-    $WORKDIR_SUDO $OSM_DEVOPS/installers/k8s/uninstall_osm_k8s_monitoring.sh
+    sudo chmod +x $OSM_DEVOPS/installers/k8s/*.sh
+    sudo $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
 function dump_vars(){
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    echo "APT_PROXY_URL=$APT_PROXY_URL"
     echo "DEVELOP=$DEVELOP"
+    echo "DEBUG_INSTALL=$DEBUG_INSTALL"
+    echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
+    echo "DOCKER_PROXY_URL=$DOCKER_PROXY_URL"
+    echo "DOCKER_REGISTRY_URL=$DOCKER_REGISTRY_URL"
+    echo "DOCKER_USER=$DOCKER_USER"
+    echo "INSTALL_CACHELXDIMAGES=$INSTALL_CACHELXDIMAGES"
     echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
-    echo "UNINSTALL=$UNINSTALL"
-    echo "UPDATE=$UPDATE"
-    echo "RECONFIGURE=$RECONFIGURE"
-    echo "TEST_INSTALLER=$TEST_INSTALLER"
-    echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
-    echo "INSTALL_PLA=$INSTALL_PLA"
-    echo "INSTALL_LXD=$INSTALL_LXD"
+    echo "INSTALL_K8S_MONITOR=$INSTALL_K8S_MONITOR"
     echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
+    echo "INSTALL_LXD=$INSTALL_LXD"
+    echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
+    echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
+    echo "INSTALL_NOLXD=$INSTALL_NOLXD"
     echo "INSTALL_ONLY=$INSTALL_ONLY"
-    echo "INSTALL_ELK=$INSTALL_ELK"
-    echo "INSTALL_NOCACHELXDIMAGES=$INSTALL_NOCACHELXDIMAGES"
-    #echo "INSTALL_PERFMON=$INSTALL_PERFMON"
+    echo "INSTALL_PLA=$INSTALL_PLA"
     echo "INSTALL_TO_OPENSTACK=$INSTALL_TO_OPENSTACK"
+    echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
+    echo "NO_HOST_PORTS=$NO_HOST_PORTS"
     echo "OPENSTACK_PUBLIC_NET_NAME=$OPENSTACK_PUBLIC_NET_NAME"
     echo "OPENSTACK_OPENRC_FILE_OR_CLOUD=$OPENSTACK_OPENRC_FILE_OR_CLOUD"
     echo "OPENSTACK_ATTACH_VOLUME=$OPENSTACK_ATTACH_VOLUME"
     echo "OPENSTACK_SSH_KEY_FILE"="$OPENSTACK_SSH_KEY_FILE"
     echo "OPENSTACK_USERDATA_FILE"="$OPENSTACK_USERDATA_FILE"
     echo "OPENSTACK_VM_NAME"="$OPENSTACK_VM_NAME"
-    echo "INSTALL_K8S_MONITOR=$INSTALL_K8S_MONITOR"
-    echo "TO_REBUILD=$TO_REBUILD"
-    echo "INSTALL_NOLXD=$INSTALL_NOLXD"
-    echo "INSTALL_NODOCKER=$INSTALL_NODOCKER"
-    echo "INSTALL_NOJUJU=$INSTALL_NOJUJU"
+    echo "OSM_DEVOPS=$OSM_DEVOPS"
+    echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
+    echo "OSM_STACK_NAME=$OSM_STACK_NAME"
+    echo "OSM_VCA_HOST=$OSM_VCA_HOST"
+    echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
+    echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
+    echo "OSM_WORK_DIR=$OSM_WORK_DIR"
+    echo "PULL_IMAGES=$PULL_IMAGES"
+    echo "RECONFIGURE=$RECONFIGURE"
     echo "RELEASE=$RELEASE"
     echo "REPOSITORY=$REPOSITORY"
     echo "REPOSITORY_BASE=$REPOSITORY_BASE"
     echo "REPOSITORY_KEY=$REPOSITORY_KEY"
-    echo "OSM_DEVOPS=$OSM_DEVOPS"
-    echo "OSM_VCA_HOST=$OSM_VCA_HOST"
-    echo "OSM_VCA_SECRET=$OSM_VCA_SECRET"
-    echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY"
-    echo "NO_HOST_PORTS=$NO_HOST_PORTS"
-    echo "DOCKER_NOBUILD=$DOCKER_NOBUILD"
-    echo "WORKDIR_SUDO=$WORKDIR_SUDO"
-    echo "OSM_WORK_DIR=$OSM_WORK_DIR"
-    echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG"
-    echo "DOCKER_USER=$DOCKER_USER"
-    echo "OSM_STACK_NAME=$OSM_STACK_NAME"
-    echo "PULL_IMAGES=$PULL_IMAGES"
-    echo "KUBERNETES=$KUBERNETES"
-    echo "DOCKER_REGISTRY_URL=$DOCKER_REGISTRY_URL"
-    echo "DOCKER_PROXY_URL=$DOCKER_PROXY_URL"
     echo "SHOWOPTS=$SHOWOPTS"
+    echo "TEST_INSTALLER=$TEST_INSTALLER"
+    echo "TO_REBUILD=$TO_REBUILD"
+    echo "UNINSTALL=$UNINSTALL"
+    echo "UPDATE=$UPDATE"
     echo "Install from specific refspec (-b): $COMMIT_ID"
-}
-
-function track(){
-    ctime=`date +%s`
-    duration=$((ctime - SESSION_ID))
-    url="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
-    #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
-    event_name="bin"
-    [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name="binsrc"
-    [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name="lxd"
-    [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name="lw"
-    event_name="${event_name}_$1"
-    url="${url}&event=${event_name}&ce_duration=${duration}"
-    wget -q -O /dev/null $url
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
 function parse_docker_registry_url() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
     DOCKER_REGISTRY_USER=$(echo "$DOCKER_REGISTRY_URL" | awk '{split($1,a,"@"); split(a[1],b,":"); print b[1]}')
     DOCKER_REGISTRY_PASSWORD=$(echo "$DOCKER_REGISTRY_URL" | awk '{split($1,a,"@"); split(a[1],b,":"); print b[2]}')
     DOCKER_REGISTRY_URL=$(echo "$DOCKER_REGISTRY_URL" | awk '{split($1,a,"@"); print a[2]}')
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
 }
 
 LXD_VERSION=4.0
@@ -1633,7 +861,9 @@
 SHOWOPTS=""
 COMMIT_ID=""
 ASSUME_YES=""
+APT_PROXY_URL=""
 INSTALL_FROM_SOURCE=""
+DEBUG_INSTALL=""
 RELEASE="ReleaseTEN"
 REPOSITORY="stable"
 INSTALL_VIMEMU=""
@@ -1650,16 +880,13 @@
 OPENSTACK_VM_NAME="server-osm"
 OPENSTACK_PYTHON_VENV="$HOME/.virtual-envs/osm"
 INSTALL_ONLY=""
-INSTALL_ELK=""
 TO_REBUILD=""
 INSTALL_NOLXD=""
 INSTALL_NODOCKER=""
 INSTALL_NOJUJU=""
-KUBERNETES="y"
 INSTALL_K8S_MONITOR=""
 INSTALL_NOHOSTCLIENT=""
-INSTALL_NOCACHELXDIMAGES=""
-SESSION_ID=`date +%s`
+INSTALL_CACHELXDIMAGES=""
 OSM_DEVOPS=
 OSM_VCA_HOST=
 OSM_VCA_SECRET=
@@ -1671,7 +898,6 @@
 DOCKER_NOBUILD=""
 REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
 REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian"
-WORKDIR_SUDO=sudo
 OSM_WORK_DIR="/etc/osm"
 OSM_DOCKER_WORK_DIR="/etc/osm/docker"
 OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods"
@@ -1696,8 +922,11 @@
 DOCKER_PROXY_URL=
 MODULE_DOCKER_TAG=
 
-while getopts ":b:r:c:n:k:u:R:D:o:O:m:N:H:S:s:w:t:U:P:A:l:L:K:d:p:T:f:F:-: hy" o; do
+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=""
@@ -1706,12 +935,6 @@
             REPOSITORY="${OPTARG}"
             REPO_ARGS+=(-r "$REPOSITORY")
             ;;
-        c)
-            [ "${OPTARG}" == "swarm" ] && KUBERNETES="" && REPO_ARGS+=(-c "${OPTARG}") && continue
-            [ "${OPTARG}" == "k8s" ] && KUBERNETES="y" && continue
-            echo -e "Invalid argument for -i : ' $OPTARG'\n" >&2
-            usage && exit 1
-            ;;
         k)
             REPOSITORY_KEY="${OPTARG}"
             REPO_ARGS+=(-k "$REPOSITORY_KEY")
@@ -1729,8 +952,6 @@
             ;;
         o)
             INSTALL_ONLY="y"
-            [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
-            [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
             [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue
             ;;
         O)
@@ -1775,12 +996,7 @@
             OSM_VCA_SECRET="${OPTARG}"
             ;;
         s)
-            OSM_STACK_NAME="${OPTARG}" && [ -n "$KUBERNETES" ] && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0
-            ;;
-        w)
-            # when specifying workdir, do not use sudo for access
-            WORKDIR_SUDO=
-            OSM_WORK_DIR="${OPTARG}"
+            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}"
@@ -1816,6 +1032,7 @@
         -)
             [ "${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
@@ -1824,12 +1041,9 @@
             [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
             [ "${OPTARG}" == "nolxd" ] && INSTALL_NOLXD="y" && continue
             [ "${OPTARG}" == "nodocker" ] && INSTALL_NODOCKER="y" && continue
-            [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT="y" && continue
-            [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
-            [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK="y" && continue
             [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
             [ "${OPTARG}" == "nohostports" ] && NO_HOST_PORTS="y" && continue
-            [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
+            [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="--nojuju" && continue
             [ "${OPTARG}" == "nodockerbuild" ] && DOCKER_NOBUILD="y" && continue
             [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue
             [ "${OPTARG}" == "pullimages" ] && continue
@@ -1848,7 +1062,8 @@
             [ "${OPTARG}" == "registry" ] && continue
             [ "${OPTARG}" == "pla" ] && INSTALL_PLA="y" && continue
             [ "${OPTARG}" == "volume" ] && OPENSTACK_ATTACH_VOLUME="true" && continue
-            [ "${OPTARG}" == "nocachelxdimages" ] && INSTALL_NOCACHELXDIMAGES="y" && continue
+            [ "${OPTARG}" == "nocachelxdimages" ] && continue
+            [ "${OPTARG}" == "cachelxdimages" ] && INSTALL_CACHELXDIMAGES="--cachelxdimages" && continue
             echo -e "Invalid option: '--$OPTARG'\n" >&2
             usage && exit 1
             ;;
@@ -1872,32 +1087,46 @@
     esac
 done
 
-[ -n "$DOCKER_REGISTRY_URL" ] && parse_docker_registry_url
-[ -n "$TO_REBUILD" ] && [ "$TO_REBUILD" != " NONE" ] && echo $TO_REBUILD | grep -q NONE && FATAL "Incompatible option: -m NONE cannot be used with other -m options"
-[ -n "$TO_REBUILD" ] && [ "$TO_REBUILD" == " PLA" ] && [ -z "$INSTALL_PLA" ] && FATAL "Incompatible option: -m PLA cannot be used without --pla option"
+source $OSM_DEVOPS/common/all_funcs
 
-if [ -n "$SHOWOPTS" ]; then
-    dump_vars
+[ -z "${DEBUG_INSTALL}" ] || DEBUG Debug is on
+[ -n "$SHOWOPTS" ] && dump_vars && exit 0
+
+# 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 "$@"
+    else
+        ${OSM_DEVOPS}/installers/uninstall_osm.sh "$@"
+    fi
+    echo -e "\nDONE"
     exit 0
 fi
 
+# Charmed installation
 if [ -n "$CHARMED" ]; then
-     if [ -n "$UNINSTALL" ]; then
-        ${OSM_DEVOPS}/installers/charmed_uninstall.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D /usr/share/osm-devops -t $DOCKER_TAG "$@"
-     else
-        ${OSM_DEVOPS}/installers/charmed_install.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D /usr/share/osm-devops -t $DOCKER_TAG "$@"
-     fi
-
-     exit 0
+    ${OSM_DEVOPS}/installers/charmed_install.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D $OSM_DEVOPS -t $DOCKER_TAG "$@"
+    echo -e "\nDONE"
+    exit 0
 fi
 
+# Installation to Openstack
+if [ -n "$INSTALL_TO_OPENSTACK" ]; then
+    install_to_openstack $OPENSTACK_OPENRC_FILE_OR_CLOUD $OPENSTACK_PUBLIC_NET_NAME $OPENSTACK_ATTACH_VOLUME
+    echo -e "\nDONE"
+    exit 0
+fi
+
+# Community_installer
+[ -n "$DOCKER_REGISTRY_URL" ] && parse_docker_registry_url
+[ -n "$TO_REBUILD" ] && [ "$TO_REBUILD" != " NONE" ] && echo $TO_REBUILD | grep -q NONE && FATAL "Incompatible option: -m NONE cannot be used with other -m options"
+[ -n "$TO_REBUILD" ] && [ "$TO_REBUILD" == " PLA" ] && [ -z "$INSTALL_PLA" ] && FATAL "Incompatible option: -m PLA cannot be used without --pla option"
+
 # if develop, we force master
 [ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
 
 need_packages="git wget curl tar"
 
-[ -n "$INSTALL_TO_OPENSTACK" ] && install_to_openstack $OPENSTACK_OPENRC_FILE_OR_CLOUD $OPENSTACK_PUBLIC_NET_NAME $OPENSTACK_ATTACH_VOLUME && echo -e "\nDONE" && exit 0
-
 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." \
@@ -1933,22 +1162,19 @@
     fi
 fi
 
-. $OSM_DEVOPS/common/all_funcs
-
 [ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME"
-[ -n "$KUBERNETES" ] && OSM_K8S_WORK_DIR="$OSM_DOCKER_WORK_DIR/osm_pods" && OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
-[ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight && echo -e "\nDONE" && exit 0
-[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
-#[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
-[ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
+OSM_K8S_WORK_DIR="$OSM_DOCKER_WORK_DIR/osm_pods" && OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}"
 [ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_K8S_MONITOR" ] && install_k8s_monitoring
 [ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
 
 #Installation starts here
 wget -q -O- https://osm-download.etsi.org/ftp/osm-10.0-ten/README.txt &> /dev/null
-track start
+OSM_INSTALLATION_ID="$(date +%s)-$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)"
 
-[ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight && echo -e "\nDONE" && exit 0
+track start release $RELEASE none none docker_tag $OSM_DOCKER_TAG 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
@@ -1958,14 +1184,7 @@
 lxd --version &>/dev/null || FATAL "lxd not present, exiting."
 [ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
 
-# use local devops for containers
-export OSM_USE_LOCAL_DEVOPS=true
-
-#Install osmclient
-
-#Install vim-emu (optional)
-[ -n "$INSTALL_VIMEMU" ] && install_docker_ce && install_vimemu
-
 wget -q -O- https://osm-download.etsi.org/ftp/osm-10.0-ten/README2.txt &> /dev/null
 track end
 echo -e "\nDONE"
+
diff --git a/installers/install_docker_ce.sh b/installers/install_docker_ce.sh
new file mode 100755
index 0000000..9d6387f
--- /dev/null
+++ b/installers/install_docker_ce.sh
@@ -0,0 +1,114 @@
+#!/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.
+#
+
+set +eux
+
+function install_docker_ce() {
+    # installs and configures Docker CE
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    echo "Installing Docker CE ..."
+    sudo apt-get -qq update
+    sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
+    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add -
+    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
+    sudo apt-get -qq update
+    sudo apt-get install -y docker-ce
+#    echo "Reconfiguring Docker to use systemd as cgroup driver"
+#    if [ ! -f /etc/docker/daemon.json ]; then
+#        sudo bash -c "cat <<EOF > /etc/docker/daemon.json
+#{
+#  \"exec-opts\": [\"native.cgroupdriver=systemd\"],
+#  \"log-driver\": \"json-file\",
+#  \"log-opts\": {
+#    \"max-size\": \"100m\"
+#  },
+#  \"storage-driver\": \"overlay2\"
+#}
+#EOF"
+#    else
+#        sudo sed -i "s|native.cgroupdriver=cgroupfs|native.cgroupdriver=systemd|" /etc/docker/daemon.json
+#    fi
+    echo "Adding user to group 'docker'"
+    sudo groupadd -f docker
+    sudo usermod -aG docker $USER
+    sleep 2
+    #sudo systemctl enable docker
+    #sudo systemctl daemon-reload
+    #sudo systemctl restart docker
+    sudo service docker restart
+    echo "... restarted Docker service"
+    if [ -n "${DOCKER_PROXY_URL}" ]; then
+        echo "Configuring docker proxy ..."
+        if [ -f /etc/docker/daemon.json ]; then
+            if grep -q registry-mirrors /etc/docker/daemon.json; then
+                sudo sed -i "s|registry-mirrors.*|registry-mirrors\": [\"${DOCKER_PROXY_URL}\"] |" /etc/docker/daemon.json
+            else
+                sudo sed -i "s|^{|{\n  \"registry-mirrors\": [\"${DOCKER_PROXY_URL}\"],|" /etc/docker/daemon.json
+            fi
+        else
+            sudo bash -c "cat << EOF > /etc/docker/daemon.json
+{
+  \"registry-mirrors\": [\"${DOCKER_PROXY_URL}\"]
+}
+EOF"
+        fi
+        #sudo systemctl enable docker
+        sudo systemctl daemon-reload
+        #sudo systemctl restart docker
+        sudo service docker restart
+        echo "... restarted Docker service again"
+    fi
+    [ -z "${DEBUG_INSTALL}" ] || ! echo "File: /etc/docker/daemon.json" || cat /etc/docker/daemon.json
+    sg docker -c "docker version" || FATAL "Docker installation failed"
+    echo "... Docker CE installation done"
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+    return 0
+}
+
+while getopts ":D:p:-: " o; do
+    case "${o}" in
+        D)
+            OSM_DEVOPS="${OPTARG}"
+            ;;
+        p)
+            DOCKER_PROXY_URL="${OPTARG}"
+            ;;
+        -)
+            [ "${OPTARG}" == "debug" ] && DEBUG_INSTALL="y" && continue
+            echo -e "Invalid option: '--$OPTARG'\n" >&2
+            exit 1
+            ;;
+        :)
+            echo "Option -$OPTARG requires an argument" >&2
+            exit 1
+            ;;
+        \?)
+            echo -e "Invalid option: '-$OPTARG'\n" >&2
+            exit 1
+            ;;
+        *)
+            exit 1
+            ;;
+    esac
+done
+
+source $OSM_DEVOPS/common/logging
+
+echo "DEBUG_INSTALL=$DEBUG_INSTALL"
+echo "DOCKER_PROXY_URL=$DOCKER_PROXY_URL"
+echo "USER=$USER"
+
+install_docker_ce
+
diff --git a/installers/install_juju.sh b/installers/install_juju.sh
new file mode 100755
index 0000000..7181981
--- /dev/null
+++ b/installers/install_juju.sh
@@ -0,0 +1,270 @@
+#!/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.
+#
+
+function usage(){
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    echo -e "usage: $0 [OPTIONS]"
+    echo -e "Install Juju for OSM"
+    echo -e "  OPTIONS"
+    echo -e "     -h / --help:    print this help"
+    echo -e "     -D <devops path> use local devops installation path"
+    echo -e "     -s <stack name> or <namespace>  user defined stack name when installed using swarm or namespace when installed using k8s, default is osm"
+    echo -e "     -H <VCA host>   use specific juju host controller IP"
+    echo -e "     -S <VCA secret> use VCA/juju secret key"
+    echo -e "     -P <VCA pubkey> use VCA/juju public key file"
+    echo -e "     -l:             LXD cloud yaml file"
+    echo -e "     -L:             LXD credentials yaml file"
+    echo -e "     -K:             Specifies the name of the controller to use - The controller must be already bootstrapped"
+    echo -e "     --debug:        debug mode"
+    echo -e "     --cachelxdimages:  cache local lxd images, create cronjob for that cache (will make installation longer)"
+    echo -e "     --nojuju:       do not juju, assumes already installed"
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function update_juju_images(){
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    crontab -l | grep update-juju-lxc-images || (crontab -l 2>/dev/null; echo "0 4 * * 6 $USER ${OSM_DEVOPS}/installers/update-juju-lxc-images --xenial --bionic") | crontab -
+    ${OSM_DEVOPS}/installers/update-juju-lxc-images --xenial --bionic
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function install_juju() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    echo "Installing juju"
+    sudo snap install juju --classic --channel=$JUJU_VERSION/stable
+    [[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}"
+    [ -n "$INSTALL_CACHELXDIMAGES" ] && update_juju_images
+    echo "Finished installation of juju"
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+    return 0
+}
+
+function juju_createcontroller_k8s(){
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    cat $HOME/.kube/config | juju add-k8s $OSM_VCA_K8S_CLOUDNAME --client \
+    || FATAL "Failed to add K8s endpoint and credential for client in cloud $OSM_VCA_K8S_CLOUDNAME"
+    juju bootstrap $OSM_VCA_K8S_CLOUDNAME $OSM_STACK_NAME  \
+            --config controller-service-type=loadbalancer \
+            --agent-version=$JUJU_AGENT_VERSION \
+    || FATAL "Failed to bootstrap controller $OSM_STACK_NAME in cloud $OSM_VCA_K8S_CLOUDNAME"
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function juju_addlxd_cloud(){
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    mkdir -p /tmp/.osm
+    OSM_VCA_CLOUDNAME="lxd-cloud"
+    LXDENDPOINT=$DEFAULT_IP
+    LXD_CLOUD=/tmp/.osm/lxd-cloud.yaml
+    LXD_CREDENTIALS=/tmp/.osm/lxd-credentials.yaml
+
+    cat << EOF > $LXD_CLOUD
+clouds:
+  $OSM_VCA_CLOUDNAME:
+    type: lxd
+    auth-types: [certificate]
+    endpoint: "https://$LXDENDPOINT:8443"
+    config:
+      ssl-hostname-verification: false
+EOF
+    openssl req -nodes -new -x509 -keyout /tmp/.osm/client.key -out /tmp/.osm/client.crt -days 365 -subj "/C=FR/ST=Nice/L=Nice/O=ETSI/OU=OSM/CN=osm.etsi.org"
+    local server_cert=`cat /var/snap/lxd/common/lxd/server.crt | sed 's/^/        /'`
+    local client_cert=`cat /tmp/.osm/client.crt | sed 's/^/        /'`
+    local client_key=`cat /tmp/.osm/client.key | sed 's/^/        /'`
+
+    cat << EOF > $LXD_CREDENTIALS
+credentials:
+  $OSM_VCA_CLOUDNAME:
+    lxd-cloud:
+      auth-type: certificate
+      server-cert: |
+$server_cert
+      client-cert: |
+$client_cert
+      client-key: |
+$client_key
+EOF
+    lxc config trust add local: /tmp/.osm/client.crt
+    juju add-cloud -c $OSM_STACK_NAME $OSM_VCA_CLOUDNAME $LXD_CLOUD --force
+    juju add-credential -c $OSM_STACK_NAME $OSM_VCA_CLOUDNAME -f $LXD_CREDENTIALS
+    sg lxd -c "lxd waitready"
+    juju controller-config features=[k8s-operators]
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function juju_createcontroller() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then
+        # Not found created, create the controller
+        sudo usermod -a -G lxd ${USER}
+        sg lxd -c "juju bootstrap --bootstrap-series=xenial --agent-version=$JUJU_AGENT_VERSION $OSM_VCA_CLOUDNAME $OSM_STACK_NAME"
+    fi
+    [ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed"
+    juju controller-config features=[k8s-operators]
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+#Safe unattended install of iptables-persistent
+function check_install_iptables_persistent(){
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    echo -e "\nChecking required packages: iptables-persistent"
+    if ! dpkg -l iptables-persistent &>/dev/null; then
+        echo -e "    Not installed.\nInstalling iptables-persistent requires root privileges"
+        echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections
+        echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections
+        sudo apt-get -yq install iptables-persistent
+    fi
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function juju_createproxy() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    check_install_iptables_persistent
+
+    if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
+        sudo iptables -t nat -A PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
+        sudo netfilter-persistent save
+    fi
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+DEBUG_INSTALL=""
+INSTALL_CACHELXDIMAGES=""
+INSTALL_NOJUJU=""
+JUJU_AGENT_VERSION=2.9.17
+JUJU_VERSION=2.9
+OSM_DEVOPS=
+OSM_STACK_NAME=osm
+OSM_VCA_HOST=
+OSM_VCA_CLOUDNAME="localhost"
+OSM_VCA_K8S_CLOUDNAME="k8scloud"
+RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'
+
+while getopts ":D:i:s:H:l:L:K:-: h" o; do
+    case "${o}" in
+        D)
+            OSM_DEVOPS="${OPTARG}"
+            ;;
+        i)
+            DEFAULT_IP="${OPTARG}"
+            ;;
+        s)
+            OSM_STACK_NAME="${OPTARG}" && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0
+            ;;
+        H)
+            OSM_VCA_HOST="${OPTARG}"
+            ;;
+        l)
+            LXD_CLOUD_FILE="${OPTARG}"
+            ;;
+        L)
+            LXD_CRED_FILE="${OPTARG}"
+            ;;
+        K)
+            CONTROLLER_NAME="${OPTARG}"
+            ;;
+        -)
+            [ "${OPTARG}" == "help" ] && usage && exit 0
+            [ "${OPTARG}" == "debug" ] && DEBUG_INSTALL="--debug" && continue
+            [ "${OPTARG}" == "nojuju" ] && INSTALL_NOJUJU="y" && continue
+            [ "${OPTARG}" == "cachelxdimages" ] && INSTALL_CACHELXDIMAGES="y" && 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
+            ;;
+        *)
+            usage && exit 1
+            ;;
+    esac
+done
+
+source $OSM_DEVOPS/common/logging
+source $OSM_DEVOPS/common/track
+
+echo "DEBUG_INSTALL=$DEBUG_INSTALL"
+echo "DEFAULT_IP=$DEFAULT_IP"
+echo "OSM_DEVOPS=$OSM_DEVOPS"
+echo "HOME=$HOME"
+
+[ -z "$INSTALL_NOJUJU" ] && install_juju
+track juju_install
+
+if [ -z "$OSM_VCA_HOST" ]; then
+    if [ -z "$CONTROLLER_NAME" ]; then
+        juju_createcontroller_k8s
+        juju_addlxd_cloud
+        if [ -n "$LXD_CLOUD_FILE" ]; then
+            [ -z "$LXD_CRED_FILE" ] && FATAL "The installer needs the LXD credential yaml if the LXD is external"
+            OSM_VCA_CLOUDNAME="lxd-cloud"
+            juju add-cloud $OSM_VCA_CLOUDNAME $LXD_CLOUD_FILE --force || juju update-cloud $OSM_VCA_CLOUDNAME --client -f $LXD_CLOUD_FILE
+            juju add-credential $OSM_VCA_CLOUDNAME -f $LXD_CRED_FILE || juju update-credential $OSM_VCA_CLOUDNAME lxd-cloud-creds -f $LXD_CRED_FILE
+        fi
+        juju_createcontroller
+        juju_createproxy
+    else
+        OSM_VCA_CLOUDNAME="lxd-cloud"
+        if [ -n "$LXD_CLOUD_FILE" ]; then
+            [ -z "$LXD_CRED_FILE" ] && FATAL "The installer needs the LXD credential yaml if the LXD is external"
+            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
+            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
+        else
+            mkdir -p ~/.osm
+            cat << EOF > ~/.osm/lxd-cloud.yaml
+clouds:
+  lxd-cloud:
+    type: lxd
+    auth-types: [certificate]
+    endpoint: "https://$DEFAULT_IP:8443"
+    config:
+      ssl-hostname-verification: false
+EOF
+            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"
+            local server_cert=`cat /var/snap/lxd/common/lxd/server.crt | sed 's/^/        /'`
+            local client_cert=`cat ~/.osm/client.crt | sed 's/^/        /'`
+            local client_key=`cat ~/.osm/client.key | sed 's/^/        /'`
+            cat << EOF > ~/.osm/lxd-credentials.yaml
+credentials:
+  lxd-cloud:
+    lxd-cloud:
+      auth-type: certificate
+      server-cert: |
+$server_cert
+      client-cert: |
+$client_cert
+      client-key: |
+$client_key
+EOF
+            lxc config trust add local: ~/.osm/client.crt
+            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
+            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
+        fi
+    fi
+    [ -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}'`
+    [ -n "$CONTROLLER_NAME" ] && OSM_VCA_HOST=`juju show-controller $CONTROLLER_NAME |grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
+    [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address"
+fi
+track juju_controller
+
+
diff --git a/installers/install_kubeadm_cluster.sh b/installers/install_kubeadm_cluster.sh
new file mode 100755
index 0000000..1e72f37
--- /dev/null
+++ b/installers/install_kubeadm_cluster.sh
@@ -0,0 +1,296 @@
+#!/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.
+#
+
+set +eux
+
+#installs kubernetes packages
+function install_kube() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    K8S_VERSION=1.20.11-00
+    # To check other available versions, run the following command
+    # curl -s https://packages.cloud.google.com/apt/dists/kubernetes-xenial/main/binary-amd64/Packages | grep Version | awk '{print $2}'
+    sudo apt-get update && sudo apt-get install -y apt-transport-https
+    sudo apt-get update && sudo apt-get install -y apt-transport-https
+    curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
+    sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
+    sudo apt-get update
+    echo "Installing Kubernetes Packages ..."
+    sudo apt-get install -y kubelet=${K8S_VERSION} kubeadm=${K8S_VERSION} kubectl=${K8S_VERSION}
+    sudo apt-mark hold kubelet kubeadm kubectl
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+#initializes kubernetes control plane
+function init_kubeadm() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    sudo swapoff -a
+    sudo sed -i.bak '/.*none.*swap/s/^\(.*\)$/#\1/g' /etc/fstab
+    sudo kubeadm init --config $1
+    sleep 5
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function kube_config_dir() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    K8S_MANIFEST_DIR="/etc/kubernetes/manifests"
+    [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes"
+    mkdir -p $HOME/.kube
+    sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
+    sudo chown $(id -u):$(id -g) $HOME/.kube/config
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+#deploys flannel as daemonsets
+function deploy_cni_provider() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")"
+    trap 'rm -rf "${CNI_DIR}"' EXIT
+    wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR
+    kubectl apply -f $CNI_DIR
+    [ $? -ne 0 ] && FATAL "Cannot Install Flannel"
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+#taints K8s master node
+function taint_master_node() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}')
+    kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
+    sleep 5
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+#Install Helm v3
+function install_helm() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    helm > /dev/null 2>&1
+    if [ $? != 0 ] ; then
+        # Helm is not installed. Install helm
+        echo "Helm is not installed, installing ..."
+        curl https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz --output helm-v3.6.3.tar.gz
+        tar -zxvf helm-v3.6.3.tar.gz
+        sudo mv linux-amd64/helm /usr/local/bin/helm
+        rm -r linux-amd64
+        rm helm-v3.6.3.tar.gz
+        helm repo add stable https://charts.helm.sh/stable
+        helm repo update
+    fi
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+function install_k8s_storageclass() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    OPENEBS_VERSION="1.12.0"
+    echo "Installing OpenEBS"
+    helm repo add openebs https://openebs.github.io/charts
+    helm repo update
+    helm install --create-namespace --namespace openebs openebs openebs/openebs --version ${OPENEBS_VERSION}
+    helm ls -n openebs
+    local storageclass_timeout=400
+    local counter=0
+    local storageclass_ready=""
+    echo "Waiting for storageclass"
+    while (( counter < storageclass_timeout ))
+    do
+        kubectl get storageclass openebs-hostpath &> /dev/null
+
+        if [ $? -eq 0 ] ; then
+            echo "Storageclass available"
+            storageclass_ready="y"
+            break
+        else
+            counter=$((counter + 15))
+            sleep 15
+        fi
+    done
+    [ -n "$storageclass_ready" ] || FATAL "Storageclass not ready after $storageclass_timeout seconds. Cannot install openebs"
+    kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+#installs metallb from helm
+function install_helm_metallb() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    echo "Installing MetalLB"
+    METALLB_VERSION="0.11.0"
+    METALLB_IP_RANGE="$DEFAULT_IP/32"
+    echo "configInline:
+  address-pools:
+   - name: default
+     protocol: layer2
+     addresses:
+     - $METALLB_IP_RANGE" | sudo tee -a ${OSM_DOCKER_WORK_DIR}/metallb-config.yaml
+    helm repo add metallb https://metallb.github.io/metallb
+    helm repo update
+    helm install --create-namespace --namespace metallb-system metallb metallb/metallb --version ${METALLB_VERSION} -f ${OSM_DOCKER_WORK_DIR}/metallb-config.yaml
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+#checks openebs and metallb readiness
+function check_for_readiness() {
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    # Default input values
+    sampling_period=2       # seconds
+    time_for_readiness=20   # seconds ready
+    time_for_failure=200    # seconds broken
+    OPENEBS_NAMESPACE=openebs
+    METALLB_NAMESPACE=metallb-system
+    # STACK_NAME=osm          # By default, "osm"
+
+    # Equivalent number of samples
+    oks_threshold=$((time_for_readiness/${sampling_period}))     # No. ok samples to declare the system ready
+    failures_threshold=$((time_for_failure/${sampling_period}))  # No. nok samples to declare the system broken
+    failures_in_a_row=0
+    oks_in_a_row=0
+
+    ####################################################################################
+    # Loop to check system readiness
+    ####################################################################################
+    while [[ (${failures_in_a_row} -lt ${failures_threshold}) && (${oks_in_a_row} -lt ${oks_threshold}) ]]
+    do
+        # State of OpenEBS
+        OPENEBS_STATE=$(kubectl get pod -n ${OPENEBS_NAMESPACE} --no-headers 2>&1)
+        OPENEBS_READY=$(echo "${OPENEBS_STATE}" | awk '$2=="1/1" || $2=="2/2" {printf ("%s\t%s\t\n", $1, $2)}')
+        OPENEBS_NOT_READY=$(echo "${OPENEBS_STATE}" | awk '$2!="1/1" && $2!="2/2" {printf ("%s\t%s\t\n", $1, $2)}')
+        COUNT_OPENEBS_READY=$(echo "${OPENEBS_READY}"| grep -v -e '^$' | wc -l)
+        COUNT_OPENEBS_NOT_READY=$(echo "${OPENEBS_NOT_READY}" | grep -v -e '^$' | wc -l)
+
+        # State of MetalLB
+        METALLB_STATE=$(kubectl get pod -n ${METALLB_NAMESPACE} --no-headers 2>&1)
+        METALLB_READY=$(echo "${METALLB_STATE}" | awk '$2=="1/1" || $2=="2/2" {printf ("%s\t%s\t\n", $1, $2)}')
+        METALLB_NOT_READY=$(echo "${METALLB_STATE}" | awk '$2!="1/1" && $2!="2/2" {printf ("%s\t%s\t\n", $1, $2)}')
+        COUNT_METALLB_READY=$(echo "${METALLB_READY}" | grep -v -e '^$' | wc -l)
+        COUNT_METALLB_NOT_READY=$(echo "${METALLB_NOT_READY}" | grep -v -e '^$' | wc -l)
+
+        # OK sample
+        if [[ $((${COUNT_OPENEBS_NOT_READY}+${COUNT_METALLB_NOT_READY})) -eq 0 ]]
+        then
+            ((++oks_in_a_row))
+            failures_in_a_row=0
+            echo -ne ===\> Successful checks: "${oks_in_a_row}"/${oks_threshold}\\r
+        # NOK sample
+        else
+            ((++failures_in_a_row))
+            oks_in_a_row=0
+            echo
+            echo Bootstraping... "${failures_in_a_row}" checks of ${failures_threshold}
+
+            # Reports failed pods in OpenEBS
+            if [[ "${COUNT_OPENEBS_NOT_READY}" -ne 0 ]]
+            then
+                echo "OpenEBS: Waiting for ${COUNT_OPENEBS_NOT_READY} of $((${COUNT_OPENEBS_NOT_READY}+${COUNT_OPENEBS_READY})) pods to be ready:"
+                echo "${OPENEBS_NOT_READY}"
+                echo
+            fi
+
+            # Reports failed statefulsets
+            if [[ "${COUNT_METALLB_NOT_READY}" -ne 0 ]]
+            then
+                echo "MetalLB: Waiting for ${COUNT_METALLB_NOT_READY} of $((${COUNT_METALLB_NOT_READY}+${COUNT_METALLB_READY})) pods to be ready:"
+                echo "${METALLB_NOT_READY}"
+                echo
+            fi
+        fi
+
+        #------------ NEXT SAMPLE
+        sleep ${sampling_period}
+    done
+
+    ####################################################################################
+    # OUTCOME
+    ####################################################################################
+    if [[ (${failures_in_a_row} -ge ${failures_threshold}) ]]
+    then
+        echo
+        FATAL "K8S CLUSTER IS BROKEN"
+    else
+        echo
+        echo "K8S CLUSTER IS READY"
+    fi
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+#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
+}
+
+# main
+while getopts ":D:d:i:-: " o; do
+    case "${o}" in
+        i)
+            DEFAULT_IP="${OPTARG}"
+            ;;
+        d)
+            OSM_DOCKER_WORK_DIR="${OPTARG}"
+            ;;
+        D)
+            OSM_DEVOPS="${OPTARG}"
+            ;;
+        -)
+            [ "${OPTARG}" == "debug" ] && DEBUG_INSTALL="y" && continue
+            echo -e "Invalid option: '--$OPTARG'\n" >&2
+            exit 1
+            ;;
+        :)
+            echo "Option -$OPTARG requires an argument" >&2
+            exit 1
+            ;;
+        \?)
+            echo -e "Invalid option: '-$OPTARG'\n" >&2
+            exit 1
+            ;;
+        *)
+            exit 1
+            ;;
+    esac
+done
+
+source $OSM_DEVOPS/common/logging
+source $OSM_DEVOPS/common/track
+
+echo "DEBUG_INSTALL=$DEBUG_INSTALL"
+echo "DEFAULT_IP=$DEFAULT_IP"
+echo "OSM_DEVOPS=$OSM_DEVOPS"
+echo "OSM_DOCKER_WORK_DIR=$OSM_DOCKER_WORK_DIR"
+echo "INSTALL_K8S_MONITOR=$INSTALL_K8S_MONITOR"
+echo "HOME=$HOME"
+
+
+install_kube
+track install_k8s
+init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
+kube_config_dir
+track init_k8s
+if [ -n "$INSTALL_K8S_MONITOR" ]; then
+    # uninstall OSM MONITORING
+    uninstall_k8s_monitoring
+    track uninstall_k8s_monitoring
+fi
+#remove old namespace
+remove_k8s_namespace osm
+deploy_cni_provider
+taint_master_node
+install_helm
+track install_helm
+install_k8s_storageclass
+track k8s_storageclass
+install_helm_metallb
+track k8s_metallb
+check_for_readiness
+track k8s_ready
+
diff --git a/installers/install_microk8s_cluster.sh b/installers/install_microk8s_cluster.sh
new file mode 100755
index 0000000..58372d9
--- /dev/null
+++ b/installers/install_microk8s_cluster.sh
@@ -0,0 +1,48 @@
+#!/usr/bin/env 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.
+
+set +eux
+
+# MicroK8s installation
+sudo snap install yq
+sudo snap install microk8s --classic
+sudo usermod -a -G microk8s ubuntu
+newgrp microk8s
+sudo microk8s.status --wait-ready
+sudo microk8s.enable storage dns
+# sudo microk8s.enable storage rbac
+# sudo microk8s.enable storage helm
+# sudo microk8s.enable storage helm3
+
+# Enables MetalLB
+PRIVATE_IP=$(hostname -I | awk '{print $1}')
+echo ${PRIVATE_IP}
+sudo microk8s.enable metallb:${PRIVATE_IP}-${PRIVATE_IP}
+
+# Updates the certificate to allow connections from outside as well (i.e. to the "public" IP).
+#sudo microk8s.stop
+sudo sed -i "s/\#MOREIPS/IP.3 = ${NEW_K8S_IP}/g" /var/snap/microk8s/current/certs/csr.conf.template
+cat /var/snap/microk8s/current/certs/csr.conf.template
+#sudo microk8s.refresh-certs -i
+#sudo microk8s.start
+
+# Retrieves and saves the credentials
+sudo microk8s.config | sed  "s/server: .*/server: https:\/\/${NEW_K8S_IP}:16443/g" \
+| tee ${HOME}/.kube/config
+echo
+echo Credentials saved at ${HOME}/.kube/config
+echo
+
+return 0
+
diff --git a/installers/install_osm.sh b/installers/install_osm.sh
index 4e1bbb1..b1b8548 100755
--- a/installers/install_osm.sh
+++ b/installers/install_osm.sh
@@ -90,7 +90,7 @@
   if [ $? -ne 0 ]
   then
     need_packages_lw="software-properties-common apt-transport-https"
-    echo -e "Checking required packages: $need_packages_lw"
+    echo -e "Checking required packages to add ETSI OSM debian repo: $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 -q update \
@@ -102,7 +102,8 @@
       || ! echo "failed to install $need_packages_lw" \
       || exit 1
     wget -qO - $REPOSITORY_BASE/$RELEASE/OSM%20ETSI%20Release%20Key.gpg | sudo apt-key add -
-    sudo DEBIAN_FRONTEND=noninteractive add-apt-repository -y "$1" && sudo DEBIAN_FRONTEND=noninteractive apt-get update
+    sudo DEBIAN_FRONTEND=noninteractive add-apt-repository -y "$1" \
+    && sudo APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 DEBIAN_FRONTEND=noninteractive apt-get update
     return 0
   fi
 
@@ -117,7 +118,24 @@
 fi
 }
 
-while getopts ":b:r:c:n:k:u:R:l:L:K:p:D:o:O:m:N:H:S:s:w:t:U:P:A:d:p:f:F:-: hy" o; do
+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 apt_proxy_configured
+    [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+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
         D)
             DEVOPS_PATH="${OPTARG}"
diff --git a/installers/test_track.sh b/installers/test_track.sh
new file mode 100755
index 0000000..8db0260
--- /dev/null
+++ b/installers/test_track.sh
@@ -0,0 +1,34 @@
+#!/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.
+#
+
+source ../common/track
+
+RELEASE="ReleaseTEN"
+OSM_DOCKER_TAG=latest
+OSM_TRACK_INSTALLATION_ID="$(date +%s)-$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)"
+
+track
+track start
+sleep 1
+track start release $RELEASE
+sleep 1
+track start docker_tag $OSM_DOCKER_TAG none none
+sleep 1
+track start release $RELEASE none none docker_tag $OSM_DOCKER_TAG none none
+sleep 1
+track my-event my-op my-value "My comment" "tag1,tag2"
+sleep 1
+track my-second-event op1 value1 "My comment1 on second event" none op2 value2 "My comment2 on second event" none
+
diff --git a/installers/uninstall_osm.sh b/installers/uninstall_osm.sh
new file mode 100755
index 0000000..3af413b
--- /dev/null
+++ b/installers/uninstall_osm.sh
@@ -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
+
