add abiilty to optionally push a SADIS configuration
diff --git a/onos-files/dhcp-to-controller-flow.json b/onos-files/dhcp-to-controller-flow.json
deleted file mode 100644
index f2d31a2..0000000
--- a/onos-files/dhcp-to-controller-flow.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-  "priority": 40000,
-  "timeout": 0,
-  "isPermanent": true,
-  "deviceId": "of:0000000000000001",
-  "treatment": {
-    "instructions": [
-      {
-        "type": "OUTPUT",
-        "port": "CONTROLLER"
-      }
-    ]
-  },
-  "selector": {
-    "criteria": [
-      {
-        "type": "IN_PORT",
-        "port": 1
-      },
-      {
-        "type": "VLAN_VID",
-        "vlanId": 222
-      }
-    ]
-  }
-}
diff --git a/onos-files/olt-onos-netcfg.json b/onos-files/olt-onos-netcfg.json
deleted file mode 100644
index 8a47b49..0000000
--- a/onos-files/olt-onos-netcfg.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-  "devices": {
-    "of:0000aabbccddeeff": {
-      "basic": {
-        "driver": "voltha"
-      }
-    }
-  },
-  "apps": {
-    "org.opencord.aaa": {
-      "AAA": {
-        "radiusIp": "10.1.5.3",
-        "nasIp": "10.1.5.3",
-        "radiusServerPort": "1812",
-        "radiusSecret": "SECRET"
-      }
-    },
-    "org.opencord.sadis": {
-      "sadis": {
-        "integration": {
-          "cache": {
-            "enabled": false,
-            "maxsize": 50,
-            "ttl": "PT0m"
-          }
-        },
-        "entries": [
-          {
-            "id": "PSMO12345678",
-            "cTag": 111,
-            "sTag": 222,
-            "nasPortId": "",
-            "circuitId": "",
-            "remoteId": ""
-          },
-          {
-            "id": "10.1.4.4:50060",
-            "hardwareIdentifier": "aa:bb:cc:dd:ee:ff",
-            "ipAddress": "10.233.111.16",
-            "nasId": "10.1.4.4:50060",
-            "uplinkPort": 2
-          }
-        ]
-      }
-    },
-    "org.opencord.dhcpl2relay": {
-      "dhcpl2relay" : {
-        "useOltUplinkForServerPktInOut": true
-      }
-    }
-  }
-}
diff --git a/onos-files/onos-aaa.json b/onos-files/onos-aaa.json
new file mode 100644
index 0000000..82413fe
--- /dev/null
+++ b/onos-files/onos-aaa.json
@@ -0,0 +1,8 @@
+{
+  "AAA": {
+    "radiusIp": ":RADIUS_IP:",
+    "nasIp": ":RADIUS_IP:",
+    "radiusServerPort": "1812",
+    "radiusSecret": "SECRET"
+  }
+}
diff --git a/onos-files/onos-dhcpl2relay.json b/onos-files/onos-dhcpl2relay.json
new file mode 100644
index 0000000..a9162dc
--- /dev/null
+++ b/onos-files/onos-dhcpl2relay.json
@@ -0,0 +1,5 @@
+{
+  "dhcpl2relay" : {
+    "useOltUplinkForServerPktInOut": true
+  }
+}
diff --git a/onos-files/onos-kafka.json b/onos-files/onos-kafka.json
new file mode 100644
index 0000000..43eada6
--- /dev/null
+++ b/onos-files/onos-kafka.json
@@ -0,0 +1,5 @@
+{
+  "kafka": {
+    "bootstrapServers": "voltha-kafka.voltha.svc.cluster.local:9092"
+  }
+}
diff --git a/onos-files/onos-sadis-no-tp.json b/onos-files/onos-sadis-no-tp.json
new file mode 100644
index 0000000..1208325
--- /dev/null
+++ b/onos-files/onos-sadis-no-tp.json
@@ -0,0 +1,29 @@
+{
+      "sadis": {
+        "integration": {
+          "cache": {
+            "enabled": false,
+            "maxsize": 50,
+            "ttl": "PT0m"
+          }
+        },
+        "entries": [
+          {
+            "id": "BBSIMOLT000",
+            "hardwareIdentifier": "0f:f1:ce:c0:ff:ee",
+            "nasId": "BBSIMOLT000",
+            "uplinkPort": 65536
+          },
+          {
+            "id": "BBSM00000001-1",
+            "cTag": 900,
+            "sTag": 900,
+            "nasPortId": "BBSM00000001-1",
+            "circuitId": "BBSM00000001-1",
+            "remoteId": "BBSIMOLT000"
+          }
+        ]
+      }
+    }
+  }
+}
diff --git a/onos-files/onos-sadis-tp.json b/onos-files/onos-sadis-tp.json
new file mode 100644
index 0000000..5a21c85
--- /dev/null
+++ b/onos-files/onos-sadis-tp.json
@@ -0,0 +1,49 @@
+{
+  "sadis": {
+    "integration": {
+      "cache": {
+        "enabled": false,
+        "maxsize": 50,
+        "ttl": "PT0m"
+      }
+    },
+    "entries": [
+      {
+        "id": "BBSIMOLT000",
+        "hardwareIdentifier": "0f:f1:ce:c0:ff:ee",
+        "nasId": "BBSIMOLT000",
+        "uplinkPort": 65536
+      },
+      {
+        "id": "BBSM00000001-1",
+        "cTag": 900,
+        "sTag": 900,
+        "nasPortId": "BBSM00000001-1",
+        "circuitId": "BBSM00000001-1",
+        "remoteId": "BBSIMOLT000",
+        "technologyProfileId": 64,
+        "upstreamBandwidthProfile": "Default",
+        "downstreamBandwidthProfile": "Default"
+      }
+    ]
+  },
+  "bandwidthprofile": {
+    "integration": {
+      "cache": {
+        "enabled": true,
+        "maxsize": 40,
+        "ttl": "PT1m"
+      }
+    },
+    "entries": [
+      {
+        "id": "Default",
+        "cir": 1000000,
+        "cbs": 1001,
+        "eir": 1002,
+        "ebs": 1003,
+        "air": 1004
+      }
+    ]
+  }
+}
diff --git a/onos-files/radius-config.json b/onos-files/radius-config.json
deleted file mode 100644
index e8c3803..0000000
--- a/onos-files/radius-config.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "apps": {
-    "org.opencord.aaa": {
-      "AAA": {
-        "radiusIp": ":RADIUS_IP:",
-        "nasIp": ":RADIUS_IP:",
-        "radiusServerPort": "1812",
-        "radiusSecret": "SECRET"
-      }
-    }
-  }
-}
diff --git a/voltha b/voltha
index 0ce23ac..376b7df 100755
--- a/voltha
+++ b/voltha
@@ -71,6 +71,7 @@
 WITH_BBSIM=${WITH_BBSIM:-no}
 WITH_RADIUS=${WITH_RADIUS:-no}
 WITH_ONOS=${WITH_ONOS:-yes}
