Merge "[VOL-5177] - verify_voltha-openolt-adapter_sanity-test failure"
diff --git a/jjb/pipeline/voltha/bbsim-tests.groovy b/jjb/pipeline/voltha/bbsim-tests.groovy
index 128a20d..991ff5b 100644
--- a/jjb/pipeline/voltha/bbsim-tests.groovy
+++ b/jjb/pipeline/voltha/bbsim-tests.groovy
@@ -38,7 +38,7 @@
     if (br != branch) {
         String err = [
             'ERROR: Detected invalid branch',
-            '(expected=[$br] != found=[$branch])'
+            "(expected=[${br}] != found=[${branch}])"
         ].join(' ')
         throw new Exception(err) // groovylint-disable-line ThrowException
     }
@@ -333,9 +333,7 @@
             // -----------------------------------------------------------------------
             // -----------------------------------------------------------------------
             sh(label  : 'while-true-port-forward',
-               """
-      JENKINS_NODE_COOKIE="dontKillMe" _TAG="voltha-voltha-api" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${volthaNamespace} svc/voltha-voltha-api 55555:55555; done"&
-      JENKINS_NODE_COOKIE="dontKillMe" _TAG="voltha-infra-etcd" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${infraNamespace} svc/voltha-infra-etcd 2379:2379; done"&
+               script : """
       JENKINS_NODE_COOKIE="dontKillMe" _TAG="voltha-infra-kafka" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${infraNamespace} svc/voltha-infra-kafka 9092:9092; done"&
       bbsimDmiPortFwd=50075
       for i in {0..${olts.toInteger() - 1}}; do
diff --git a/jjb/pipeline/voltha/device-management-mock-tests.groovy b/jjb/pipeline/voltha/device-management-mock-tests.groovy
index 8362a08..e837028 100644
--- a/jjb/pipeline/voltha/device-management-mock-tests.groovy
+++ b/jjb/pipeline/voltha/device-management-mock-tests.groovy
@@ -104,7 +104,6 @@
         sh """
         _TAG=onos-port-forward kubectl port-forward --address 0.0.0.0 -n infra svc/voltha-infra-onos-classic-hs 8101:8101&
         _TAG=onos-port-forward kubectl port-forward --address 0.0.0.0 -n infra svc/voltha-infra-onos-classic-hs 8181:8181&
-        _TAG=voltha-port-forward kubectl port-forward --address 0.0.0.0 -n voltha svc/voltha-voltha-api 55555:55555&
         """
       }
     }
diff --git a/jjb/pipeline/voltha/dmi-build-and-test.groovy b/jjb/pipeline/voltha/dmi-build-and-test.groovy
index 6d66a53..501c7f5 100755
--- a/jjb/pipeline/voltha/dmi-build-and-test.groovy
+++ b/jjb/pipeline/voltha/dmi-build-and-test.groovy
@@ -47,7 +47,7 @@
   environment {
     PATH="$PATH:$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
     KUBECONFIG="$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf"
-    VOLTCONFIG="$HOME/.volt/config-minimal"
+    VOLTCONFIG="$HOME/.volt/config"
     LOG_FOLDER="$WORKSPACE/dmi/"
     APPS_TO_LOG="${OltDevMgr}"
   }
@@ -170,8 +170,6 @@
             }
           }
           sh """
-          JENKINS_NODE_COOKIE="dontKillMe" _TAG="voltha-api" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${volthaNamespace} svc/voltha-voltha-api 55555:55555; done"&
-          JENKINS_NODE_COOKIE="dontKillMe" _TAG="etcd" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${infraNamespace} svc/voltha-infra-etcd ${params.VolthaEtcdPort}:2379; done"&
           JENKINS_NODE_COOKIE="dontKillMe" _TAG="kafka" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${infraNamespace} svc/voltha-infra-kafka 9092:9092; done"&
           ps aux | grep port-forward
           """
diff --git a/jjb/pipeline/voltha/physical-build.groovy b/jjb/pipeline/voltha/physical-build.groovy
index 9dfb588..69537b3 100755
--- a/jjb/pipeline/voltha/physical-build.groovy
+++ b/jjb/pipeline/voltha/physical-build.groovy
@@ -179,8 +179,6 @@
             }
           }
           sh """
-          JENKINS_NODE_COOKIE="dontKillMe" _TAG="voltha-api" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${volthaNamespace} svc/voltha-voltha-api 55555:55555; done"&
-          JENKINS_NODE_COOKIE="dontKillMe" _TAG="etcd" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${infraNamespace} svc/voltha-infra-etcd ${params.VolthaEtcdPort}:2379; done"&
           JENKINS_NODE_COOKIE="dontKillMe" _TAG="kafka" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${infraNamespace} svc/voltha-infra-kafka 9092:9092; done"&
           ps aux | grep port-forward
           """
