diff --git a/common/all_funcs b/common/all_funcs
index d469373..f6c48fa 100644
--- a/common/all_funcs
+++ b/common/all_funcs
@@ -22,7 +22,7 @@
 	export OSM_DEVOPS=$(realpath ${BASH_SOURCE[0]} )
 fi
 
-for file in logging config container git_functions; do
+for file in logging config container git_functions track; do
 	. ${OSM_DEVOPS}/common/$file
 	INFO "$file sourced"
 done
diff --git a/common/logging b/common/logging
index a95b563..a48e01d 100644
--- a/common/logging
+++ b/common/logging
@@ -45,11 +45,11 @@
 }
 
 INFO() { 
-	echo "##  $(date) ${FUNCNAME[1]}: $*" >&2
+	echo "##  $(date) ${FUNCNAME[1]}: INFO: $*" >&2
 }
 
 DEBUG() { 
-	echo "#   $(date) ${FUNCNAME[1]}: $*" >&2
+	echo "#   $(date) ${FUNCNAME[1]}: DEBUG: $*" >&2
 }
 
 CMD() {
diff --git a/common/track b/common/track
new file mode 100644
index 0000000..627c680
--- /dev/null
+++ b/common/track
@@ -0,0 +1,86 @@
+#!/bin/bash
+# This file is meant to be SOURCED
+#
+#   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 track(){
+# Tracks events by sending HTTP GET requests with query strings to a web server
+# - First argument: event name
+# - Rest of arguments (if they exist): tuples of operation-value-comment-tags
+#   - operation: particular operation in an event (if it is not provided, the operation will be named after the event)
+#   - value: particular value for an operation
+#   - comment
+#     - none will be passed when empty
+#     - will be parsed to replace spaces by underscores
+#   - tags
+#     - none will be passed when empty
+#     - will be parsed to replace spaces by ~
+
+    if [ $# -lt 1 ]; then
+        echo "Unexpected error in track function. At least 1 arg is expected: event"
+        return 1
+    fi
+
+    osm_track_event_name=$1
+
+    ctime=`date +%s`
+
+    query_string=""
+    query_string="${query_string}&installation_id=${OSM_TRACK_INSTALLATION_ID}"
+    query_string="${query_string}&local_ts=${ctime}"
+    query_string="${query_string}&event=${osm_track_event_name}"
+
+    shift 1
+    if [ $# -eq 0 ]; then
+        operation="${osm_track_event_name}"
+        value=""
+        comment=""
+        tags=""
+        final_query_string="${query_string}"
+        final_query_string="${final_query_string}&operation=${operation}"
+        final_query_string="${final_query_string}&value=${value}"
+        final_query_string="${final_query_string}&comment=${comment}"
+        final_query_string="${final_query_string}&tags=${tags}"
+        url="https://osm.etsi.org/InstallLog.php?${final_query_string}"
+        echo "Track $osm_track_event_name $operation: ${url}"
+        wget -q -O /dev/null $url
+    else
+        while (( "$#" > 0 )); do
+            operation="${1:-${osm_track_event_name}}"
+            shift 1
+            value="${1:-}"
+            shift 1
+            comment="${1:-}"
+            shift 1
+            comment="${comment// /_}"
+            tags="${1:-}"
+            shift 1
+            tags="${tags//,/\~}"
+            [ "$value" == "none" ] && value=""
+            [ "$comment" == "none" ] && comment=""
+            [ "$tags" == "none" ] && tags=""
+            final_query_string="${query_string}"
+            final_query_string="${final_query_string}&operation=${operation}"
+            final_query_string="${final_query_string}&value=${value}"
+            final_query_string="${final_query_string}&comment=${comment}"
+            final_query_string="${final_query_string}&tags=${tags}"
+            url="https://osm.etsi.org/InstallLog.php?${final_query_string}"
+            echo "Track $osm_track_event_name $operation: ${url}"
+            wget -q -O /dev/null $url
+        done
+    fi
+    return 0
+}
+
+
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
+
diff --git a/jenkins/ci-pipelines/ci_stage_1.groovy b/jenkins/ci-pipelines/ci_stage_1.groovy
index 4ab3c97..4daee3a 100644
--- a/jenkins/ci-pipelines/ci_stage_1.groovy
+++ b/jenkins/ci-pipelines/ci_stage_1.groovy
@@ -67,6 +67,7 @@
             string(name: 'GERRIT_REFSPEC', value: GERRIT_REFSPEC),
             string(name: 'GERRIT_PATCHSET_REVISION', value: GERRIT_PATCHSET_REVISION),
             string(name: 'INSTALLER', value: params.INSTALLER),
+            string(name: 'OPENSTACK_BASE_IMAGE', value: params.OPENSTACK_BASE_IMAGE),
             string(name: 'PROJECT_URL_PREFIX', value: params.PROJECT_URL_PREFIX),
             string(name: 'DOCKER_TAG', value: params.DOCKER_TAG),
             booleanParam(name: 'TEST_INSTALL', value: params.TEST_INSTALL),
diff --git a/jenkins/ci-pipelines/ci_stage_2.groovy b/jenkins/ci-pipelines/ci_stage_2.groovy
index 3211ac8..dd9cc9b 100644
--- a/jenkins/ci-pipelines/ci_stage_2.groovy
+++ b/jenkins/ci-pipelines/ci_stage_2.groovy
@@ -116,6 +116,7 @@
             def downstream_params_stage_3 = [
                 string(name: 'GERRIT_BRANCH', value: "${branch}"),
                 string(name: 'INSTALLER', value: "Default" ),
+                string(name: 'OPENSTACK_BASE_IMAGE', value: "ubuntu18.04" ),
                 string(name: 'UPSTREAM_JOB_NAME', value: "${JOB_NAME}" ),
                 string(name: 'UPSTREAM_JOB_NUMBER', value: "${BUILD_NUMBER}" ),
                 booleanParam(name: 'DO_STAGE_4', value: do_stage_4 )
diff --git a/jenkins/ci-pipelines/ci_stage_3.groovy b/jenkins/ci-pipelines/ci_stage_3.groovy
index 13c8e3b..e93c9a9 100644
--- a/jenkins/ci-pipelines/ci_stage_3.groovy
+++ b/jenkins/ci-pipelines/ci_stage_3.groovy
@@ -32,6 +32,7 @@
         string(defaultValue: 'artifactory-osm', description: '', name: 'ARTIFACTORY_SERVER'),
         string(defaultValue: 'osm-stage_4', description: '', name: 'DOWNSTREAM_STAGE_NAME'),
         string(defaultValue: 'testing-daily', description: '', name: 'DOCKER_TAG'),
+        string(defaultValue: 'ubuntu18.04', description: '', name: 'OPENSTACK_BASE_IMAGE'),
         booleanParam(defaultValue: false, description: '', name: 'SAVE_CONTAINER_ON_FAIL'),
         booleanParam(defaultValue: false, description: '', name: 'SAVE_CONTAINER_ON_PASS'),
         booleanParam(defaultValue: true, description: '', name: 'SAVE_ARTIFACTS_ON_SMOKE_SUCCESS'),
@@ -360,7 +361,7 @@
                     output=sh(returnStdout: true, script: """#!/bin/sh -e
                         for line in `grep OS ~/hive/robot-systest.cfg | grep -v OS_CLOUD` ; do export \$line ; done
                         openstack server create --flavor osm.sanity \
-                                                --image ubuntu18.04 \
+                                                --image ${OPENSTACK_BASE_IMAGE} \
                                                 --key-name CICD \
                                                 --property build_url="${BUILD_URL}" \
                                                 --nic net-id=osm-ext \
@@ -484,8 +485,7 @@
                                     ${release} -r unstable \
                                     -d ${USERNAME}:${PASSWORD}@${INTERNAL_DOCKER_REGISTRY} \
                                     -p ${INTERNAL_DOCKER_PROXY} \
-                                    -t ${container_name} \
-                                    --nocachelxdimages
+                                    -t ${container_name}
                             """
                         }
                         prometheusHostname = IP_ADDRESS