+CONFIG_SADIS=${CONFIG_SADIS:-no}
 INSTALL_ONOS_APPS=${INSTALL_ONOS_APPS:-no}
 WITH_TP=${WITH_TP:-yes}
 JUST_K8S=${JUST_K8S:-no}
@@ -234,6 +235,18 @@
     INSTALL_ONOS_APPS=no
 fi
 
+# Verify CONFIG_SADIS settting and convert uniform value of yes or no
+if [ $(echo ":y:yes:true:n:no:false:1:0:" | grep -ic ":$CONFIG_SADIS:") -eq 0 ]; then
+    >&2 echo -e "${RED}${BOLD}${ERROR}ERROR:${NORMAL}${RED} Invalid \$CONFIG_SADIS value of '$CONFIG_SADIS'. Should be 'yes' or 'no'${NORMAL}"
+    exit 1
+fi
+
+if [ $(echo ":y:yes:true:1:" | grep -ic ":$CONFIG_SADIS:") -eq 1 ]; then
+    CONFIG_SADIS=yes
+else
+    CONFIG_SADIS=no
+fi
+
 mkdir -p .voltha
 touch .voltha/ports
 HAVE=$(grep $NAME .voltha/ports)
@@ -273,31 +286,6 @@
 fi
 export ONOS_API_PORT ONOS_SSH_PORT
 