diff --git a/jjb/pipeline/voltha/software-upgrades.groovy b/jjb/pipeline/voltha/software-upgrades.groovy
index 8462c75..7ffcaee 100755
--- a/jjb/pipeline/voltha/software-upgrades.groovy
+++ b/jjb/pipeline/voltha/software-upgrades.groovy
@@ -165,7 +165,6 @@
             sh('''
       JENKINS_NODE_COOKIE="dontKillMe" _TAG=onos-port-forward /bin/bash -c "while true; do kubectl -n infra port-forward --address 0.0.0.0 service/voltha-infra-onos-classic-hs 8101:8101; done 2>&1 " &
       JENKINS_NODE_COOKIE="dontKillMe" _TAG=onos-port-forward /bin/bash -c "while true; do kubectl -n infra port-forward --address 0.0.0.0 service/voltha-infra-onos-classic-hs 8181:8181; done 2>&1 " &
-      JENKINS_NODE_COOKIE="dontKillMe" _TAG=port-forward-voltha-api /bin/bash -c "while true; do kubectl -n voltha port-forward --address 0.0.0.0 service/voltha-voltha-api 55555:55555; done 2>&1 " &
       ''')
             sh('''
       sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 log:set DEBUG org.opencord
@@ -230,7 +229,7 @@
         if [ ${logging} = true ]; then
           testLogging='True'
         fi
-        export VOLTCONFIG=$HOME/.volt/config-minimal
+        export VOLTCONFIG=$HOME/.volt/config
         export KUBECONFIG=$HOME/.kube/kind-config-voltha-minimal
         ROBOT_MISC_ARGS+=" -v ONOS_SSH_PORT:30115 -v ONOS_REST_PORT:30120 -v NAMESPACE:${volthaNamespace} -v INFRA_NAMESPACE:${infraNamespace} -v container_log_dir:${logsDir} -v logging:\$testLogging"
         # Run the specified tests
diff --git a/jjb/pipeline/voltha/tucson-build-and-test.groovy b/jjb/pipeline/voltha/tucson-build-and-test.groovy
index 81b26ab..5876876 100644
--- a/jjb/pipeline/voltha/tucson-build-and-test.groovy
+++ b/jjb/pipeline/voltha/tucson-build-and-test.groovy
@@ -158,8 +158,6 @@
           done
           '''
           sh """
-          JENKINS_NODE_COOKIE="dontKillMe" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${volthaNamespace} svc/voltha-voltha-api 55555:55555; done"&
-          JENKINS_NODE_COOKIE="dontKillMe" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${infraNamespace} svc/voltha-infra-etcd 2379:2379; done"&
           JENKINS_NODE_COOKIE="dontKillMe" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${infraNamespace} svc/voltha-infra-kafka 9092:9092; done"&
           ps aux | grep port-forward
           """
diff --git a/jjb/pipeline/voltha/voltha-dt-physical-functional-tests.groovy b/jjb/pipeline/voltha/voltha-dt-physical-functional-tests.groovy
index 69fbced..c2937f4 100644
--- a/jjb/pipeline/voltha/voltha-dt-physical-functional-tests.groovy
+++ b/jjb/pipeline/voltha/voltha-dt-physical-functional-tests.groovy
@@ -40,7 +40,7 @@
 
   environment {
     KUBECONFIG="$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf"
-    VOLTCONFIG="$HOME/.volt/config-minimal"
+    VOLTCONFIG="$HOME/.volt/config"
     PATH="$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
   }
 
@@ -112,8 +112,6 @@
         ps aux | grep port-forw | grep -v grep | awk '{print $2}' | xargs --no-run-if-empty kill -9 || true
         '''
         sh """
-        JENKINS_NODE_COOKIE="dontKillMe" _TAG="voltha-api" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${volthaNamespace} svc/voltha-voltha-api 55555:55555; done"&
-        JENKINS_NODE_COOKIE="dontKillMe" _TAG="etcd" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${infraNamespace} svc/voltha-infra-etcd ${params.VolthaEtcdPort}:2379; done"&
         JENKINS_NODE_COOKIE="dontKillMe" _TAG="kafka" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${infraNamespace} svc/voltha-infra-kafka 9092:9092; done"&
         ps aux | grep port-forward
         """
diff --git a/jjb/pipeline/voltha/voltha-physical-functional-tests.groovy b/jjb/pipeline/voltha/voltha-physical-functional-tests.groovy
index 8565148..eb76b79 100644
--- a/jjb/pipeline/voltha/voltha-physical-functional-tests.groovy
+++ b/jjb/pipeline/voltha/voltha-physical-functional-tests.groovy
@@ -40,7 +40,7 @@
 
   environment {
     KUBECONFIG="$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf"
-    VOLTCONFIG="$HOME/.volt/config-minimal"
+    VOLTCONFIG="$HOME/.volt/config"
     PATH="$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
   }
   stages {
diff --git a/jjb/pipeline/voltha/voltha-physical-soak-dt-tests.groovy b/jjb/pipeline/voltha/voltha-physical-soak-dt-tests.groovy
index 6320cfb..14a5724 100644
--- a/jjb/pipeline/voltha/voltha-physical-soak-dt-tests.groovy
+++ b/jjb/pipeline/voltha/voltha-physical-soak-dt-tests.groovy
@@ -40,7 +40,7 @@
 
   environment {
     KUBECONFIG="$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf"
-    VOLTCONFIG="$HOME/.volt/config-minimal"
+    VOLTCONFIG="$HOME/.volt/config"
     PATH="$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
   }
 
diff --git a/jjb/pipeline/voltha/voltha-scale-lwc-test.groovy b/jjb/pipeline/voltha/voltha-scale-lwc-test.groovy
index 84308ac..e51abd3 100644
--- a/jjb/pipeline/voltha/voltha-scale-lwc-test.groovy
+++ b/jjb/pipeline/voltha/voltha-scale-lwc-test.groovy
@@ -171,7 +171,6 @@
           make vst_venv
 
           daemonize -E JENKINS_NODE_COOKIE="dontKillMe" /usr/local/bin/kubectl port-forward -n infra svc/lwc 8182:8181 --address 0.0.0.0
-          daemonize -E JENKINS_NODE_COOKIE="dontKillMe" /usr/local/bin/kubectl port-forward -n voltha1 svc/voltha1-voltha-api 55555 --address 0.0.0.0
 
           source ./vst_venv/bin/activate
           robot -d $WORKSPACE/RobotLogs \
diff --git a/jjb/pipeline/voltha/voltha-scale-multi-stack.groovy b/jjb/pipeline/voltha/voltha-scale-multi-stack.groovy
index 8420da0..8ede30d 100644
--- a/jjb/pipeline/voltha/voltha-scale-multi-stack.groovy
+++ b/jjb/pipeline/voltha/voltha-scale-multi-stack.groovy
@@ -156,9 +156,6 @@
         script {
           sh returnStdout: false, script: """
 
-          # forward ETCD port
-          JENKINS_NODE_COOKIE="dontKillMe" _TAG=etcd-port-forward /bin/bash -c "while true; do kubectl -n infra port-forward --address 0.0.0.0 service/etcd 9999:2379; done 2>&1 " &
-
           # forward ONOS ports
           JENKINS_NODE_COOKIE="dontKillMe" _TAG=onos-port-forward /bin/bash -c "while true; do kubectl -n infra port-forward --address 0.0.0.0 service/voltha-infra-onos-classic-hs 8101:8101; done 2>&1 " &
           JENKINS_NODE_COOKIE="dontKillMe" _TAG=onos-port-forward /bin/bash -c "while true; do kubectl -n infra port-forward --address 0.0.0.0 service/voltha-infra-onos-classic-hs 8181:8181; done 2>&1 " &
@@ -329,10 +326,6 @@
           voltcfg="~/.volt/config-voltha"+i
           try {
             sh """
-
-            # _TAG=voltha-port-forward kubectl port-forward --address 0.0.0.0 -n voltha${i} svc/voltha${i}-voltha-api 55555:55555& > /dev/null 2>&1
-            _TAG="voltha-port-forward" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n voltha${i} svc/voltha${i}-voltha-api 55555:55555 > /dev/null 2>&1; done"&
-
             voltctl -m 32MB device list -o json > $LOG_FOLDER/${stack_ns}/device-list.json || true
             python -m json.tool $LOG_FOLDER/${stack_ns}/device-list.json > $LOG_FOLDER/${stack_ns}/voltha-devices-list.json || true
             rm $LOG_FOLDER/${stack_ns}/device-list.json || true
@@ -408,13 +401,8 @@
       timeout(time: 15, unit: 'MINUTES') {
         sh """
 
-        # we are restarting the voltha-api port-forward for each stack, no need to have a different voltconfig file
-        voltctl -s 127.0.0.1:55555 config > $HOME/.volt/config
         export VOLTCONFIG=$HOME/.volt/config
 
-        # _TAG=voltha-port-forward kubectl port-forward --address 0.0.0.0 -n voltha${i} svc/voltha${i}-voltha-api 55555:55555& > /dev/null 2>&1
-        _TAG="voltha-port-forward" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n voltha${i} svc/voltha${i}-voltha-api 55555:55555 > /dev/null 2>&1; done"&
-
         # wait a bit to make sure the port-forwarding has started
         sleep 5
 
diff --git a/jjb/pipeline/voltha/voltha-tt-physical-functional-tests.groovy b/jjb/pipeline/voltha/voltha-tt-physical-functional-tests.groovy
index 1eacba9..c92d747 100644
--- a/jjb/pipeline/voltha/voltha-tt-physical-functional-tests.groovy
+++ b/jjb/pipeline/voltha/voltha-tt-physical-functional-tests.groovy
@@ -40,7 +40,7 @@
 
   environment {
     KUBECONFIG="$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf"
-    VOLTCONFIG="$HOME/.volt/config-minimal"
+    VOLTCONFIG="$HOME/.volt/config"
     PATH="$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
   }
 
diff --git a/jjb/verify/voltha-onos.yaml b/jjb/verify/voltha-onos.yaml
index 8baf4cf..c27705a 100644
--- a/jjb/verify/voltha-onos.yaml
+++ b/jjb/verify/voltha-onos.yaml
@@ -18,10 +18,6 @@
           name-extension: '-voltha-2.11'
           override-branch: 'voltha-2.11'
           branch-regexp: '^voltha-2.11$'
-#      - 'verify-voltha-onos-jobs-voltha-2.8':
-#          name-extension: '-voltha-2.8'
-#          override-branch: 'voltha-2.8'
-#          branch-regexp: '^voltha-2.8$'
       - 'publish-voltha-onos-jobs':
           branch-regexp: '{all-branches-regexp}'
 
@@ -46,12 +42,6 @@
           pipeline-script: 'voltha/voltha-2.11/bbsim-tests.groovy'
           pipeline-branch: 'voltha-2.11'
 
-#- job-group:
-#    name: 'verify-voltha-onos-jobs-voltha-2.8'
-#    jobs:
-#      - 'voltha-patch-test':
-#          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
-
 - job-group:
     name: 'verify-voltha-onos-jobs-master'
     jobs:
diff --git a/jjb/verify/voltha-openolt-adapter.yaml b/jjb/verify/voltha-openolt-adapter.yaml
index 9c490dc..e7aae9f 100644
--- a/jjb/verify/voltha-openolt-adapter.yaml
+++ b/jjb/verify/voltha-openolt-adapter.yaml
@@ -52,8 +52,10 @@
     name: 'verify-voltha-openolt-adapter-jobs-voltha-2.12'
     jobs:
       - 'voltha-patch-test':
-          pipeline-script: 'voltha/voltha-2.12/bbsim-tests.groovy'
-          pipeline-branch: 'voltha-2.12'
+          pipeline-script: 'voltha/bbsim-tests.groovy'
+          pipeline-branch: 'master'
+          # pipeline-script: 'voltha/voltha-2.12/bbsim-tests.groovy'
+          # pipeline-branch: 'voltha-2.12'
 
 - job-group:
     name: 'verify-voltha-openolt-adapter-jobs-voltha-2.11'
diff --git a/jjb/voltha-test/voltha-nightly-jobs.yaml b/jjb/voltha-test/voltha-nightly-jobs.yaml
index 21a702a..f521994 100644
--- a/jjb/voltha-test/voltha-nightly-jobs.yaml
+++ b/jjb/voltha-test/voltha-nightly-jobs.yaml
@@ -147,11 +147,6 @@
           default: '{reinstall-olt}'
           description: "Re-install olt software bringing up CORD"
 
-      - string:
-          name: VolthaEtcdPort
-          default: '{VolthaEtcdPort}'
-          description: 'Localhost port that is forwarded to VOLTHA etcd'
-
       - bool:
           name: inBandManagement
           default: '{in-band-management}'
@@ -227,7 +222,6 @@
     <<: *voltha-pipe-job-boiler-plate
     # default values
     pipeline-script: 'voltha/physical-build.groovy'
-    VolthaEtcdPort: 2379
     num-of-openonu: 1
     num-of-onos: 1
     num-of-atomix: 0
@@ -278,7 +272,6 @@
     <<: *voltha-pipe-job-boiler-plate
     # default values
     pipeline-script: 'voltha/physical-build.groovy'
-    VolthaEtcdPort: 2379
     num-of-openonu: 1
     num-of-onos: 3
     num-of-atomix: 3
@@ -334,7 +327,6 @@
     <<: *voltha-pipe-job-boiler-plate
     # default values
     pipeline-script: 'voltha/playground/physical-build.groovy'
-    VolthaEtcdPort: 2379
     num-of-openonu: 1
     num-of-onos: 3
     num-of-atomix: 3
@@ -990,7 +982,6 @@
     pipeline-script: 'voltha/dmi-build-and-test.groovy'
     installVolthaInfra: true
     installVolthaStack: true
-    VolthaEtcdPort: 2379
     num-of-openonu: 1
     num-of-onos: 3
     num-of-atomix: 3
@@ -1173,11 +1164,6 @@
           default: '{restart-olt}'
           description: "Re-install olt software bringing up CORD"
 
-      - string:
-          name: VolthaEtcdPort
-          default: '{VolthaEtcdPort}'
-          description: 'Localhost port that is forwarded to VOLTHA etcd'
-
       - bool:
           name: inBandManagement
           default: '{in-band-management}'
diff --git a/jjb/voltha-test/voltha.yaml b/jjb/voltha-test/voltha.yaml
index 0b01f31..93cb11a 100644
--- a/jjb/voltha-test/voltha.yaml
+++ b/jjb/voltha-test/voltha.yaml
@@ -60,7 +60,7 @@
       - 'build_voltha_pod_release_timer':
           build-node: 'berlin-community-pod-1'
           config-pod: 'berlin-community-pod-1-gpon'
-          disable-job: true
+          disable-job: false
           name-extension: '_DT'
           work-flow: 'DT'
           profile: '1T8GEM'
@@ -74,7 +74,7 @@
           timeout: 330
           build-node: 'berlin-community-pod-1'
           config-pod: 'berlin-community-pod-1-gpon'
-          disable-job: true
+          disable-job: false
           name-extension: '_DT'
           work-flow: 'DT'
           release: 'master'
@@ -326,7 +326,6 @@
           num-of-onos: '3'
           num-of-atomix: '3'
           pipeline-script: 'voltha/physical-build.groovy'
-          VolthaEtcdPort: 9999
           waitTimerForOltUp: 360
           time: '1'
 
@@ -359,7 +358,6 @@
           num-of-onos: '3'
           num-of-atomix: '3'
           pipeline-script: 'voltha/physical-build.groovy'
-          VolthaEtcdPort: 9999
           waitTimerForOltUp: 360
           profile: '1T8GEM'
           time: '5'
@@ -391,7 +389,6 @@
           work-flow: 'TT'
           profile: 'TP'
           time: '10'
-          VolthaEtcdPort: 9999
           num-of-onos: '3'
           num-of-atomix: '3'
 
@@ -424,7 +421,6 @@
           work-flow: 'TT'
           profile: 'TP'
           time: '10'
-          VolthaEtcdPort: 9999
           num-of-onos: '3'
           num-of-atomix: '3'
 
@@ -459,7 +455,6 @@
           work-flow: 'TT'
           profile: 'TP'
           time: '10'
-          VolthaEtcdPort: 9999
           num-of-onos: '3'
           num-of-atomix: '3'
 
@@ -476,7 +471,6 @@
           work-flow: 'TT'
           profile: 'TP'
           time: '10'
-          VolthaEtcdPort: 9999
           num-of-onos: '3'
           num-of-atomix: '3'
 
@@ -527,7 +521,6 @@
           work-flow: 'TT'
           profile: 'TP'
           time: '10'
-          VolthaEtcdPort: 9999
           num-of-onos: '3'
           num-of-atomix: '3'
 
@@ -565,7 +558,6 @@
           num-of-onos: '3'
           num-of-atomix: '3'
           pipeline-script: 'voltha/voltha-2.11/physical-build.groovy'
-          VolthaEtcdPort: 9999
           openoltAdapterChart: '/home/community/adtran-23.1-voltha-2.11/voltha-adapter-adtran-olt'
           oltAdapterReleaseName: 'adtran-olt'
           waitTimerForOltUp: 420
@@ -587,7 +579,27 @@
           num-of-onos: '3'
           num-of-atomix: '3'
           pipeline-script: 'voltha/voltha-2.12/physical-build.groovy'
-          VolthaEtcdPort: 9999
+          openoltAdapterChart: '/home/community/adtran-23.1-voltha-2.12/voltha-adapter-adtran-olt'
+          oltAdapterReleaseName: 'adtran-olt'
+          waitTimerForOltUp: 420
+          time: '19'
+
+      # Berlin pod with adtran gpon olt/onu - master 1T8GEM tech profile and timer based job
+      - 'build_voltha_pod_release_timer':
+          build-node: 'berlin-community-pod-1'
+          config-pod: 'berlin-community-pod-1-gpon-adtran'
+          disable-job: true
+          name-extension: '_DT'
+          work-flow: 'DT'
+          release: 'master'
+          branch: 'master'
+          pipeline-branch: 'master'
+          profile: '1T8GEM'
+          reinstall-olt: false
+          extraHelmFlags: "--set adapter_adtran_olt.kv_store_data_prefix='service/voltha/voltha_voltha' --set network.netconfUserSecret='' --set adapter_adtran_olt.topics.core_topic=voltha_voltha_rwcore"
+          num-of-onos: '3'
+          num-of-atomix: '3'
+          pipeline-script: 'voltha/physical-build.groovy'
           openoltAdapterChart: '/home/community/adtran-23.1-voltha-2.12/voltha-adapter-adtran-olt'
           oltAdapterReleaseName: 'adtran-olt'
           waitTimerForOltUp: 420
@@ -628,6 +640,23 @@
           pipeline-script: 'voltha/voltha-2.12/voltha-dt-physical-functional-tests.groovy'
           oltAdapterAppLabel: 'adapter-adtran-olt'
 
+      # Berlin POD adtran test job - master versions: uses 1T8GEM tech profile on voltha branch
+      - 'build_voltha_pod_test':
+          timeout: 390
+          build-node: 'berlin-community-pod-1'
+          config-pod: 'berlin-community-pod-1-gpon-adtran'
+          disable-job: true
+          release: 'master'
+          branch: 'master'
+          pipeline-branch: 'master'
+          name-extension: '_DT'
+          work-flow: 'DT'
+          test-repo: 'voltha-system-tests'
+          profile: '1T8GEM'
+          power-switch: true
+          pipeline-script: 'voltha/voltha-dt-physical-functional-tests.groovy'
+          oltAdapterAppLabel: 'adapter-adtran-olt'
+
       # -----------------------------------------------------------------------
       # Berlin pod with adtran gpon olt/onu - 1T8GEM tech profile and timer based job
       - 'verify_voltha_pod_dmi_test':
@@ -649,7 +678,6 @@
           OltDevMgr: 'adtran-olt-device-manager'
           num-of-onos: '3'
           num-of-atomix: '3'
-          VolthaEtcdPort: 9999
           waitTimerForOltUp: 420
           time: '16'
 
@@ -676,7 +704,6 @@
           OltDevMgr: 'adtran-olt-device-manager'
           num-of-onos: '3'
           num-of-atomix: '3'
-          VolthaEtcdPort: 9999
           waitTimerForOltUp: 420
           time: '16'
 
@@ -701,7 +728,6 @@
           OltDevMgr: 'adtran-olt-device-manager'
           num-of-onos: '3'
           num-of-atomix: '3'
-          VolthaEtcdPort: 9999
           waitTimerForOltUp: 420
           time: '16'
 
diff --git a/packer/ansible-galaxy-requirements.yaml b/packer/ansible-galaxy-requirements.yaml
new file mode 100644
index 0000000..75ca641
--- /dev/null
+++ b/packer/ansible-galaxy-requirements.yaml
@@ -0,0 +1,15 @@
+---
+- src: lfit.docker-install
+- src: lfit.haveged-install
+- src: lfit.java-install
+- src: lfit.lf-dev-libs
+- src: lfit.lf-recommended-tools
+  version: cefa9ddf2cdd6f7f114b8906c6f0b89e6bb5bc76
+- src: lfit.mono-install
+- src: lfit.packer-install
+- src: lfit.protobuf-install
+- src: lfit.puppet-install
+- src: lfit.python-install
+- src: lfit.shellcheck-install
+- src: lfit.sysstat-install
+- src: lfit.system-update
diff --git a/packer/provision/basebuild.sh b/packer/provision/basebuild.sh
index 8e9b3e5..e222b6f 100644
--- a/packer/provision/basebuild.sh
+++ b/packer/provision/basebuild.sh
@@ -348,6 +348,14 @@
     mv /tmp/repo /usr/local/bin/repo
     chmod a+x /usr/local/bin/repo
 
+    # add host entries to /etc/hosts to allow resolving the virtual hosts
+    # used to expose the voltha api (voltha.voltha.local) and etcd
+    # (voltha-infra.local) inside of k8s via ingress to localhost
+    for INGRESS_HOST in voltha.voltha.local voltha-infra.local; do
+      echo "adding host entry for $INGRESS_HOST"
+      sed -i "s/^127.0.0.1[[:blank:]]\+localhost/& $INGRESS_HOST/" /etc/hosts
+    done
+
     # install helm
     HELM_VERSION="3.4.2"
     HELM_SHA256SUM="cacde7768420dd41111a4630e047c231afa01f67e49cc0c6429563e024da4b98"
diff --git a/packer/provision/baseline.yaml b/packer/provision/baseline.yaml
index c57d8fc..10562eb 100644
--- a/packer/provision/baseline.yaml
+++ b/packer/provision/baseline.yaml
@@ -42,6 +42,14 @@
         backup: true
       become: true
 
+    - name: Update /etc/hosts to resolve voltha-api and etcd ingress hostnames
+      replace:
+        path: /etc/hosts
+        regexp: '^(127\.0\.0\.1 .*)$'
+        replace: '127.0.0.1 localhost voltha.voltha.local voltha-infra.local'
+        backup: true
+      become: true
+
     - name: Disable periodic updates
       block:
         - name: Set all periodic update options to 0
diff --git a/packer/provision/onf-playbook.yaml b/packer/provision/onf-playbook.yaml
index 4658043..eb211df 100644
--- a/packer/provision/onf-playbook.yaml
+++ b/packer/provision/onf-playbook.yaml
@@ -168,6 +168,7 @@
     - name: Install markdownlint npm package with version specifiers
       npm:
         name: markdownlint
+        version: '0.18.0'
         global: true
 
     - name: Install typings npm package with version specifiers
diff --git a/packer/templates/basebuild_1804.json b/packer/templates/basebuild_1804.json
index 0bd5455..69d4740 100644
--- a/packer/templates/basebuild_1804.json
+++ b/packer/templates/basebuild_1804.json
@@ -52,7 +52,7 @@
     "provisioners": [
       {
           "type": "shell-local",
-          "command": "./common-packer/ansible-galaxy.sh {{user `ansible_roles_path`}}"
+          "command": "ansible-galaxy install -p {{user `ansible_roles_path`}} -r ./ansible-galaxy-requirements.yaml"
       },
       {
           "type": "ansible",
diff --git a/vars/createKubernetesCluster.groovy b/vars/createKubernetesCluster.groovy
index f31cd1e..b84c5b7 100644
--- a/vars/createKubernetesCluster.groovy
+++ b/vars/createKubernetesCluster.groovy
@@ -121,6 +121,19 @@
       for MNODE in \$(kubectl get node --selector='node-role.kubernetes.io/master' -o json | jq -r '.items[].metadata.name'); do
           kubectl taint node "\$MNODE" node-role.kubernetes.io/master:NoSchedule-
       done
+      # install ingress-nginx to allow usage of ingress to expose voltha
+      # endpoints (etcd and voltha-api)
+      kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/helm-chart-4.2.5/deploy/static/provider/kind/deploy.yaml
+      # remove validating webhook for now, since some of the pipelines seem to
+      # fail with errors related to calling this hook and although there is a
+      # lot of talk in the internet about this issue, the solution very much
+      # depends on your exact setup (and it might not be worth investigating the
+      # details for a k8s version which has been EOL since some time now)
+      # https://stackoverflow.com/questions/61616203/nginx-ingress-controller-failed-calling-webhook
+      # This should be removed and properly fixed once we upgrade to a recent
+      # k8s version and a fitting ingress-nginx deployment
+      kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
+
 """)
 
     sh(label  : 'Normalize config permissions',
@@ -136,13 +149,6 @@
       umask 022
 
       echo
-      echo "** Generate $HOME/.volt/config"
-      mkdir -p "$HOME/.volt"
-      chmod u=rwx "$HOME/.volt"
-      voltctl -s localhost:55555 config > "$HOME/.volt/config"
-      chmod -R u+w,go-rwx "$HOME/.volt"
-
-      echo
       echo "** Generate $HOME/.kube/config"
       mkdir -p "$HOME/.kube"
       chmod u=rwx "$HOME/.kube"
diff --git a/vars/installVoltctl.groovy b/vars/installVoltctl.groovy
index 5a0a55b..cddb0c5 100644
--- a/vars/installVoltctl.groovy
+++ b/vars/installVoltctl.groovy
@@ -47,34 +47,6 @@
 }
 
 // -----------------------------------------------------------------------
-// Intent: Assign perms to fix access problems
-// . /bin/sh: 1: /home/jenkins/.volt/config: Permission denied
-// -----------------------------------------------------------------------
-void fixPerms() {
-    enter('fixPerms')
-
-    sh(label  : 'fixperms',
-       script : """
-
-      umask 022
-
-      declare volt_dir=\$HOME/.volt
-      declare volt_cfg=\$HOME/.volt/config
-
-      echo
-      echo "** Fixing perms: \$volt_cfg"
-      mkdir -p \$volt_dir
-      chmod -R u+w,go-rwx \$volt_dir
-      chmod u=rwx \$volt_dir
-      touch \$volt_cfg
-      /bin/ls -l \$volt_dir
-""")
-
-    leave('fixPerms')
-    return
-}
-
-// -----------------------------------------------------------------------
 // -----------------------------------------------------------------------
 Boolean process(String branch) {
     Boolean ans = true
@@ -184,6 +156,22 @@
     voltctl version --clientonly
 """)
 
+    sh(
+        label : 'Write /home/jenkins/.volt/config',
+        returnStdout: false,
+        script: """#!/bin/bash
+
+    bin_voltctl="$WORKSPACE/bin/voltctl"
+
+    mkdir -p "/home/jenkins/.volt"
+    rm -f "/home/jenkins/.volt/config"
+    "\${bin_voltctl}" config | \
+      sed -e "s/server: .*/server: voltha.voltha.local:443/" \
+          -e "s/kvstore: .*/kvstore: voltha-infra.local:443/" \
+          -e "s/useTLS: .*/useTLS: true/" | \
+      tee "/home/jenkins/.volt/config"
+""")
+
     leave('process')
     return(ans)
 }
@@ -193,7 +181,6 @@
 def call(String branch) {
     try {
         enter('main')
-        fixPerms()
         process(branch)
     }
     catch (Exception err) {  // groovylint-disable-line CatchException
diff --git a/vars/pkill_port_forward.groovy b/vars/pkill_port_forward.groovy
index 2de9759..7a0b235 100644
--- a/vars/pkill_port_forward.groovy
+++ b/vars/pkill_port_forward.groovy
@@ -85,11 +85,11 @@
     }
 
     sh(
-        label  : 'Display port forwarding',
+        label  : 'Kill port forwarding',
         // script : ${cmd}.toString(),  -> Exception
         script : """
 echo -e "\n** vars/pkill_port_forward.groovy [DEBUG]: pgrep-pkill check"
-if [[ \$(pgrep --count 'port-forw') -gt 0 ]]; then
+if pgrep --uid \$(id -u) --list-full --full 'port-forw'; then
     pkill --uid \$(id -u) --echo --list-full --full 'port-forw'
 fi
 """)
diff --git a/vars/volthaInfraDeploy.groovy b/vars/volthaInfraDeploy.groovy
index 0a979e5..8a3f745 100644
--- a/vars/volthaInfraDeploy.groovy
+++ b/vars/volthaInfraDeploy.groovy
@@ -18,24 +18,20 @@
 //
 // stage('test stage') {
 //   steps {
-//     volthaDeploy([
-//       onosReplica: 3
-//     ])
+//     volthaDeploy([onosReplica: 3])
 //   }
 // }
 // -----------------------------------------------------------------------
 
 // -----------------------------------------------------------------------
 // -----------------------------------------------------------------------
-def getIam(String func)
-{
+String getIam(String func) {
     // Cannot rely on a stack trace due to jenkins manipulation
     String src = 'vars/volthaInfraDeploy.groovy'
     String iam = [src, func].join('::')
     return iam
 }
 
-
 // -----------------------------------------------------------------------
 // Intent: Log progress message
 // -----------------------------------------------------------------------
@@ -59,9 +55,9 @@
 // -----------------------------------------------------------------------
 // Intent: Display and interact with kubernetes namespaces.
 // -----------------------------------------------------------------------
-def doKubeNamespaces()
-{
-    enter('doKubeNamespaces')
+void doKubeNamespaces() {
+    String iam = 'doKubeNamespaces'
+    enter(iam)
 
     /*
      [joey] - should pre-existing hint the env is tainted (?)
@@ -76,34 +72,35 @@
 
     sh('kubectl get namespaces || true')
 
-    leave('doKubeNamespaces')
+    leave(iam)
     return
 }
 
 // -----------------------------------------------------------------------
 // -----------------------------------------------------------------------
-def process(Map config)
-{
+void process(Map config) {
     enter('process')
 
     // NOTE use params or directule extraHelmFlags??
-    def defaultConfig = [
+    Map defaultConfig = [
         onosReplica: 1,
         atomixReplica: 1,
         kafkaReplica: 1,
         etcdReplica: 1,
-        infraNamespace: "infra",
-        workflow: "att",
+        infraNamespace: 'infra',
+        workflow: 'att',
         withMacLearning: false,
         withFttb: false,
-        extraHelmFlags: "",
+        extraHelmFlags: '',
         localCharts: false,
-        kubeconfig: null, // location of the kubernetes config file, if null we assume it's stored in the $KUBECONFIG environment variable
+        // location of the kubernetes config file,
+        // if null we assume it's stored in the $KUBECONFIG
+        kubeconfig: null,
     ]
 
-    def cfg = defaultConfig + config
+    Map cfg = defaultConfig + config
 
-    def volthaInfraChart = "onf/voltha-infra"
+    def volthaInfraChart = 'onf/voltha-infra'
 
     if (cfg.localCharts) {
         volthaInfraChart = "$WORKSPACE/voltha-helm-charts/voltha-infra"
@@ -131,11 +128,11 @@
 kubectl create configmap -n ${cfg.infraNamespace} kube-config "--from-file=kube_config=${kubeconfig}"  || true
 """)
 
-    def serviceConfigFile = cfg.workflow
+    String serviceConfigFile = cfg.workflow
     if (cfg.withMacLearning && cfg.workflow == 'tt') {
-        serviceConfigFile = "tt-maclearner"
+        serviceConfigFile = 'tt-maclearner'
     } else if (cfg.withFttb && cfg.workflow == 'dt') {
-        serviceConfigFile = "dt-fttb"
+        serviceConfigFile = 'dt-fttb'
     }
 
     // bitnamic/etch has change the replica format between the currently used 5.4.2 and the latest 6.2.5
@@ -158,27 +155,19 @@
 
 // -----------------------------------------------------------------------
 // -----------------------------------------------------------------------
-def call(Map config)
-{
+def call(Map config=[:]) {
     enter('main')
 
-    if (!config) {
-        config = [:]
+    try {
+        process(config)
     }
-
-    try
-    {
-	    process(config)
-    }
-    catch (Exception err)
-    {
+    catch (Exception err) { // groovylint-disable-line CatchException
         String iam = getIam(name)
-	    println("** ${iam}: EXCEPTION ${err}")
-	    throw err
+        println("** ${iam}: EXCEPTION ${err}")
+        throw err
     }
-    finally
-    {
-	    leave('main')
+    finally {
+        leave('main')
     }
 
     return
diff --git a/vars/volthaStackDeploy.groovy b/vars/volthaStackDeploy.groovy
index 35a375c..d4f4d50 100644
--- a/vars/volthaStackDeploy.groovy
+++ b/vars/volthaStackDeploy.groovy
@@ -166,7 +166,7 @@
     ## Probe for cluster state
     ## -----------------------
     if grep -q -e 'ContainerCreating' \$vsd_log; then
-        echo -e '\nvolthaStackDeploy.groovy: ContainerCrating active'
+        echo -e '\nvolthaStackDeploy.groovy: ContainerCreating active'
         [[ -v debug ]] && grep -e 'ContainerCreating' \$vsd_log
 
     elif grep -q -e '0/' \$vsd_log; then
@@ -262,7 +262,7 @@
     ## Probe for cluster state
     ## -----------------------
     if grep -q -e 'ContainerCreating' \$vsd_log; then
-        echo -e '\nvolthaStackDeploy.groovy: ContainerCrating active'
+        echo -e '\nvolthaStackDeploy.groovy: ContainerCreating active'
         [[ -v debug ]] && grep -e 'ContainerCreating' \$vsd_log
 
     elif grep -q -e '0/' \$vsd_log; then
diff --git a/vars/waitForAdapters.groovy b/vars/waitForAdapters.groovy
index 5c9c5ce..4604bca 100644
--- a/vars/waitForAdapters.groovy
+++ b/vars/waitForAdapters.groovy
@@ -179,11 +179,6 @@
     println("** ${iam}: Wait for adapters to be registered")
 
     // guarantee that at least the specified number of adapters are registered with VOLTHA before proceeding
-    sh(label  : 'waitForAdapters: Initiate port forwarding',
-       script : """
-        _TAG="voltha-voltha-api" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${cfg.volthaNamespace} svc/${cfg.stackName}-voltha-api 55555:55555; done" &
-       """)
-
     sh(label  : 'waitForAdapters: loop until adapter list',
        script : """
 #        set +x