Merge pull request #44 from ciena/experimental

Experimental
diff --git a/README.md b/README.md
index 1911651..ec737d7 100644
--- a/README.md
+++ b/README.md
@@ -70,11 +70,12 @@
 WITH_BBSIM=yes WITH_RADIUS=y CONFIG_SADIS=y  voltha up
 ```
 
-To start a specific version of VOLTHA, e.g. 2.2, you could use the following command:
+To start a specific version of VOLTHA, e.g. 2.3, you could use the following commands:
 ```bash
-source releases/voltha-2.2 && voltha up
+git checkout tags/3.0.3 -b 3.0.3
+source releases/voltha-2.3 && voltha up
 ```
-Please check the `releases` folder to see the available ones.
+Please check the `releases` folder to see the available ones and pick the correct tag associatet do that release.
 
 | OPTION                                | DEFAULT                                               | DESCRIPTION |
 | ------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------ |
@@ -82,9 +83,13 @@
 | `NAME`                                  | TYPE                                                  | Name of the KinD Cluster to be created |
 | `DEPLOY_K8S`                            | yes                                                   | Should the KinD Kubernetes cluster be deployed? |
 | `JUST_K8S`                              | no                                                    | Should just the KinD Kubernetes cluster be depoyed? (i.e. no VOLTHA) |
+| `VOLTHA_NS`                             | `voltha`                                                | K8s namespace into which to deploy voltha PODs |
+| `INFRA_NS`                              | `default`                                               | K8s namespace into which to deploy infrastructure PODs |
+| `BBSIM_NS`                              | `voltha`                                                | K8s namespace into which to deploy BBSIM PODs |
+| `ADAPTER_NS`                            | `voltha`                                                | K8s namespace into which to deploy VOLTHA adapters |
 | `WITH_BBSIM`                            | no                                                    | Should the BBSIM POD be deployed? |
 | `NUM_OF_BBSIM`                          | 1                                                     | number of BBSIM POD to start (minimum = 1, maximum = 10) |
-| `WITH_ONOS`                             | yes                                                   | Should `ONOS` service be deployed? |
+| `WITH_ONOS`                             | yes                                                   | Deploy ONOS (yes/no) or service:port of external ONOS |
 | `WITH_KAFKA`                            | yes                                                   | Deploy private Kafka (yes/no) or k8s servce:port of external Kafka |
 | `WITH_ETCD`                             | yes                                                   | Deploy private etcd (yes/no) or k8s service:port of external etcd |
 | `WITH_RADIUS`                           | no                                                    | Deploy sample RADIUS server (yes/no) or a k8s service:port of external RADIUS |
@@ -131,6 +136,33 @@
 | `VOLTHA_ETCD_PORT`                      | dynamic                                               | (advanced) Override dynamic port selection for port forward for VOLTHA etcd |
 | `VOLTHA_KAFKA_PORT`                     | dynamic                                               | (advanced) Override dynamic port selection for port forward for VOLTHA Kafka API |
 
+### Custom Namespaces
+
+Separate namespaces can be specified for various components
+  - `VOLTHA_NS`  (default: `voltha`)  for cores, ofagent, Etcd (yes), Kafka (yes)
+  - `ADAPTER_NS` (default: `voltha`)  for device adapters
+  - `INFRA_NS`   (default: `default`) for RADIUS, ONOS, Etcd (external), Kafka (external)
+  - `BBSIM_NS`   (default: `voltha`)  for BBSIM instances
+
+As an example `BBSIM_NS=devices` deployes BBSim in the `devices` namespace.
+
+### External Kafka, Etcd and ONOS
+`WITH_ETCD`,  `WITH_KAFKA` and `WITH_ONOS` can have different values depending on the deployment needs:
+
+| VALUE            | DESCRIPTION |
+| ---------------- | --------------- |
+| `yes` or `y`     | installs Etcd and Kafka in the `voltha` namespace |
+| `external`       | installs Etcd and Kafka in the `default` namespace |
+| `<endpoint>`     | connects the deployment to pre-deployed instance of the service |
+
+When specifying the `<endpoint>` of the service the format for each of these is `service-name`[`:port`]. Port is optional and will default to the standard port for the given service. For example, `WITH_KAFA=kafka.infra.svc.cluster.local`
+
+Specifying the endpoint enable to use `./voltha up` incrementally, for example:
+```
+DEPLOY_K8S=n WITH_BBSIM=y WITH_RADIUS=no CONFIG_SADIS=no  WITH_ONOS=onos-openflow.infra.svc.cluster.local  WITH_ETCD=etcd-cluster-client.infra.svc.cluster.local WITH_KAFKA=kafka.infra.svc.cluster.local  INFRA_NS=infra BBSIM_NS=devices ADAPTER_NS=adapters ./voltha up
+```
+starts VOLTHA with external ONOS,KAFKA,ETCD in the `infra` namespace.
+
 ### `CONFIG_SADIS` Values
 
 | VALUE            | DESCRIPTION |
diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
new file mode 100644
index 0000000..a4f37dc
--- /dev/null
+++ b/RELEASE_NOTES.md
@@ -0,0 +1,29 @@
+# April 7, 2020
+- Etcd and Kafka can be installed independently of VOLTHA, with `WITH_ETCD` and/or `WITH_KAFKA` set to their endpoints:
+  - `WITH_ETCD=y WITH_KAFKA=y` installs Etcd and Kafka in the `voltha` namespace
+  - `WITH_ETCD=external WITH_KAFKA=external` installs Etcd and Kafka in the `default` namespace
+  - `WITH_ETCD=<etcd-endpoint> WITH_KAFKA=<kafka-endpoint>` connects the deployment to pre-deployed instance of Etcd and Kafka
+- `WITH_ETCD`, `WITH_KAFKA`, and `WITH_ONOS` when used to specify external services (i.e. services that are not nessisarily deployed as part of `kind-voltha`) require the format for each of these is `service-name`[`:port`]. Port is optional and will default to the standard port for the given service.
+- Separate namespaces can be specified for various components
+  - `VOLTHA_NS`  (default: `voltha`)  for cores, ofagent, Etcd (yes), Kafka (yes)
+  - `ADAPTER_NS` (default: `voltha`)  for device adapters
+  - `INFRA_NS`   (default: `default`) for RADIUS, ONOS, Etcd (external), Kafka (external)
+  - `BBSIM_NS`   (default: `voltha`)  for BBSIM instances
+
+
+The changes in this release enable the ability to shorten the development cycle by allowing developers only to cycle (restart) the components required.
+
+For example, if VOLTHA is started with the following command:
+```
+WITH_BBSIM=y WITH_RADIUS=y CONFIG_SADIS=y WITH_ONOS=y WITH_ETCD=external WITH_KAFKA=external INFRA_NS=infra BBSIM_NS=devices ADAPTER_NS=adapters ./voltha up
+```
+And then brought down with the following command:
+```
+DEPLOY_K8S=n WITH_BBSIM=y WITH_RADIUS=no CONFIG_SADIS=no  WITH_ONOS=no WITH_ETCD=no WITH_KAFKA=no INFRA_NS=infra BBSIM_NS=devices ADAPTER_NS=adapters ./voltha down
+```
+Then it can be restarted with the following command and only the VOLTHA core components, adapters, and BBSIM are required to be restarted:
+```
+DEPLOY_K8S=n WITH_BBSIM=y WITH_RADIUS=no CONFIG_SADIS=no  WITH_ONOS=onos-openflow.infra.svc.cluster.local  WITH_ETCD=etcd-cluster-client.infra.svc.cluster.local WITH_KAFKA=kafka.infra.svc.cluster.local  INFRA_NS=infra BBSIM_NS=devices ADAPTER_NS=adapters ./voltha up
+```
+In the above examples namespaces are specified, but this is not required.
+
diff --git a/minimal-values.yaml b/minimal-values.yaml
index fdf4614..226ed8f 100644
--- a/minimal-values.yaml
+++ b/minimal-values.yaml
@@ -70,11 +70,11 @@
 #    tag: master
 # START_OFAGENT_GO - Comment the following block to use the Python implementation
 # of the ofagent
-#  ofagent:
+#  ofagent_go:
 #    repository: voltha/voltha-ofagent-go
 #    tag: master
 # END_OFAGENT_GO
-#  ofagent:
+#  ofagent_py:
 #    repository: voltha/voltha-ofagent-py
 #    tag: 2.1.1
 #  rw_core:
diff --git a/voltha b/voltha
index 2233f89..f4e87d0 100755
--- a/voltha
+++ b/voltha
@@ -71,6 +71,10 @@
 NAME=${NAME:-$TYPE}
 
 ENABLE_ONOS_EXTRANEOUS_RULES=${ENABLE_ONOS_EXTRANEOUS_RULES:-no}
+INFRA_NS=${INFRA_NS:-default}
+VOLTHA_NS=${VOLTHA_NS:-voltha}
+BBSIM_NS=${BBSIM_NS:-voltha}
+ADAPTER_NS=${ADAPTER_NS:-voltha}
 WITH_TIMINGS=${WITH_TIMINGS:-no}
 WITH_BBSIM=${WITH_BBSIM:-no}
 WITH_RADIUS=${WITH_RADIUS:-no}
@@ -87,14 +91,15 @@
 WITH_ETCD=${WITH_ETCD:-yes}
 ONLY_ONE=${ONLY_ONE:-yes}
 CONFIG_SADIS=${CONFIG_SADIS:-no} # yes | no | file | bbsim | URL
-SADIS_SUBSCRIBERS=${SADIS_SUBSCRIBERS:-http://bbsim.voltha.svc:50074/v2/subscribers/%s}
-SADIS_BANDWIDTH_PROFILES=${SADIS_BANDWIDTH_PROFILES:-http://bbsim.voltha.svc:50074/v2/bandwidthprofiles/%s}
+SADIS_SUBSCRIBERS=${SADIS_SUBSCRIBERS:-http://bbsim.$VOLTHA_NS.svc:50074/v2/subscribers/%s}
+SADIS_BANDWIDTH_PROFILES=${SADIS_BANDWIDTH_PROFILES:-http://bbsim.$VOLTHA_NS.svc:50074/v2/bandwidthprofiles/%s}
 SADIS_CFG=${SADIS_CFG:-onos-files/onos-sadis-sample.json}
 INSTALL_ONOS_APPS=${INSTALL_ONOS_APPS:-no}
 JUST_K8S=${JUST_K8S:-no}
 DEPLOY_K8S=${DEPLOY_K8S:-yes}
 INSTALL_KUBECTL=${INSTALL_KUBECTL:-yes}
 INSTALL_HELM=${INSTALL_HELM:-yes}
+HELM_USE_UPGRADE=${HELM_USE_UPGRADE:-no}
 UPDATE_HELM_REPOS=${UPDATE_HELM_REPOS:-yes}
 WAIT_ON_DOWN=${WAIT_ON_DOWN:-yes}
 WAIT_TIMEOUT=${WAIT_TIMEOUT:-30m}
@@ -201,7 +206,6 @@
     WITH_EAPOL \
     WITH_DHCP \
     WITH_IGMP \
-    WITH_ONOS \
     WITH_CHAOS \
     WITH_ADAPTERS \
     WITH_SIM_ADAPTERS \
@@ -212,6 +216,7 @@
     INSTALL_ONOS_APPS \
     INSTALL_KUBECTL \
     INSTALL_HELM \
+    HELM_USE_UPGRADE \
     UPDATE_HELM_REPOS \
     WAIT_ON_DOWN \
     ONLY_ONE \
@@ -252,6 +257,11 @@
     WITH_RADIUS \
     WITH_KAFKA \
     WITH_ETCD \
+    WITH_ONOS \
+    VOLTHA_NS \
+    ADAPTER_NS \
+    INFRA_NS \
+    BBSIM_NS \
     "
 
 # Iterate over yes/no configuration options and validate
@@ -270,25 +280,43 @@
     CONFIG_SADIS="no"
 fi
 
-# Special case for WITH_KAFKA and WITH_ETCD
+# Special case for WITH_ONOS, WITH_RADIUS, WITH_KAFKA, and WITH_ETCD
 if [ $(echo ":y:yes:true:1:" | grep -ic ":$WITH_KAFKA:") -eq 1 ]; then
     WITH_KAFKA="yes"
 fi
 if [ $(echo ":n:no:false:0:" | grep -ic ":$WITH_KAFKA:") -eq 1 ]; then
     WITH_KAFKA="no"
 fi
+if [ $(echo ":external:" | grep -ic ":$WITH_KAFKA:") -eq 1 ]; then
+    WITH_KAFKA="external"
+fi
 if [ $(echo ":y:yes:true:1:" | grep -ic ":$WITH_ETCD:") -eq 1 ]; then
     WITH_ETCD="yes"
 fi
 if [ $(echo ":n:no:false:0:" | grep -ic ":$WITH_ETCD:") -eq 1 ]; then
     WITH_ETCD="no"
 fi
+if [ $(echo ":external:" | grep -ic ":$WITH_ETCD:") -eq 1 ]; then
+    WITH_ETCD="external"
+fi
 if [ $(echo ":y:yes:true:1:" | grep -ic ":$WITH_RADIUS:") -eq 1 ]; then
     WITH_RADIUS="yes"
 fi
 if [ $(echo ":n:no:false:0:" | grep -ic ":$WITH_RADIUS:") -eq 1 ]; then
     WITH_RADIUS="no"
 fi
+if [ $(echo ":y:yes:true:1:" | grep -ic ":$WITH_ONOS:") -eq 1 ]; then
+    WITH_ONOS="yes"
+fi
+if [ $(echo ":n:no:false:0:" | grep -ic ":$WITH_ONOS:") -eq 1 ]; then
+    WITH_ONOS="no"
+fi
+
+if [ $HELM_USE_UPGRADE == "yes" ]; then
+    _HELM_DESC="Upgrade/Install"
+else
+    _HELM_DESC="Install"
+fi
 
 # Check for prerequiste tools
 TOOLS="curl sed jq"
@@ -749,7 +777,7 @@
     fi
     sspin "Remove port-forwards: voltha-api-$NAME$CEOL"
     kill_port_forward voltha-api
-    if [ $WITH_ETCD == "yes" ]; then
+    if [ $WITH_ETCD == "yes" -o $WITH_ETCD == "external" ]; then
         sspin "Remove port-forwards: voltha-etcd-$NAME$CEOL"
         kill_port_forward voltha-etcd-cluster-client
     fi
@@ -769,7 +797,7 @@
         fi
     else
         EXISTS=$(helm list -q)
-        EXPECT="voltha etcd-operator"
+        EXPECT="voltha"
         if [ $WITH_ONOS == yes ]; then
             EXPECT+=" onos"
         fi
@@ -785,6 +813,14 @@
         if [ $WITH_SIM_ADAPTERS == "yes" ]; then
             EXPECT+=" sim"
         fi
+        if [ $WITH_ETCD == "external" ]; then
+            EXPECT+=" etcd-operator etcd-cluster"
+        elif [ $WITH_ETCD == "yes" ]; then
+            EXPECT+=" etcd-operator"
+        fi
+        if [ $WITH_KAFKA == "external" ]; then
+            EXPECT+=" kafka"
+        fi
         bspin "Remove Helm Deployments"
         for i in $EXISTS; do
             for j in $EXPECT; do
@@ -796,21 +832,40 @@
         done
         espin "$VERIFIED Remove Helm Deployments$CEOL"
         if [ "$WAIT_ON_DOWN" == "yes" ]; then
-            PODS="voltha-kafka.* voltha-ofagent.* voltha-rw-core.* voltha-etcd.* etcd-operator.*"
+            PODS="voltha-kafka.* voltha-ofagent.* voltha-rw-core.* voltha-etcd.*"
+            INFRA_PODS=
+            ADAPT_PODS=
+            SIM_PODS=
             if [ $WITH_RADIUS == "yes" ]; then
                 PODS+=" radius.*"
             fi
             if [ $WITH_BBSIM == "yes" ]; then
-                PODS+=" bbsim.*"
+                SIM_PODS+=" bbsim.*"
             fi
             if [ $WITH_OPEN_ADAPTERS -o $WITH_SIM_ADAPTERS ]; then
-                PODS+=" adapter-*"
+                ADAPT_PODS+=" adapter-*"
             fi
-            if [ "$WITH_ONOS" == "yes" ]; then
-              ONOS_PODS="onos-.*"
-              wait_for_pods "default" 0 "not" -1 "Waiting for ONOS PODs to terminate" $ONOS_PODS
-            fi 
-            wait_for_pods "voltha" 0 "not" -1 "Waiting for VOLTHA PODs to terminate" $PODS
+            if [ $WITH_ONOS == "yes" ]; then
+                INFRA_PODS+=" onos-.*"
+            fi
+            if [ $WITH_ETCD == "external" ]; then
+                INFRA_PODS+=" etcd-operator.* etcd-cluster.*"
+            elif [ $WITH_ETCD == "yes" ]; then
+                PODS+=" etcd-operator.*"
+            fi
+            if [ $WITH_KAFKA == "external" ]; then
+                INFRA_PODS+=" kafka.*"
+            fi
+            if [ ! -z "$SIM_PODS" ]; then
+                wait_for_pods "$BBSIM_NS" 0 "not" -1 "Waiting for BBSIM PODs to terminate" $SIM_PODS
+            fi
+            if [ ! -z "$INFRA_PODS" ]; then
+                wait_for_pods "$INFRA_NS" 0 "not" -1 "Waiting for infrastructure PODs to terminate" $INFRA_PODS
+            fi
+            if [ ! -z "$ADAPT_PODS" ]; then
+                wait_for_pods "$ADAPTER_NS" 0 "not" -1 "Waiting for adapter  PODs to terminate" $ADAPT_PODS
+            fi
+            wait_for_pods "$VOLTHA_NS" 0 "not" -1 "Waiting for VOLTHA PODs to terminate" $PODS
         fi
     fi
     exit
@@ -844,7 +899,7 @@
     (set -x; kubectl get --all-namespaces events >> $DATA/all-events.txt 2>&1) >>$LOG 2>&1
     espin - $VERIFIED
     bspin - "Dumping VOLTHA POD details"
-    PODS="$(kubectl -n default get pod -o name | grep onos | sed -e 's/^/default:/g') $(kubectl get -n voltha pod -o name | sed -e 's/^/voltha:/g')"
+    PODS="$(kubectl -n $INFRA_NS get pod -o name | grep onos | sed -e 's/^/$INFRA_NS:/g') $(kubectl get -n $VOLTHA_NS pod -o name | sed -e 's/^/$VOLTHA_NS:/g')"
     SINCE=
     if [ ! -z "$DUMP_FROM" ]; then
         SINCE="--since-time=$DUMP_FROM"
@@ -918,7 +973,14 @@
     local WAIT_START=$(date +%s)
     COUNT=$(expr 300 / 15)
     bspin $INDENT $MESSAGE
-    (set -x; helm install -f $NAME-values.yaml $CHART_ARGS $INTERNAL_EXTRA_HELM_INSTALL_ARGS $EXTRA_HELM_INSTALL_ARGS --set defaults.log_level=$VOLTHA_LOG_LEVEL --namespace $NAMESPACE --name $INAME $CHART_VERSION $EXTRA_HELM_FLAGS $CHART >>$LOG 2>&1) >>$LOG 2>&1
+    if [ $HELM_USE_UPGRADE == "yes" ]; then
+        _HELM_COMMAND="upgrade --install"
+        _HELM_ARGS="$INAME"
+    else
+        _HELM_COMMAND="install"
+        _HELM_ARGS="--name $INAME"
+    fi
+    (set -x; helm $_HELM_COMMAND -f $NAME-values.yaml $CHART_ARGS $INTERNAL_EXTRA_HELM_INSTALL_ARGS $EXTRA_HELM_INSTALL_ARGS --set defaults.log_level=$VOLTHA_LOG_LEVEL --namespace $NAMESPACE $_HELM_ARGS  $CHART_VERSION $EXTRA_HELM_FLAGS $CHART >>$LOG 2>&1) >>$LOG 2>&1
     SUCCESS=$?
     while [ $SUCCESS -ne 0 ]; do
         if [ $(($(date +%s) - $WAIT_START)) -gt $TIMEOUT_SECONDS ]; then
@@ -928,8 +990,10 @@
         sspin $INDENT
         COUNT=$(expr $COUNT - 1)
         if [ $COUNT -eq 0 ]; then
-            (set -x; helm delete --purge $INAME >>$LOG 2>&1) >>$LOG 2>&1
-    (set -x; helm install -f $NAME-values.yaml $CHART_ARGS $INTERNAL_EXTRA_HELM_INSTALL_ARGS $EXTRA_HELM_INSTALL_ARGS --set defaults.log_level=$VOLTHA_LOG_LEVEL --namespace $NAMESPACE --name $INAME $CHART_VERSION $EXTRA_HELM_FLAGS $CHART >>$LOG 2>&1) >>$LOG 2>&1
+            if [ $HELM_USE_UPGRADE == "no" ]; then
+                (set -x; helm delete --purge $INAME >>$LOG 2>&1) >>$LOG 2>&1
+            fi
+            (set -x; helm $_HELM_COMMAND -f $NAME-values.yaml $CHART_ARGS $INTERNAL_EXTRA_HELM_INSTALL_ARGS $EXTRA_HELM_INSTALL_ARGS --set defaults.log_level=$VOLTHA_LOG_LEVEL --namespace $NAMESPACE $_HELM_ARGS $CHART_VERSION $EXTRA_HELM_FLAGS $CHART >>$LOG 2>&1) >>$LOG 2>&1
             SUCCESS=$?
             COUNT=$(expr 300 / 15)
         fi
@@ -1261,20 +1325,24 @@
     exit 0
 fi
 
-if [ $WITH_ETCD != "yes" ]; then
+if [ $WITH_ETCD != "yes" -a $WITH_ETCD != "external" ]; then
     bspin "Skip ETCD Operator Deployment"
     espin $NO_ENTRY
 else
     STIME=$(date +%s)
+    NS=$VOLTHA_NS
+    if [ $WITH_ETCD == "external" ]; then
+        NS=$INFRA_NS
+    fi
     bspin "Verify ETCD Operator $OLD_KEY"
-    if [ $(helm list --deployed --short --namespace voltha "^etcd-operator\$" | wc -l) -ne 1 ]; then
+    if [ $HELM_USE_UPGRADE == "yes" -o $(helm list --deployed --short --namespace $NS "^etcd-operator\$" | wc -l) -ne 1 ]; then
         espin $NOT_VERIFIED
-        helm_install - voltha etcd-operator stable/etcd-operator latest "Install ETCD Operator"
+        helm_install - $NS etcd-operator stable/etcd-operator latest "$_HELM_DESC ETCD Operator"
     else
         espin $VERIFIED
     fi
     EXPECT=$(test "$TYPE" == "minimal" && echo "1" || echo "3")
-    wait_for_pods - "voltha" $EXPECT "includes" -1 "Waiting for ETCD Operator to start" "etcd-operator-.*"
+    wait_for_pods - "$NS" $EXPECT "includes" -1 "Waiting for ETCD Operator to start" "etcd-operator-.*"
     if [ "$WITH_TIMINGS" == "yes" ]; then
         printtime $(expr $(date +%s) - $STIME)
     fi
@@ -1283,26 +1351,26 @@
 STIME=$(date +%s)
 if [ $WITH_ONOS == "yes" ]; then
     bspin "Verify ONOS installed $BIRD"
-    if [ $(helm list --deployed --short --namespace default "^onos\$" | wc -l) -ne 1 ]; then
+    if [ $HELM_USE_UPGRADE == "yes" -o $(helm list --deployed --short --namespace $INFRA_NS "^onos\$" | wc -l) -ne 1 ]; then
         espin $NOT_VERIFIED
-        EXTRA_HELM_FLAGS="$SET_TAG $EXTRA_HELM_FLAGS" helm_install - default onos $ONOS_CHART $ONOS_CHART_VERSION "Install ONOS"
+        EXTRA_HELM_FLAGS="$SET_TAG $EXTRA_HELM_FLAGS" helm_install - $INFRA_NS onos $ONOS_CHART $ONOS_CHART_VERSION "$_HELM_DESC ONOS"
     else
         espin $VERIFIED
     fi
-    wait_for_pods - "default" 1 "includes" -1 "Waiting for ONOS to start" "onos-.*"
+    wait_for_pods - "$INFRA_NS" 1 "includes" -1 "Waiting for ONOS to start" "onos-.*"
 
     if [ $WITH_PORT_FORWARDS == "yes" ]; then
         bspin - "Forward ONOS API port $FORWARD"
         kill_port_forward onos-ui
-        port_forward default onos-ui $ONOS_API_PORT 8181
+        port_forward $INFRA_NS onos-ui $ONOS_API_PORT 8181
         espin - $VERIFIED
         bspin - "Forward ONOS SSH port $FORWARD"
         kill_port_forward onos-ssh
-        port_forward default onos-ssh $ONOS_SSH_PORT 8101
+        port_forward $INFRA_NS onos-ssh $ONOS_SSH_PORT 8101
         espin - $VERIFIED
         _ONOS_API_EP="127.0.0.1:$ONOS_API_PORT"
     else
-        _ONOS_API_EP=$(get_service_ep default onos-ui)
+        _ONOS_API_EP=$(get_service_ep $INFRA_NS onos-ui)
     fi
     bspin - "Verify or download ONOS configuration support files $DOWNLOAD"
     ONOS_FILES="olt-onos-enableExtraneousRules.json onos-aaa.json \
@@ -1340,9 +1408,15 @@
 
     if [ $WITH_KAFKA != "no" ]; then
         check_onos_app_active org.opencord.kafka
-        _HOST=voltha-kafka.voltha.svc.cluster.local
+        _HOST=voltha-kafka.$INFRA_NS.svc.cluster.local
         _PORT=9092
-        if [ $WITH_KAFKA != "yes" ]; then
+        if [ $WITH_KAFKA == "yes" ]; then
+            _HOST=voltha-kafka.$VOLTHA_NS.svc.cluster.local
+            _PORT=9092
+        elif [ $WITH_KAFKA == "external" ]; then
+            _HOST=kafka.$INFRA_NS.svc.cluster.local
+            _PORT=9092
+        else
             _HOST=$(echo $WITH_KAFKA | cut -d: -f1)
             _PORT=$(echo $WITH_KAFKA | cut -s -d: -f2)
             _PORT=${_PORT:-9092}
@@ -1393,7 +1467,7 @@
 {
     "sadis": {
         "integration": {
-            "url": "http://bbsim.voltha.svc.cluster.local:50074/v2/subscribers/%s",
+            "url": "http://bbsim.$BBSIM_NS.svc.cluster.local:50074/v2/subscribers/%s",
             "cache": {
                 "enabled": true,
                 "maxsize": 50,
@@ -1403,7 +1477,7 @@
     },
     "bandwidthprofile": {
         "integration": {
-            "url": "http://bbsim.voltha.svc.cluster.local:50074/v2/bandwidthprofiles/%s",
+            "url": "http://bbsim.$BBSIM_NS.svc.cluster.local:50074/v2/bandwidthprofiles/%s",
             "cache": {
                 "enabled": true,
                 "maxsize": 50,
@@ -1449,6 +1523,58 @@
     printtime $(expr $(date +%s) - $STIME)
 fi
 
+if [ $WITH_ETCD == "external" ]; then
+    STIME=$(date +%s)
+    bspin "Verify external ETCD cluster $OLD_KEY"
+    EXPECT=$(test "$TYPE" == "minimal" && echo "1" || echo "3")
+    if [ $HELM_USE_UPGRADE == "yes" -o $(helm list --deployed --short --namespace $INFRA_NS "^etcd-cluster\$" | wc -l) -ne 1 ]; then
+        espin $NOT_VERIFIED
+        INTERNAL_EXTRA_HELM_INSTALL_ARGS+="--set clusterName=etcd-cluster --set autoCompactionRetention=1 --set clusterSize=$EXPECT"
+        helm_install - $INFRA_NS etcd-cluster onf/voltha-etcd-cluster latest "$_HELM_DESC external ETCD cluster"
+    else
+        espin $VERIFIED
+    fi
+    wait_for_pods - "$INFRA_NS" $EXPECT "includes" -1 "Waiting for ETCD cluster to start" "etcd-cluster-.*"
+    if [ "$WITH_TIMINGS" == "yes" ]; then
+        printtime $(expr $(date +%s) - $STIME)
+    fi
+fi
+
+if [ $WITH_KAFKA == "external" ]; then
+    _TMP=$(mktemp -u)
+    _COUNT=$(test $TYPE == "minimal" && echo "1" || echo "3")
+    cat << EOC > $_TMP
+configurationOverrides:
+  "default.replication.factor": $_COUNT
+  "offsets.topic.replication.factor": $_COUNT
+  "log.retention.hours": 4
+  "log.message.timestamp.type": "LogAppendTime"
+persistence:
+  enabled: false
+zookeeper:
+  replicaCount: 1
+  persistence:
+    enabled: false
+replicas: $_COUNT
+EOC
+    STIME=$(date +%s)
+    bspin "Verify external Kafka cluster $OLD_KEY"
+    EXPECT=$(test "$TYPE" == "minimal" && echo "2" || echo "4")
+    if [ $HELM_USE_UPGRADE == "yes" -o $(helm list --deployed --short --namespace $INFRA_NS "^kafka\$" | wc -l) -ne 1 ]; then
+        espin $NOT_VERIFIED
+        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" -f $_TMP"
+        helm_install - $INFRA_NS kafka incubator/kafka latest "$_HELM_DESC external Kafka cluster"
+    else
+        espin $VERIFIED
+    fi
+    # DKB
+    wait_for_pods - "$INFRA_NS" $EXPECT "includes" -1 "Waiting for Kafka cluster to start" "kafka-.*"
+    if [ "$WITH_TIMINGS" == "yes" ]; then
+        printtime $(expr $(date +%s) - $STIME)
+    fi
+    rm -rf $_TMP
+fi
+
 STIME=$(date +%s)
 EXPECT=1
 if [ "$ONLY_ONE" == "yes" ]; then
@@ -1457,40 +1583,65 @@
 else
     EXPECT=$((EXPECT+2))
 fi
-if [ $WITH_ETCD != "yes" ]; then
-    INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set private_etcd_cluster=false"
-    if [ $WITH_ETCD != "no" ]; then
+case $WITH_ETCD in 
+    no)
+        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set private_etcd_cluster=false"
+        ;;
+    yes)
+        _HOST="voltha-etcd-cluster-client.$VOLTHA_NS.svc.cluster.local"
+        _PORT=2379
+        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set services.etcd.service=$_HOST --set services.etcd.port=$_PORT"
+        EXPECT=$((EXPECT+$(test "$TYPE" == "minimal" && echo "1" || echo "3")))
+        ;;
+    external)
+        _HOST="etcd-cluster-client.$INFRA_NS.svc.cluster.local"
+        _PORT=2379
+        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set private_etcd_cluster=false --set services.etcd.service=$_HOST --set services.etcd.port=$_PORT"
+        ;;
+    *)
         _HOST=$(echo $WITH_ETCD | cut -d: -f1)
         _PORT=$(echo $WITH_ETCD | cut -s -d: -f2)
         _PORT=${_PORT:-2379}
-        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set services.etcd.service=$_HOST --set services.etcd.port=$_PORT"
-    fi
-else
-    if [ $TYPE == "minimal" ]; then
-        EXPECT=$((EXPECT+1))
-    else
-        EXPECT=$((EXPECT+3))
-    fi
-fi
-if [ $WITH_KAFKA != "yes" ]; then
-    INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set private_kafka_cluster=false"
-    if [ $WITH_KAFKA != "no" ]; then
+        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set private_etcd_cluster=false --set services.etcd.service=$_HOST --set services.etcd.port=$_PORT"
+        ;;
+esac
+case $WITH_KAFKA in
+    no)
+        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set private_kafka_cluster=false"
+        ;;
+    yes)
+        _HOST=voltha-kafka.$VOLTHA_NS.svc.cluster.local
+        _PORT=9092
+        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set kafka_broker=$_HOST:$_PORT --set services.kafka.adapter.service=$_HOST --set services.kafka.adapter.port=$_PORT --set services.kafka.cluster.service=$_HOST --set services.kafka.cluster.port=$_PORT"
+        EXPECT=$((EXPECT+$(test "$TYPE" == "minimal" && echo "2" || echo "4")))
+        ;;
+    external)
+        _HOST=kafka.$INFRA_NS.svc.cluster.local
+        _PORT=9092
+        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set private_kafka_cluster=false --set kafka_broker=$_HOST:$_PORT --set services.kafka.adapter.service=$_HOST --set services.kafka.adapter.port=$_PORT --set services.kafka.cluster.service=$_HOST --set services.kafka.cluster.port=$_PORT"
+        ;;
+    *)
         _HOST=$(echo $WITH_KAFKA | cut -d: -f1)
         _PORT=$(echo $WITH_KAFKA | cut -s -d: -f2)
         _PORT=${_PORT:-9092}
-        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set kafka_broker=$_HOST:$_PORT --set services.kafka.adapter.service=$_HOST --set services.kafka.adapter.port=$_PORT --set services.kafka.cluster.service=$_HOST --set services.kafka.cluster.port=$_PORT"
-    fi
-else
-    if [ $TYPE == "minimal" ]; then
-        EXPECT=$((EXPECT+2))
-    else
-        EXPECT=$((EXPECT+4))
-    fi
+        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set private_kafka_cluster=false --set kafka_broker=$_HOST:$_PORT --set services.kafka.adapter.service=$_HOST --set services.kafka.adapter.port=$_PORT --set services.kafka.cluster.service=$_HOST --set services.kafka.cluster.port=$_PORT"
+        ;;
+esac
+
+if [ $WITH_ONOS == "yes" ]; then
+    _HOST=onos-openflow.$INFRA_NS.svc.cluster.local
+    _PORT=6653
+    INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set services.controller.service=$_HOST --set services.controller.port=$_PORT"
+elif [ $WITH_ONOS != "no" ]; then
+    _HOST=$(echo $WITH_ONOS | cut -d: -f1)
+    _PORT=$(echo $WITH_ONOS | cut -s -d: -f2)
+    _PORT=${_PORT:-6653}
+    INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set services.controller.service=$_HOST --set services.controller.port=$_PORT"
 fi
 bspin "Verify VOLTHA installed $HIGH_VOLTAGE"
-if [ $(helm list --deployed --short --namespace voltha "^voltha\$" | wc -l) -ne 1 ]; then
+if [ $HELM_USE_UPGRADE == "yes" -o $(helm list --deployed --short --namespace $VOLTHA_NS "^voltha\$" | wc -l) -ne 1 ]; then
     espin $NOT_VERIFIED
-    helm_install - voltha voltha $VOLTHA_CHART $VOLTHA_CHART_VERSION "Install VOLTHA Core"
+    helm_install - $VOLTHA_NS voltha $VOLTHA_CHART $VOLTHA_CHART_VERSION "$_HELM_DESC VOLTHA Core"
 else
     espin $VERIFIED
 fi
@@ -1501,7 +1652,7 @@
     voltha-etcd-cluster-.* \
     voltha-kafka-.* \
     voltha-zookeeper-.*"
-wait_for_pods - "voltha" $EXPECT "includes" -1 "Waiting for VOLTHA Core to start" $VOLTHA
+wait_for_pods - "$VOLTHA_NS" $EXPECT "includes" -1 "Waiting for VOLTHA Core to start" $VOLTHA
 if [ "$WITH_TIMINGS" == "yes" ]; then
     printtime $(expr $(date +%s) - $STIME)
 fi
@@ -1509,28 +1660,40 @@
 if [ "$WITH_ADAPTERS" == "yes" ]; then
     STIME=$(date +%s)
     EXPECT=0
-    if [ $WITH_ETCD != "yes" ]; then
-        if [ $WITH_ETCD != "no" ]; then
-            _HOST=$(echo $WITH_ETCD | cut -d: -f1)
-            _PORT=$(echo $WITH_ETCD | cut -s -d: -f2)
-            _PORT=${_PORT:-2379}
-            INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set services.etcd.service=$_HOST --set services.etcd.port=$_PORT"
-        fi
+    if [ $WITH_ETCD == "yes" ]; then
+        _HOST=voltha-etcd-cluster-client.$VOLTHA_NS.svc.cluster.local
+        _PORT=2379
+        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set services.etcd.service=$_HOST --set services.etcd.port=$_PORT"
+    elif [ $WITH_ETCD == "external" ]; then
+        _HOST=etcd-cluster-client.$INFRA_NS.svc.cluster.local
+        _PORT=2379
+        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set services.etcd.service=$_HOST --set services.etcd.port=$_PORT"
+    elif [ $WITH_ETCD != "no" ]; then
+        _HOST=$(echo $WITH_ETCD | cut -d: -f1)
+        _PORT=$(echo $WITH_ETCD | cut -s -d: -f2)
+        _PORT=${_PORT:-2379}
+        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set services.etcd.service=$_HOST --set services.etcd.port=$_PORT"
     fi
-    if [ $WITH_KAFKA != "yes" ]; then
-        if [ $WITH_KAFKA != "no" ]; then
-            _HOST=$(echo $WITH_KAFKA | cut -d: -f1)
-            _PORT=$(echo $WITH_KAFKA | cut -s -d: -f2)
-            _PORT=${_PORT:-9092}
-            INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set kafka_broker=$_HOST:$_PORT --set services.kafka.adapter.service=$_HOST --set services.kafka.adapter.port=$_PORT --set services.kafka.cluster.service=$_HOST --set services.kafka.cluster.port=$_PORT"
-        fi
+    if [ $WITH_KAFKA == "yes" ]; then
+        _HOST=voltha-kafka.$VOLTHA_NS.svc.cluster.local
+        _PORT=9092
+        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set kafka_broker=$_HOST:$_PORT --set services.kafka.adapter.service=$_HOST --set services.kafka.adapter.port=$_PORT --set services.kafka.cluster.service=$_HOST --set services.kafka.cluster.port=$_PORT"
+    elif [ $WITH_KAFKA == "external" ]; then
+        _HOST=kafka.$INFRA_NS.svc.cluster.local
+        _PORT=9092
+        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set kafka_broker=$_HOST:$_PORT --set services.kafka.adapter.service=$_HOST --set services.kafka.adapter.port=$_PORT --set services.kafka.cluster.service=$_HOST --set services.kafka.cluster.port=$_PORT"
+    elif [ $WITH_KAFKA != "no" ]; then
+        _HOST=$(echo $WITH_KAFKA | cut -d: -f1)
+        _PORT=$(echo $WITH_KAFKA | cut -s -d: -f2)
+        _PORT=${_PORT:-9092}
+        INTERNAL_EXTRA_HELM_INSTALL_ARGS+=" --set kafka_broker=$_HOST:$_PORT --set services.kafka.adapter.service=$_HOST --set services.kafka.adapter.port=$_PORT --set services.kafka.cluster.service=$_HOST --set services.kafka.cluster.port=$_PORT"
     fi
     echo -e "Verify Adapters $PLUG"
     if [ "$WITH_SIM_ADAPTERS" == "yes" ]; then
         bspin - "Verify Simulated Adapters installed"
-        if [ $(helm list --deployed --short --namespace voltha "^sim\$" | wc -l) -ne 1 ]; then
+        if [ $HELM_USE_UPGRADE == "yes" -o $(helm list --deployed --short --namespace $ADAPTER_NS  "^sim\$" | wc -l) -ne 1 ]; then
             espin - $NOT_VERIFIED
-            helm_install - voltha sim $VOLTHA_ADAPTER_SIM_CHART $VOLTHA_ADAPTER_SIM_CHART_VERSION "Install Simulated Adapters"
+            helm_install - $ADAPTER_NS  sim $VOLTHA_ADAPTER_SIM_CHART $VOLTHA_ADAPTER_SIM_CHART_VERSION "$_HELM_DESC Simulated Adapters"
         else
             espin - $VERIFIED
         fi
@@ -1539,16 +1702,16 @@
 
     if [ "$WITH_OPEN_ADAPTERS" == "yes" ]; then
         bspin - "Verify OpenOLT Adapter installed"
-        if [ $(helm list --deployed --short --namespace voltha "^open-olt\$" | wc -l) -ne 1 ]; then
+        if [ $HELM_USE_UPGRADE == "yes" -o $(helm list --deployed --short --namespace $ADAPTER_NS  "^open-olt\$" | wc -l) -ne 1 ]; then
             espin - $NOT_VERIFIED
-            helm_install - voltha open-olt $VOLTHA_ADAPTER_OPEN_OLT_CHART $VOLTHA_ADAPTER_OPEN_OLT_CHART_VERSION "Install OpenOLT Adapter"
+            helm_install - $ADAPTER_NS open-olt $VOLTHA_ADAPTER_OPEN_OLT_CHART $VOLTHA_ADAPTER_OPEN_OLT_CHART_VERSION "$_HELM_DESC OpenOLT Adapter"
         else
             espin - $VERIFIED
         fi
         bspin - "Verify OpenONU Adapter installed"
-        if [ $(helm list --deployed --short --namespace voltha "^open-onu\$" | wc -l) -ne 1 ]; then
+        if [ $HELM_USE_UPGRADE == "yes" -o $(helm list --deployed --short --namespace $ADAPTER_NS  "^open-onu\$" | wc -l) -ne 1 ]; then
             espin - $NOT_VERIFIED
-            helm_install - voltha open-onu $VOLTHA_ADAPTER_OPEN_ONU_CHART $VOLTHA_ADAPTER_OPEN_ONU_CHART_VERSION "Install OpenONU Adapter"
+            helm_install - $ADAPTER_NS  open-onu $VOLTHA_ADAPTER_OPEN_ONU_CHART $VOLTHA_ADAPTER_OPEN_ONU_CHART_VERSION "$_HELM_DESC OpenONU Adapter"
         else
             espin - $VERIFIED
         fi
@@ -1557,7 +1720,7 @@
     INTERNAL_EXTRA_HELM_INSTALL_ARGS=
 
     ADAPTERS="adapter-.*"
-    wait_for_pods - "voltha" $EXPECT "includes" -1 "Waiting for adapters to start" $ADAPTERS
+    wait_for_pods - "$ADAPTER_NS " $EXPECT "includes" -1 "Waiting for adapters to start" $ADAPTERS
     if [ "$WITH_TIMINGS" == "yes" ]; then
         printtime $(expr $(date +%s) - $STIME)
     fi
@@ -1573,17 +1736,17 @@
         else
             instance_num=$instance
         fi
-        if [ $(helm list --deployed --short --namespace voltha "^bbsim${instance_num}\$" | wc -l) -ne 1 ]; then
+        if [ $HELM_USE_UPGRADE == "yes" -o $(helm list --deployed --short --namespace $BBSIM_NS "^bbsim${instance_num}\$" | wc -l) -ne 1 ]; then
             espin - $NOT_VERIFIED
             S_TAG=$((900+$instance))
             INTERNAL_EXTRA_HELM_INSTALL_ARGS="--set olt_id=$instance,s_tag=$S_TAG"
-            helm_install - voltha bbsim${instance_num} $VOLTHA_BBSIM_CHART $VOLTHA_BBSIM_CHART_VERSION "Install BBSIM${instance_num}"
+            helm_install - $BBSIM_NS bbsim${instance_num} $VOLTHA_BBSIM_CHART $VOLTHA_BBSIM_CHART_VERSION "$_HELM_DESC BBSIM${instance_num}"
             INTERNAL_EXTRA_HELM_INSTALL_ARGS=
         else
             espin - $VERIFIED
         fi
     done
-    wait_for_pods - "voltha" $NUM_OF_BBSIM "includes" -1 "Waiting for BBSIM to start" "bbsim*"
+    wait_for_pods - "$BBSIM_NS" $NUM_OF_BBSIM "includes" -1 "Waiting for BBSIM to start" "bbsim*"
     if [ "$WITH_TIMINGS" == "yes" ]; then
         printtime $(expr $(date +%s) - $STIME)
     fi
@@ -1593,13 +1756,13 @@
     STIME=$(date +%s)
     echo -e "Verify RADIUS $LOCK"
     bspin - "Verify RADIUS Installed"
-    if [ $(helm list --deployed --short --namespace voltha "^radius\$" | wc -l) -ne 1 ]; then
+    if [ $HELM_USE_UPGRADE == "yes" -o $(helm list --deployed --short --namespace $INFRA_NS "^radius\$" | wc -l) -ne 1 ]; then
         espin - $NOT_VERIFIED
-        helm_install - voltha radius onf/freeradius latest "Install RADIUS"
+        helm_install - $INFRA_NS radius onf/freeradius latest "$_HELM_DESC RADIUS"
     else
         espin - $VERIFIED
     fi
-    wait_for_pods - "voltha" 1 "includes" -1 "Waiting for RADIUS to start" "radius-.*"
+    wait_for_pods - "$INFRA_NS" 1 "includes" -1 "Waiting for RADIUS to start" "radius-.*"
     if [ "$WITH_TIMINGS" == "yes" ]; then
         printtime $(expr $(date +%s) - $STIME)
     fi
@@ -1609,18 +1772,20 @@
     STIME=$(date +%s)
     bspin - "Forward VOLTHA API port $FORWARD"
     kill_port_forward voltha-api
-    port_forward voltha voltha-api $VOLTHA_API_PORT 55555
+    port_forward $VOLTHA_NS  voltha-api $VOLTHA_API_PORT 55555
     espin - $VERIFIED
-    if [ $WITH_ETCD == "yes" ]; then
+    if [ $WITH_ETCD == "yes" -o $WITH_ETCD == "external" ]; then
+        _NS=$(test $WITH_ETCD == "yes" && echo $VOLTHA_NS || echo $INFRA_NS)
         bspin - "Forward VOLTHA ETCD port $FORWARD"
         kill_port_forward voltha-etcd-cluster-client
-        port_forward voltha voltha-etcd-cluster-client $VOLTHA_ETCD_PORT 2379
+        port_forward $_NS voltha-etcd-cluster-client $VOLTHA_ETCD_PORT 2379
         espin - $VERIFIED
     fi
-    if [ $WITH_KAFKA == "yes" ]; then
+    if [ $WITH_KAFKA == "yes" -o $WITH_KAFKA == "external" ]; then
+        _NS=$(test $WITH_ETCD == "yes" && echo $VOLTHA_NS || echo $INFRA_NS)
         bspin - "Forward VOLTHA Kafka port $FORWARD"
         kill_port_forward voltha-kafka
-        port_forward voltha voltha-kafka $VOLTHA_KAFKA_PORT 9092
+        port_forward $_NS voltha-kafka $VOLTHA_KAFKA_PORT 9092
         espin - $VERIFIED
     fi
     if [ "$WITH_TIMINGS" == "yes" ]; then
@@ -1629,7 +1794,7 @@
 fi
 
 if [ $WITH_ONOS == "yes" -a $WITH_RADIUS != "no" ]; then
-    _HOST=radius.voltha.svc.cluster.local
+    _HOST=radius.$INFRA_NS.svc.cluster.local
     _PORT=1812
     if [ $WITH_RADIUS != "yes" ]; then
         _HOST=$(echo $WITH_RADIUS | cut -d: -f1)
@@ -1645,9 +1810,9 @@
     STIME=$(date +%s)
     echo -e "Verify kube-monkey $LOCK"
     bspin - "Verify kube-monkey Installed"
-    if [ $(helm list --deployed --short --namespace kube-monkey "^monkey\$" | wc -l) -ne 1 ]; then
+    if [ $HELM_USE_UPGRADE == "yes" -o $(helm list --deployed --short --namespace kube-monkey "^monkey\$" | wc -l) -ne 1 ]; then
         espin - $NOT_VERIFIED
-        helm_install - kube-monkey monkey ./kube-monkey/helm/kubemonkey latest "Install Chaos Monkey"
+        helm_install - kube-monkey monkey ./kube-monkey/helm/kubemonkey latest "$_HELM_DESC Chaos Monkey"
     else
         espin - $VERIFIED
     fi
@@ -1669,7 +1834,7 @@
     fi
 else
     KAFKA_FLAG="-k $(get_service_ep voltha voltha-kafka)"
-    SERVER_FLAG="-s $(get_service_ep voltha voltha-api)"
+    SERVER_FLAG="-s $(get_service_ep $VOLTHA_NS  voltha-api)"
     ETCD_FLAG=
     if [ "$MIN_VC_VERSION" == "1.0.15" ]; then
         ETCD_FLAG="-e $(get_service_ep voltha voltha-etcd-client)"