-spin() {
-    PARTS="\
-        \xe2\xa2\x8e\xe2\xa1\xb0 \
-        \xe2\xa2\x8e\xe2\xa1\xa1 \
-        \xe2\xa2\x8e\xe2\xa1\x91 \
-        \xe2\xa2\x8e\xe2\xa0\xb1 \
-        \xe2\xa0\x8e\xe2\xa1\xb1 \
-        \xe2\xa2\x8a\xe2\xa1\xb1 \
-        \xe2\xa2\x8c\xe2\xa1\xb1 \
-        \xe2\xa2\x86\xe2\xa1\xb1 \
-        "
-    IDX=1
-    echo -en $CIVIS
-    while true; do
-       C=$(echo $PARTS | cut '-d ' -f $IDX)
-       echo -en "$C"
-       IDX=$(expr $IDX + 1)
-       if [ $IDX -gt 8 ]; then
-           IDX=1
-       fi
-       sleep .15 
-       echo -en "\r"
-    done
-}
-
 IDX=1
 CLOCK="TIME:"
 SPIN_PARTS=
@@ -565,7 +553,8 @@
 
 # Output install options to log
 echo "OPTIONS" >> $LOG
-ALL_OPTIONS="NAME TYPE WITH_TIMINGS WITH_BBSIM WITH_RADIUS WITH_ONOS WITH_TP JUST_K8S DEPLOY_K8S \
+ALL_OPTIONS="NAME TYPE WITH_TIMINGS WITH_BBSIM WITH_RADIUS WITH_ONOS WITH_TP \
+    CONFIG_SADIS JUST_K8S DEPLOY_K8S \
     INSTALL_ONOS_APPS SKIP_RESTART_API INSTALL_KUBECTL INSTALL_HELM USE_GO VOLTHA_LOG_LEVEL \
     VOLTHA_CHART VOLTHA_ADAPTER_SIM_CHART VOLTHA_ADAPTER_OPEN_OLT_CHART \
     VOLTHA_ADAPTER_OPEN_ONU_CHART ONOS_TAG \
@@ -586,7 +575,7 @@
     local DATA=$3
 
     bspin - "$MSG $GEAR"
-    until test; do
+    while true; do
         (set -x; curl --fail -sSL --user karaf:karaf -X POST -H Content-Type:application/json http://127.0.0.1:$ONOS_API_PORT/onos/v1/$RESOURCE --data @$DATA >>$LOG 2>&1) >>$LOG 2>&1
         if [ $? -eq 0 ]; then
             break
@@ -599,12 +588,15 @@
 
 override_onos_app() {
     local APP=$1
-    local NAME=$(basename $APP | sed -e 's/-.*$//g')
-    until test; do
+    local NAME=$(basename $APP | sed -e 's/^[0-9][0-9]*-//g' -e 's/-.*$//g')
+    while true; do
         sspin -
         # Attempt to delete old version (if it exists)
         (set -x; curl --fail -sSL --user karaf:karaf -X DELETE http://127.0.0.1:$ONOS_API_PORT/onos/v1/applications/$NAME >>$LOG 2>&1) >>$LOG 2>&1
         sspin -
+        if [ $? -ne 0 ]; then
+            continue
+        fi
         (set -x; curl --fail -sSL --user karaf:karaf -X POST -H Content-Type:application/octet-stream http://127.0.0.1:$ONOS_API_PORT/onos/v1/applications?activate=true --data-binary @$APP >>$LOG 2>&1) >>$LOG 2>&1
         if [ $? -eq 0 ]; then
             break
@@ -613,6 +605,22 @@
     done
 }
 
+activate_onos_app() {
+    local MSG="$1"
+    local APP=$2
+
+    bspin - "$MSG $GO"
+    while true; do
+        sspin -
+        (set -x; curl --fail -sSL --user karaf:karaf -X POST http://127.0.0.1:$ONOS_API_PORT/onos/v1/applications/$APP/active >>$LOG 2>&1) >>$LOG 2>&1
+        if [ $? -eq 0 ]; then
+            break
+        fi
+        sleep .2
+    done
+    espin - "$VERIFIED"
+}
+
 count_pods() {
     local NAMESPACE=$1; shift
     local PODS=$(kubectl -n $NAMESPACE get pod -o go-template="{{range .items}}{{.metadata.name}}/{{.status.phase}}/_{{range .status.containerStatuses}}{{.ready}}_{{end}} {{end}}")
@@ -948,11 +956,15 @@
     for i in $(screen -ls | grep onos-ssh-$NAME | awk '{print $1}'); do
         (set -x; screen -X -S $i quit >>$LOG 2>&1) >>$LOG 2>&1
     done
+
+
     (set -x; screen -dmS onos-ssh-$NAME bash -c "while true; do kubectl port-forward service/onos-ssh $ONOS_SSH_PORT:8101; done" >>$LOG 2>&1) >>$LOG 2>&1
     espin - $VERIFIED
     bspin - "Verify or download ONOS configuration support files $DOWNLOAD"
+    ONOS_FILES="olt-onos-enableExtraneousRules.json  olt-onos-olt-settings.json onos-aaa.json \
+        onos-dhcpl2relay.json onos-kafka.json onos-sadis-no-tp.json onos-sadis-tp.json"
     (set -x; mkdir -p ./onos-files  >>$LOG 2>&1) >>$LOG 2>&1
-    for i in dhcp-to-controller-flow.json olt-onos-enableExtraneousRules.json olt-onos-netcfg.json olt-onos-olt-settings.json radius-config.json; do
+    for i in $ONOS_FILES; do
         if [ ! -r ./onos-files/$i ]; then
             (set -x; curl -o ./onos-files/$i -sSL https://raw.githubusercontent.com/ciena/kind-voltha/master/onos-files/$i >>$LOG 2>&1) >>$LOG 2>&1
         fi
@@ -964,17 +976,27 @@
         if [ -x onos-files/onos-apps -a $(ls -1 onos-files/onos-apps/*.oar 2>/dev/null | wc -l) -gt 0 ];  then
             for OAR in $(ls -1 onos-files/onos-apps/*.oar); do
                 sspin - "Installing custom ONOS applications - $OAR$CEOL"
-               override_onos_app $OAR
+                override_onos_app $OAR
             done
             espin - "$VERIFIED Installing custom ONOS applications$CEOL"
         else
             espin - "$NOT_VERIFIED Installing custom ONOS applications - None Found"
         fi
     fi
-   
-    push_onos_config "Push ONOS Network Configuration" "network/configuration" "onos-files/olt-onos-netcfg.json"
+  
+    push_onos_config "Push ONOS Kafka Configuration" "network/configuration/apps/org.opencord.kafka" "onos-files/onos-kafka.json"
+    push_onos_config "Push ONOS DHCP L2 Relay Configuration" "network/configuration/apps/org.opencord.dhcpl2relay" "onos-files/onos-dhcpl2relay.json"
     push_onos_config "Enable VOLTHA ONOS DHCP provisioning" "configuration/org.opencord.olt.impl.Olt" "onos-files/olt-onos-olt-settings.json"
     push_onos_config "Enabling extraneous rules for ONOS" "configuration/org.onosproject.net.flow.impl.FlowRuleManager" "onos-files/olt-onos-enableExtraneousRules.json"
+    if [ -f onos-files/onos-sadis.json ]; then
+        push_onos_config "[optional] Push ONOS SADIS Configuration" "network/configuration/apps/org.opencord.sadis" "onos-files/onos-sadis.json"
+    elif [ "$CONFIG_SADIS" == "yes" ]; then
+        SADIS_CFG=onos-files/onos-sadis-no-tp.json
+        if [ "$WITH_TP" == "yes" ]; then
+            SADIS_CFG=onos-files/onos-sadis-tp.json
+        fi
+        push_onos_config "[optional] Push ONOS SADIS Configuration" "network/configuration/apps/org.opencord.sadis" "$SADIS_CFG"
+    fi
 fi
 if [ "$WITH_TIMINGS" == "yes" ]; then
     printtime $(expr $(date +%s) - $STIME)
@@ -1103,7 +1125,7 @@
 
 if [ $WITH_ONOS == "yes" -a $WITH_RADIUS == "yes" ]; then
     bspin "Configure ONOS RADIUS Connection $GEAR"
-    (set -x; cat onos-files/radius-config.json | sed -e "s/:RADIUS_IP:/$(kubectl -n voltha get service/radius -o jsonpath={.spec.clusterIP})/g" | curl -XPOST -sSL http://karaf:karaf@localhost:8181/onos/v1/network/configuration -H Content-type:application/json -d@- >>$LOG 2>&1) >>$LOG 2>&1
+    (set -x; cat onos-files/onos-aaa.json | sed -e "s/:RADIUS_IP:/$(kubectl -n voltha get service/radius -o jsonpath={.spec.clusterIP})/g" | curl -XPOST -sSL http://karaf:karaf@localhost:8181/onos/v1/network/configuration/apps/org.opencord.aaa -H Content-type:application/json -d@- >>$LOG 2>&1) >>$LOG 2>&1
     espin $VERIFIED
 fi