diff --git a/jjb/pipeline/voltha-dt-physical-functional-tests.groovy b/jjb/pipeline/voltha-dt-physical-functional-tests.groovy
index a5a6ba7..0279f0a 100644
--- a/jjb/pipeline/voltha-dt-physical-functional-tests.groovy
+++ b/jjb/pipeline/voltha-dt-physical-functional-tests.groovy
@@ -120,7 +120,7 @@
     }
     stage ('Initialize') {
       steps {
-        sh returnStdout: false, script: "git clone -b master ${cordRepoUrl}/${configBaseDir}"
+        sh returnStdout: false, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
         script {
            deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}-DT.yaml"
         }
@@ -128,9 +128,8 @@
         mkdir -p $WORKSPACE/bin
         bash <( curl -sfL https://raw.githubusercontent.com/boz/kail/master/godownloader.sh) -b "$WORKSPACE/bin"
         cd $WORKSPACE
-        if [ "${params.branch}" != "master" ]; then
-           cd $WORKSPACE/kind-voltha
-           source releases/${params.branch}
+        if [ "${params.branch}" == "voltha-2.8" ]; then
+           VOLTCTL_VERSION=1.6.10
         else
            VOLTCTL_VERSION=\$(curl -sSL https://api.github.com/repos/opencord/voltctl/releases/latest | jq -r .tag_name | sed -e 's/^v//g')
         fi
diff --git a/jjb/pipeline/voltha-physical-functional-tests.groovy b/jjb/pipeline/voltha-physical-functional-tests.groovy
index 6b78291..241d5d9 100644
--- a/jjb/pipeline/voltha-physical-functional-tests.groovy
+++ b/jjb/pipeline/voltha-physical-functional-tests.groovy
@@ -108,7 +108,7 @@
     }
     stage ('Initialize') {
       steps {
-        sh returnStdout: false, script: "git clone -b master ${cordRepoUrl}/${configBaseDir}"
+        sh returnStdout: false, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
         script {
           deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
         }
@@ -116,9 +116,8 @@
         mkdir -p $WORKSPACE/bin
         bash <( curl -sfL https://raw.githubusercontent.com/boz/kail/master/godownloader.sh) -b "$WORKSPACE/bin"
         cd $WORKSPACE
-        if [ "${params.branch}" != "master" ]; then
-           cd $WORKSPACE/kind-voltha
-           source releases/${params.branch}
+        if [ "${params.branch}" == "voltha-2.8" ]; then
+           VOLTCTL_VERSION=1.6.10
         else
            VOLTCTL_VERSION=\$(curl -sSL https://api.github.com/repos/opencord/voltctl/releases/latest | jq -r .tag_name | sed -e 's/^v//g')
         fi
diff --git a/jjb/pipeline/voltha-physical-soak-dt-tests.groovy b/jjb/pipeline/voltha-physical-soak-dt-tests.groovy
index fdc03f8..2a0902f 100644
--- a/jjb/pipeline/voltha-physical-soak-dt-tests.groovy
+++ b/jjb/pipeline/voltha-physical-soak-dt-tests.groovy
@@ -121,7 +121,7 @@
     }
     stage ('Initialize') {
       steps {
-        sh returnStdout: false, script: "git clone -b master ${cordRepoUrl}/${configBaseDir}"
+        sh returnStdout: false, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
         script {
            deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}-DT.yaml"
         }
@@ -129,10 +129,8 @@
         mkdir -p $WORKSPACE/bin
         bash <( curl -sfL https://raw.githubusercontent.com/boz/kail/master/godownloader.sh) -b "$WORKSPACE/bin"
         cd $WORKSPACE
-        if [ "${params.branch}" != "master" ]; then
-           cd $WORKSPACE/kind-voltha
-           source releases/${params.branch}
-           VC_VERSION=1.1.8
+        if [ "${params.branch}" == "voltha-2.8" ]; then
+           VC_VERSION=1.6.10
         else
            VC_VERSION=\$(curl -sSL https://api.github.com/repos/opencord/voltctl/releases/latest | jq -r .tag_name | sed -e 's/^v//g')
         fi
diff --git a/jjb/pipeline/voltha-physical-soak-tests.groovy b/jjb/pipeline/voltha-physical-soak-tests.groovy
index 8cf9665..4bb8b02 100644
--- a/jjb/pipeline/voltha-physical-soak-tests.groovy
+++ b/jjb/pipeline/voltha-physical-soak-tests.groovy
@@ -36,7 +36,7 @@
     stage ('Initialize') {
       steps {
         step([$class: 'WsCleanup'])
-        sh returnStdout: false, script: "git clone -b master ${cordRepoUrl}/${configBaseDir}"
+        sh returnStdout: false, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
         sh returnStdout: false, script: "git clone -b master ${cordRepoUrl}/kind-voltha"
         script {
           deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
@@ -61,10 +61,8 @@
         mkdir -p $WORKSPACE/bin
         bash <( curl -sfL https://raw.githubusercontent.com/boz/kail/master/godownloader.sh) -b "$WORKSPACE/bin"
         cd $WORKSPACE
-        if [ "${params.branch}" != "master" ]; then
-           cd $WORKSPACE/kind-voltha
-           source releases/${params.branch}
-           VC_VERSION=1.1.8
+        if [ "${params.branch}" == "voltha-2.8" ]; then
+           VC_VERSION=1.6.10
         else
            VC_VERSION=\$(curl -sSL https://api.github.com/repos/opencord/voltctl/releases/latest | jq -r .tag_name | sed -e 's/^v//g')
         fi
diff --git a/jjb/pipeline/voltha-tt-physical-functional-tests.groovy b/jjb/pipeline/voltha-tt-physical-functional-tests.groovy
index 3ff652e..e7250aa 100644
--- a/jjb/pipeline/voltha-tt-physical-functional-tests.groovy
+++ b/jjb/pipeline/voltha-tt-physical-functional-tests.groovy
@@ -120,7 +120,7 @@
     }
     stage ('Initialize') {
       steps {
-        sh returnStdout: false, script: "git clone -b master ${cordRepoUrl}/${configBaseDir}"
+        sh returnStdout: false, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
         script {
            deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
         }
@@ -128,9 +128,8 @@
         mkdir -p $WORKSPACE/bin
         bash <( curl -sfL https://raw.githubusercontent.com/boz/kail/master/godownloader.sh) -b "$WORKSPACE/bin"
         cd $WORKSPACE
-        if [ "${params.branch}" != "master" ]; then
-           cd $WORKSPACE/kind-voltha
-           source releases/${params.branch}
+        if [ "${params.branch}" == "voltha-2.8" ]; then
+           VOLTCTL_VERSION=1.6.10
         else
            VOLTCTL_VERSION=\$(curl -sSL https://api.github.com/repos/opencord/voltctl/releases/latest | jq -r .tag_name | sed -e 's/^v//g')
         fi
diff --git a/jjb/pipeline/voltha/master/physical-build.groovy b/jjb/pipeline/voltha/master/physical-build.groovy
index a8bed62..ee49e55 100644
--- a/jjb/pipeline/voltha/master/physical-build.groovy
+++ b/jjb/pipeline/voltha/master/physical-build.groovy
@@ -52,7 +52,7 @@
     stage ("Parse deployment configuration file") {
       steps {
         sh returnStdout: true, script: "rm -rf ${configBaseDir}"
-        sh returnStdout: true, script: "git clone -b master ${cordRepoUrl}/${configBaseDir}"
+        sh returnStdout: true, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
         script {
           if ( params.workFlow == "DT" ) {
             deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}-DT.yaml"
@@ -149,9 +149,8 @@
           if ( params.configurePod && params.profile != "Default" ) {
             for(int i=0; i < deployment_config.olts.size(); i++) {
               def tech_prof_directory = "XGS-PON"
-              // If no debian package is specified we default to GPON for the ADTRAN OLT.
-              if (!deployment_config.olts[i].containsKey("oltDebVersion") || deployment_config.olts[i].oltDebVersion.contains("asgvolt64")){
-                tech_prof_directory = "GPON"
+              if (deployment_config.olts[i].containsKey("board_technology")){
+                tech_prof_directory = deployment_config.olts[i]["board_technology"]
               }
               timeout(1) {
                 sh returnStatus: true, script: """
diff --git a/jjb/pipeline/voltha/master/software-upgrades.groovy b/jjb/pipeline/voltha/master/software-upgrades.groovy
index 83ee47b..ffc4be6 100644
--- a/jjb/pipeline/voltha/master/software-upgrades.groovy
+++ b/jjb/pipeline/voltha/master/software-upgrades.groovy
@@ -184,22 +184,6 @@
         helmTeardown(['infra', 'voltha'])
       }
     }
-    stage('Install latest voltctl') {
-      steps {
-        sh """
-          mkdir -p $WORKSPACE/bin || true
-          # install voltctl
-          HOSTOS="\$(uname -s | tr "[:upper:]" "[:lower:"])"
-          HOSTARCH="\$(uname -m | tr "[:upper:]" "[:lower:"])"
-          if [ "\$HOSTARCH" == "x86_64" ]; then
-              HOSTARCH="amd64"
-          fi
-          VC_VERSION="\$(curl --fail -sSL https://api.github.com/repos/opencord/voltctl/releases/latest | jq -r .tag_name | sed -e 's/^v//g')"
-          curl -Lo $WORKSPACE/bin/voltctl https://github.com/opencord/voltctl/releases/download/v\$VC_VERSION/voltctl-\$VC_VERSION-\$HOSTOS-\$HOSTARCH
-          chmod +x $WORKSPACE/bin/voltctl
-        """
-      }
-    }
     stage('Create K8s Cluster') {
       steps {
         createKubernetesCluster([nodes: 3])
diff --git a/jjb/pipeline/voltha/master/tucson-build-and-test.groovy b/jjb/pipeline/voltha/master/tucson-build-and-test.groovy
index b644705..e8c9382 100644
--- a/jjb/pipeline/voltha/master/tucson-build-and-test.groovy
+++ b/jjb/pipeline/voltha/master/tucson-build-and-test.groovy
@@ -54,7 +54,7 @@
     stage ("Parse deployment configuration file") {
       steps {
         sh returnStdout: true, script: "rm -rf ${configBaseDir}"
-        sh returnStdout: true, script: "git clone -b master ${cordRepoUrl}/${configBaseDir}"
+        sh returnStdout: true, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
         script {
 
           if (params.workflow.toUpperCase() == "TT") {
diff --git a/jjb/pipeline/voltha/master/voltha-scale-multi-stack.groovy b/jjb/pipeline/voltha/master/voltha-scale-multi-stack.groovy
index 205f9ab..8c2f72e 100644
--- a/jjb/pipeline/voltha/master/voltha-scale-multi-stack.groovy
+++ b/jjb/pipeline/voltha/master/voltha-scale-multi-stack.groovy
@@ -115,6 +115,7 @@
 
         helm upgrade --install -n infra voltha-infra onf/voltha-infra \
           -f $WORKSPACE/voltha-helm-charts/examples/${workflow}-values.yaml \
+          -f /home/jenkins/voltha-scale/voltha-values.yaml \
           --set onos-classic.replicas=${onosReplicas},onos-classic.atomix.replicas=${atomixReplicas} \
           --set radius.enabled=${withEapol} \
           --set global.log_level=${logLevel} \
@@ -181,6 +182,10 @@
           sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 cfg set org.onosproject.provider.of.flow.impl.OpenFlowRuleProvider flowPollFrequency ${onosStatInterval}
           sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 cfg set org.onosproject.provider.of.device.impl.OpenFlowDeviceProvider portStatsPollFrequency ${onosStatInterval}
 
+          #SR is not needed in scale tests and not currently used by operators in production, can be disabled.
+          sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 app deactivate org.onosproject.segmentrouting
+
+
           if [ ${withFlows} = false ]; then
             sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 app deactivate org.opencord.olt
           fi
diff --git a/jjb/pipeline/voltha/master/voltha-scale-test.groovy b/jjb/pipeline/voltha/master/voltha-scale-test.groovy
index 0173ea8..9a1b304 100644
--- a/jjb/pipeline/voltha/master/voltha-scale-test.groovy
+++ b/jjb/pipeline/voltha/master/voltha-scale-test.groovy
@@ -323,6 +323,9 @@
           sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 cfg set org.onosproject.net.flowobjective.impl.FlowObjectiveManager numThreads ${flowObjWorkerThreads}
           sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 cfg set org.onosproject.net.flowobjective.impl.InOrderFlowObjectiveManager objectiveTimeoutMs 300000
 
+          #SR is not needed in scale tests and not currently used by operators in production, can be disabled.
+          sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 app deactivate org.onosproject.segmentrouting
+
           if [ ${withFlows} = false ]; then
             sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 app deactivate org.opencord.olt
           fi
diff --git a/jjb/pipeline/voltha/voltha-2.7/bbsim-tests.groovy b/jjb/pipeline/voltha/voltha-2.7/bbsim-tests.groovy
deleted file mode 100644
index 4cf748a..0000000
--- a/jjb/pipeline/voltha/voltha-2.7/bbsim-tests.groovy
+++ /dev/null
@@ -1,222 +0,0 @@
-// Copyright 2017-present Open Networking Foundation
-//
-// 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.
-
-// voltha-2.x e2e tests
-// uses bbsim to simulate OLT/ONUs
-
-// NOTE we are importing the library even if it's global so that it's
-// easier to change the keywords during a replay
-library identifier: 'cord-jenkins-libraries@master',
-    retriever: modernSCM([
-      $class: 'GitSCMSource',
-      remote: 'https://gerrit.opencord.org/ci-management.git'
-])
-
-def test_workflow(name) {
-  timeout(time: 10, unit: 'MINUTES') {
-  stage('Deploy - '+ name + ' workflow') {
-      def extraHelmFlags = "${extraHelmFlags} --set global.log_level=DEBUG,onu=1,pon=1 "
-
-      if (gerritProject != "") {
-        extraHelmFlags = extraHelmFlags + getVolthaImageFlags("${gerritProject}")
-      }
-
-      def localCharts = false
-      if (gerritProject == "voltha-helm-charts" || branch != "master") {
-        localCharts = true
-      }
-
-      volthaDeploy([
-        workflow: name,
-        extraHelmFlags: extraHelmFlags,
-        localCharts: localCharts,
-        dockerRegistry: "mirror.registry.opennetworking.org"
-      ])
-      // start logging
-      sh """
-      mkdir -p $WORKSPACE/${name}
-      _TAG=kail-${name} kail -n infra -n voltha > $WORKSPACE/${name}/onos-voltha-combined.log &
-      """
-      // forward ONOS and VOLTHA ports
-      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&
-      """
-    }
-  }
-  stage('Test VOLTHA - '+ name + ' workflow') {
-      sh """
-      ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/${name.toUpperCase()}Workflow"
-      mkdir -p \$ROBOT_LOGS_DIR
-      export ROBOT_MISC_ARGS="-d \$ROBOT_LOGS_DIR -e PowerSwitch"
-
-      # By default, all tests tagged 'sanity' are run.  This covers basic functionality
-      # like running through the ATT workflow for a single subscriber.
-      export TARGET=sanity-kind-${name}
-
-      # If the Gerrit comment contains a line with "functional tests" then run the full
-      # functional test suite.  This covers tests tagged either 'sanity' or 'functional'.
-      # Note: Gerrit comment text will be prefixed by "Patch set n:" and a blank line
-      REGEX="functional tests"
-      if [[ "\$GERRIT_EVENT_COMMENT_TEXT" =~ \$REGEX ]]; then
-        export TARGET=functional-single-kind-${name}
-      fi
-
-      if [[ "${gerritProject}" == "bbsim" ]]; then
-        echo "Running BBSim specific Tests"
-        export TARGET=sanity-bbsim-${name}
-      fi
-
-      export VOLTCONFIG=$HOME/.volt/config
-      export KUBECONFIG=$HOME/.kube/config
-
-      # Run the specified tests
-      make -C $WORKSPACE/voltha-system-tests \$TARGET || true
-      """
-      // stop logging
-      sh """
-        P_IDS="\$(ps e -ww -A | grep "_TAG=kail-${name}" | grep -v grep | awk '{print \$1}')"
-        if [ -n "\$P_IDS" ]; then
-          echo \$P_IDS
-          for P_ID in \$P_IDS; do
-            kill -9 \$P_ID
-          done
-        fi
-      """
-      // remove port-forwarding
-      sh """
-        # remove orphaned port-forward from different namespaces
-        ps aux | grep port-forw | grep -v grep | awk '{print \$2}' | xargs --no-run-if-empty kill -9 || true
-      """
-      // collect pod details
-      get_pods_info("$WORKSPACE/${name}")
-      helmTeardown(['infra', 'voltha'])
-  }
-}
-
-def get_pods_info(dest) {
-  // collect pod details, this is here in case of failure
-  sh """
-  mkdir -p ${dest}
-  kubectl get pods --all-namespaces -o wide | tee ${dest}/pods.txt || true
-  kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}" | sort | uniq | tee ${dest}/pod-images.txt || true
-  kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.imageID}{'\\n'}" | sort | uniq | tee ${dest}/pod-imagesId.txt || true
-  kubectl describe pods --all-namespaces -l app.kubernetes.io/part-of=voltha > ${dest}/pods-describe.txt
-  helm ls --all-namespaces | tee ${dest}/helm-charts.txt
-  """
-}
-
-pipeline {
-
-  /* no label, executor is determined by JJB */
-  agent {
-    label "${params.buildNode}"
-  }
-  options {
-    timeout(time: 35, unit: 'MINUTES')
-  }
-  environment {
-    PATH="$PATH:$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
-    KUBECONFIG="$HOME/.kube/kind-config-${clusterName}"
-  }
-
-  stages{
-    stage('Download Code') {
-      steps {
-        getVolthaCode([
-          branch: "${branch}",
-          gerritProject: "${gerritProject}",
-          gerritRefspec: "${gerritRefspec}",
-          volthaSystemTestsChange: "${volthaSystemTestsChange}",
-          volthaHelmChartsChange: "${volthaHelmChartsChange}",
-        ])
-      }
-    }
-    stage('Build patch') {
-      steps {
-        // NOTE that the correct patch has already been checked out
-        // during the getVolthaCode step
-        buildVolthaComponent("${gerritProject}")
-      }
-    }
-    stage('Create K8s Cluster') {
-      steps {
-        createKubernetesCluster([nodes: 3])
-      }
-    }
-    stage('Load image in kind nodes') {
-      steps {
-        loadToKind()
-      }
-    }
-    stage('Replace voltctl') {
-      // if the project is voltctl override the downloaded one with the built one
-      when {
-        expression {
-          return gerritProject == "voltctl"
-        }
-      }
-      steps{
-        sh """
-        mv `ls $WORKSPACE/voltctl/release/voltctl-*-linux-amd*` $WORKSPACE/bin/voltctl
-        chmod +x $WORKSPACE/bin/voltctl
-        """
-      }
-    }
-    stage('Run Test') {
-      steps {
-        timeout(time: 30, unit: 'MINUTES') {
-          test_workflow("att")
-          test_workflow("dt")
-          test_workflow("tt")
-        }
-      }
-    }
-  }
-
-  post {
-    aborted {
-      get_pods_info("$WORKSPACE/failed")
-      sh """
-      kubectl logs -n voltha -l app.kubernetes.io/part-of=voltha > $WORKSPACE/failed/voltha.log
-      """
-      archiveArtifacts artifacts: '**/*.log,**/*.txt'
-    }
-    failure {
-      get_pods_info("$WORKSPACE/failed")
-      sh """
-      kubectl logs -n voltha -l app.kubernetes.io/part-of=voltha > $WORKSPACE/failed/voltha.logs
-      """
-      archiveArtifacts artifacts: '**/*.log,**/*.txt'
-    }
-    always {
-      sh '''
-      gzip $WORKSPACE/att/onos-voltha-combined.log || true
-      gzip $WORKSPACE/dt/onos-voltha-combined.log || true
-      gzip $WORKSPACE/tt/onos-voltha-combined.log || true
-      '''
-      step([$class: 'RobotPublisher',
-         disableArchiveOutput: false,
-         logFileName: 'RobotLogs/*/log*.html',
-         otherFiles: '',
-         outputFileName: 'RobotLogs/*/output*.xml',
-         outputPath: '.',
-         passThreshold: 100,
-         reportFileName: 'RobotLogs/*/report*.html',
-         unstableThreshold: 0]);
-      archiveArtifacts artifacts: '*.log,**/*.log,**/*.gz,*.gz,*.txt,**/*.txt'
-    }
-  }
-}
diff --git a/jjb/pipeline/voltha/voltha-2.7/voltha-DMI-bbsim-tests.groovy b/jjb/pipeline/voltha/voltha-2.7/voltha-DMI-bbsim-tests.groovy
deleted file mode 100755
index e7dba07..0000000
--- a/jjb/pipeline/voltha/voltha-2.7/voltha-DMI-bbsim-tests.groovy
+++ /dev/null
@@ -1,207 +0,0 @@
-// Copyright 2017-present Open Networking Foundation
-//
-// 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.
-
-// voltha-2.x e2e tests
-// uses kind-voltha to deploy voltha-2.X
-// uses bbsim to simulate OLT/ONUs
-
-pipeline {
-
-  /* no label, executor is determined by JJB */
-  agent {
-    label "${params.buildNode}"
-  }
-  options {
-      timeout(time: 30, unit: 'MINUTES')
-  }
-  environment {
-    KUBECONFIG="$HOME/.kube/kind-config-voltha-minimal"
-    VOLTCONFIG="$HOME/.volt/config-minimal"
-    PATH="$PATH:$WORKSPACE/kind-voltha/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
-    NAME="minimal"
-    FANCY=0
-    WITH_SIM_ADAPTERS="no"
-    WITH_RADIUS="yes"
-    WITH_BBSIM="yes"
-    DEPLOY_K8S="yes"
-    VOLTHA_LOG_LEVEL="DEBUG"
-    CONFIG_SADIS="external"
-    BBSIM_CFG="configs/bbsim-sadis-att.yaml"
-    ROBOT_MISC_ARGS="-e PowerSwitch ${params.extraRobotArgs}"
-    KARAF_HOME="${params.karafHome}"
-    DIAGS_PROFILE="VOLTHA_PROFILE"
-    NUM_OF_BBSIM="${olts}"
-  }
-  stages {
-    stage('Clone kind-voltha') {
-      steps {
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/kind-voltha",
-            // refspec: "${kindVolthaChange}"
-          ]],
-          branches: [[ name: "master", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "kind-voltha"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
-        ])
-      }
-    }
-    stage('Cleanup') {
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh """
-          if [ "${branch}" != "master" ]; then
-            echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-            source "$WORKSPACE/kind-voltha/releases/${branch}"
-          else
-            echo "on master, using default settings for kind-voltha"
-          fi
-          cd $WORKSPACE/kind-voltha/
-          WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down || ./voltha down
-          """
-        }
-      }
-    }
-    stage('Clone voltha-system-tests') {
-      steps {
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/voltha-system-tests",
-            // refspec: "${volthaSystemTestsChange}"
-          ]],
-          branches: [[ name: "${branch}", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "voltha-system-tests"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
-        ])
-      }
-    }
-
-    stage('Deploy Voltha') {
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh """
-             export EXTRA_HELM_FLAGS=""
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               echo "on master, using default settings for kind-voltha"
-             fi
-
-             EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${params.extraHelmFlags}"
-
-             cd $WORKSPACE/kind-voltha/
-             ./voltha up
-             """
-         }
-      }
-    }
-
-    stage('Device Management Interface Tests') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/DMITests"
-      }
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-        sh '''
-           set +e
-           mkdir -p $ROBOT_LOGS_DIR
-           cd $WORKSPACE/kind-voltha/scripts
-           ./log-collector.sh > /dev/null &
-           ./log-combine.sh > /dev/null &
-
-           export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR"
-           make -C $WORKSPACE/voltha-system-tests ${makeTarget} || true
-           '''
-         }
-      }
-    }
-  }
-
-  post {
-    always {
-      sh '''
-         set +e
-         cp $WORKSPACE/kind-voltha/install-minimal.log $WORKSPACE/
-         kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}" | sort | uniq
-         kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.imageID}{'\\n'}" | sort | uniq
-         kubectl get nodes -o wide
-         kubectl get pods -o wide
-         kubectl get pods -n voltha -o wide
-
-         sleep 60 # Wait for log-collector and log-combine to complete
-
-         ## Pull out errors from log files
-         extract_errors_go() {
-           echo
-           echo "Error summary for $1:"
-           grep '"level":"error"' $WORKSPACE/kind-voltha/scripts/logger/combined/$1*
-           echo
-         }
-
-         extract_errors_python() {
-           echo
-           echo "Error summary for $1:"
-           grep 'ERROR' $WORKSPACE/kind-voltha/scripts/logger/combined/$1*
-           echo
-         }
-
-         extract_errors_go voltha-rw-core > $WORKSPACE/error-report.log
-         extract_errors_go adapter-open-olt >> $WORKSPACE/error-report.log
-         extract_errors_python adapter-open-onu >> $WORKSPACE/error-report.log
-         extract_errors_go voltha-ofagent >> $WORKSPACE/error-report.log
-         extract_errors_python onos >> $WORKSPACE/error-report.log
-
-         gzip error-report.log || true
-
-         cd $WORKSPACE/kind-voltha/scripts/logger/combined/
-         tar czf $WORKSPACE/container-logs.tgz *
-
-         cd $WORKSPACE
-         gzip *-combined.log || true
-
-         ## shut down voltha but leave kind-voltha cluster
-         if [ "${branch}" != "master" ]; then
-           echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-           source "$WORKSPACE/kind-voltha/releases/${branch}"
-         else
-           echo "on master, using default settings for kind-voltha"
-         fi
-         cd $WORKSPACE/kind-voltha/
-         DEPLOY_K8S=n WAIT_ON_DOWN=y ./voltha down
-         kubectl delete deployment voltctl || true
-         '''
-         step([$class: 'RobotPublisher',
-            disableArchiveOutput: false,
-            logFileName: '**/log*.html',
-            otherFiles: '',
-            outputFileName: '**/output*.xml',
-            outputPath: 'RobotLogs',
-            passThreshold: 100,
-            reportFileName: '**/report*.html',
-            unstableThreshold: 0]);
-
-         archiveArtifacts artifacts: '*.log,*.gz,*.tgz'
-
-    }
-  }
-}
diff --git a/jjb/pipeline/voltha/voltha-2.7/voltha-bbsim-tests.groovy b/jjb/pipeline/voltha/voltha-2.7/voltha-bbsim-tests.groovy
deleted file mode 100644
index 5208368..0000000
--- a/jjb/pipeline/voltha/voltha-2.7/voltha-bbsim-tests.groovy
+++ /dev/null
@@ -1,526 +0,0 @@
-// Copyright 2017-present Open Networking Foundation
-//
-// 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.
-
-// voltha-2.x e2e tests
-// uses kind-voltha to deploy voltha-2.X
-// uses bbsim to simulate OLT/ONUs
-
-pipeline {
-
-  /* no label, executor is determined by JJB */
-  agent {
-    label "${params.buildNode}"
-  }
-  options {
-    timeout(time: 90, unit: 'MINUTES')
-  }
-  environment {
-    PATH="$WORKSPACE/kind-voltha/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
-    VOLTHA_LOG_LEVEL="DEBUG"
-    FANCY=0
-    WITH_SIM_ADAPTERS="n"
-    NAME="test"
-    VOLTCONFIG="$HOME/.volt/config-$NAME"
-    KUBECONFIG="$HOME/.kube/kind-config-voltha-$NAME"
-    EXTRA_HELM_FLAGS=" --set global.image_registry=mirror.registry.opennetworking.org/ --set defaults.image_registry=mirror.registry.opennetworking.org/ "
-  }
-
-  stages {
-    stage('Clone kind-voltha') {
-      steps {
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/kind-voltha",
-            refspec: "${kindVolthaChange}"
-          ]],
-          branches: [[ name: "master", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "kind-voltha"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
-        ])
-        sh """
-        if [ '${kindVolthaChange}' != '' ] ; then
-          cd $WORKSPACE/kind-voltha
-          git fetch https://gerrit.opencord.org/kind-voltha ${kindVolthaChange} && git checkout FETCH_HEAD
-        fi
-        """
-      }
-    }
-    stage('Clone voltha-system-tests') {
-      steps {
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/voltha-system-tests",
-            refspec: "${volthaSystemTestsChange}"
-          ]],
-          branches: [[ name: "${branch}", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "voltha-system-tests"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
-        ])
-        sh """
-        if [ '${volthaSystemTestsChange}' != '' ] ; then
-          cd $WORKSPACE/voltha-system-tests
-          git fetch https://gerrit.opencord.org/voltha-system-tests ${volthaSystemTestsChange} && git checkout FETCH_HEAD
-        fi
-        """
-      }
-    }
-    // If the repo under test is not kind-voltha
-    // then download it and checkout the patch
-    stage('Download Patch') {
-      when {
-        expression {
-          return "${gerritProject}" != 'kind-voltha';
-        }
-      }
-      steps {
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/${gerritProject}",
-            refspec: "${gerritRefspec}"
-          ]],
-          branches: [[ name: "${branch}", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "${gerritProject}"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
-        ])
-        sh """
-          pushd $WORKSPACE/${gerritProject}
-          git fetch https://gerrit.opencord.org/${gerritProject} ${gerritRefspec} && git checkout FETCH_HEAD
-
-          echo "Currently on commit: \n"
-          git log -1 --oneline
-          popd
-          """
-      }
-    }
-    // If the repo under test is kind-voltha we don't need to download it again,
-    // as we already have it, simply checkout the patch
-    stage('Checkout kind-voltha patch') {
-      when {
-        expression {
-          return "${gerritProject}" == 'kind-voltha';
-        }
-      }
-      steps {
-        sh """
-        cd $WORKSPACE/kind-voltha
-        git fetch https://gerrit.opencord.org/kind-voltha ${gerritRefspec} && git checkout FETCH_HEAD
-        """
-      }
-    }
-    stage('Create K8s Cluster') {
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh """
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               echo "on master, using default settings for kind-voltha"
-             fi
-
-             cd $WORKSPACE/kind-voltha/
-             JUST_K8S=y ./voltha up
-             bash <( curl -sfL https://raw.githubusercontent.com/boz/kail/master/godownloader.sh) -b "$WORKSPACE/kind-voltha/bin"
-             """
-         }
-      }
-    }
-
-    stage('Build Images') {
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh """
-           make-local () {
-             make -C $WORKSPACE/\$1 DOCKER_REGISTRY=mirror.registry.opennetworking.org/ DOCKER_REPOSITORY=voltha/ DOCKER_TAG=citest docker-build
-           }
-           if [ "${gerritProject}" = "pyvoltha" ]; then
-             make -C $WORKSPACE/pyvoltha/ dist
-             export LOCAL_PYVOLTHA=$WORKSPACE/pyvoltha/
-             make-local voltha-openonu-adapter
-           elif [ "${gerritProject}" = "voltha-lib-go" ]; then
-             make -C $WORKSPACE/voltha-lib-go/ build
-             export LOCAL_LIB_GO=$WORKSPACE/voltha-lib-go/
-             make-local voltha-go
-             make-local voltha-openolt-adapter
-           elif [ "${gerritProject}" = "voltha-protos" ]; then
-             make -C $WORKSPACE/voltha-protos/ build
-             export LOCAL_PROTOS=$WORKSPACE/voltha-protos/
-             make-local voltha-go
-             make-local voltha-openolt-adapter
-             make-local voltha-openonu-adapter
-             make-local ofagent-py
-           elif [ "${gerritProject}" = "voltctl" ]; then
-             # Set and handle GOPATH and PATH
-             export GOPATH=\${GOPATH:-$WORKSPACE/go}
-             export PATH=\$PATH:/usr/lib/go-1.12/bin:/usr/local/go/bin:\$GOPATH/bin
-             make -C $WORKSPACE/voltctl/ build
-           elif ! [[ "${gerritProject}" =~ ^(voltha-helm-charts|voltha-system-tests|kind-voltha)\$ ]]; then
-             make-local ${gerritProject}
-           fi
-           """
-        }
-      }
-    }
-
-    stage('Push Images') {
-      steps {
-        sh '''
-           if [ "${branch}" != "master" ]; then
-             echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-             source "$WORKSPACE/kind-voltha/releases/${branch}"
-           else
-             echo "on master, using default settings for kind-voltha"
-           fi
-
-           if ! [[ "${gerritProject}" =~ ^(voltha-helm-charts|voltha-system-tests|voltctl|kind-voltha)\$ ]]; then
-             export GOROOT=/usr/local/go
-             export GOPATH=\$(pwd)
-             docker images | grep citest
-             for image in \$(docker images -f "reference=*/*/*citest" --format "{{.Repository}}"); do echo "Pushing \$image to nodes"; kind load docker-image \$image:citest --name voltha-\$NAME --nodes voltha-\$NAME-worker,voltha-\$NAME-worker2; done
-           fi
-           '''
-      }
-    }
-
-    stage('ATT workflow') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/ATTWorkflow"
-      }
-      steps {
-        timeout(time: 15, unit: 'MINUTES') {
-          sh '''
-           if [ "${branch}" != "master" ]; then
-             echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-             source "$WORKSPACE/kind-voltha/releases/${branch}"
-           else
-             echo "on master, using default settings for kind-voltha"
-           fi
-
-           if [[ "${gerritProject}" == voltha-helm-charts ]]; then
-             export EXTRA_HELM_FLAGS+="--set global.image_tag=null "
-           fi
-
-           # Workflow-specific flags
-           export WITH_RADIUS=yes
-           export WITH_BBSIM=yes
-           export DEPLOY_K8S=yes
-           export CONFIG_SADIS="external"
-           export BBSIM_CFG="configs/bbsim-sadis-att.yaml"
-
-           export EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${extraHelmFlags} "
-
-           IMAGES=""
-           if [ "${gerritProject}" = "voltha-go" ]; then
-             IMAGES="rw_core ro_core "
-           elif [ "${gerritProject}" = "ofagent-py" ]; then
-             IMAGES="ofagent_py "
-             EXTRA_HELM_FLAGS+="--set use_ofagent_go=false "
-           elif [ "${gerritProject}" = "ofagent-go" ]; then
-             IMAGES="ofagent_go "
-           elif [ "${gerritProject}" = "voltha-onos" ]; then
-             IMAGES="onos "
-             EXTRA_HELM_FLAGS+="--set images.onos.repository=mirror.registry.opennetworking.org/voltha/voltha-onos "
-           elif [ "${gerritProject}" = "voltha-openolt-adapter" ]; then
-             IMAGES="adapter_open_olt "
-           elif [ "${gerritProject}" = "voltha-openonu-adapter" ]; then
-             IMAGES="adapter_open_onu "
-           elif [ "${gerritProject}" = "voltha-api-server" ]; then
-             IMAGES="afrouter afrouterd "
-           elif [ "${gerritProject}" = "bbsim" ]; then
-             IMAGES="bbsim "
-           elif [ "${gerritProject}" = "pyvoltha" ]; then
-             IMAGES="adapter_open_onu "
-           elif [ "${gerritProject}" = "voltha-lib-go" ]; then
-             IMAGES="rw_core ro_core adapter_open_olt "
-           elif [ "${gerritProject}" = "voltha-protos" ]; then
-             IMAGES="rw_core ro_core adapter_open_olt adapter_open_onu ofagent "
-           else
-             echo "No images to push"
-           fi
-
-           for I in \$IMAGES
-           do
-             EXTRA_HELM_FLAGS+="--set images.\$I.tag=citest,images.\$I.pullPolicy=Never "
-           done
-
-           if [ "${gerritProject}" = "voltha-helm-charts" ]; then
-             export CHART_PATH=$WORKSPACE/voltha-helm-charts
-             export VOLTHA_CHART=\$CHART_PATH/voltha
-             export VOLTHA_ADAPTER_OPEN_OLT_CHART=\$CHART_PATH/voltha-adapter-openolt
-             export VOLTHA_ADAPTER_OPEN_ONU_CHART=\$CHART_PATH/voltha-adapter-openonu
-             helm dep update \$VOLTHA_CHART
-             helm dep update \$VOLTHA_ADAPTER_OPEN_OLT_CHART
-             helm dep update \$VOLTHA_ADAPTER_OPEN_ONU_CHART
-           fi
-
-           if [ "${gerritProject}" = "voltctl" ]; then
-             export VOLTCTL_VERSION=$(cat $WORKSPACE/voltctl/VERSION)
-             cp $WORKSPACE/voltctl/voltctl $WORKSPACE/kind-voltha/bin/voltctl
-             md5sum $WORKSPACE/kind-voltha/bin/voltctl
-           fi
-
-           printenv
-
-           # start logging
-           mkdir -p $WORKSPACE/att
-           _TAG=kail-att kail -n voltha -n default > $WORKSPACE/att/onos-voltha-combined.log &
-
-           cd $WORKSPACE/kind-voltha/
-           ./voltha up
-
-           # $NAME-env.sh contains the environment we used
-           # Save value of EXTRA_HELM_FLAGS there to use in subsequent stages
-           echo export EXTRA_HELM_FLAGS=\\"\$EXTRA_HELM_FLAGS\\" >> $NAME-env.sh
-
-           mkdir -p $ROBOT_LOGS_DIR
-           export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR -e PowerSwitch"
-
-           # By default, all tests tagged 'sanity' are run.  This covers basic functionality
-           # like running through the ATT workflow for a single subscriber.
-           export TARGET=sanity-single-kind
-
-           # If the Gerrit comment contains a line with "functional tests" then run the full
-           # functional test suite.  This covers tests tagged either 'sanity' or 'functional'.
-           # Note: Gerrit comment text will be prefixed by "Patch set n:" and a blank line
-           REGEX="functional tests"
-           if [[ "$GERRIT_EVENT_COMMENT_TEXT" =~ \$REGEX ]]; then
-             TARGET=functional-single-kind
-           fi
-
-           make -C $WORKSPACE/voltha-system-tests \$TARGET || true
-
-           # stop logging
-           P_IDS="$(ps e -ww -A | grep "_TAG=kail-att" | grep -v grep | awk '{print $1}')"
-           if [ -n "$P_IDS" ]; then
-             echo $P_IDS
-             for P_ID in $P_IDS; do
-               kill -9 $P_ID
-             done
-           fi
-
-           # get pods information
-           kubectl get pods -o wide > $WORKSPACE/att/pods.txt || true
-           kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}" | sort | uniq | tee $WORKSPACE/att/pod-images.txt || true
-           kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.imageID}{'\\n'}" | sort | uniq | tee $WORKSPACE/att/pod-imagesId.txt || true
-           '''
-         }
-      }
-    }
-
-    stage('DT workflow') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/DTWorkflow"
-      }
-      steps {
-        timeout(time: 15, unit: 'MINUTES') {
-          sh '''
-           cd $WORKSPACE/kind-voltha/
-           source $NAME-env.sh
-           if [ "${branch}" != "master" ]; then
-             echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-             source "$WORKSPACE/kind-voltha/releases/${branch}"
-           else
-             echo "on master, using default settings for kind-voltha"
-           fi
-           WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down
-
-           # Workflow-specific flags
-           export WITH_RADIUS=no
-           export WITH_EAPOL=no
-           export WITH_DHCP=no
-           export WITH_IGMP=no
-           export CONFIG_SADIS="external"
-           export BBSIM_CFG="configs/bbsim-sadis-dt.yaml"
-
-           if [[ "${gerritProject}" == voltha-helm-charts ]]; then
-             export EXTRA_HELM_FLAGS+="--set global.image_tag=null "
-           fi
-
-           # start logging
-           mkdir -p $WORKSPACE/dt
-           _TAG=kail-dt kail -n voltha -n default > $WORKSPACE/dt/onos-voltha-combined.log &
-
-           DEPLOY_K8S=n ./voltha up
-
-           mkdir -p $ROBOT_LOGS_DIR
-           export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR -e PowerSwitch"
-
-           # By default, all tests tagged 'sanityDt' are run.  This covers basic functionality
-           # like running through the DT workflow for a single subscriber.
-           export TARGET=sanity-kind-dt
-
-           # If the Gerrit comment contains a line with "functional tests" then run the full
-           # functional test suite.  This covers tests tagged either 'sanityDt' or 'functionalDt'.
-           # Note: Gerrit comment text will be prefixed by "Patch set n:" and a blank line
-           REGEX="functional tests"
-           if [[ "$GERRIT_EVENT_COMMENT_TEXT" =~ \$REGEX ]]; then
-             TARGET=functional-single-kind-dt
-           fi
-
-           make -C $WORKSPACE/voltha-system-tests \$TARGET || true
-
-           # stop logging
-           P_IDS="$(ps e -ww -A | grep "_TAG=kail-dt" | grep -v grep | awk '{print $1}')"
-           if [ -n "$P_IDS" ]; then
-             echo $P_IDS
-             for P_ID in $P_IDS; do
-               kill -9 $P_ID
-             done
-           fi
-
-           # get pods information
-           kubectl get pods -o wide > $WORKSPACE/dt/pods.txt || true
-           kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}" | sort | uniq | tee $WORKSPACE/dt/pod-images.txt || true
-           kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.imageID}{'\\n'}" | sort | uniq | tee $WORKSPACE/dt/pod-imagesId.txt || true
-           '''
-         }
-      }
-    }
-
-    stage('TT workflow') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/TTWorkflow"
-      }
-      steps {
-        timeout(time: 15, unit: 'MINUTES') {
-          sh '''
-             cd $WORKSPACE/kind-voltha/
-             source $NAME-env.sh
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               echo "on master, using default settings for kind-voltha"
-             fi
-             WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down
-
-             # Workflow-specific flags
-             export WITH_RADIUS=no
-             export WITH_EAPOL=no
-             export WITH_DHCP=yes
-             export WITH_IGMP=yes
-             export CONFIG_SADIS="external"
-             export BBSIM_CFG="configs/bbsim-sadis-tt.yaml"
-
-             if [[ "${gerritProject}" == voltha-helm-charts ]]; then
-               export EXTRA_HELM_FLAGS+="--set global.image_tag=null "
-             fi
-
-             # start logging
-             mkdir -p $WORKSPACE/tt
-             _TAG=kail-tt kail -n voltha -n default > $WORKSPACE/tt/onos-voltha-combined.log &
-
-             DEPLOY_K8S=n ./voltha up
-
-             mkdir -p $ROBOT_LOGS_DIR
-             export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR -e PowerSwitch"
-
-             # By default, all tests tagged 'sanityTt' are run.  This covers basic functionality
-             # like running through the TT workflow for a single subscriber.
-             export TARGET=sanity-kind-tt
-
-             # If the Gerrit comment contains a line with "functional tests" then run the full
-             # functional test suite.  This covers tests tagged either 'sanityTt' or 'functionalTt'.
-             # Note: Gerrit comment text will be prefixed by "Patch set n:" and a blank line
-             REGEX="functional tests"
-             if [[ "$GERRIT_EVENT_COMMENT_TEXT" =~ \$REGEX ]]; then
-               TARGET=functional-single-kind-tt
-             fi
-
-             make -C $WORKSPACE/voltha-system-tests \$TARGET || true
-
-             # stop logging
-             P_IDS="$(ps e -ww -A | grep "_TAG=kail-att" | grep -v grep | awk '{print $1}')"
-             if [ -n "$P_IDS" ]; then
-               echo $P_IDS
-               for P_ID in $P_IDS; do
-                 kill -9 $P_ID
-               done
-             fi
-
-             # get pods information
-             kubectl get pods -o wide > $WORKSPACE/tt/pods.txt || true
-             kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}" | sort | uniq | tee $WORKSPACE/tt/pod-images.txt || true
-             kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.imageID}{'\\n'}" | sort | uniq | tee $WORKSPACE/tt/pod-imagesId.txt || true
-             '''
-        }
-      }
-    }
-  }
-
-  post {
-    always {
-      sh '''
-
-        # get pods information
-        kubectl get pods -o wide --all-namespaces
-        kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}"
-        helm ls --all-namespaces
-
-         set +e
-         cp $WORKSPACE/kind-voltha/install-$NAME.log $WORKSPACE/
-
-         sync
-         md5sum $WORKSPACE/kind-voltha/bin/voltctl
-
-         ## Pull out errors from log files
-         extract_errors_go() {
-           echo
-           echo "Error summary for $1:"
-           grep $1 $WORKSPACE/onos-voltha-combined.log | grep '"level":"error"' | cut -d ' ' -f 2- | jq -r '.msg'
-           echo
-         }
-
-         extract_errors_python() {
-           echo
-           echo "Error summary for $1:"
-           grep $1 $WORKSPACE/onos-voltha-combined.log | grep 'ERROR' | cut -d ' ' -f 2-
-           echo
-         }
-
-         extract_errors_go voltha-rw-core > $WORKSPACE/error-report.log || true
-         extract_errors_go adapter-open-olt >> $WORKSPACE/error-report.log || true
-         extract_errors_python adapter-open-onu >> $WORKSPACE/error-report.log || true
-         extract_errors_python voltha-ofagent >> $WORKSPACE/error-report.log || true
-
-         gzip $WORKSPACE/att/onos-voltha-combined.log || true
-         gzip $WORKSPACE/dt/onos-voltha-combined.log || true
-         gzip $WORKSPACE/tt/onos-voltha-combined.log || true
-
-         '''
-         step([$class: 'RobotPublisher',
-            disableArchiveOutput: false,
-            logFileName: 'RobotLogs/*/log*.html',
-            otherFiles: '',
-            outputFileName: 'RobotLogs/*/output*.xml',
-            outputPath: '.',
-            passThreshold: 100,
-            reportFileName: 'RobotLogs/*/report*.html',
-            unstableThreshold: 0]);
-         archiveArtifacts artifacts: '*.log,**/*.log,**/*.gz,*.gz'
-    }
-  }
-}
diff --git a/jjb/pipeline/voltha/voltha-2.7/voltha-dt-physical-build-and-tests.groovy b/jjb/pipeline/voltha/voltha-2.7/voltha-dt-physical-build-and-tests.groovy
deleted file mode 100644
index 2ac34bf..0000000
--- a/jjb/pipeline/voltha/voltha-2.7/voltha-dt-physical-build-and-tests.groovy
+++ /dev/null
@@ -1,448 +0,0 @@
-// Copyright 2019-present Open Networking Foundation
-//
-// 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.
-
-// deploy VOLTHA built from patchset on a physical pod and run e2e test
-// uses kind-voltha to deploy voltha-2.X
-
-// Need this so that deployment_config has global scope when it's read later
-deployment_config = null
-localDeploymentConfigFile = null
-localKindVolthaValuesFile = null
-localSadisConfigFile = null
-
-// The pipeline assumes these variables are always defined
-if ( params.manualBranch != "" ) {
-  GERRIT_EVENT_COMMENT_TEXT = ""
-  GERRIT_PROJECT = ""
-  GERRIT_BRANCH = "${params.manualBranch}"
-  GERRIT_CHANGE_NUMBER = ""
-  GERRIT_PATCHSET_NUMBER = ""
-}
-
-pipeline {
-
-  /* no label, executor is determined by JJB */
-  agent {
-    label "${params.buildNode}"
-  }
-  options {
-      timeout(time: 120, unit: 'MINUTES')
-  }
-
-  environment {
-    KUBECONFIG="$HOME/.kube/kind-config-voltha-minimal"
-    VOLTCONFIG="$HOME/.volt/config-minimal"
-    PATH="$WORKSPACE/voltha/kind-voltha/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
-    NAME="minimal"
-    FANCY=0
-    //VOL-2194 ONOS SSH and REST ports hardcoded to 30115/30120 in tests
-    ONOS_SSH_PORT=30115
-    ONOS_API_PORT=30120
-  }
-
-  stages {
-    stage ('Initialize') {
-      steps {
-        sh returnStdout: false, script: """
-        if [ "${branch}" != "master" ]; then
-          echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-          source "$WORKSPACE/kind-voltha/releases/${branch}"
-        else
-          echo "on master, using default settings for kind-voltha"
-        fi
-        test -e $WORKSPACE/voltha/kind-voltha/voltha && cd $WORKSPACE/voltha/kind-voltha && ./voltha down
-        cd $WORKSPACE
-        rm -rf $WORKSPACE/*
-        """
-        script {
-          if (env.configRepo && ! env.localConfigDir) {
-            env.localConfigDir = "$WORKSPACE"
-            sh returnStdout: false, script: "git clone -b master ${cordRepoUrl}/${configRepo}"
-          }
-          localDeploymentConfigFile = "${env.localConfigDir}/${params.deploymentConfigFile}"
-          localKindVolthaValuesFile = "${env.localConfigDir}/${params.kindVolthaValuesFile}"
-          localSadisConfigFile = "${env.localConfigDir}/${params.sadisConfigFile}"
-        }
-      }
-    }
-
-    stage('Repo') {
-      steps {
-        checkout(changelog: true,
-          poll: false,
-          scm: [$class: 'RepoScm',
-            manifestRepositoryUrl: "${params.manifestUrl}",
-            manifestBranch: "${params.branch}",
-            currentBranch: true,
-            destinationDir: 'voltha',
-            forceSync: true,
-            resetFirst: true,
-            quiet: true,
-            jobs: 4,
-            showAllChanges: true]
-          )
-      }
-    }
-
-    stage('Get Patch') {
-      when {
-        expression { params.manualBranch == "" }
-      }
-      steps {
-        sh returnStdout: false, script: """
-        cd voltha
-        repo download "${gerritProject}" "${gerritChangeNumber}/${gerritPatchsetNumber}"
-        """
-      }
-    }
-
-    stage('Check config files') {
-      steps {
-        script {
-          try {
-            deployment_config = readYaml file: "${localDeploymentConfigFile}"
-          } catch (err) {
-            echo "Error reading ${localDeploymentConfigFile}"
-            throw err
-          }
-          sh returnStdout: false, script: """
-          if [ ! -e ${localKindVolthaValuesFile} ]; then echo "${localKindVolthaValuesFile} not found"; exit 1; fi
-          if [ ! -e ${localSadisConfigFile} ]; then echo "${localSadisConfigFile} not found"; exit 1; fi
-          """
-        }
-      }
-    }
-
-    stage('Create KinD Cluster') {
-      steps {
-        sh returnStdout: false, script: """
-        if [ "${branch}" != "master" ]; then
-          echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-          source "$WORKSPACE/voltha/kind-voltha/releases/${branch}"
-        else
-          echo "on master, using default settings for kind-voltha"
-        fi
-
-        cd $WORKSPACE/voltha/kind-voltha/
-        JUST_K8S=y ./voltha up
-        """
-      }
-    }
-
-    stage('Build and Push Images') {
-      when {
-        expression { params.manualBranch == "" }
-      }
-      steps {
-        sh returnStdout: false, script: """
-
-        if [ "${branch}" != "master" ]; then
-          echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-          source "$WORKSPACE/voltha/kind-voltha/releases/${branch}"
-        else
-          echo "on master, using default settings for kind-voltha"
-        fi
-
-        if ! [[ "${gerritProject}" =~ ^(voltha-system-tests|kind-voltha|voltha-helm-charts)\$ ]]; then
-          make -C $WORKSPACE/voltha/${gerritProject} DOCKER_REPOSITORY=voltha/ DOCKER_TAG=citest docker-build
-          docker images | grep citest
-          for image in \$(docker images -f "reference=*/*citest" --format "{{.Repository}}")
-          do
-            echo "Pushing \$image to nodes"
-            kind load docker-image \$image:citest --name voltha-\$NAME --nodes voltha-\$NAME-worker,voltha-\$NAME-worker2
-            docker rmi \$image:citest \$image:latest || true
-          done
-        fi
-        """
-      }
-    }
-
-    stage('Deploy Voltha') {
-      environment {
-        WITH_RADIUS="no"
-        WITH_EAPOL="no"
-        WITH_DHCP="no"
-        WITH_IGMP="no"
-        CONFIG_SADIS="no"
-        WITH_SIM_ADAPTERS="no"
-        DEPLOY_K8S="no"
-        VOLTHA_LOG_LEVEL="DEBUG"
-      }
-      steps {
-        script {
-          sh returnStdout: false, script: """
-          if [ "${branch}" != "master" ]; then
-            echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-            source "$WORKSPACE/voltha/kind-voltha/releases/${branch}"
-          else
-            echo "on master, using default settings for kind-voltha"
-          fi
-
-          export EXTRA_HELM_FLAGS+='--set log_agent.enabled=False -f ${localKindVolthaValuesFile} '
-
-          IMAGES=""
-          if [ "${gerritProject}" = "voltha-go" ]; then
-              IMAGES="rw_core ro_core "
-          elif [ "${gerritProject}" = "ofagent-py" ]; then
-              IMAGES="ofagent "
-          elif [ "${gerritProject}" = "voltha-onos" ]; then
-              IMAGES="onos "
-          elif [ "${gerritProject}" = "voltha-openolt-adapter" ]; then
-              IMAGES="adapter_open_olt "
-          elif [ "${gerritProject}" = "voltha-openonu-adapter" ]; then
-              IMAGES="adapter_open_onu "
-          elif [ "${gerritProject}" = "voltha-openonu-adapter-go" ]; then
-              IMAGES="adapter_open_onu_go "
-          elif [ "${gerritProject}" = "voltha-api-server" ]; then
-              IMAGES="afrouter afrouterd "
-          else
-              echo "No images to push"
-          fi
-
-          for I in \$IMAGES
-          do
-              EXTRA_HELM_FLAGS+="--set images.\$I.tag=citest,images.\$I.pullPolicy=Never "
-          done
-
-          if [ "${gerritProject}" = "voltha-helm-charts" ]; then
-              export CHART_PATH=$WORKSPACE/voltha/voltha-helm-charts
-              export VOLTHA_CHART=\$CHART_PATH/voltha
-              export VOLTHA_ADAPTER_OPEN_OLT_CHART=\$CHART_PATH/voltha-adapter-openolt
-              export VOLTHA_ADAPTER_OPEN_ONU_CHART=\$CHART_PATH/voltha-adapter-openonu
-              helm dep update \$VOLTHA_CHART
-              helm dep update \$VOLTHA_ADAPTER_OPEN_OLT_CHART
-              helm dep update \$VOLTHA_ADAPTER_OPEN_ONU_CHART
-          fi
-
-          cd $WORKSPACE/voltha/kind-voltha/
-          echo \$EXTRA_HELM_FLAGS
-          kail -n voltha -n default > $WORKSPACE/onos-voltha-combined.log &
-          ./voltha up
-
-          set +e
-
-          # Remove noise from voltha-core logs
-          voltctl log level set WARN read-write-core#github.com/opencord/voltha-go/db/model
-          voltctl log level set WARN read-write-core#github.com/opencord/voltha-lib-go/v3/pkg/kafka
-          # Remove noise from openolt logs
-          voltctl log level set WARN adapter-open-olt#github.com/opencord/voltha-lib-go/v3/pkg/db
-          voltctl log level set WARN adapter-open-olt#github.com/opencord/voltha-lib-go/v3/pkg/probe
-          voltctl log level set WARN adapter-open-olt#github.com/opencord/voltha-lib-go/v3/pkg/kafka
-          """
-        }
-      }
-    }
-
-    stage('Deploy Kafka Dump Chart') {
-      steps {
-        script {
-          sh returnStdout: false, script: """
-              helm repo add cord https://charts.opencord.org
-              helm repo update
-              if helm version -c --short|grep v2 -q; then
-                helm install -n voltha-kafka-dump cord/voltha-kafka-dump
-              else
-                helm install voltha-kafka-dump cord/voltha-kafka-dump
-              fi
-          """
-        }
-      }
-    }
-
-    stage('Push Tech-Profile') {
-      when {
-        expression { params.profile != "Default" }
-      }
-      steps {
-        sh returnStdout: false, script: """
-        etcd_container=\$(kubectl get pods -n voltha | grep voltha-etcd-cluster | awk 'NR==1{print \$1}')
-        kubectl cp $WORKSPACE/voltha/voltha-system-tests/tests/data/TechProfile-${profile}.json voltha/\$etcd_container:/tmp/flexpod.json
-        kubectl exec -it \$etcd_container -n voltha -- /bin/sh -c 'cat /tmp/flexpod.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/XGS-PON/64'
-        """
-      }
-    }
-
-    stage('Push Sadis-config') {
-      steps {
-        sh returnStdout: false, script: """
-        curl -sSL --user karaf:karaf -X POST -H Content-Type:application/json http://${deployment_config.nodes[0].ip}:$ONOS_API_PORT/onos/v1/network/configuration --data @${localSadisConfigFile}
-        """
-      }
-    }
-
-    stage('Reinstall OLT software') {
-      when {
-        expression { params.reinstallOlt }
-      }
-      steps {
-        script {
-          deployment_config.olts.each { olt ->
-            sh returnStdout: false, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'dpkg --remove asfvolt16 && dpkg --purge asfvolt16'"
-            waitUntil {
-              olt_sw_present = sh returnStdout: true, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'dpkg --list | grep asfvolt16 | wc -l'"
-              return olt_sw_present.toInteger() == 0
-            }
-            if ( params.branch == 'voltha-2.3' ) {
-              oltDebVersion = oltDebVersionVoltha23
-            } else {
-              oltDebVersion = oltDebVersionMaster
-            }
-            sh returnStdout: false, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'dpkg --install ${oltDebVersion}'"
-            waitUntil {
-              olt_sw_present = sh returnStdout: true, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'dpkg --list | grep asfvolt16 | wc -l'"
-              return olt_sw_present.toInteger() == 1
-            }
-            if ( olt.fortygig ) {
-              // If the OLT is connected to a 40G switch interface, set the NNI port to be downgraded
-              sh returnStdout: false, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'echo port ce128 sp=40000 >> /broadcom/qax.soc ; /opt/bcm68620/svk_init.sh'"
-            }
-          }
-        }
-      }
-    }
-
-    stage('Restart OLT processes') {
-      steps {
-        script {
-          deployment_config.olts.each { olt ->
-            sh returnStdout: false, script: """
-            ssh-keyscan -H ${olt.ip} >> ~/.ssh/known_hosts
-            sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'rm -f /var/log/openolt.log; rm -f /var/log/dev_mgmt_daemon.log; reboot'
-            sleep 120
-            """
-            waitUntil {
-              onu_discovered = sh returnStdout: true, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'grep \"onu discover indication\" /var/log/openolt.log | wc -l'"
-              return onu_discovered.toInteger() > 0
-            }
-          }
-        }
-      }
-    }
-
-    stage('Run E2E Tests') {
-      environment {
-        ROBOT_CONFIG_FILE="${localDeploymentConfigFile}"
-        ROBOT_MISC_ARGS="${params.extraRobotArgs} --removekeywords wuks -d $WORKSPACE/RobotLogs -v container_log_dir:$WORKSPACE "
-        ROBOT_FILE="Voltha_DT_PODTests.robot"
-      }
-      steps {
-        sh returnStdout: false, script: """
-        cd voltha
-        mkdir -p $WORKSPACE/RobotLogs
-
-        # If the Gerrit comment contains a line with "functional tests" then run the full
-        # functional test suite.  This covers tests tagged either 'sanity' or 'functional'.
-        # Note: Gerrit comment text will be prefixed by "Patch set n:" and a blank line
-        REGEX="functional tests"
-        if [[ "$GERRIT_EVENT_COMMENT_TEXT" =~ \$REGEX ]]; then
-          ROBOT_MISC_ARGS+="-i functionalDt"
-        fi
-        # Likewise for dataplane tests
-        REGEX="dataplane tests"
-        if [[ "$GERRIT_EVENT_COMMENT_TEXT" =~ \$REGEX ]]; then
-          ROBOT_MISC_ARGS+="-i dataplaneDt"
-        fi
-
-        make -C $WORKSPACE/voltha/voltha-system-tests voltha-dt-test || true
-        """
-      }
-    }
-
-    stage('After-Test Delay') {
-      when {
-        expression { params.manualBranch == "" }
-      }
-      steps {
-        sh returnStdout: false, script: """
-        # Note: Gerrit comment text will be prefixed by "Patch set n:" and a blank line
-        REGEX="hardware test with delay\$"
-        [[ "$GERRIT_EVENT_COMMENT_TEXT" =~ \$REGEX ]] && sleep 10m || true
-        """
-      }
-    }
-  }
-
-  post {
-    always {
-      sh returnStdout: false, script: '''
-      set +e
-      cp $WORKSPACE/voltha/kind-voltha/install-minimal.log $WORKSPACE/
-      kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}" | sort | uniq
-      kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.imageID}{'\\n'}" | sort | uniq
-      kubectl get nodes -o wide
-      kubectl get pods -o wide
-      kubectl get pods -n voltha -o wide
-
-      sync
-      pkill kail || true
-
-      ## Pull out errors from log files
-      extract_errors_go() {
-        echo
-        echo "Error summary for $1:"
-        grep $1 $WORKSPACE/onos-voltha-combined.log | grep '"level":"error"' | cut -d ' ' -f 2- | jq -r '.msg'
-        echo
-      }
-
-      extract_errors_python() {
-        echo
-        echo "Error summary for $1:"
-        grep $1 $WORKSPACE/onos-voltha-combined.log | grep 'ERROR' | cut -d ' ' -f 2-
-        echo
-      }
-
-      extract_errors_go voltha-rw-core > $WORKSPACE/error-report.log
-      extract_errors_go adapter-open-olt >> $WORKSPACE/error-report.log
-      extract_errors_python adapter-open-onu >> $WORKSPACE/error-report.log
-      extract_errors_python voltha-ofagent >> $WORKSPACE/error-report.log
-
-      gzip $WORKSPACE/onos-voltha-combined.log
-
-      ## collect events, the chart should be running by now
-      kubectl get pods | grep -i voltha-kafka-dump | grep -i running
-      if [[ $? == 0 ]]; then
-         kubectl exec -it `kubectl get pods | grep -i voltha-kafka-dump | grep -i running | cut -f1 -d " "` ./voltha-dump-events.sh > $WORKSPACE/voltha-events.log
-      fi
-      '''
-      script {
-        deployment_config.olts.each { olt ->
-          sh returnStdout: false, script: """
-          until sshpass -p ${olt.pass} scp ${olt.user}@${olt.ip}:/var/log/openolt.log $WORKSPACE/openolt-${olt.ip}.log
-          do
-              echo "Fetching openolt.log log failed, retrying..."
-              sleep 10
-          done
-          sed -i 's/\\x1b\\[[0-9;]*[a-zA-Z]//g' $WORKSPACE/openolt-${olt.ip}.log  # Remove escape sequences
-          until sshpass -p ${olt.pass} scp ${olt.user}@${olt.ip}:/var/log/dev_mgmt_daemon.log $WORKSPACE/dev_mgmt_daemon-${olt.ip}.log
-          do
-              echo "Fetching dev_mgmt_daemon.log failed, retrying..."
-              sleep 10
-          done
-          sed -i 's/\\x1b\\[[0-9;]*[a-zA-Z]//g' $WORKSPACE/dev_mgmt_daemon-${olt.ip}.log  # Remove escape sequences
-          """
-        }
-      }
-      step([$class: 'RobotPublisher',
-        disableArchiveOutput: false,
-        logFileName: 'RobotLogs/log*.html',
-        otherFiles: '',
-        outputFileName: 'RobotLogs/output*.xml',
-        outputPath: '.',
-        passThreshold: 100,
-        reportFileName: 'RobotLogs/report*.html',
-        unstableThreshold: 0]);
-      archiveArtifacts artifacts: '*.log,*.gz'
-    }
-  }
-}
diff --git a/jjb/pipeline/voltha/voltha-2.7/voltha-go-multi-tests.groovy b/jjb/pipeline/voltha/voltha-2.7/voltha-go-multi-tests.groovy
deleted file mode 100644
index e7bb4f0..0000000
--- a/jjb/pipeline/voltha/voltha-2.7/voltha-go-multi-tests.groovy
+++ /dev/null
@@ -1,191 +0,0 @@
-// Copyright 2017-present Open Networking Foundation
-//
-// 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.
-
-// voltha-2.x e2e tests
-// uses kind-voltha to deploy voltha-2.X
-// uses bbsim to simulate OLT/ONUs
-
-pipeline {
-
-  /* no label, executor is determined by JJB */
-  agent {
-    label "${params.buildNode}"
-  }
-  options {
-      timeout(time: 60, unit: 'MINUTES')
-  }
-  environment {
-    KUBECONFIG="$HOME/.kube/kind-config-voltha-minimal"
-    VOLTCONFIG="$HOME/.volt/config-minimal"
-    PATH="$WORKSPACE/kind-voltha/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
-    NAME="minimal"
-    FANCY=0
-    WITH_SIM_ADAPTERS="n"
-    WITH_RADIUS="y"
-    WITH_BBSIM="y"
-    DEPLOY_K8S="y"
-    VOLTHA_LOG_LEVEL="DEBUG"
-    CONFIG_SADIS="external"
-    BBSIM_CFG="configs/bbsim-sadis-att.yaml"
-  }
-  stages {
-    stage('Clone kind-voltha') {
-      steps {
-        step([$class: 'WsCleanup'])
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/kind-voltha",
-            refspec: "${kindVolthaChange}"
-          ]],
-          branches: [[ name: "master", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "kind-voltha"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
-        ])
-      }
-    }
-    stage('Clone voltha-system-tests') {
-      steps {
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/voltha-system-tests",
-            refspec: "${volthaSystemTestsChange}"
-          ]],
-          branches: [[ name: "${branch}", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "voltha-system-tests"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
-        ])
-      }
-    }
-
-    stage('Deploy Voltha') {
-      steps {
-        timeout(time: 15, unit: 'MINUTES') {
-          sh """
-             export EXTRA_HELM_FLAGS=""
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               echo "on master, using default settings for kind-voltha"
-             fi
-
-             EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${params.extraHelmFlags} "
-
-             cd $WORKSPACE/kind-voltha/
-             WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down || ./voltha down
-             ./voltha up
-             """
-         }
-      }
-    }
-
-    stage('Run E2E Tests') {
-      steps {
-        // this may potentially fail as we don't know how many times we repeat this tests
-        timeout(time: 30, unit: 'MINUTES') {
-          sh """
-             set +e
-             mkdir -p $WORKSPACE/RobotLogs
-
-             cd $WORKSPACE/kind-voltha/scripts
-             ./log-collector.sh > /dev/null &
-             ./log-combine.sh > /dev/null &
-
-             for i in \$(seq 1 ${testRuns})
-             do
-               export ROBOT_MISC_ARGS="${params.extraRobotArgs} -d $WORKSPACE/RobotLogs/\$i -e PowerSwitch"
-               make -C $WORKSPACE/voltha-system-tests ${makeTarget}
-               echo "Completed run: \$i"
-               echo ""
-             done
-             """
-         }
-      }
-    }
-  }
-
-  post {
-    always {
-      sh '''
-         set +e
-         cp $WORKSPACE/kind-voltha/install-minimal.log $WORKSPACE/
-         kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}" | sort | uniq
-         kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.imageID}{'\\n'}" | sort | uniq
-         kubectl get nodes -o wide
-         kubectl get pods -o wide
-         kubectl get pods -n voltha -o wide
-
-         sleep 60 # Wait for log-collector and log-combine to complete
-
-         ## Pull out errors from log files
-         extract_errors_go() {
-           echo
-           echo "Error summary for $1:"
-           grep '"level":"error"' $WORKSPACE/kind-voltha/scripts/logger/combined/$1*
-           echo
-         }
-
-         extract_errors_python() {
-           echo
-           echo "Error summary for $1:"
-           grep 'ERROR' $WORKSPACE/kind-voltha/scripts/logger/combined/$1*
-           echo
-         }
-
-         extract_errors_go voltha-rw-core > $WORKSPACE/error-report.log
-         extract_errors_go adapter-open-olt >> $WORKSPACE/error-report.log
-         extract_errors_python adapter-open-onu >> $WORKSPACE/error-report.log
-         extract_errors_go voltha-ofagent >> $WORKSPACE/error-report.log
-         extract_errors_python onos >> $WORKSPACE/error-report.log
-
-         gzip error-report.log || true
-
-         cd $WORKSPACE/kind-voltha/scripts/logger/combined/
-         tar czf $WORKSPACE/container-logs.tgz *
-
-         cd $WORKSPACE
-         gzip *-combined.log || true
-
-         ## shut down voltha but leave kind-voltha cluster
-         if [ "${branch}" != "master" ]; then
-           echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-           source "$WORKSPACE/kind-voltha/releases/${branch}"
-         else
-           echo "on master, using default settings for kind-voltha"
-         fi
-         cd $WORKSPACE/kind-voltha/
-         DEPLOY_K8S=n WAIT_ON_DOWN=y ./voltha down
-         '''
-        step([$class: 'RobotPublisher',
-            disableArchiveOutput: false,
-            logFileName: '**/log*.html',
-            otherFiles: '',
-            outputFileName: '**/output*.xml',
-            outputPath: 'RobotLogs',
-            passThreshold: 100,
-            reportFileName: '**/report*.html',
-            unstableThreshold: 0]);
-         archiveArtifacts artifacts: '*.log,*.gz,*.tgz'
-
-    }
-  }
-}
diff --git a/jjb/pipeline/voltha/voltha-2.7/voltha-go-tests.groovy b/jjb/pipeline/voltha/voltha-2.7/voltha-go-tests.groovy
deleted file mode 100644
index 61f600c..0000000
--- a/jjb/pipeline/voltha/voltha-2.7/voltha-go-tests.groovy
+++ /dev/null
@@ -1,211 +0,0 @@
-// Copyright 2017-present Open Networking Foundation
-//
-// 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.
-
-// voltha-2.x e2e tests
-// uses kind-voltha to deploy voltha-2.X
-// uses bbsim to simulate OLT/ONUs
-
-pipeline {
-
-  /* no label, executor is determined by JJB */
-  agent {
-    label "${params.buildNode}"
-  }
-  options {
-      timeout(time: 60, unit: 'MINUTES')
-  }
-  environment {
-    KUBECONFIG="$HOME/.kube/kind-config-voltha-minimal"
-    VOLTCONFIG="$HOME/.volt/config-minimal"
-    PATH="$PATH:$WORKSPACE/kind-voltha/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
-    NAME="minimal"
-    FANCY=0
-    WITH_SIM_ADAPTERS="no"
-    WITH_RADIUS="yes"
-    WITH_BBSIM="yes"
-    DEPLOY_K8S="yes"
-    VOLTHA_LOG_LEVEL="DEBUG"
-    CONFIG_SADIS="external"
-    BBSIM_CFG="configs/bbsim-sadis-att.yaml"
-    ROBOT_MISC_ARGS="${params.extraRobotArgs} -d $WORKSPACE/RobotLogs -e PowerSwitch"
-    KARAF_HOME="${params.karafHome}"
-    DIAGS_PROFILE="VOLTHA_PROFILE"
-  }
-  stages {
-
-    stage('Clone kind-voltha') {
-      steps {
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/kind-voltha",
-            // refspec: "${kindVolthaChange}"
-          ]],
-          branches: [[ name: "master", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "kind-voltha"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
-        ])
-      }
-    }
-    stage('Cleanup') {
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh """
-          if [ "${branch}" != "master" ]; then
-            echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-            source "$WORKSPACE/kind-voltha/releases/${branch}"
-          else
-            echo "on master, using default settings for kind-voltha"
-          fi
-          cd $WORKSPACE/kind-voltha/
-          WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down || true
-          """
-        }
-      }
-    }
-    stage('Clone voltha-system-tests') {
-      steps {
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/voltha-system-tests",
-            // refspec: "${volthaSystemTestsChange}"
-          ]],
-          branches: [[ name: "${branch}", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "voltha-system-tests"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
-        ])
-      }
-    }
-
-    stage('Deploy Voltha') {
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh """
-             export EXTRA_HELM_FLAGS=""
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               echo "on master, using default settings for kind-voltha"
-             fi
-
-             if [ "${workFlow}" == "DT" ]; then
-               export WITH_DHCP=no
-               export WITH_IGMP=no
-               export WITH_EAPOL=no
-               export WITH_RADIUS=no
-               export BBSIM_CFG="configs/bbsim-sadis-dt.yaml"
-             fi
-
-             EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${params.extraHelmFlags} "
-             cd $WORKSPACE/kind-voltha/
-             WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down || ./voltha down
-             ./voltha up
-             """
-           }
-      }
-    }
-
-    stage('Run E2E Tests') {
-      steps {
-        timeout(time: 5, unit: 'MINUTES') {
-          sh '''
-             set +e
-             mkdir -p $WORKSPACE/RobotLogs
-
-             cd $WORKSPACE/kind-voltha/scripts
-             ./log-collector.sh > /dev/null &
-             ./log-combine.sh > /dev/null &
-
-             make -C $WORKSPACE/voltha-system-tests ${makeTarget} || true
-             '''
-         }
-      }
-    }
-  }
-
-  post {
-    always {
-      sh '''
-         set +e
-         cp $WORKSPACE/kind-voltha/install-minimal.log $WORKSPACE/
-         kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}" | sort | uniq
-         kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.imageID}{'\\n'}" | sort | uniq
-         kubectl get nodes -o wide
-         kubectl get pods -o wide
-         kubectl get pods -n voltha -o wide
-
-         sleep 60 # Wait for log-collector and log-combine to complete
-
-         ## Pull out errors from log files
-         extract_errors_go() {
-           echo
-           echo "Error summary for $1:"
-           grep '"level":"error"' $WORKSPACE/kind-voltha/scripts/logger/combined/$1*
-           echo
-         }
-
-         extract_errors_python() {
-           echo
-           echo "Error summary for $1:"
-           grep 'ERROR' $WORKSPACE/kind-voltha/scripts/logger/combined/$1*
-           echo
-         }
-
-         extract_errors_go voltha-rw-core > $WORKSPACE/error-report.log
-         extract_errors_go adapter-open-olt >> $WORKSPACE/error-report.log
-         extract_errors_python adapter-open-onu >> $WORKSPACE/error-report.log
-         extract_errors_go voltha-ofagent >> $WORKSPACE/error-report.log
-         extract_errors_python onos >> $WORKSPACE/error-report.log
-
-         gzip error-report.log || true
-
-         cd $WORKSPACE/kind-voltha/scripts/logger/combined/
-         tar czf $WORKSPACE/container-logs.tgz *
-
-         cd $WORKSPACE
-         gzip *-combined.log || true
-
-         ## shut down voltha but leave kind-voltha cluster
-         if [ "${branch}" != "master" ]; then
-           echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-           source "$WORKSPACE/kind-voltha/releases/${branch}"
-         else
-           echo "on master, using default settings for kind-voltha"
-         fi
-         cd $WORKSPACE/kind-voltha/
-         DEPLOY_K8S=n WAIT_ON_DOWN=y ./voltha down
-         kubectl delete deployment voltctl || true
-         '''
-         step([$class: 'RobotPublisher',
-            disableArchiveOutput: false,
-            logFileName: 'RobotLogs/log*.html',
-            otherFiles: '',
-            outputFileName: 'RobotLogs/output*.xml',
-            outputPath: '.',
-            passThreshold: 100,
-            reportFileName: 'RobotLogs/report*.html',
-            unstableThreshold: 0]);
-         archiveArtifacts artifacts: '*.log,*.gz,*.tgz'
-
-    }
-  }
-}
diff --git a/jjb/pipeline/voltha/voltha-2.7/voltha-nightly-tests-bbsim.groovy b/jjb/pipeline/voltha/voltha-2.7/voltha-nightly-tests-bbsim.groovy
deleted file mode 100644
index da4dc8a..0000000
--- a/jjb/pipeline/voltha/voltha-2.7/voltha-nightly-tests-bbsim.groovy
+++ /dev/null
@@ -1,289 +0,0 @@
-// Copyright 2017-present Open Networking Foundation
-//
-// 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.
-
-// voltha-2.x e2e tests
-// uses kind-voltha to deploy voltha-2.X
-// uses bbsim to simulate OLT/ONUs
-
-pipeline {
-
-  /* no label, executor is determined by JJB */
-  agent {
-    label "${params.buildNode}"
-  }
-  options {
-      timeout(time: 150, unit: 'MINUTES')
-  }
-  environment {
-    KUBECONFIG="$HOME/.kube/kind-config-voltha-minimal"
-    VOLTCONFIG="$HOME/.volt/config-minimal"
-    PATH="$PATH:$WORKSPACE/kind-voltha/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
-    NAME="minimal"
-    FANCY=0
-    WITH_SIM_ADAPTERS="no"
-    WITH_RADIUS="yes"
-    WITH_BBSIM="yes"
-    DEPLOY_K8S="yes"
-    VOLTHA_LOG_LEVEL="DEBUG"
-    CONFIG_SADIS="external"
-    BBSIM_CFG="configs/bbsim-sadis-att.yaml"
-    ROBOT_MISC_ARGS="-e PowerSwitch ${params.extraRobotArgs}"
-    KARAF_HOME="${params.karafHome}"
-    DIAGS_PROFILE="VOLTHA_PROFILE"
-    NUM_OF_BBSIM="${olts}"
-  }
-  stages {
-    stage('Clone kind-voltha') {
-      steps {
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/kind-voltha",
-            // refspec: "${kindVolthaChange}"
-          ]],
-          branches: [[ name: "master", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "kind-voltha"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
-        ])
-      }
-    }
-    stage('Cleanup') {
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh """
-          if [ "${branch}" != "master" ]; then
-            echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-            source "$WORKSPACE/kind-voltha/releases/${branch}"
-          else
-            echo "on master, using default settings for kind-voltha"
-          fi
-          cd $WORKSPACE/kind-voltha/
-          WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down || ./voltha down
-          """
-        }
-      }
-    }
-    stage('Clone voltha-system-tests') {
-      steps {
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/voltha-system-tests",
-            refspec: "${volthaSystemTestsChange}"
-          ]],
-          branches: [[ name: "${branch}", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "voltha-system-tests"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
-        ])
-        script {
-          sh(script:"""
-            if [ '${volthaSystemTestsChange}' != '' ] ; then
-              cd $WORKSPACE/voltha-system-tests;
-              git fetch https://gerrit.opencord.org/voltha-system-tests ${volthaSystemTestsChange} && git checkout FETCH_HEAD
-            fi
-            """)
-        }
-      }
-    }
-
-    stage('Deploy Voltha') {
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh """
-             export EXTRA_HELM_FLAGS=""
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               export INFRA_NS="infra"
-               echo "on master, using default settings for kind-voltha"
-             fi
-
-             EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${params.extraHelmFlags} --set defaults.image_registry=mirror.registry.opennetworking.org/ "
-
-             cd $WORKSPACE/kind-voltha/
-             ./voltha up
-             """
-           }
-      }
-    }
-
-    stage('Functional Tests') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/FunctionalTests"
-      }
-      steps {
-        timeout(time: 50, unit: 'MINUTES') {
-          sh '''
-             set +e
-             mkdir -p $ROBOT_LOGS_DIR
-             cd $WORKSPACE/kind-voltha/scripts
-             ./log-collector.sh > /dev/null &
-             ./log-combine.sh > /dev/null &
-
-             export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR"
-             make -C $WORKSPACE/voltha-system-tests ${makeTarget} || true
-             '''
-         }
-      }
-    }
-
-    stage('Alarm Tests') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/AlarmTests"
-      }
-      when {
-        expression {
-          return params.withAlarms
-        }
-      }
-      steps {
-        timeout(time: 5, unit: 'MINUTES') {
-          sh '''
-             set +e
-             mkdir -p $WORKSPACE/RobotLogs
-
-             export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR"
-             make -C $WORKSPACE/voltha-system-tests ${makeAlarmtestTarget} || true
-             '''
-         }
-      }
-    }
-
-    stage('Failure/Recovery Tests') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/FailureTests"
-      }
-      steps {
-        timeout(time: 70, unit: 'MINUTES') {
-          sh '''
-             set +e
-             mkdir -p $WORKSPACE/RobotLogs
-
-             export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR"
-             make -C $WORKSPACE/voltha-system-tests ${makeFailtestTarget} || true
-             '''
-         }
-      }
-    }
-    stage('Multiple OLT Tests') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/MultipleOLTTests"
-      }
-      steps {
-        timeout(time: 15, unit: 'MINUTES') {
-          sh '''
-             if [ "${olts}" -gt 1 ]; then
-                set +e
-                mkdir -p $WORKSPACE/RobotLogs
-                export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR"
-                make -C $WORKSPACE/voltha-system-tests ${makeMultiOltTarget} || true
-             fi
-             '''
-         }
-      }
-    }
-
-    stage('Error Tests') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/ErrorTests"
-      }
-      steps {
-        timeout(time: 15, unit: 'MINUTES') {
-          sh '''
-             set +e
-             mkdir -p $WORKSPACE/RobotLogs
-
-             export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR"
-             make -C $WORKSPACE/voltha-system-tests ${makeErrortestTarget} || true
-             '''
-        }
-      }
-    }
-  }
-
-  post {
-    always {
-      sh '''
-         set +e
-         cp $WORKSPACE/kind-voltha/install-minimal.log $WORKSPACE/
-         kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}" | sort | uniq
-         kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.imageID}{'\\n'}" | sort | uniq
-         kubectl get nodes -o wide
-         kubectl get pods -o wide
-         kubectl get pods -n voltha -o wide
-
-         sleep 60 # Wait for log-collector and log-combine to complete
-
-         ## Pull out errors from log files
-         extract_errors_go() {
-           echo
-           echo "Error summary for $1:"
-           grep '"level":"error"' $WORKSPACE/kind-voltha/scripts/logger/combined/$1*
-           echo
-         }
-
-         extract_errors_python() {
-           echo
-           echo "Error summary for $1:"
-           grep 'ERROR' $WORKSPACE/kind-voltha/scripts/logger/combined/$1*
-           echo
-         }
-
-         extract_errors_go voltha-rw-core > $WORKSPACE/error-report.log
-         extract_errors_go adapter-open-olt >> $WORKSPACE/error-report.log
-         extract_errors_python adapter-open-onu >> $WORKSPACE/error-report.log
-         extract_errors_go voltha-ofagent >> $WORKSPACE/error-report.log
-         extract_errors_python onos >> $WORKSPACE/error-report.log
-
-         gzip error-report.log || true
-
-         cd $WORKSPACE/kind-voltha/scripts/logger/combined/
-         tar czf $WORKSPACE/container-logs.tgz *
-
-         cd $WORKSPACE
-         gzip *-combined.log || true
-
-         ## shut down voltha but leave kind-voltha cluster
-         if [ "${branch}" != "master" ]; then
-           echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-           source "$WORKSPACE/kind-voltha/releases/${branch}"
-         else
-           echo "on master, using default settings for kind-voltha"
-         fi
-         cd $WORKSPACE/kind-voltha/
-         DEPLOY_K8S=n WAIT_ON_DOWN=y ./voltha down
-         kubectl delete deployment voltctl || true
-         '''
-         step([$class: 'RobotPublisher',
-            disableArchiveOutput: false,
-            logFileName: '**/log*.html',
-            otherFiles: '',
-            outputFileName: '**/output*.xml',
-            outputPath: 'RobotLogs',
-            passThreshold: 100,
-            reportFileName: '**/report*.html',
-            unstableThreshold: 0]);
-
-         archiveArtifacts artifacts: '*.log,*.gz,*.tgz'
-
-    }
-  }
-}
diff --git a/jjb/pipeline/voltha/voltha-2.7/voltha-openonu-go-test-bbsim.groovy b/jjb/pipeline/voltha/voltha-2.7/voltha-openonu-go-test-bbsim.groovy
deleted file mode 100755
index 3f65752..0000000
--- a/jjb/pipeline/voltha/voltha-2.7/voltha-openonu-go-test-bbsim.groovy
+++ /dev/null
@@ -1,539 +0,0 @@
-// Copyright 2017-present Open Networking Foundation
-//
-// 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.
-
-// voltha-2.x e2e tests
-// uses kind-voltha to deploy voltha-2.X
-// uses bbsim to simulate OLT/ONUs
-
-pipeline {
-
-  /* no label, executor is determined by JJB */
-  agent {
-    label "${params.buildNode}"
-  }
-  options {
-    timeout(time: 130, unit: 'MINUTES')
-  }
-  environment {
-    KUBECONFIG="$HOME/.kube/kind-config-voltha-minimal"
-    VOLTCONFIG="$HOME/.volt/config-minimal"
-    PATH="$PATH:$WORKSPACE/kind-voltha/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
-    NAME="minimal"
-    FANCY=0
-    WITH_SIM_ADAPTERS="no"
-    WITH_RADIUS="yes"
-    WITH_BBSIM="yes"
-    DEPLOY_K8S="yes"
-    VOLTHA_LOG_LEVEL="DEBUG"
-    CONFIG_SADIS="external"
-    BBSIM_CFG="configs/bbsim-sadis-att.yaml"
-    ROBOT_MISC_ARGS="-e PowerSwitch ${params.extraRobotArgs}"
-    KARAF_HOME="${params.karafHome}"
-    DIAGS_PROFILE="VOLTHA_PROFILE"
-    NUM_OF_BBSIM="${olts}"
-  }
-  stages {
-    stage('Clone kind-voltha') {
-      steps {
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/kind-voltha",
-            // refspec: "${kindVolthaChange}"
-          ]],
-          branches: [[ name: "master", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "kind-voltha"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
-        ])
-      }
-    }
-    stage('Cleanup') {
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh """
-          if [ "${branch}" != "master" ]; then
-            echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-            source "$WORKSPACE/kind-voltha/releases/${branch}"
-          else
-            echo "on master, using default settings for kind-voltha"
-          fi
-          cd $WORKSPACE/kind-voltha/
-          WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down || ./voltha down
-          """
-        }
-      }
-    }
-    stage('Clone voltha-system-tests') {
-      steps {
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/voltha-system-tests",
-            // refspec: "${volthaSystemTestsChange}"
-          ]],
-          branches: [[ name: "${branch}", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "voltha-system-tests"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
-        ])
-      }
-    }
-
-    stage('Deploy Voltha') {
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh """
-             export EXTRA_HELM_FLAGS=""
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               echo "on master, using default settings for kind-voltha"
-             fi
-
-             EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${params.extraHelmFlags} --set defaults.image_registry=mirror.registry.opennetworking.org/ "
-
-             cd $WORKSPACE/kind-voltha/
-             ./voltha up
-             bash <( curl -sfL https://raw.githubusercontent.com/boz/kail/master/godownloader.sh) -b "$WORKSPACE/kind-voltha/bin"
-             """
-         }
-      }
-    }
-
-    stage('Run E2E Tests 1t1gem') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/1t1gem"
-      }
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh '''
-            # start logging
-            mkdir -p $WORKSPACE/1t1gem
-            _TAG=kail-1t1gem kail -n voltha -n default > $WORKSPACE/1t1gem/onos-voltha-combined.log &
-
-            mkdir -p $ROBOT_LOGS_DIR/1t1gem
-            export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR"
-            export KVSTOREPREFIX=voltha_voltha
-
-            make -C $WORKSPACE/voltha-system-tests ${makeTarget} || true
-
-            # stop logging
-            P_IDS="$(ps e -ww -A | grep "_TAG=kail-1t1gem" | grep -v grep | awk '{print $1}')"
-            if [ -n "$P_IDS" ]; then
-              echo $P_IDS
-              for P_ID in $P_IDS; do
-                kill -9 $P_ID
-              done
-            fi
-            cd $WORKSPACE/1t1gem/
-            gzip -k onos-voltha-combined.log
-            rm onos-voltha-combined.log
-            # get pods information
-            kubectl get pods -o wide --all-namespaces > $WORKSPACE/1t1gem/pods.txt || true
-          '''
-         }
-       }
-     }
-
-    stage('Run E2E Tests 1t4gem') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/1t4gem"
-      }
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh '''
-            if [ "${branch}" != "master" ]; then
-              echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-              source "$WORKSPACE/kind-voltha/releases/${branch}"
-            else
-              echo "on master, using default settings for kind-voltha"
-            fi
-            cd $WORKSPACE/kind-voltha/
-            WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down
-
-            export EXTRA_HELM_FLAGS=""
-            if [ "${branch}" != "master" ]; then
-              echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-              source "$WORKSPACE/kind-voltha/releases/${branch}"
-            else
-              echo "on master, using default settings for kind-voltha"
-            fi
-            export EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${extraHelmFlags} "
-
-            # start logging
-            mkdir -p $WORKSPACE/1t4gem
-            _TAG=kail-1t4gem kail -n voltha -n default > $WORKSPACE/1t4gem/onos-voltha-combined.log &
-
-            DEPLOY_K8S=n ./voltha up
-
-            mkdir -p $ROBOT_LOGS_DIR/1t4gem
-            export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR"
-            export KVSTOREPREFIX=voltha_voltha
-
-            make -C $WORKSPACE/voltha-system-tests ${make1t4gemTestTarget} || true
-
-            # stop logging
-            P_IDS="$(ps e -ww -A | grep "_TAG=kail-1t4gem" | grep -v grep | awk '{print $1}')"
-            if [ -n "$P_IDS" ]; then
-              echo $P_IDS
-              for P_ID in $P_IDS; do
-                kill -9 $P_ID
-              done
-            fi
-            cd $WORKSPACE/1t4gem/
-            gzip -k onos-voltha-combined.log
-            rm onos-voltha-combined.log
-            # get pods information
-            kubectl get pods -o wide --all-namespaces > $WORKSPACE/1t4gem/pods.txt || true
-          '''
-         }
-       }
-     }
-
-    stage('Run E2E Tests 1t8gem') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/1t8gem"
-      }
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh '''
-            if [ "${branch}" != "master" ]; then
-              echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-              source "$WORKSPACE/kind-voltha/releases/${branch}"
-            else
-              echo "on master, using default settings for kind-voltha"
-            fi
-            cd $WORKSPACE/kind-voltha/
-            WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down
-
-            export EXTRA_HELM_FLAGS=""
-            if [ "${branch}" != "master" ]; then
-              echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-              source "$WORKSPACE/kind-voltha/releases/${branch}"
-            else
-              echo "on master, using default settings for kind-voltha"
-            fi
-            export EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${extraHelmFlags} "
-
-            # start logging
-            mkdir -p $WORKSPACE/1t8gem
-            _TAG=kail-1t8gem kail -n voltha -n default > $WORKSPACE/1t8gem/onos-voltha-combined.log &
-
-            DEPLOY_K8S=n ./voltha up
-
-            mkdir -p $ROBOT_LOGS_DIR/1t8gem
-            export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR"
-            export KVSTOREPREFIX=voltha_voltha
-
-            make -C $WORKSPACE/voltha-system-tests ${make1t8gemTestTarget} || true
-
-            # stop logging
-            P_IDS="$(ps e -ww -A | grep "_TAG=kail-1t8gem" | grep -v grep | awk '{print $1}')"
-            if [ -n "$P_IDS" ]; then
-              echo $P_IDS
-              for P_ID in $P_IDS; do
-                kill -9 $P_ID
-              done
-            fi
-            cd $WORKSPACE/1t8gem/
-            gzip -k onos-voltha-combined.log
-            rm onos-voltha-combined.log
-            # get pods information
-            kubectl get pods -o wide --all-namespaces > $WORKSPACE/1t8gem/pods.txt || true
-          '''
-        }
-      }
-    }
-
-    stage('Run MIB Upload Tests') {
-      when { beforeAgent true; expression { return "${olts}" == "1" } }
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/openonu-go-MIB"
-      }
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh '''
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               echo "on master, using default settings for kind-voltha"
-             fi
-             cd $WORKSPACE/kind-voltha/
-             WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down
-
-             export EXTRA_HELM_FLAGS=""
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               echo "on master, using default settings for kind-voltha"
-             fi
-             export EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${extraHelmFlags} "
-             export EXTRA_HELM_FLAGS+="--set pon=2,onu=2,controlledActivation=only-onu "
-
-             # start logging
-             mkdir -p $WORKSPACE/mib
-             _TAG=kail-mib kail -n voltha -n default > $WORKSPACE/mib/onos-voltha-combined.log &
-
-             DEPLOY_K8S=n ./voltha up
-
-             mkdir -p $ROBOT_LOGS_DIR
-             export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR"
-             export TARGET_DEFAULT=mib-upload-templating-openonu-go-adapter-test
-
-             make -C $WORKSPACE/voltha-system-tests \$TARGET_DEFAULT || true
-
-             # stop logging
-             P_IDS="$(ps e -ww -A | grep "_TAG=kail-mib" | grep -v grep | awk '{print $1}')"
-             if [ -n "$P_IDS" ]; then
-               echo $P_IDS
-               for P_ID in $P_IDS; do
-                 kill -9 $P_ID
-               done
-             fi
-             cd $WORKSPACE/mib/
-             gzip -k onos-voltha-combined.log
-             rm onos-voltha-combined.log
-             # get pods information
-             kubectl get pods -o wide --all-namespaces > $WORKSPACE/mib/pods.txt || true
-          '''
-        }
-      }
-    }
-
-    stage('Reconcile DT workflow') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/ReconcileDT"
-      }
-      steps {
-        timeout(time: 25, unit: 'MINUTES') {
-          sh '''
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               echo "on master, using default settings for kind-voltha"
-             fi
-             cd $WORKSPACE/kind-voltha/
-             WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down
-
-             export EXTRA_HELM_FLAGS=""
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               echo "on master, using default settings for kind-voltha"
-             fi
-             export EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${extraHelmFlags} "
-
-             # Workflow-specific flags
-             export WITH_RADIUS=no
-             export WITH_EAPOL=no
-             export WITH_DHCP=no
-             export WITH_IGMP=no
-             export CONFIG_SADIS="external"
-             export BBSIM_CFG="configs/bbsim-sadis-dt.yaml"
-
-             # start logging
-             mkdir -p $WORKSPACE/reconciledt
-             _TAG=kail-reconcile-dt kail -n voltha -n default > $WORKSPACE/reconciledt/onos-voltha-combined.log &
-
-             DEPLOY_K8S=n ./voltha up
-
-             mkdir -p $ROBOT_LOGS_DIR
-             export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR -e PowerSwitch"
-
-             make -C $WORKSPACE/voltha-system-tests ${makeReconcileDtTestTarget} || true
-
-             # stop logging
-             P_IDS="$(ps e -ww -A | grep "_TAG=kail-reconcile-dt" | grep -v grep | awk '{print $1}')"
-             if [ -n "$P_IDS" ]; then
-               echo $P_IDS
-               for P_ID in $P_IDS; do
-                 kill -9 $P_ID
-               done
-             fi
-             cd $WORKSPACE/reconciledt/
-             gzip -k onos-voltha-combined.log
-             rm onos-voltha-combined.log
-             # get pods information
-             kubectl get pods -o wide --all-namespaces > $WORKSPACE/reconciledt/pods.txt || true
-             '''
-         }
-      }
-    }
-
-    stage('Reconcile ATT workflow') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/ReconcileATT"
-      }
-      steps {
-        timeout(time: 25, unit: 'MINUTES') {
-          sh '''
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               echo "on master, using default settings for kind-voltha"
-             fi
-             cd $WORKSPACE/kind-voltha/
-             WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down
-
-             export EXTRA_HELM_FLAGS=""
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               echo "on master, using default settings for kind-voltha"
-             fi
-             export EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${extraHelmFlags} "
-
-             # Workflow-specific flags
-             export WITH_RADIUS=yes
-             export WITH_EAPOL=yes
-             export WITH_BBSIM=yes
-             export DEPLOY_K8S=yes
-             export CONFIG_SADIS="external"
-             export BBSIM_CFG="configs/bbsim-sadis-att.yaml"
-
-             if [ "${gerritProject}" = "voltctl" ]; then
-               export VOLTCTL_VERSION=$(cat $WORKSPACE/voltctl/VERSION)
-               cp $WORKSPACE/voltctl/voltctl $WORKSPACE/kind-voltha/bin/voltctl
-               md5sum $WORKSPACE/kind-voltha/bin/voltctl
-             fi
-
-             # start logging
-             mkdir -p $WORKSPACE/reconcileatt
-             _TAG=kail-reconcile-att kail -n voltha -n default > $WORKSPACE/reconcileatt/onos-voltha-combined.log &
-
-             DEPLOY_K8S=n ./voltha up
-
-             mkdir -p $ROBOT_LOGS_DIR
-             export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR -e PowerSwitch"
-
-             make -C $WORKSPACE/voltha-system-tests ${makeReconcileTestTarget} || true
-
-             # stop logging
-             P_IDS="$(ps e -ww -A | grep "_TAG=kail-reconcile-att" | grep -v grep | awk '{print $1}')"
-             if [ -n "$P_IDS" ]; then
-               echo $P_IDS
-               for P_ID in $P_IDS; do
-                 kill -9 $P_ID
-               done
-             fi
-             cd $WORKSPACE/reconcileatt/
-             gzip -k onos-voltha-combined.log
-             rm onos-voltha-combined.log
-             # get pods information
-             kubectl get pods -o wide --all-namespaces > $WORKSPACE/reconcileatt/pods.txt || true
-             '''
-         }
-      }
-    }
-
-    stage('Reconcile TT workflow') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/ReconcileTT"
-      }
-      steps {
-        timeout(time: 25, unit: 'MINUTES') {
-          sh '''
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               echo "on master, using default settings for kind-voltha"
-             fi
-             cd $WORKSPACE/kind-voltha/
-             WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down
-
-             export EXTRA_HELM_FLAGS=""
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               echo "on master, using default settings for kind-voltha"
-             fi
-             export EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${extraHelmFlags} "
-
-             # Workflow-specific flags
-             export WITH_RADIUS=no
-             export WITH_EAPOL=no
-             export WITH_DHCP=yes
-             export WITH_IGMP=yes
-             export CONFIG_SADIS="external"
-             export BBSIM_CFG="configs/bbsim-sadis-tt.yaml"
-
-             # start logging
-             mkdir -p $WORKSPACE/reconcilett
-             _TAG=kail-reconcile-tt kail -n voltha -n default > $WORKSPACE/reconcilett/onos-voltha-combined.log &
-
-             DEPLOY_K8S=n ./voltha up
-
-             mkdir -p $ROBOT_LOGS_DIR
-             export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR -e PowerSwitch"
-
-             make -C $WORKSPACE/voltha-system-tests ${makeReconcileTtTestTarget} || true
-
-             # stop logging
-             P_IDS="$(ps e -ww -A | grep "_TAG=kail-reconcile-tt" | grep -v grep | awk '{print $1}')"
-             if [ -n "$P_IDS" ]; then
-               echo $P_IDS
-               for P_ID in $P_IDS; do
-                 kill -9 $P_ID
-               done
-             fi
-             cd $WORKSPACE/reconcilett/
-             gzip -k onos-voltha-combined.log
-             rm onos-voltha-combined.log
-             # get pods information
-             kubectl get pods -o wide --all-namespaces > $WORKSPACE/reconcilett/pods.txt || true
-             '''
-           }
-      }
-    }
-  }
-  post {
-    always {
-      sh '''
-         # get pods information
-         kubectl get pods -o wide
-         kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}"
-         helm ls
-
-         sync
-         pkill kail || true
-         md5sum $WORKSPACE/kind-voltha/bin/voltctl
-
-         '''
-         step([$class: 'RobotPublisher',
-            disableArchiveOutput: false,
-            logFileName: 'RobotLogs/*/log*.html',
-            otherFiles: '',
-            outputFileName: 'RobotLogs/*/output*.xml',
-            outputPath: '.',
-            passThreshold: 100,
-            reportFileName: 'RobotLogs/*/report*.html',
-            unstableThreshold: 0]);
-         archiveArtifacts artifacts: '**/*.log,**/*.gz,**/*.txt'
-    }
-  }
-}
diff --git a/jjb/pipeline/voltha/voltha-2.7/voltha-physical-build-and-tests.groovy b/jjb/pipeline/voltha/voltha-2.7/voltha-physical-build-and-tests.groovy
deleted file mode 100644
index f0b6787..0000000
--- a/jjb/pipeline/voltha/voltha-2.7/voltha-physical-build-and-tests.groovy
+++ /dev/null
@@ -1,456 +0,0 @@
-// Copyright 2019-present Open Networking Foundation
-//
-// 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.
-
-// deploy VOLTHA built from patchset on a physical pod and run e2e test
-// uses kind-voltha to deploy voltha-2.X
-
-// NOTE we are importing the library even if it's global so that it's
-// easier to change the keywords during a replay
-library identifier: 'cord-jenkins-libraries@master',
-    retriever: modernSCM([
-      $class: 'GitSCMSource',
-      remote: 'https://gerrit.opencord.org/ci-management.git'
-])
-
-// Need this so that deployment_config has global scope when it's read later
-deployment_config = null
-localDeploymentConfigFile = null
-localKindVolthaValuesFile = null
-localSadisConfigFile = null
-
-// The pipeline assumes these variables are always defined
-if ( params.manualBranch != "" ) {
-  GERRIT_EVENT_COMMENT_TEXT = ""
-  GERRIT_PROJECT = ""
-  GERRIT_BRANCH = "${params.manualBranch}"
-  GERRIT_CHANGE_NUMBER = ""
-  GERRIT_PATCHSET_NUMBER = ""
-}
-
-pipeline {
-
-  /* no label, executor is determined by JJB */
-  agent {
-    label "${params.buildNode}"
-  }
-  options {
-      timeout(time: 120, unit: 'MINUTES')
-  }
-
-  environment {
-    KUBECONFIG="$HOME/.kube/kind-config-voltha-minimal"
-    VOLTCONFIG="$HOME/.volt/config-minimal"
-    PATH="$WORKSPACE/bin:$WORKSPACE/kind-voltha/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
-    NAME="minimal"
-    FANCY=0
-    //VOL-2194 ONOS SSH and REST ports hardcoded to 30115/30120 in tests
-    ONOS_SSH_PORT=30115
-    ONOS_API_PORT=30120
-  }
-
-  stages {
-    stage ('Initialize') {
-      steps {
-        sh returnStdout: false, script: """
-        if [ "${branch}" != "master" ]; then
-          echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-          source "$WORKSPACE/kind-voltha/releases/${branch}"
-        else
-          echo "on master, using default settings for kind-voltha"
-        fi
-        test -e $WORKSPACE/kind-voltha/voltha && cd $WORKSPACE/kind-voltha && ./voltha down
-        cd $WORKSPACE
-        rm -rf $WORKSPACE/*
-        """
-        script {
-          if (env.configRepo && ! env.localConfigDir) {
-            env.localConfigDir = "$WORKSPACE"
-            sh returnStdout: false, script: "git clone -b master ${cordRepoUrl}/${configRepo}"
-          }
-          localDeploymentConfigFile = "${env.localConfigDir}/${params.deploymentConfigFile}"
-          localKindVolthaValuesFile = "${env.localConfigDir}/${params.kindVolthaValuesFile}"
-          localSadisConfigFile = "${env.localConfigDir}/${params.sadisConfigFile}"
-        }
-      }
-    }
-
-    stage('Download Code') {
-      steps {
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/kind-voltha",
-          ]],
-          branches: [[ name: "master", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "kind-voltha"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
-        ])
-        getVolthaCode([
-          branch: "${branch}",
-          gerritProject: "${gerritProject}",
-          gerritRefspec: "${gerritRefspec}",
-          volthaSystemTestsChange: "${volthaSystemTestsChange}",
-          volthaHelmChartsChange: "${volthaHelmChartsChange}",
-        ])
-      }
-    }
-
-    stage('Check config files') {
-      steps {
-        script {
-          try {
-            deployment_config = readYaml file: "${localDeploymentConfigFile}"
-          } catch (err) {
-            echo "Error reading ${localDeploymentConfigFile}"
-            throw err
-          }
-          sh returnStdout: false, script: """
-          if [ ! -e ${localKindVolthaValuesFile} ]; then echo "${localKindVolthaValuesFile} not found"; exit 1; fi
-          if [ ! -e ${localSadisConfigFile} ]; then echo "${localSadisConfigFile} not found"; exit 1; fi
-          """
-        }
-      }
-    }
-
-    stage('Build patch') {
-      steps {
-        // NOTE that the correct patch has already been checked out
-        // during the getVolthaCode step
-        buildVolthaComponent("${gerritProject}")
-      }
-    }
-
-    stage('Create KinD Cluster') {
-      steps {
-        sh returnStdout: false, script: """
-        if [ "${branch}" != "master" ]; then
-          echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-          source "$WORKSPACE/kind-voltha/releases/${branch}"
-        else
-          echo "on master, using default settings for kind-voltha"
-        fi
-        cd $WORKSPACE/kind-voltha/
-        JUST_K8S=y ./voltha up
-        """
-      }
-    }
-
-    stage('Load image in kind nodes') {
-      when {
-        expression { params.manualBranch == "" }
-      }
-      steps {
-        sh returnStdout: false, script: """
-        if [ "${branch}" != "master" ]; then
-          echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-          source "$WORKSPACE/kind-voltha/releases/${branch}"
-        else
-          echo "on master, using default settings for kind-voltha"
-        fi
-        if ! [[ "${gerritProject}" =~ ^(voltha-system-tests|kind-voltha|voltha-helm-charts)\$ ]]; then
-          docker images | grep citest
-          for image in \$(docker images -f "reference=*/*citest" --format "{{.Repository}}")
-          do
-            echo "Pushing \$image to nodes"
-            kind load docker-image \$image:citest --name voltha-\$NAME --nodes voltha-\$NAME-worker,voltha-\$NAME-worker2
-            docker rmi \$image:citest \$image:latest || true
-          done
-        fi
-        """
-      }
-    }
-
-    stage('Deploy Voltha') {
-      environment {
-        WITH_SIM_ADAPTERS="no"
-        WITH_RADIUS="yes"
-        DEPLOY_K8S="no"
-        VOLTHA_LOG_LEVEL="DEBUG"
-      }
-      steps {
-        script {
-          sh returnStdout: false, script: """
-          if [ "${branch}" != "master" ]; then
-            echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-            source "$WORKSPACE/kind-voltha/releases/${branch}"
-          else
-            echo "on master, using default settings for kind-voltha"
-          fi
-
-          export EXTRA_HELM_FLAGS+='--set log_agent.enabled=False -f ${localKindVolthaValuesFile} '
-
-          IMAGES=""
-          if [ "${gerritProject}" = "voltha-go" ]; then
-              IMAGES="rw_core ro_core "
-          elif [ "${gerritProject}" = "ofagent-py" ]; then
-              IMAGES="ofagent "
-          elif [ "${gerritProject}" = "voltha-onos" ]; then
-              IMAGES="onos "
-          elif [ "${gerritProject}" = "voltha-openolt-adapter" ]; then
-              IMAGES="adapter_open_olt "
-          elif [ "${gerritProject}" = "voltha-openonu-adapter" ]; then
-              IMAGES="adapter_open_onu "
-          elif [ "${gerritProject}" = "voltha-openonu-adapter-go" ]; then
-              IMAGES="adapter_open_onu_go "
-          elif [ "${gerritProject}" = "voltha-api-server" ]; then
-              IMAGES="afrouter afrouterd "
-          else
-              echo "No images to push"
-          fi
-
-          for I in \$IMAGES
-          do
-              EXTRA_HELM_FLAGS+="--set images.\$I.tag=citest,images.\$I.pullPolicy=Never "
-          done
-
-          if [ "${gerritProject}" = "voltha-helm-charts" ]; then
-              export CHART_PATH=$WORKSPACE/voltha-helm-charts
-              export VOLTHA_CHART=\$CHART_PATH/voltha
-              export VOLTHA_ADAPTER_OPEN_OLT_CHART=\$CHART_PATH/voltha-adapter-openolt
-              export VOLTHA_ADAPTER_OPEN_ONU_CHART=\$CHART_PATH/voltha-adapter-openonu
-              helm dep update \$VOLTHA_CHART
-              helm dep update \$VOLTHA_ADAPTER_OPEN_OLT_CHART
-              helm dep update \$VOLTHA_ADAPTER_OPEN_ONU_CHART
-          fi
-
-          cd $WORKSPACE/kind-voltha/
-          echo \$EXTRA_HELM_FLAGS
-          kail -n voltha -n default > $WORKSPACE/onos-voltha-combined.log &
-          ./voltha up
-
-          set +e
-
-          # Remove noise from voltha-core logs
-          voltctl log level set WARN read-write-core#github.com/opencord/voltha-go/db/model
-          voltctl log level set WARN read-write-core#github.com/opencord/voltha-lib-go/v3/pkg/kafka
-          # Remove noise from openolt logs
-          voltctl log level set WARN adapter-open-olt#github.com/opencord/voltha-lib-go/v3/pkg/db
-          voltctl log level set WARN adapter-open-olt#github.com/opencord/voltha-lib-go/v3/pkg/probe
-          voltctl log level set WARN adapter-open-olt#github.com/opencord/voltha-lib-go/v3/pkg/kafka
-          """
-        }
-      }
-    }
-
-    stage('Deploy Kafka Dump Chart') {
-      steps {
-        script {
-          sh returnStdout: false, script: """
-              helm repo add cord https://charts.opencord.org
-              helm repo update
-              if helm version -c --short|grep v2 -q; then
-                helm install -n voltha-kafka-dump cord/voltha-kafka-dump
-              else
-                helm install voltha-kafka-dump cord/voltha-kafka-dump
-              fi
-          """
-        }
-      }
-    }
-
-    stage('Push Tech-Profile') {
-      when {
-        expression { params.profile != "Default" }
-      }
-      steps {
-        sh returnStdout: false, script: """
-        etcd_container=\$(kubectl get pods -n voltha | grep voltha-etcd-cluster | awk 'NR==1{print \$1}')
-        kubectl cp $WORKSPACE/voltha-system-tests/tests/data/TechProfile-${profile}.json voltha/\$etcd_container:/tmp/flexpod.json
-        kubectl exec -it \$etcd_container -n voltha -- /bin/sh -c 'cat /tmp/flexpod.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/XGS-PON/64'
-        """
-      }
-    }
-
-    stage('Push Sadis-config') {
-      steps {
-        sh returnStdout: false, script: """
-        ssh-keygen -R [${deployment_config.nodes[0].ip}]:30115
-        ssh-keyscan -p 30115 -H ${deployment_config.nodes[0].ip} >> ~/.ssh/known_hosts
-        sshpass -p karaf ssh -p 30115 karaf@${deployment_config.nodes[0].ip} "log:set TRACE org.opencord.dhcpl2relay"
-        sshpass -p karaf ssh -p 30115 karaf@${deployment_config.nodes[0].ip} "log:set TRACE org.opencord.aaa"
-        sshpass -p karaf ssh -p 30115 karaf@${deployment_config.nodes[0].ip} "log:set TRACE org.opencord.olt"
-        sshpass -p karaf ssh -p 30115 karaf@${deployment_config.nodes[0].ip} "log:set DEBUG org.onosproject.net.flowobjective.impl.FlowObjectiveManager"
-        sshpass -p karaf ssh -p 30115 karaf@${deployment_config.nodes[0].ip} "log:set DEBUG org.onosproject.net.flowobjective.impl.InOrderFlowObjectiveManager"
-        curl -sSL --user karaf:karaf -X POST -H Content-Type:application/json http://${deployment_config.nodes[0].ip}:$ONOS_API_PORT/onos/v1/network/configuration --data @${localSadisConfigFile}
-        """
-      }
-    }
-
-    stage('Reinstall OLT software') {
-      when {
-        expression { params.reinstallOlt }
-      }
-      steps {
-        script {
-          deployment_config.olts.each { olt ->
-            sh returnStdout: false, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'dpkg --remove asfvolt16 && dpkg --purge asfvolt16'"
-            waitUntil {
-              olt_sw_present = sh returnStdout: true, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'dpkg --list | grep asfvolt16 | wc -l'"
-              return olt_sw_present.toInteger() == 0
-            }
-            if ( params.branch == 'voltha-2.3' ) {
-              oltDebVersion = oltDebVersionVoltha23
-            } else {
-              oltDebVersion = oltDebVersionMaster
-            }
-            sh returnStdout: false, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'dpkg --install ${oltDebVersion}'"
-            waitUntil {
-              olt_sw_present = sh returnStdout: true, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'dpkg --list | grep asfvolt16 | wc -l'"
-              return olt_sw_present.toInteger() == 1
-            }
-            if ( olt.fortygig ) {
-              // If the OLT is connected to a 40G switch interface, set the NNI port to be downgraded
-              sh returnStdout: false, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'echo port ce128 sp=40000 >> /broadcom/qax.soc ; /opt/bcm68620/svk_init.sh'"
-            }
-          }
-        }
-      }
-    }
-
-    stage('Restart OLT processes') {
-      steps {
-        script {
-          deployment_config.olts.each { olt ->
-            sh returnStdout: false, script: """
-            ssh-keyscan -H ${olt.ip} >> ~/.ssh/known_hosts
-            sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'rm -f /var/log/openolt.log; rm -f /var/log/dev_mgmt_daemon.log; reboot'
-            sleep 120
-            """
-            waitUntil {
-              onu_discovered = sh returnStdout: true, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'grep \"onu discover indication\" /var/log/openolt.log | wc -l'"
-              return onu_discovered.toInteger() > 0
-            }
-          }
-        }
-      }
-    }
-
-    stage('Run E2E Tests') {
-      environment {
-        ROBOT_CONFIG_FILE="${localDeploymentConfigFile}"
-        ROBOT_MISC_ARGS="${params.extraRobotArgs} --removekeywords wuks -d $WORKSPACE/RobotLogs -v container_log_dir:$WORKSPACE "
-        ROBOT_FILE="Voltha_PODTests.robot"
-      }
-      steps {
-        sh returnStdout: false, script: """
-        mkdir -p $WORKSPACE/RobotLogs
-
-        # If the Gerrit comment contains a line with "functional tests" then run the full
-        # functional test suite.  This covers tests tagged either 'sanity' or 'functional'.
-        # Note: Gerrit comment text will be prefixed by "Patch set n:" and a blank line
-        REGEX="functional tests"
-        if [[ "$GERRIT_EVENT_COMMENT_TEXT" =~ \$REGEX ]]; then
-          ROBOT_MISC_ARGS+="-i functional"
-        fi
-        # Likewise for dataplane tests
-        REGEX="dataplane tests"
-        if [[ "$GERRIT_EVENT_COMMENT_TEXT" =~ \$REGEX ]]; then
-          ROBOT_MISC_ARGS+="-i dataplane"
-        fi
-
-        make -C $WORKSPACE/voltha-system-tests voltha-test || true
-        """
-      }
-    }
-
-    stage('After-Test Delay') {
-      when {
-        expression { params.manualBranch == "" }
-      }
-      steps {
-        sh returnStdout: false, script: """
-        # Note: Gerrit comment text will be prefixed by "Patch set n:" and a blank line
-        REGEX="hardware test with delay\$"
-        [[ "$GERRIT_EVENT_COMMENT_TEXT" =~ \$REGEX ]] && sleep 10m || true
-        """
-      }
-    }
-  }
-
-  post {
-    always {
-      sh returnStdout: false, script: '''
-      set +e
-      cp $WORKSPACE/kind-voltha/install-minimal.log $WORKSPACE/
-      kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}" | sort | uniq
-      kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.imageID}{'\\n'}" | sort | uniq
-      kubectl get nodes -o wide
-      kubectl get pods -o wide
-      kubectl get pods -n voltha -o wide
-
-      sync
-      pkill kail || true
-
-      ## Pull out errors from log files
-      extract_errors_go() {
-        echo
-        echo "Error summary for $1:"
-        grep $1 $WORKSPACE/onos-voltha-combined.log | grep '"level":"error"' | cut -d ' ' -f 2- | jq -r '.msg'
-        echo
-      }
-
-      extract_errors_python() {
-        echo
-        echo "Error summary for $1:"
-        grep $1 $WORKSPACE/onos-voltha-combined.log | grep 'ERROR' | cut -d ' ' -f 2-
-        echo
-      }
-
-      extract_errors_go voltha-rw-core > $WORKSPACE/error-report.log
-      extract_errors_go adapter-open-olt >> $WORKSPACE/error-report.log
-      extract_errors_python adapter-open-onu >> $WORKSPACE/error-report.log
-      extract_errors_python voltha-ofagent >> $WORKSPACE/error-report.log
-
-      gzip $WORKSPACE/onos-voltha-combined.log
-
-      ## collect events, the chart should be running by now
-      kubectl get pods | grep -i voltha-kafka-dump | grep -i running
-      if [[ $? == 0 ]]; then
-         kubectl exec -it `kubectl get pods | grep -i voltha-kafka-dump | grep -i running | cut -f1 -d " "` ./voltha-dump-events.sh > $WORKSPACE/voltha-events.log
-      fi
-      '''
-      script {
-        deployment_config.olts.each { olt ->
-          sh returnStdout: false, script: """
-          until sshpass -p ${olt.pass} scp ${olt.user}@${olt.ip}:/var/log/openolt.log $WORKSPACE/openolt-${olt.ip}.log
-          do
-              echo "Fetching openolt.log log failed, retrying..."
-              sleep 10
-          done
-          sed -i 's/\\x1b\\[[0-9;]*[a-zA-Z]//g' $WORKSPACE/openolt-${olt.ip}.log  # Remove escape sequences
-          until sshpass -p ${olt.pass} scp ${olt.user}@${olt.ip}:/var/log/dev_mgmt_daemon.log $WORKSPACE/dev_mgmt_daemon-${olt.ip}.log
-          do
-              echo "Fetching dev_mgmt_daemon.log failed, retrying..."
-              sleep 10
-          done
-          sed -i 's/\\x1b\\[[0-9;]*[a-zA-Z]//g' $WORKSPACE/dev_mgmt_daemon-${olt.ip}.log  # Remove escape sequences
-          """
-        }
-      }
-      step([$class: 'RobotPublisher',
-        disableArchiveOutput: false,
-        logFileName: 'RobotLogs/log*.html',
-        otherFiles: '',
-        outputFileName: 'RobotLogs/output*.xml',
-        outputPath: '.',
-        passThreshold: 100,
-        reportFileName: 'RobotLogs/report*.html',
-        unstableThreshold: 0]);
-      archiveArtifacts artifacts: '*.log,*.gz'
-    }
-  }
-}
diff --git a/jjb/pipeline/voltha/voltha-2.7/voltha-system-test-bbsim.groovy b/jjb/pipeline/voltha/voltha-2.7/voltha-system-test-bbsim.groovy
deleted file mode 100644
index aa08ecb..0000000
--- a/jjb/pipeline/voltha/voltha-2.7/voltha-system-test-bbsim.groovy
+++ /dev/null
@@ -1,191 +0,0 @@
-// Copyright 2017-present Open Networking Foundation
-//
-// 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.
-
-// voltha-2.x e2e tests
-// uses kind-voltha to deploy voltha-2.X
-// uses bbsim to simulate OLT/ONUs
-
-
-pipeline {
-
-  /* no label, executor is determined by JJB */
-  agent {
-    label "${params.buildNode}"
-  }
-  options {
-      timeout(time: 80, unit: 'MINUTES')
-  }
-  environment {
-    KUBECONFIG="$HOME/.kube/kind-config-voltha-full"
-    VOLTCONFIG="$HOME/.volt/config-full"
-    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$WORKSPACE/kind-voltha/bin"
-    TYPE="full"
-    FANCY=0
-    WITH_SIM_ADAPTERS="n"
-    WITH_RADIUS="y"
-    WITH_BBSIM="y"
-    DEPLOY_K8S="y"
-    VOLTHA_LOG_LEVEL="DEBUG"
-    CONFIG_SADIS="external"
-    BBSIM_CFG="configs/bbsim-sadis-att.yaml"
-    ROBOT_MISC_ARGS="-d $WORKSPACE/RobotLogs"
-    NUM_OF_ETCD=3
-    SCHEDULE_ON_CONTROL_NODES="y"
-  }
-
-  stages {
-    stage('Create Kubernetes Cluster') {
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh """
-             git clone https://gerrit.opencord.org/kind-voltha
-             pushd kind-voltha/
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               echo "on master, using default settings for kind-voltha"
-             fi
-             JUST_K8S=y ./voltha up
-             popd
-             """
-         }
-      }
-    }
-
-    stage('Setup log collector') {
-      steps {
-        sh """
-           bash <( curl -sfL https://raw.githubusercontent.com/boz/kail/master/godownloader.sh) -b "$WORKSPACE/kind-voltha/bin"
-           kail -n voltha -n default > $WORKSPACE/onos-voltha-combined.log &
-           """
-      }
-    }
-
-    stage('Deploy Voltha') {
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh """
-             export EXTRA_HELM_FLAGS=""
-             if [ "${branch}" != "master" ]; then
-               echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-               source "$WORKSPACE/kind-voltha/releases/${branch}"
-             else
-               echo "on master, using default settings for kind-voltha"
-             fi
-
-             EXTRA_HELM_FLAGS+="${params.extraHelmFlags} "
-             echo \$EXTRA_HELM_FLAGS
-
-             pushd kind-voltha/
-             ./voltha up
-             popd
-             """
-           }
-      }
-    }
-
-    stage('Run E2E Tests') {
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh '''
-             rm -rf $WORKSPACE/RobotLogs; mkdir -p $WORKSPACE/RobotLogs
-             git clone -b ${branch} https://gerrit.opencord.org/voltha-system-tests
-             make ROBOT_DEBUG_LOG_OPT="-l sanity_log.html -r sanity_report.html -o sanity_output.xml" -C $WORKSPACE/voltha-system-tests ${makeTarget}
-             '''
-         }
-      }
-    }
-
-    stage('Kubernetes ETCD Scale Test') {
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh '''
-             make ROBOT_DEBUG_LOG_OPT="-l functional_log.html -r functional_report.html -o functional_output.xml" -C $WORKSPACE/voltha-system-tests system-scale-test
-             '''
-         }
-      }
-    }
-
-    stage('Kubernetes ETCD Failure Test') {
-      steps {
-        timeout(time: 10, unit: 'MINUTES') {
-          sh '''
-             make ROBOT_DEBUG_LOG_OPT="-l failure_log.html -r failure_report.html -o failure_output.xml"  -C $WORKSPACE/voltha-system-tests failure-test
-             '''
-         }
-      }
-    }
-
-  }
-
-  post {
-    always {
-      sh '''
-         set +e
-         cp $WORKSPACE/kind-voltha/install-full.log $WORKSPACE/
-         kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}" | sort | uniq
-         kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.imageID}{'\\n'}" | sort | uniq
-         kubectl get nodes -o wide
-         kubectl get pods -o wide
-         kubectl get pods -n voltha -o wide
-
-         sync
-         pkill kail || true
-
-         ## Pull out errors from log files
-         extract_errors_go() {
-           echo
-           echo "Error summary for $1:"
-           grep $1 $WORKSPACE/onos-voltha-combined.log | grep '"level":"error"' | cut -d ' ' -f 2- | jq -r '.msg'
-           echo
-         }
-
-         extract_errors_python() {
-           echo
-           echo "Error summary for $1:"
-           grep $1 $WORKSPACE/onos-voltha-combined.log | grep 'ERROR' | cut -d ' ' -f 2-
-           echo
-         }
-
-         extract_errors_go voltha-rw-core > $WORKSPACE/error-report.log
-         extract_errors_go adapter-open-olt >> $WORKSPACE/error-report.log
-         extract_errors_python adapter-open-onu >> $WORKSPACE/error-report.log
-         extract_errors_python voltha-ofagent >> $WORKSPACE/error-report.log
-
-         ## shut down kind-voltha
-         if [ "${branch}" != "master" ]; then
-           echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
-           source "$WORKSPACE/kind-voltha/releases/${branch}"
-         else
-           echo "on master, using default settings for kind-voltha"
-         fi
-         cd $WORKSPACE/kind-voltha
-	       WAIT_ON_DOWN=y ./voltha down
-
-         '''
-         step([$class: 'RobotPublisher',
-            disableArchiveOutput: false,
-            logFileName: 'RobotLogs/*log*.html',
-            otherFiles: '',
-            outputFileName: 'RobotLogs/*output*.xml',
-            outputPath: '.',
-            passThreshold: 100,
-            reportFileName: 'RobotLogs/*report*.html',
-            unstableThreshold: 0]);
-         archiveArtifacts artifacts: '*.log'
-
-    }
-  }
-}
diff --git a/jjb/pipeline/voltha/voltha-2.8/bbsim-tests.groovy b/jjb/pipeline/voltha/voltha-2.8/bbsim-tests.groovy
new file mode 100755
index 0000000..0f1002e
--- /dev/null
+++ b/jjb/pipeline/voltha/voltha-2.8/bbsim-tests.groovy
@@ -0,0 +1,272 @@
+// Copyright 2021-present Open Networking Foundation
+//
+// 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.
+
+// voltha-2.x e2e tests for openonu-go
+// uses bbsim to simulate OLT/ONUs
+
+library identifier: 'cord-jenkins-libraries@master',
+    retriever: modernSCM([
+      $class: 'GitSCMSource',
+      remote: 'https://gerrit.opencord.org/ci-management.git'
+])
+
+def clusterName = "kind-ci"
+
+def execute_test(testTarget, workflow, teardown, testSpecificHelmFlags = "") {
+  def infraNamespace = "default"
+  def volthaNamespace = "voltha"
+  def robotLogsDir = "RobotLogs"
+  stage('Cleanup') {
+    if (teardown) {
+      timeout(15) {
+        script {
+          helmTeardown(["default", infraNamespace, volthaNamespace])
+        }
+        timeout(1) {
+          sh returnStdout: false, script: '''
+          # remove orphaned port-forward from different namespaces
+          ps aux | grep port-forw | grep -v grep | awk '{print $2}' | xargs --no-run-if-empty kill -9 || true
+          '''
+        }
+      }
+    }
+  }
+  stage('Deploy Voltha') {
+    if (teardown) {
+      timeout(10) {
+        script {
+
+          sh """
+          mkdir -p $WORKSPACE/${testTarget}-components
+          _TAG=kail-startup kail -n ${infraNamespace} -n ${volthaNamespace} > $WORKSPACE/${testTarget}-components/onos-voltha-startup-combined.log &
+          """
+
+          // if we're downloading a voltha-helm-charts patch, then install from a local copy of the charts
+          def localCharts = false
+          if (gerritProject == "voltha-helm-charts" || branch != "master") {
+            localCharts = true
+          }
+
+          // NOTE temporary workaround expose ONOS node ports
+          def localHelmFlags = extraHelmFlags + " --set global.log_level=${logLevel.toUpperCase()} " +
+          " --set onos-classic.onosSshPort=30115 " +
+          " --set onos-classic.onosApiPort=30120 " +
+          " --set onos-classic.onosOfPort=31653 " +
+          " --set onos-classic.individualOpenFlowNodePorts=true " + testSpecificHelmFlags
+
+          if (gerritProject != "") {
+            localHelmFlags = "${localHelmFlags} " + getVolthaImageFlags("${gerritProject}")
+          }
+
+          volthaDeploy([
+            infraNamespace: infraNamespace,
+            volthaNamespace: volthaNamespace,
+            workflow: workflow.toLowerCase(),
+            extraHelmFlags: localHelmFlags,
+            localCharts: localCharts,
+            bbsimReplica: olts.toInteger(),
+            dockerRegistry: registry,
+            ])
+        }
+
+        // stop logging
+        sh """
+          P_IDS="\$(ps e -ww -A | grep "_TAG=kail-startup" | grep -v grep | awk '{print \$1}')"
+          if [ -n "\$P_IDS" ]; then
+            echo \$P_IDS
+            for P_ID in \$P_IDS; do
+              kill -9 \$P_ID
+            done
+          fi
+          cd $WORKSPACE/${testTarget}-components/
+          gzip -k onos-voltha-startup-combined.log
+          rm onos-voltha-startup-combined.log
+        """
+      }
+      sh """
+      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"&
+      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
+        JENKINS_NODE_COOKIE="dontKillMe" _TAG="bbsim\${i}" bash -c "while true; do kubectl port-forward --address 0.0.0.0 -n ${volthaNamespace} svc/bbsim\${i} \${bbsimDmiPortFwd}:50075; done"&
+        ((bbsimDmiPortFwd++))
+      done
+      ps aux | grep port-forward
+      """
+    }
+  }
+  stage('Run test ' + testTarget + ' on ' + workflow + ' workFlow') {
+    // start logging
+    sh """
+    mkdir -p $WORKSPACE/${testTarget}-components
+    _TAG=kail-${workflow} kail -n ${infraNamespace} -n ${volthaNamespace} > $WORKSPACE/${testTarget}-components/onos-voltha-combined.log &
+    """
+    sh """
+    mkdir -p $WORKSPACE/${robotLogsDir}/${testTarget}-robot
+    export ROBOT_MISC_ARGS="-d $WORKSPACE/${robotLogsDir}/${testTarget}-robot "
+    ROBOT_MISC_ARGS+="-v ONOS_SSH_PORT:30115 -v ONOS_REST_PORT:30120 -v INFRA_NAMESPACE:${infraNamespace}"
+    export KVSTOREPREFIX=voltha/voltha_voltha
+
+    make -C $WORKSPACE/voltha-system-tests ${testTarget} || true
+    """
+    // stop logging
+    sh """
+      P_IDS="\$(ps e -ww -A | grep "_TAG=kail-${workflow}" | grep -v grep | awk '{print \$1}')"
+      if [ -n "\$P_IDS" ]; then
+        echo \$P_IDS
+        for P_ID in \$P_IDS; do
+          kill -9 \$P_ID
+        done
+      fi
+      cd $WORKSPACE/${testTarget}-components/
+      rm onos-voltha-combined.log.gz || true
+      gzip -k onos-voltha-combined.log
+      rm onos-voltha-combined.log
+    """
+    getPodsInfo("$WORKSPACE/${testTarget}-components")
+  }
+}
+
+def collectArtifacts(exitStatus) {
+  getPodsInfo("$WORKSPACE/${exitStatus}")
+  sh """
+  kubectl logs -n voltha -l app.kubernetes.io/part-of=voltha > $WORKSPACE/${exitStatus}/voltha.log || true
+  """
+  archiveArtifacts artifacts: '**/*.log,**/*.gz,**/*.txt,**/*.html'
+  sh '''
+    sync
+    pkill kail || true
+    which voltctl
+    md5sum $(which voltctl)
+  '''
+  step([$class: 'RobotPublisher',
+    disableArchiveOutput: false,
+    logFileName: "RobotLogs/*/log*.html",
+    otherFiles: '',
+    outputFileName: "RobotLogs/*/output*.xml",
+    outputPath: '.',
+    passThreshold: 100,
+    reportFileName: "RobotLogs/*/report*.html",
+    unstableThreshold: 0,
+    onlyCritical: true]);
+}
+
+pipeline {
+
+  /* no label, executor is determined by JJB */
+  agent {
+    label "${params.buildNode}"
+  }
+  options {
+    timeout(time: "${timeout}", unit: 'MINUTES')
+  }
+  environment {
+    KUBECONFIG="$HOME/.kube/kind-${clusterName}"
+    VOLTCONFIG="$HOME/.volt/config"
+    PATH="$PATH:$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+    ROBOT_MISC_ARGS="-e PowerSwitch ${params.extraRobotArgs}"
+    DIAGS_PROFILE="VOLTHA_PROFILE"
+  }
+  stages {
+    stage('Download Code') {
+      steps {
+        getVolthaCode([
+          branch: "${branch}",
+          gerritProject: "${gerritProject}",
+          gerritRefspec: "${gerritRefspec}",
+          volthaSystemTestsChange: "${volthaSystemTestsChange}",
+          volthaHelmChartsChange: "${volthaHelmChartsChange}",
+        ])
+      }
+    }
+    stage('Build patch') {
+      // build the patch only if gerritProject is specified
+      when {
+        expression {
+          return !gerritProject.isEmpty()
+        }
+      }
+      steps {
+        // NOTE that the correct patch has already been checked out
+        // during the getVolthaCode step
+        buildVolthaComponent("${gerritProject}")
+      }
+    }
+    stage('Create K8s Cluster') {
+      steps {
+        script {
+          def clusterExists = sh returnStdout: true, script: """
+          kind get clusters | grep ${clusterName} | wc -l
+          """
+          if (clusterExists.trim() == "0") {
+            createKubernetesCluster([branch: "${branch}", nodes: 3, name: clusterName])
+          }
+        }
+      }
+    }
+    stage('Replace voltctl') {
+      // if the project is voltctl override the downloaded one with the built one
+      when {
+        expression {
+          return gerritProject == "voltctl"
+        }
+      }
+      steps{
+        sh """
+        mv `ls $WORKSPACE/voltctl/release/voltctl-*-linux-amd*` $WORKSPACE/bin/voltctl
+        chmod +x $WORKSPACE/bin/voltctl
+        """
+      }
+    }
+    stage('Load image in kind nodes') {
+      when {
+        expression {
+          return !gerritProject.isEmpty()
+        }
+      }
+      steps {
+        loadToKind()
+      }
+    }
+    stage('Parse and execute tests') {
+        steps {
+          script {
+            def tests = readYaml text: testTargets
+
+            for(int i = 0;i<tests.size();i++) {
+              def test = tests[i]
+              def target = test["target"]
+              def workflow = test["workflow"]
+              def flags = test["flags"]
+              def teardown = test["teardown"].toBoolean()
+              println "Executing test ${target} on workflow ${workflow} with extra flags ${flags}"
+              execute_test(target, workflow, teardown, flags)
+            }
+          }
+        }
+    }
+  }
+  post {
+    aborted {
+      collectArtifacts("aborted")
+    }
+    failure {
+      collectArtifacts("failed")
+    }
+    always {
+      collectArtifacts("always")
+    }
+  }
+}
diff --git a/jjb/pipeline/voltha/voltha-2.8/device-management-mock-tests.groovy b/jjb/pipeline/voltha/voltha-2.8/device-management-mock-tests.groovy
new file mode 100644
index 0000000..10263dd
--- /dev/null
+++ b/jjb/pipeline/voltha/voltha-2.8/device-management-mock-tests.groovy
@@ -0,0 +1,172 @@
+// Copyright 2017-present Open Networking Foundation
+//
+// 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.
+
+// NOTE we are importing the library even if it's global so that it's
+// easier to change the keywords during a replay
+library identifier: 'cord-jenkins-libraries@master',
+    retriever: modernSCM([
+      $class: 'GitSCMSource',
+      remote: 'https://gerrit.opencord.org/ci-management.git'
+])
+
+def localCharts = false
+
+pipeline {
+
+  /* no label, executor is determined by JJB */
+  agent {
+    label "${params.buildNode}"
+  }
+  options {
+    timeout(time: 90, unit: 'MINUTES')
+  }
+  environment {
+    KUBECONFIG="$HOME/.kube/kind-config-voltha-minimal"
+    PATH="$PATH:$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+    ROBOT_MISC_ARGS="-d $WORKSPACE/RobotLogs"
+  }
+
+  stages {
+
+    stage('Download Code') {
+      steps {
+        getVolthaCode([
+          branch: "${branch}",
+          gerritProject: "${gerritProject}",
+          gerritRefspec: "${gerritRefspec}",
+          volthaSystemTestsChange: "${volthaSystemTestsChange}",
+          volthaHelmChartsChange: "${volthaHelmChartsChange}",
+        ])
+      }
+    }
+    stage('Build Redfish Importer Image') {
+      steps {
+        sh """
+           make -C $WORKSPACE/device-management/\$1 DOCKER_REPOSITORY=opencord/ DOCKER_TAG=citest docker-build-importer
+           """
+      }
+    }
+    stage('Build demo_test Image') {
+      steps {
+        sh """
+           make -C $WORKSPACE/device-management/\$1/demo_test DOCKER_REPOSITORY=opencord/ DOCKER_TAG=citest docker-build
+           """
+      }
+    }
+    stage('Build mock-redfish-server  Image') {
+      steps {
+        sh """
+           make -C $WORKSPACE/device-management/\$1/mock-redfish-server DOCKER_REPOSITORY=opencord/ DOCKER_TAG=citest docker-build
+           """
+      }
+    }
+    stage('Create K8s Cluster') {
+      steps {
+        createKubernetesCluster([branch: "${branch}", nodes: 3])
+      }
+    }
+    stage('Load image in kind nodes') {
+      steps {
+        loadToKind()
+      }
+    }
+    stage('Deploy Voltha') {
+      steps {
+        script {
+          if (branch != "master" || volthaHelmChartsChange != "") {
+            // if we're using a release or testing changes in the charts, then use the local clone
+            localCharts = true
+          }
+        }
+        volthaDeploy([
+          workflow: "att",
+          extraHelmFlags: extraHelmFlags,
+          dockerRegistry: "mirror.registry.opennetworking.org",
+          localCharts: localCharts,
+        ])
+        // start logging
+        sh """
+        mkdir -p $WORKSPACE/att
+        _TAG=kail-att kail -n infra -n voltha -n default > $WORKSPACE/att/onos-voltha-combined.log &
+        """
+        // forward ONOS and VOLTHA ports
+        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&
+        """
+      }
+    }
+
+    stage('Run E2E Tests') {
+      steps {
+        sh '''
+           mkdir -p $WORKSPACE/RobotLogs
+
+           # tell the kubernetes script to use images tagged citest and pullPolicy:Never
+           sed -i 's/master/citest/g' $WORKSPACE/device-management/kubernetes/deploy*.yaml
+           sed -i 's/imagePullPolicy: Always/imagePullPolicy: Never/g' $WORKSPACE/device-management/kubernetes/deploy*.yaml
+           make -C $WORKSPACE/device-management functional-mock-test || true
+           '''
+      }
+    }
+  }
+
+  post {
+    always {
+      sh '''
+         set +e
+         kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}" | sort | uniq
+         kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.imageID}{'\\n'}" | sort | uniq
+         kubectl get nodes -o wide
+         kubectl get pods -o wide --all-namespaces
+
+         sync
+         pkill kail || true
+
+         ## Pull out errors from log files
+         extract_errors_go() {
+           echo
+           echo "Error summary for $1:"
+           grep $1 $WORKSPACE/att/onos-voltha-combined.log | grep '"level":"error"' | cut -d ' ' -f 2- | jq -r '.msg'
+           echo
+         }
+
+         extract_errors_python() {
+           echo
+           echo "Error summary for $1:"
+           grep $1 $WORKSPACE/att/onos-voltha-combined.log | grep 'ERROR' | cut -d ' ' -f 2-
+           echo
+         }
+
+         extract_errors_go voltha-rw-core > $WORKSPACE/error-report.log
+         extract_errors_go adapter-open-olt >> $WORKSPACE/error-report.log
+         extract_errors_python adapter-open-onu >> $WORKSPACE/error-report.log
+         extract_errors_python voltha-ofagent >> $WORKSPACE/error-report.log
+
+         gzip $WORKSPACE/att/onos-voltha-combined.log
+         '''
+         step([$class: 'RobotPublisher',
+            disableArchiveOutput: false,
+            logFileName: 'RobotLogs/log*.html',
+            otherFiles: '',
+            outputFileName: 'RobotLogs/output*.xml',
+            outputPath: '.',
+            passThreshold: 80,
+            reportFileName: 'RobotLogs/report*.html',
+            unstableThreshold: 0]);
+         archiveArtifacts artifacts: '**/*.log,**/*.gz'
+    }
+  }
+}
diff --git a/jjb/pipeline/voltha/voltha-2.8/physical-build.groovy b/jjb/pipeline/voltha/voltha-2.8/physical-build.groovy
new file mode 100644
index 0000000..f26fd4a
--- /dev/null
+++ b/jjb/pipeline/voltha/voltha-2.8/physical-build.groovy
@@ -0,0 +1,384 @@
+// Copyright 2017-present Open Networking Foundation
+//
+// 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.
+
+// used to deploy VOLTHA and configure ONOS physical PODs
+
+// NOTE we are importing the library even if it's global so that it's
+// easier to change the keywords during a replay
+library identifier: 'cord-jenkins-libraries@master',
+    retriever: modernSCM([
+      $class: 'GitSCMSource',
+      remote: 'https://gerrit.opencord.org/ci-management.git'
+])
+
+def infraNamespace = "infra"
+def volthaNamespace = "voltha"
+
+pipeline {
+
+  /* no label, executor is determined by JJB */
+  agent {
+    label "${params.buildNode}"
+  }
+  options {
+    timeout(time: 35, unit: 'MINUTES')
+  }
+  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"
+  }
+
+  stages{
+    stage('Download Code') {
+      steps {
+        getVolthaCode([
+          branch: "${branch}",
+          volthaSystemTestsChange: "${volthaSystemTestsChange}",
+          volthaHelmChartsChange: "${volthaHelmChartsChange}",
+        ])
+      }
+    }
+    stage ("Parse deployment configuration file") {
+      steps {
+        sh returnStdout: true, script: "rm -rf ${configBaseDir}"
+        sh returnStdout: true, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
+        script {
+          if ( params.workFlow == "DT" ) {
+            deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}-DT.yaml"
+          }
+          else if ( params.workFlow == "TT" )
+          {
+            deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
+          }
+          else
+          {
+            deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
+          }
+        }
+      }
+    }
+    stage('Clean up') {
+      steps {
+        timeout(15) {
+          script {
+            helmTeardown(["default", infraNamespace, volthaNamespace])
+          }
+          timeout(1) {
+            sh returnStdout: false, script: '''
+            # remove orphaned port-forward from different namespaces
+            ps aux | grep port-forw | grep -v grep | awk '{print $2}' | xargs --no-run-if-empty kill -9 || true
+            '''
+          }
+        }
+      }
+    }
+    stage('Install Voltha')  {
+      steps {
+        timeout(20) {
+          script {
+            // if we're downloading a voltha-helm-charts patch, then install from a local copy of the charts
+            def localCharts = false
+            if (volthaHelmChartsChange != "" || branch != "master") {
+              localCharts = true
+            }
+
+            // should the config file be suffixed with the workflow? see "deployment_config"
+            def localHelmFlags = "-f $WORKSPACE/${configBaseDir}/${configKubernetesDir}/voltha/${configFileName}.yml --set global.log_level=${logLevel} "
+
+            if (workFlow.toLowerCase() == "dt") {
+              localHelmFlags += " --set radius.enabled=false "
+            }
+            if (workFlow.toLowerCase() == "tt") {
+              localHelmFlags += " --set radius.enabled=false --set global.incremental_evto_update=true "
+                if (enableMultiUni.toBoolean()) {
+                    localHelmFlags += " --set voltha-adapter-openonu.adapter_open_onu.uni_port_mask=${uniPortMask} "
+                }
+            }
+
+            // NOTE temporary workaround expose ONOS node ports (pod-config needs to be updated to contain these values)
+            // and to connect the ofagent to all instances of ONOS
+            localHelmFlags = localHelmFlags + " --set onos-classic.onosSshPort=30115 " +
+            "--set onos-classic.onosApiPort=30120 " +
+            "--set onos-classic.onosOfPort=31653 " +
+            "--set onos-classic.individualOpenFlowNodePorts=true " +
+            "--set voltha.onos_classic.replicas=${params.NumOfOnos}"
+
+            if (bbsimReplicas.toInteger() != 0) {
+              localHelmFlags = localHelmFlags + " --set onu=${onuNumber},pon=${ponNumber} "
+            }
+
+            // adding user specified helm flags at the end so they'll have priority over everything else
+            localHelmFlags = localHelmFlags + " ${extraHelmFlags}"
+
+            volthaDeploy([
+              workflow: workFlow.toLowerCase(),
+              extraHelmFlags: localHelmFlags,
+              localCharts: localCharts,
+              kubeconfig: "$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf",
+              onosReplica: params.NumOfOnos,
+              atomixReplica: params.NumOfAtomix,
+              kafkaReplica: params.NumOfKafka,
+              etcdReplica: params.NumOfEtcd,
+              bbsimReplica: bbsimReplicas.toInteger(),
+              ])
+          }
+          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
+          """
+          getPodsInfo("$WORKSPACE")
+        }
+      }
+    }
+    stage('Push Tech-Profile') {
+      steps {
+        script {
+          if ( params.configurePod && params.profile != "Default" ) {
+            for(int i=0; i < deployment_config.olts.size(); i++) {
+              def tech_prof_directory = "XGS-PON"
+              // If no debian package is specified we default to GPON for the ADTRAN OLT.
+              if (!deployment_config.olts[i].containsKey("oltDebVersion") || deployment_config.olts[i].oltDebVersion.contains("asgvolt64")){
+                tech_prof_directory = "GPON"
+              }
+              timeout(1) {
+                sh returnStatus: true, script: """
+                export KUBECONFIG=$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf
+                etcd_container=\$(kubectl get pods -n ${infraNamespace} | grep etcd | awk 'NR==1{print \$1}')
+                if [[ "${workFlow}" == "TT" ]]; then
+                   if [[ "${params.enableMultiUni}" == "true" ]]; then
+                      kubectl cp -n ${infraNamespace} $WORKSPACE/voltha-system-tests/tests/data/TechProfile-TT-multi-uni-HSIA.json \$etcd_container:/tmp/hsia.json
+                      kubectl exec -n ${infraNamespace} -it \$etcd_container -- /bin/sh -c 'cat /tmp/hsia.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/${tech_prof_directory}/64'
+                      kubectl cp -n ${infraNamespace} $WORKSPACE/voltha-system-tests/tests/data/TechProfile-TT-multi-uni-VoIP.json \$etcd_container:/tmp/voip.json
+                      kubectl exec -n ${infraNamespace} -it \$etcd_container -- /bin/sh -c 'cat /tmp/voip.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/${tech_prof_directory}/65'
+                      kubectl cp -n ${infraNamespace} $WORKSPACE/voltha-system-tests/tests/data/TechProfile-TT-multi-uni-MCAST-AdditionalBW-None.json \$etcd_container:/tmp/mcast_additionalBW_none.json
+                      kubectl exec -n ${infraNamespace} -it \$etcd_container -- /bin/sh -c 'cat /tmp/mcast_additionalBW_none.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/${tech_prof_directory}/66'
+                      kubectl cp -n ${infraNamespace} $WORKSPACE/voltha-system-tests/tests/data/TechProfile-TT-multi-uni-MCAST-AdditionalBW-NA.json \$etcd_container:/tmp/mcast_additionalBW_na.json
+                      kubectl exec -n ${infraNamespace} -it \$etcd_container -- /bin/sh -c 'cat /tmp/mcast_additionalBW_na.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/${tech_prof_directory}/67'
+                   else
+                      kubectl cp -n ${infraNamespace} $WORKSPACE/voltha-system-tests/tests/data/TechProfile-TT-HSIA.json \$etcd_container:/tmp/hsia.json
+                      kubectl exec -n ${infraNamespace} -it \$etcd_container -- /bin/sh -c 'cat /tmp/hsia.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/${tech_prof_directory}/64'
+                      kubectl cp -n ${infraNamespace} $WORKSPACE/voltha-system-tests/tests/data/TechProfile-TT-VoIP.json \$etcd_container:/tmp/voip.json
+                      kubectl exec -n ${infraNamespace} -it \$etcd_container -- /bin/sh -c 'cat /tmp/voip.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/${tech_prof_directory}/65'
+                      kubectl cp -n ${infraNamespace} $WORKSPACE/voltha-system-tests/tests/data/TechProfile-TT-MCAST-AdditionalBW-None.json \$etcd_container:/tmp/mcast_additionalBW_none.json
+                      kubectl exec -n ${infraNamespace} -it \$etcd_container -- /bin/sh -c 'cat /tmp/mcast_additionalBW_none.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/${tech_prof_directory}/66'
+                      kubectl cp -n ${infraNamespace} $WORKSPACE/voltha-system-tests/tests/data/TechProfile-TT-MCAST-AdditionalBW-NA.json \$etcd_container:/tmp/mcast_additionalBW_na.json
+                      kubectl exec -n ${infraNamespace} -it \$etcd_container -- /bin/sh -c 'cat /tmp/mcast_additionalBW_na.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/${tech_prof_directory}/67'
+                   fi
+                else
+                   kubectl cp -n ${infraNamespace} $WORKSPACE/voltha-system-tests/tests/data/TechProfile-${profile}.json \$etcd_container:/tmp/flexpod.json
+                   kubectl exec -n ${infraNamespace} -it \$etcd_container -- /bin/sh -c 'cat /tmp/flexpod.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/${tech_prof_directory}/64'
+                fi
+                """
+              }
+              timeout(1) {
+                sh returnStatus: true, script: """
+                export KUBECONFIG=$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf
+                etcd_container=\$(kubectl get pods -n ${infraNamespace} | grep etcd | awk 'NR==1{print \$1}')
+                kubectl exec -n ${infraNamespace} -it \$etcd_container -- /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/voltha/technology_profiles/${tech_prof_directory}/64'
+                """
+              }
+            }
+          }
+        }
+      }
+    }
+    stage('Push MIB templates') {
+      steps {
+        sh """
+        export KUBECONFIG=$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf
+        etcd_container=\$(kubectl get pods -n ${infraNamespace} | grep etcd | awk 'NR==1{print \$1}')
+        kubectl cp -n ${infraNamespace} $WORKSPACE/voltha-system-tests/tests/data/MIB_Alpha.json \$etcd_container:/tmp/MIB_Alpha.json
+        kubectl exec -n ${infraNamespace} -it \$etcd_container -- /bin/sh -c 'cat /tmp/MIB_Alpha.json | ETCDCTL_API=3 etcdctl put service/voltha/omci_mibs/go_templates/BRCM/BVM4K00BRA0915-0083/5023_020O02414'
+        kubectl exec -n ${infraNamespace} -it \$etcd_container -- /bin/sh -c 'cat /tmp/MIB_Alpha.json | ETCDCTL_API=3 etcdctl put service/voltha/omci_mibs/templates/BRCM/BVM4K00BRA0915-0083/5023_020O02414'
+        kubectl cp -n ${infraNamespace} $WORKSPACE/voltha-system-tests/tests/data/MIB_Scom.json \$etcd_container:/tmp/MIB_Scom.json
+        kubectl exec -n ${infraNamespace} -it \$etcd_container -- /bin/sh -c 'cat /tmp/MIB_Scom.json | ETCDCTL_API=3 etcdctl put service/voltha/omci_mibs/go_templates/SCOM/Glasfaser-Modem/090140.1.0.304'
+        kubectl exec -n ${infraNamespace} -it \$etcd_container -- /bin/sh -c 'cat /tmp/MIB_Scom.json | ETCDCTL_API=3 etcdctl put service/voltha/omci_mibs/templates/SCOM/Glasfaser-Modem/090140.1.0.304'
+        """
+      }
+    }
+    stage('Push Sadis-config') {
+      steps {
+        timeout(1) {
+          sh returnStatus: true, script: """
+          if [[ "${workFlow}" == "DT" ]]; then
+            curl -sSL --user karaf:karaf -X POST -H Content-Type:application/json http://${deployment_config.nodes[0].ip}:30120/onos/v1/network/configuration --data @$WORKSPACE/voltha-system-tests/tests/data/${configFileName}-sadis-DT.json
+          elif [[ "${workFlow}" == "TT" ]]; then
+            curl -sSL --user karaf:karaf -X POST -H Content-Type:application/json http://${deployment_config.nodes[0].ip}:30120/onos/v1/network/configuration --data @$WORKSPACE/voltha-system-tests/tests/data/${configFileName}-sadis-TT.json
+          else
+            # this is the ATT case, rename the file in *-sadis-ATT.json so that we can avoid special cases and just load the file
+            curl -sSL --user karaf:karaf -X POST -H Content-Type:application/json http://${deployment_config.nodes[0].ip}:30120/onos/v1/network/configuration --data @$WORKSPACE/voltha-system-tests/tests/data/${configFileName}-sadis.json
+          fi
+          """
+        }
+      }
+    }
+    stage('Switch Configurations in ONOS') {
+      steps {
+        script {
+          if ( deployment_config.fabric_switches.size() > 0 ) {
+            timeout(1) {
+              def netcfg = "$WORKSPACE/${configBaseDir}/${configToscaDir}/voltha/${configFileName}-onos-netcfg-switch.json"
+              if (params.inBandManagement){
+                netcfg = "$WORKSPACE/${configBaseDir}/${configToscaDir}/voltha/${configFileName}-onos-netcfg-switch-inband.json"
+              }
+              sh """
+              curl -sSL --user karaf:karaf -X POST -H Content-Type:application/json http://${deployment_config.nodes[0].ip}:30120/onos/v1/network/configuration --data @${netcfg}
+              curl -sSL --user karaf:karaf -X POST http://${deployment_config.nodes[0].ip}:30120/onos/v1/applications/org.onosproject.segmentrouting/active
+              """
+            }
+            timeout(1) {
+              waitUntil {
+                sr_active_out = sh returnStatus: true, script: """
+                sshpass -p karaf ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@${deployment_config.nodes[0].ip} "log:set TRACE org.opencord.dhcpl2relay"
+                sshpass -p karaf ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@${deployment_config.nodes[0].ip} "log:set TRACE org.opencord.aaa"
+                sshpass -p karaf ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@${deployment_config.nodes[0].ip} "log:set TRACE org.opencord.olt"
+                sshpass -p karaf ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@${deployment_config.nodes[0].ip} "log:set DEBUG org.onosproject.net.flowobjective.impl.FlowObjectiveManager"
+                sshpass -p karaf ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@${deployment_config.nodes[0].ip} "log:set DEBUG org.onosproject.net.flowobjective.impl.InOrderFlowObjectiveManager"
+                curl -sSL --user karaf:karaf -X GET http://${deployment_config.nodes[0].ip}:30120/onos/v1/applications/org.onosproject.segmentrouting | jq '.state' | grep ACTIVE
+                sshpass -p karaf ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@${deployment_config.nodes[0].ip} "cfg set org.onosproject.provider.lldp.impl.LldpLinkProvider enabled false"
+                sshpass -p karaf ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@${deployment_config.nodes[0].ip} "cfg set org.onosproject.net.flow.impl.FlowRuleManager purgeOnDisconnection false"
+                sshpass -p karaf ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@${deployment_config.nodes[0].ip} "cfg set org.onosproject.net.meter.impl.MeterManager purgeOnDisconnection false"
+                """
+                return sr_active_out == 0
+              }
+            }
+            timeout(7) {
+              for(int i=0; i < deployment_config.hosts.src.size(); i++) {
+                for(int j=0; j < deployment_config.olts.size(); j++) {
+                  def aggPort = -1
+                  if(deployment_config.olts[j].serial == deployment_config.hosts.src[i].olt){
+                      aggPort = deployment_config.olts[j].aggPort
+                      if(aggPort == -1){
+                        throw new Exception("Upstream port for the olt is not configured, field aggPort is empty")
+                      }
+                      sh """
+                      sleep 30 # NOTE why are we sleeping?
+                      curl -X POST --user karaf:karaf --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{"deviceId": "${deployment_config.fabric_switches[0].device_id}", "vlanId": "${deployment_config.hosts.src[i].s_tag}", "endpoints": [${deployment_config.fabric_switches[0].bngPort},${aggPort}]}' 'http://${deployment_config.nodes[0].ip}:30120/onos/segmentrouting/xconnect'
+                      """
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    stage('Reinstall OLT software') {
+      steps {
+        script {
+          if ( params.reinstallOlt ) {
+            for(int i=0; i < deployment_config.olts.size(); i++) {
+              // NOTE what is oltDebVersion23? is that for VOLTHA-2.3? do we still need this differentiation?
+              sh returnStdout: true, script: """
+              if [[ "${branch}" != "master" ]] && [[ "${params.inBandManagement}" == "true" ]]; then
+                ssh-keyscan -H ${deployment_config.olts[i].sship} >> ~/.ssh/known_hosts
+                sshpass -p ${deployment_config.olts[i].pass} ssh -l ${deployment_config.olts[i].user} ${deployment_config.olts[i].sship} 'kill -9 `pgrep -f "[b]ash /opt/openolt/openolt_dev_mgmt_daemon_process_watchdog"` || true'
+                sshpass -p ${deployment_config.olts[i].pass} ssh -l ${deployment_config.olts[i].user} ${deployment_config.olts[i].sship} "dpkg --install ${deployment_config.olts[i].oltDebVersion23}"
+              fi
+              if [[ "${branch}" != "master" ]] && [[ "${params.inBandManagement}" == "false" ]]; then
+                ssh-keyscan -H ${deployment_config.olts[i].sship} >> ~/.ssh/known_hosts
+                sshpass -p ${deployment_config.olts[i].pass} ssh -l ${deployment_config.olts[i].user} ${deployment_config.olts[i].sship} "dpkg --install ${deployment_config.olts[i].oltDebVersion23}"
+              fi
+              if [[ "${branch}" == "master" ]] && [[ "${params.inBandManagement}" == "true" ]]; then
+                ssh-keyscan -H ${deployment_config.olts[i].sship} >> ~/.ssh/known_hosts
+                sshpass -p ${deployment_config.olts[i].pass} ssh -l ${deployment_config.olts[i].user} ${deployment_config.olts[i].sship} 'kill -9 `pgrep -f "[b]ash /opt/openolt/openolt_dev_mgmt_daemon_process_watchdog"` || true'
+                sshpass -p ${deployment_config.olts[i].pass} ssh -l ${deployment_config.olts[i].user} ${deployment_config.olts[i].sship} "dpkg --install ${deployment_config.olts[i].oltDebVersion}"
+              fi
+              if [[ "${branch}" == "master" ]] && [[ "${params.inBandManagement}" == "false" ]]; then
+                ssh-keyscan -H ${deployment_config.olts[i].sship} >> ~/.ssh/known_hosts
+                sshpass -p ${deployment_config.olts[i].pass} ssh -l ${deployment_config.olts[i].user} ${deployment_config.olts[i].sship} "dpkg --install ${deployment_config.olts[i].oltDebVersion}"
+              fi
+              sleep 10
+              """
+              timeout(5) {
+                waitUntil {
+                  olt_sw_present = sh returnStdout: true, script: """
+                  if [ "${deployment_config.olts[i].oltDebVersion}" == *"asfvolt16"* ]; then
+                    sshpass -p ${deployment_config.olts[i].pass} ssh -l ${deployment_config.olts[i].user} ${deployment_config.olts[i].sship} 'dpkg --list | grep asfvolt16 | wc -l'
+                  else
+                    sshpass -p ${deployment_config.olts[i].pass} ssh -l ${deployment_config.olts[i].user} ${deployment_config.olts[i].sship} 'dpkg --list | grep asgvolt64 | wc -l'
+                  fi
+                  if (${deployment_config.olts[i].fortygig}); then
+                    if [[ "${params.inBandManagement}" == "true" ]]; then
+                      ssh-keyscan -H ${deployment_config.olts[i].sship} >> ~/.ssh/known_hosts
+                      sshpass -p ${deployment_config.olts[i].pass} ssh -l ${deployment_config.olts[i].user} ${deployment_config.olts[i].sship} 'mkdir -p /opt/openolt/'
+                      sshpass -p ${deployment_config.olts[i].pass} ssh -l ${deployment_config.olts[i].user} ${deployment_config.olts[i].sship} 'cp /root/watchdog-script/* /opt/openolt/'
+                      sshpass -p ${deployment_config.olts[i].pass} ssh -l ${deployment_config.olts[i].user} ${deployment_config.olts[i].sship} 'cp /root/bal_cli_appl/example_user_appl /broadcom'
+                      sshpass -p ${deployment_config.olts[i].pass} ssh -l ${deployment_config.olts[i].user} ${deployment_config.olts[i].sship} 'cp in-band-startup-script/* /etc/init.d/'
+                    fi
+                  fi
+                  """
+                  return olt_sw_present.toInteger() > 0
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    stage('Restart OLT processes') {
+      steps {
+        script {
+          for(int i=0; i < deployment_config.olts.size(); i++) {
+            int waitTimerForOltUp = 360
+            if ( params.inBandManagement ) {
+              waitTimerForOltUp = 540
+            }
+            timeout(15) {
+              sh returnStdout: true, script: """
+              ssh-keyscan -H ${deployment_config.olts[i].sship} >> ~/.ssh/known_hosts
+              sshpass -p ${deployment_config.olts[i].pass} ssh -l ${deployment_config.olts[i].user} ${deployment_config.olts[i].sship} 'rm -f /var/log/openolt.log; rm -f /var/log/dev_mgmt_daemon.log; rm -f /var/log/openolt_process_watchdog.log; reboot > /dev/null &' || true
+              sleep ${waitTimerForOltUp}
+              """
+            }
+            timeout(15) {
+              waitUntil {
+                devprocess = sh returnStdout: true, script: "sshpass -p ${deployment_config.olts[i].pass} ssh -l ${deployment_config.olts[i].user} ${deployment_config.olts[i].sship} 'ps -ef | grep dev_mgmt_daemon | wc -l'"
+                return devprocess.toInteger() > 0
+              }
+            }
+            timeout(15) {
+              waitUntil {
+                openoltprocess = sh returnStdout: true, script: "sshpass -p ${deployment_config.olts[i].pass} ssh -l ${deployment_config.olts[i].user} ${deployment_config.olts[i].sship} 'ps -ef | grep openolt | wc -l'"
+                return openoltprocess.toInteger() > 0
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  post {
+    aborted {
+      getPodsInfo("$WORKSPACE/failed")
+      sh """
+      kubectl logs -n voltha -l app.kubernetes.io/part-of=voltha > $WORKSPACE/failed/voltha.log || true
+      """
+      archiveArtifacts artifacts: '**/*.log,**/*.txt'
+    }
+    failure {
+      getPodsInfo("$WORKSPACE/failed")
+      sh """
+      kubectl logs -n voltha -l app.kubernetes.io/part-of=voltha > $WORKSPACE/failed/voltha.logs || true
+      """
+      archiveArtifacts artifacts: '**/*.log,**/*.txt'
+    }
+    always {
+      archiveArtifacts artifacts: '*.txt'
+    }
+  }
+}
diff --git a/jjb/pipeline/voltha/voltha-2.7/software-upgrades.groovy b/jjb/pipeline/voltha/voltha-2.8/software-upgrades.groovy
similarity index 81%
rename from jjb/pipeline/voltha/voltha-2.7/software-upgrades.groovy
rename to jjb/pipeline/voltha/voltha-2.8/software-upgrades.groovy
index 596f25a..665ef57 100644
--- a/jjb/pipeline/voltha/voltha-2.7/software-upgrades.groovy
+++ b/jjb/pipeline/voltha/voltha-2.8/software-upgrades.groovy
@@ -23,16 +23,14 @@
 def test_software_upgrade(name) {
   stage('Deploy Voltha - '+ name) {
       def extraHelmFlags = "${extraHelmFlags} --set global.log_level=DEBUG,onu=1,pon=1 --set onos-classic.replicas=3,onos-classic.atomix.replicas=3 "
+      if ("${name}" == "onos-app-upgrade" || "${name}" == "onu-software-upgrade") {
+          extraHelmFlags = extraHelmFlags + "--set global.image_tag=master --set onos-classic.image.tag=master "
+      }
+      if ("${name}" == "voltha-component-upgrade") {
+          extraHelmFlags = extraHelmFlags + "--set images.onos_config_loader.tag=master-onos-config-loader --set onos-classic.image.tag=master "
+      }
       extraHelmFlags = extraHelmFlags + " --set onos-classic.onosSshPort=30115 --set onos-classic.onosApiPort=30120 "
-      extraHelmFlags = extraHelmFlags + """ --set voltha.services.controller[0].service=voltha-infra-onos-classic-0.voltha-infra-onos-classic-hs.infra.svc \
-      --set voltha.services.controller[0].port=6653 \
-      --set voltha.services.controller[0].address=voltha-infra-onos-classic-0.voltha-infra-onos-classic-hs.infra.svc:6653 \
-      --set voltha.services.controller[1].service=voltha-infra-onos-classic-1.voltha-infra-onos-classic-hs.infra.svc \
-      --set voltha.services.controller[1].port=6653 \
-      --set voltha.services.controller[1].address=voltha-infra-onos-classic-1.voltha-infra-onos-classic-hs.infra.svc:6653 \
-      --set voltha.services.controller[2].service=voltha-infra-onos-classic-2.voltha-infra-onos-classic-hs.infra.svc \
-      --set voltha.services.controller[2].port=6653 \
-      --set voltha.services.controller[2].address=voltha-infra-onos-classic-2.voltha-infra-onos-classic-hs.infra.svc:6653 """
+      extraHelmFlags = extraHelmFlags + " --set voltha.onos_classic.replicas=3"
       //ONOS custom image handling
       if ( onosImg.trim() != '' ) {
          String[] split;
@@ -40,11 +38,13 @@
          split = onosImg.split(':')
         extraHelmFlags = extraHelmFlags + "--set onos-classic.image.repository=" + split[0] +",onos-classic.image.tag=" + split[1] + " "
       }
-
+      def localCharts = false
+      if (branch != "master") {
+         localCharts = true
+      }
       // Currently only testing with ATT workflow
       // TODO: Support for other workflows
-      // NOTE localCharts is set to "true" so that we use the locally cloned version of the chart (set to voltha-2.7)
-      volthaDeploy([workflow: "att", extraHelmFlags: extraHelmFlags, localCharts: true])
+      volthaDeploy([workflow: "att", extraHelmFlags: extraHelmFlags, localCharts: localCharts])
       // start logging
       sh """
       rm -rf $WORKSPACE/${name} || true
@@ -109,7 +109,7 @@
           export TARGET=voltha-comp-upgrade-test
         fi
         if [[ ${name} == 'onu-software-upgrade' ]]; then
-          export ROBOT_MISC_ARGS="-d \$ROBOT_LOGS_DIR -v onu_image_name:${onuImageName.trim()} -v onu_image_url:${onuImageUrl.trim()} -v onu_image_version:${onuImageVersion.trim()} -v onu_image_crc:${onuImageCrc.trim()} -v onu_image_local_dir:${onuImageLocalDir.trim()} -e PowerSwitch"
+          export ROBOT_MISC_ARGS="-d \$ROBOT_LOGS_DIR -v image_version:${onuImageVersion.trim()} -v image_url:${onuImageUrl.trim()} -v image_vendor:${onuImageVendor.trim()} -v image_activate_on_success:${onuImageActivateOnSuccess.trim()} -v image_commit_on_success:${onuImageCommitOnSuccess.trim()} -v image_crc:${onuImageCrc.trim()} -e PowerSwitch"
           export TARGET=onu-upgrade-test
         fi
         export VOLTCONFIG=$HOME/.volt/config-minimal
@@ -187,25 +187,9 @@
         helmTeardown(['infra', 'voltha'])
       }
     }
-    stage('Install latest voltctl') {
-      steps {
-        sh """
-          mkdir -p $WORKSPACE/bin || true
-          # install voltctl
-          HOSTOS="\$(uname -s | tr "[:upper:]" "[:lower:"])"
-          HOSTARCH="\$(uname -m | tr "[:upper:]" "[:lower:"])"
-          if [ "\$HOSTARCH" == "x86_64" ]; then
-              HOSTARCH="amd64"
-          fi
-          VC_VERSION="\$(curl --fail -sSL https://api.github.com/repos/opencord/voltctl/releases/latest | jq -r .tag_name | sed -e 's/^v//g')"
-          curl -Lo $WORKSPACE/bin/voltctl https://github.com/opencord/voltctl/releases/download/v\$VC_VERSION/voltctl-\$VC_VERSION-\$HOSTOS-\$HOSTARCH
-          chmod +x $WORKSPACE/bin/voltctl
-        """
-      }
-    }
     stage('Create K8s Cluster') {
       steps {
-        createKubernetesCluster([nodes: 3])
+        createKubernetesCluster([branch: "${branch}", nodes: 3])
       }
     }
     stage('Run Test') {
@@ -237,7 +221,8 @@
          outputPath: '.',
          passThreshold: 100,
          reportFileName: 'RobotLogs/*/report*.html',
-         unstableThreshold: 0]);
+         unstableThreshold: 0,
+         onlyCritical: true]);
       archiveArtifacts artifacts: '*.log,**/*.log,**/*.gz,*.gz,*.txt,**/*.txt'
     }
   }
diff --git a/jjb/pipeline/voltha/voltha-2.8/tucson-build-and-test.groovy b/jjb/pipeline/voltha/voltha-2.8/tucson-build-and-test.groovy
new file mode 100644
index 0000000..78a0f5e
--- /dev/null
+++ b/jjb/pipeline/voltha/voltha-2.8/tucson-build-and-test.groovy
@@ -0,0 +1,364 @@
+
+// Copyright 2017-present Open Networking Foundation
+//
+// 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.
+// used to deploy VOLTHA and configure ONOS physical PODs
+// NOTE we are importing the library even if it's global so that it's
+// easier to change the keywords during a replay
+library identifier: 'cord-jenkins-libraries@master',
+    retriever: modernSCM([
+      $class: 'GitSCMSource',
+      remote: 'https://gerrit.opencord.org/ci-management.git'
+])
+def infraNamespace = "infra"
+def volthaNamespace = "voltha"
+def clusterName = "kind-ci"
+pipeline {
+  /* no label, executor is determined by JJB */
+  agent {
+    label "${params.buildNode}"
+  }
+  options {
+    timeout(time: 120, unit: 'MINUTES')
+  }
+  environment {
+    PATH="$PATH:$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
+    KUBECONFIG="$HOME/.kube/kind-${clusterName}"
+    VOLTCONFIG="$HOME/.volt/config"
+    LOG_FOLDER="$WORKSPACE/${workflow}/"
+    APPS_TO_LOG="etcd kafka onos-classic adapter-open-onu adapter-open-olt rw-core ofagent bbsim radius bbsim-sadis-server onos-config-loader"
+
+  }
+  stages{
+    stage('Download Code') {
+      steps {
+        getVolthaCode([
+          branch: "${branch}",
+          gerritProject: "${gerritProject}",
+          gerritRefspec: "${gerritRefspec}",
+          volthaSystemTestsChange: "${volthaSystemTestsChange}",
+          volthaHelmChartsChange: "${volthaHelmChartsChange}",
+        ])
+      }
+    }
+    stage ("Parse deployment configuration file") {
+      steps {
+        sh returnStdout: true, script: "rm -rf ${configBaseDir}"
+        sh returnStdout: true, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
+        script {
+
+          if (params.workflow.toUpperCase() == "TT") {
+            error("The Tucson POD does not support TT workflow at the moment")
+          }
+
+          if ( params.workflow.toUpperCase() == "DT" ) {
+            deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}-DT.yaml"
+          }
+          else if ( params.workflow.toUpperCase() == "TT" ) {
+            deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
+          }
+          else {
+            deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
+          }
+        }
+      }
+    }
+    stage('Clean up') {
+      steps {
+        timeout(15) {
+          script {
+            helmTeardown(["default", infraNamespace, volthaNamespace])
+          }
+          timeout(1) {
+            sh returnStdout: false, script: '''
+            # remove orphaned port-forward from different namespaces
+            ps aux | grep port-forw | grep -v grep | awk '{print $2}' | xargs --no-run-if-empty kill -9 || true
+            '''
+          }
+        }
+      }
+    }
+    stage('Build patch') {
+      steps {
+        // NOTE that the correct patch has already been checked out
+        // during the getVolthaCode step
+        buildVolthaComponent("${gerritProject}")
+      }
+    }
+    stage('Create K8s Cluster') {
+      steps {
+        script {
+          def clusterExists = sh returnStdout: true, script: """
+          kind get clusters | grep ${clusterName} | wc -l
+          """
+          if (clusterExists.trim() == "0") {
+            createKubernetesCluster([branch: "${branch}", nodes: 3, name: clusterName])
+          }
+        }
+      }
+    }
+    stage('Load image in kind nodes') {
+      steps {
+        loadToKind()
+      }
+    }
+    stage('Install Voltha')  {
+      steps {
+        timeout(20) {
+          script {
+            imageFlags = getVolthaImageFlags(gerritProject)
+            // if we're downloading a voltha-helm-charts patch, then install from a local copy of the charts
+            def localCharts = false
+            if (volthaHelmChartsChange != "" || gerritProject == "voltha-helm-charts" || branch != "master") {
+              localCharts = true
+            }
+            def flags = "-f $WORKSPACE/${configBaseDir}/${configKubernetesDir}/voltha/${configFileName}.yml ${imageFlags} "
+            // NOTE temporary workaround expose ONOS node ports (pod-config needs to be updated to contain these values)
+            flags = flags + "--set onos-classic.onosSshPort=30115 " +
+            "--set onos-classic.onosApiPort=30120 " +
+            "--set onos-classic.onosOfPort=31653 " +
+            "--set onos-classic.individualOpenFlowNodePorts=true " + extraHelmFlags
+            volthaDeploy([
+              workflow: workFlow.toLowerCase(),
+              extraHelmFlags: flags,
+              localCharts: localCharts,
+              kubeconfig: "$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf",
+              onosReplica: 3,
+              atomixReplica: 3,
+              kafkaReplica: 3,
+              etcdReplica: 3,
+              ])
+          }
+          // start logging
+          sh """
+          rm -rf $WORKSPACE/${workFlow}/
+          mkdir -p $WORKSPACE/${workFlow}
+          _TAG=kail-${workFlow} kail -n infra -n voltha > $WORKSPACE/${workFlow}/onos-voltha-combined.log &
+          """
+          sh returnStdout: false, script: '''
+          # start logging with kail
+
+          mkdir -p $LOG_FOLDER
+
+          list=($APPS_TO_LOG)
+          for app in "${list[@]}"
+          do
+            echo "Starting logs for: ${app}"
+            _TAG=kail-$app kail -l app=$app --since 1h > $LOG_FOLDER/$app.log&
+          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
+          """
+          getPodsInfo("$WORKSPACE")
+        }
+      }
+    }
+    stage('Deploy Kafka Dump Chart') {
+      steps {
+        script {
+          sh returnStdout: false, script: """
+              helm repo add cord https://charts.opencord.org
+              helm repo update
+              if helm version -c --short|grep v2 -q; then
+                helm install -n voltha-kafka-dump cord/voltha-kafka-dump
+              else
+                helm install voltha-kafka-dump cord/voltha-kafka-dump
+              fi
+          """
+        }
+      }
+    }
+    stage('Push Tech-Profile') {
+      when {
+        expression { params.profile != "Default" }
+      }
+      steps {
+        sh returnStdout: false, script: """
+        etcd_container=\$(kubectl get pods -n voltha | grep voltha-etcd-cluster | awk 'NR==1{print \$1}')
+        kubectl cp $WORKSPACE/voltha-system-tests/tests/data/TechProfile-${profile}.json voltha/\$etcd_container:/tmp/flexpod.json
+        kubectl exec -it \$etcd_container -n voltha -- /bin/sh -c 'cat /tmp/flexpod.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/XGS-PON/64'
+        """
+      }
+    }
+
+    stage('Push Sadis-config') {
+      steps {
+        sh returnStdout: false, script: """
+        ssh-keygen -R [${deployment_config.nodes[0].ip}]:30115
+        ssh-keyscan -p 30115 -H ${deployment_config.nodes[0].ip} >> ~/.ssh/known_hosts
+        sshpass -p karaf ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@${deployment_config.nodes[0].ip} "log:set TRACE org.opencord.dhcpl2relay"
+        sshpass -p karaf ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@${deployment_config.nodes[0].ip} "log:set TRACE org.opencord.aaa"
+        sshpass -p karaf ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@${deployment_config.nodes[0].ip} "log:set TRACE org.opencord.olt"
+        sshpass -p karaf ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@${deployment_config.nodes[0].ip} "log:set DEBUG org.onosproject.net.flowobjective.impl.FlowObjectiveManager"
+        sshpass -p karaf ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@${deployment_config.nodes[0].ip} "log:set DEBUG org.onosproject.net.flowobjective.impl.InOrderFlowObjectiveManager"
+
+        if [[ "${workFlow.toUpperCase()}" == "DT" ]]; then
+          curl -sSL --user karaf:karaf -X POST -H Content-Type:application/json http://${deployment_config.nodes[0].ip}:30120/onos/v1/network/configuration --data @$WORKSPACE/voltha-system-tests/tests/data/${configFileName}-sadis-DT.json
+        elif [[ "${workFlow.toUpperCase()}" == "TT" ]]; then
+          curl -sSL --user karaf:karaf -X POST -H Content-Type:application/json http://${deployment_config.nodes[0].ip}:30120/onos/v1/network/configuration --data @$WORKSPACE/voltha-system-tests/tests/data/${configFileName}-sadis-TT.json
+        else
+          # this is the ATT case, rename the file in *-sadis-ATT.json so that we can avoid special cases and just load the file
+          curl -sSL --user karaf:karaf -X POST -H Content-Type:application/json http://${deployment_config.nodes[0].ip}:30120/onos/v1/network/configuration --data @$WORKSPACE/voltha-system-tests/tests/data/${configFileName}-sadis.json
+        fi
+        """
+      }
+    }
+    stage('Reinstall OLT software') {
+      when {
+        expression { params.reinstallOlt }
+      }
+      steps {
+        script {
+          deployment_config.olts.each { olt ->
+            sh returnStdout: false, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'dpkg --remove asfvolt16 && dpkg --purge asfvolt16'"
+            waitUntil {
+              olt_sw_present = sh returnStdout: true, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'dpkg --list | grep asfvolt16 | wc -l'"
+              return olt_sw_present.toInteger() == 0
+            }
+            if ( params.branch == 'voltha-2.3' ) {
+              oltDebVersion = oltDebVersionVoltha23
+            } else {
+              oltDebVersion = oltDebVersionMaster
+            }
+            sh returnStdout: false, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'dpkg --install ${oltDebVersion}'"
+            waitUntil {
+              olt_sw_present = sh returnStdout: true, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'dpkg --list | grep asfvolt16 | wc -l'"
+              return olt_sw_present.toInteger() == 1
+            }
+            if ( olt.fortygig ) {
+              // If the OLT is connected to a 40G switch interface, set the NNI port to be downgraded
+              sh returnStdout: false, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'echo port ce128 sp=40000 >> /broadcom/qax.soc ; /opt/bcm68620/svk_init.sh'"
+            }
+          }
+        }
+      }
+    }
+
+    stage('Restart OLT processes') {
+      steps {
+        script {
+          deployment_config.olts.each { olt ->
+            sh returnStdout: false, script: """
+            ssh-keyscan -H ${olt.ip} >> ~/.ssh/known_hosts
+            sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'rm -f /var/log/openolt.log; rm -f /var/log/dev_mgmt_daemon.log; reboot'
+            sleep 120
+            """
+            waitUntil {
+              onu_discovered = sh returnStdout: true, script: "sshpass -p ${olt.pass} ssh -l ${olt.user} ${olt.ip} 'grep \"onu discover indication\" /var/log/openolt.log | wc -l'"
+              return onu_discovered.toInteger() > 0
+            }
+          }
+        }
+      }
+    }
+    stage('Run E2E Tests') {
+      steps {
+        script {
+          // different workflows need different make targets and different robot files
+          if ( params.workflow.toUpperCase() == "DT" ) {
+            robotConfigFile = "${configBaseDir}/${configDeploymentDir}/${configFileName}-DT.yaml"
+            robotFile = "Voltha_DT_PODTests.robot"
+            makeTarget = "voltha-dt-test"
+            robotFunctionalKeyword = "-i functionalDt"
+            robotDataplaneKeyword = "-i dataplaneDt"
+          }
+          else if ( params.workflow.toUpperCase() == "TT" ) {
+            // TODO the TT tests have diffent tags, address once/if TT is support on the Tucson POD
+            robotConfigFile = "${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
+            robotFile = "Voltha_TT_PODTests.robot"
+            makeTarget = "voltha-tt-test"
+            robotFunctionalKeyword = "-i functionalTt"
+            robotDataplaneKeyword = "-i dataplaneTt"
+          }
+          else {
+            robotConfigFile = "${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
+            robotFile = "Voltha_PODTests.robot"
+            makeTarget = "voltha-test"
+            robotFunctionalKeyword = "-i functional"
+            robotDataplaneKeyword = "-i dataplane"
+          }
+        }
+        sh returnStdout: false, script: """
+        mkdir -p $WORKSPACE/RobotLogs
+
+        export ROBOT_CONFIG_FILE="$WORKSPACE/${robotConfigFile}"
+        export ROBOT_MISC_ARGS="${params.extraRobotArgs} --removekeywords wuks -d $WORKSPACE/RobotLogs -v container_log_dir:$WORKSPACE "
+        export ROBOT_FILE="${robotFile}"
+
+        # If the Gerrit comment contains a line with "functional tests" then run the full
+        # functional test suite.  This covers tests tagged either 'sanity' or 'functional'.
+        # Note: Gerrit comment text will be prefixed by "Patch set n:" and a blank line
+        REGEX="functional tests"
+        if [[ "${gerritComment}" =~ \$REGEX ]]; then
+          ROBOT_MISC_ARGS+="${robotFunctionalKeyword} "
+        fi
+        # Likewise for dataplane tests
+        REGEX="dataplane tests"
+        if [[ "${gerritComment}" =~ \$REGEX ]]; then
+          ROBOT_MISC_ARGS+="${robotDataplaneKeyword}"
+        fi
+
+        make -C $WORKSPACE/voltha-system-tests ${makeTarget} || true
+        """
+      }
+    }
+  }
+  post {
+    always {
+      // stop logging
+      sh """
+        P_IDS="\$(ps e -ww -A | grep "_TAG=kail-${workFlow}" | grep -v grep | awk '{print \$1}')"
+        if [ -n "\$P_IDS" ]; then
+          echo \$P_IDS
+          for P_ID in \$P_IDS; do
+            kill -9 \$P_ID
+          done
+        fi
+        gzip $WORKSPACE/${workFlow}/onos-voltha-combined.log || true
+      """
+      sh '''
+      # stop the kail processes
+      list=($APPS_TO_LOG)
+      for app in "${list[@]}"
+      do
+        echo "Stopping logs for: ${app}"
+        _TAG="kail-$app"
+        P_IDS="$(ps e -ww -A | grep "_TAG=$_TAG" | grep -v grep | awk '{print $1}')"
+        if [ -n "$P_IDS" ]; then
+          echo $P_IDS
+          for P_ID in $P_IDS; do
+            kill -9 $P_ID
+          done
+        fi
+      done
+      '''
+      step([$class: 'RobotPublisher',
+        disableArchiveOutput: false,
+        logFileName: 'RobotLogs/log*.html',
+        otherFiles: '',
+        outputFileName: 'RobotLogs/output*.xml',
+        outputPath: '.',
+        passThreshold: 100,
+        reportFileName: 'RobotLogs/report*.html',
+        unstableThreshold: 0,
+        onlyCritical: true]);
+      archiveArtifacts artifacts: '**/*.txt,**/*.gz,*.gz,**/*.log'
+    }
+  }
+}
+
+// refs/changes/06/24206/5
diff --git a/jjb/pipeline/voltha/voltha-2.8/voltha-scale-multi-stack.groovy b/jjb/pipeline/voltha/voltha-2.8/voltha-scale-multi-stack.groovy
new file mode 100644
index 0000000..6d75846
--- /dev/null
+++ b/jjb/pipeline/voltha/voltha-2.8/voltha-scale-multi-stack.groovy
@@ -0,0 +1,476 @@
+// Copyright 2019-present Open Networking Foundation
+//
+// 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.
+
+// deploy VOLTHA using kind-voltha and performs a scale test
+
+// NOTE we are importing the library even if it's global so that it's
+// easier to change the keywords during a replay
+library identifier: 'cord-jenkins-libraries@master',
+    retriever: modernSCM([
+      $class: 'GitSCMSource',
+      remote: 'https://gerrit.opencord.org/ci-management.git'
+])
+
+def ofAgentConnections(numOfOnos, releaseName, namespace) {
+    def params = " "
+    numOfOnos.times {
+        params += "--set voltha.services.controller[${it}].address=${releaseName}-onos-classic-${it}.${releaseName}-onos-classic-hs.${namespace}.svc:6653 "
+    }
+    return params
+}
+
+pipeline {
+
+  /* no label, executor is determined by JJB */
+  agent {
+    label "${params.buildNode}"
+  }
+  options {
+      timeout(time: 120, unit: 'MINUTES')
+  }
+  environment {
+    JENKINS_NODE_COOKIE="dontKillMe" // do not kill processes after the build is done
+    KUBECONFIG="$HOME/.kube/config"
+    SSHPASS="karaf"
+    PATH="$PATH:$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
+
+    APPS_TO_LOG="etcd kafka onos-onos-classic adapter-open-onu adapter-open-olt rw-core ofagent bbsim radius bbsim-sadis-server"
+    LOG_FOLDER="$WORKSPACE/logs"
+  }
+
+  stages {
+    stage ('Cleanup') {
+      steps {
+        timeout(time: 11, unit: 'MINUTES') {
+          sh """
+          # remove orphaned port-forward from different namespaces
+            ps aux | grep port-forw | grep -v grep | awk '{print \$2}' | xargs --no-run-if-empty kill -9 || true
+          """
+          script {
+            def namespaces = ["infra"]
+            // FIXME we may have leftovers from more VOLTHA stacks (eg: run1 had 10 stacks, run2 had 2 stacks)
+            volthaStacks.toInteger().times {
+              namespaces += "voltha${it + 1}"
+            }
+            helmTeardown(namespaces)
+          }
+          sh returnStdout: false, script: """
+            helm repo add onf https://charts.opencord.org
+            helm repo add cord https://charts.opencord.org
+            helm repo update
+
+            # remove all port-forward from different namespaces
+            ps aux | grep port-forw | grep -v grep | awk '{print \$2}' | xargs --no-run-if-empty kill -9 || true
+          """
+        }
+      }
+    }
+    stage('Download Code') {
+      steps {
+        getVolthaCode([
+          branch: "${release}",
+          volthaSystemTestsChange: "${volthaSystemTestsChange}",
+          volthaHelmChartsChange: "${volthaHelmChartsChange}",
+        ])
+      }
+    }
+    stage('Deploy common infrastructure') {
+      // includes monitoring
+      steps {
+        sh '''
+        if [ ${withMonitoring} = true ] ; then
+          helm install -n infra nem-monitoring cord/nem-monitoring \
+          -f $HOME/voltha-scale/grafana.yaml \
+          --set prometheus.alertmanager.enabled=false,prometheus.pushgateway.enabled=false \
+          --set kpi_exporter.enabled=false,dashboards.xos=false,dashboards.onos=false,dashboards.aaa=false,dashboards.voltha=false
+        fi
+        '''
+      }
+    }
+    stage('Deploy VOLTHA infrastructure') {
+      steps {
+        sh returnStdout: false, script: '''
+
+        kubectl create configmap -n infra kube-config "--from-file=kube_config=\$KUBECONFIG"  || true
+
+        export EXTRA_HELM_FLAGS+=' '
+
+        # No persistent-volume-claims in Atomix
+        EXTRA_HELM_FLAGS+="--set onos-classic.atomix.persistence.enabled=false "
+        # disable the securityContext, this is a development cluster
+        EXTRA_HELM_FLAGS+='--set securityContext.enabled=false '
+
+        echo \$EXTRA_HELM_FLAGS
+
+        helm upgrade --install -n infra voltha-infra onf/voltha-infra \
+          -f $WORKSPACE/voltha-helm-charts/examples/${workflow}-values.yaml \
+          --set onos-classic.replicas=${onosReplicas},onos-classic.atomix.replicas=${atomixReplicas} \
+          --set radius.enabled=${withEapol} \
+          --set global.log_level=${logLevel} \
+          --set onos-classic.onosSshPort=30115 \
+          --set onos-classic.onosApiPort=30120 \
+          --set kafka.replicaCount=3,kafka.zookeeper.replicaCount=3 \
+          --set etcd.statefulset.replicaCount=3 \$EXTRA_HELM_FLAGS
+        '''
+      }
+    }
+    stage('Deploy Voltha') {
+      steps {
+        deploy_voltha_stacks(params.volthaStacks)
+      }
+    }
+    stage('Start logging') {
+      //FIXME this collects the logs all in one file for all the 10 stacks
+      steps {
+        sh returnStdout: false, script: '''
+        # start logging with kail
+
+        mkdir -p $LOG_FOLDER
+
+        list=($APPS_TO_LOG)
+        for app in "${list[@]}"
+        do
+          echo "Starting logs for: ${app}"
+          _TAG=kail-$app kail -l app=$app --since 1h > $LOG_FOLDER/$app.log&
+        done
+        '''
+      }
+    }
+    stage('Configuration') {
+      steps {
+        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 " &
+
+          # make sure the the port-forward has started before moving forward
+          sleep 5
+          """
+          sh returnStdout: false, script: """
+          # TODO this needs to be repeated per stack
+          # kubectl exec \$(kubectl get pods | grep -E "bbsim[0-9]" | awk 'NR==1{print \$1}') -- bbsimctl log ${logLevel.toLowerCase()} false
+
+          #Setting link discovery
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 cfg set org.onosproject.provider.lldp.impl.LldpLinkProvider enabled ${withLLDP}
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 cfg set org.onosproject.net.flow.impl.FlowRuleManager allowExtraneousRules true
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 cfg set org.onosproject.net.flow.impl.FlowRuleManager importExtraneousRules true
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 cfg set org.onosproject.net.flowobjective.impl.InOrderFlowObjectiveManager accumulatorMaxBatchMillis 900
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 cfg set org.onosproject.net.flowobjective.impl.InOrderFlowObjectiveManager accumulatorMaxIdleMillis 500
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 cfg set org.opencord.olt.impl.Olt provisionDelay 1000
+
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 cfg log:set ${logLevel} org.onosproject
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 cfg log:set ${logLevel} org.opencord
+
+          # Set Flows/Ports/Meters poll frequency
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 cfg set org.onosproject.provider.of.flow.impl.OpenFlowRuleProvider flowPollFrequency ${onosStatInterval}
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 cfg set org.onosproject.provider.of.device.impl.OpenFlowDeviceProvider portStatsPollFrequency ${onosStatInterval}
+
+          #SR is not needed in scale tests and not currently used by operators in production, can be disabled.
+          sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 app deactivate org.onosproject.segmentrouting
+
+
+          if [ ${withFlows} = false ]; then
+            sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 app deactivate org.opencord.olt
+          fi
+          """
+        }
+      }
+    }
+    stage('Setup Test') {
+      steps {
+        sh '''
+          mkdir -p $WORKSPACE/RobotLogs
+          cd $WORKSPACE/voltha-system-tests
+          make vst_venv
+        '''
+      }
+    }
+    stage('Run Test') {
+      steps {
+        test_voltha_stacks(params.volthaStacks)
+      }
+    }
+  }
+  post {
+    always {
+      // collect result, done in the "post" step so it's executed even in the
+      // event of a timeout in the tests
+      sh '''
+
+        # stop the kail processes
+        list=($APPS_TO_LOG)
+        for app in "${list[@]}"
+        do
+          echo "Stopping logs for: ${app}"
+          _TAG="kail-$app"
+          P_IDS="$(ps e -ww -A | grep "_TAG=$_TAG" | grep -v grep | awk '{print $1}')"
+          if [ -n "$P_IDS" ]; then
+            echo $P_IDS
+            for P_ID in $P_IDS; do
+              kill -9 $P_ID
+            done
+          fi
+        done
+      '''
+      // compressing the logs to save space on Jenkins
+      sh '''
+      cd $LOG_FOLDER
+      tar -czf logs.tar.gz *.log
+      rm *.log
+      '''
+      plot([
+        csvFileName: 'scale-test.csv',
+        csvSeries: [
+          [file: 'plots/plot-voltha-onus.txt', displayTableFlag: false, exclusionValues: '', inclusionFlag: 'OFF', url: ''],
+          [file: 'plots/plot-onos-ports.txt', displayTableFlag: false, exclusionValues: '', inclusionFlag: 'OFF', url: ''],
+          [file: 'plots/plot-voltha-flows-before.txt', displayTableFlag: false, exclusionValues: '', inclusionFlag: 'OFF', url: ''],
+          [file: 'plots/plot-voltha-openolt-flows-before.txt', displayTableFlag: false, exclusionValues: '', inclusionFlag: 'OFF', url: ''],
+          [file: 'plots/plot-onos-flows-before.txt', displayTableFlag: false, exclusionValues: '', inclusionFlag: 'OFF', url: ''],
+          [file: 'plots/plot-onos-auth.txt', displayTableFlag: false, exclusionValues: '', inclusionFlag: 'OFF', url: ''],
+          [file: 'plots/plot-voltha-flows-after.txt', displayTableFlag: false, exclusionValues: '', inclusionFlag: 'OFF', url: ''],
+          [file: 'plots/plot-voltha-openolt-flows-after.txt', displayTableFlag: false, exclusionValues: '', inclusionFlag: 'OFF', url: ''],
+          [file: 'plots/plot-onos-flows-after.txt', displayTableFlag: false, exclusionValues: '', inclusionFlag: 'OFF', url: ''],
+          [file: 'plots/plot-onos-dhcp.txt', displayTableFlag: false, exclusionValues: '', inclusionFlag: 'OFF', url: ''],
+        ],
+        group: 'Voltha-Scale-Numbers', numBuilds: '20', style: 'line', title: "Scale Test (Stacks: ${params.volthaStacks}, OLTs: ${olts}, PONs: ${pons}, ONUs: ${onus})", yaxis: 'Time (s)', useDescr: true
+      ])
+      step([$class: 'RobotPublisher',
+        disableArchiveOutput: false,
+        logFileName: 'RobotLogs/**/log.html',
+        otherFiles: '',
+        outputFileName: 'RobotLogs/**/output.xml',
+        outputPath: '.',
+        passThreshold: 100,
+        reportFileName: 'RobotLogs/**/report.html',
+        onlyCritical: true,
+        unstableThreshold: 0]);
+      // get all the logs from kubernetes PODs
+      sh returnStdout: false, script: '''
+
+        # store information on running charts
+        helm ls --all-namespaces > $LOG_FOLDER/helm-list.txt || true
+
+        # store information on the running pods
+        kubectl get pods --all-namespaces -o wide > $LOG_FOLDER/pods.txt || true
+        kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}" | sort | uniq | tee $LOG_FOLDER/pod-images.txt || true
+        kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.imageID}{'\\n'}" | sort | uniq | tee $LOG_FOLDER/pod-imagesId.txt || true
+
+        # copy the ONOS logs directly from the container to avoid the color codes
+        printf '%s\n' $(kubectl get pods -n infra -l app=onos-classic -o=jsonpath="{.items[*]['metadata.name']}") | xargs --no-run-if-empty -I# bash -c "kubectl cp #:${karafHome}/data/log/karaf.log $LOG_FOLDER/#.log" || true
+
+      '''
+      // dump all the BBSim(s) ONU information
+      script {
+        for (int i = 1; i <= params.volthaStacks.toInteger(); i++) {
+          stack_ns="voltha"+i
+          sh """
+          mkdir -p \$LOG_FOLDER/${stack_ns}
+          BBSIM_IDS=\$(kubectl -n ${stack_ns} get pods | grep bbsim | grep -v server | awk '{print \$1}')
+          IDS=(\$BBSIM_IDS)
+
+          for bbsim in "\${IDS[@]}"
+          do
+            kubectl -n ${stack_ns} exec -t \$bbsim -- bbsimctl onu list > \$LOG_FOLDER/${stack_ns}/\$bbsim-device-list.txt || true
+            kubectl -n ${stack_ns} exec -t \$bbsim -- bbsimctl service list > \$LOG_FOLDER/${stack_ns}/\$bbsim-service-list.txt || true
+            kubectl -n ${stack_ns} exec -t \$bbsim -- bbsimctl olt resources GEM_PORT > \$LOG_FOLDER/${stack_ns}/\$bbsim-flows-gem-ports.txt || true
+            kubectl -n ${stack_ns} exec -t \$bbsim -- bbsimctl olt resources ALLOC_ID > \$LOG_FOLDER/${stack_ns}/\$bbsim-flows-alloc-ids.txt || true
+            kubectl -n ${stack_ns} exec -t \$bbsim -- bbsimctl olt pons > \$LOG_FOLDER/${stack_ns}/\$bbsim-pon-resources.txt || true
+          done
+          """
+        }
+      }
+      // get ONOS debug infos
+      sh '''
+
+        sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 apps -a -s > $LOG_FOLDER/onos-apps.txt || true
+        sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 nodes > $LOG_FOLDER/onos-nodes.txt || true
+        sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 masters > $LOG_FOLDER/onos-masters.txt || true
+        sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 roles > $LOG_FOLDER/onos-roles.txt || true
+
+        sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 ports > $LOG_FOLDER/onos-ports-list.txt || true
+        sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 hosts > $LOG_FOLDER/onos-hosts-list.txt || true
+
+        if [ ${withFlows} = true ] ; then
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 volt-olts > $LOG_FOLDER/onos-olt-list.txt || true
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 flows -s > $LOG_FOLDER/onos-flows-list.txt || true
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 meters > $LOG_FOLDER/onos-meters-list.txt || true
+        fi
+
+        if [ ${provisionSubscribers} = true ]; then
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 volt-programmed-subscribers > $LOG_FOLDER/onos-programmed-subscribers.txt || true
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 volt-programmed-meters > $LOG_FOLDER/onos-programmed-meters.txt || true
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 volt-bpmeter-mappings > $LOG_FOLDER/onos-bpmeter-mappings.txt || true
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 volt-failed-subscribers > $LOG_FOLDER/onos-failed-subscribers.txt || true
+        fi
+
+        if [ ${withEapol} = true ] ; then
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 aaa-users > $LOG_FOLDER/onos-aaa-users.txt || true
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 aaa-statistics > $LOG_FOLDER/onos-aaa-statistics.txt || true
+        fi
+
+        if [ ${withDhcp} = true ] ; then
+          sshpass -e ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 8101 karaf@127.0.0.1 dhcpl2relay-allocations > $LOG_FOLDER/onos-dhcp-allocations.txt || true
+        fi
+      '''
+      // collect etcd metrics
+      sh '''
+        mkdir -p $WORKSPACE/etcd-metrics
+        curl -s -X GET -G http://10.90.0.101:31301/api/v1/query --data-urlencode 'query=etcd_debugging_mvcc_keys_total' | jq '.data' > $WORKSPACE/etcd-metrics/etcd-key-count.json || true
+        curl -s -X GET -G http://10.90.0.101:31301/api/v1/query --data-urlencode 'query=grpc_server_handled_total{grpc_service="etcdserverpb.KV"}' | jq '.data' > $WORKSPACE/etcd-metrics/etcd-rpc-count.json || true
+        curl -s -X GET -G http://10.90.0.101:31301/api/v1/query --data-urlencode 'query=etcd_debugging_mvcc_db_total_size_in_bytes' | jq '.data' > $WORKSPACE/etcd-metrics/etcd-db-size.json || true
+        curl -s -X GET -G http://10.90.0.101:31301/api/v1/query --data-urlencode 'query=etcd_disk_backend_commit_duration_seconds_sum' | jq '.data'  > $WORKSPACE/etcd-metrics/etcd-backend-write-time.json || true
+      '''
+      // get VOLTHA debug infos
+      script {
+        for (int i = 1; i <= params.volthaStacks.toInteger(); i++) {
+          stack_ns="voltha"+i
+          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 8MB 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
+            voltctl -m 8MB device list > $LOG_FOLDER/${stack_ns}/voltha-devices-list.txt || true
+
+            DEVICE_LIST=
+            printf '%s\n' \$(voltctl -m 8MB device list | grep olt | awk '{print \$1}') | xargs --no-run-if-empty -I# bash -c "voltctl-m 8MB device flows # > $LOG_FOLDER/${stack_ns}/voltha-device-flows-#.txt" || true
+            printf '%s\n' \$(voltctl -m 8MB device list | grep olt | awk '{print \$1}') | xargs --no-run-if-empty -I# bash -c "voltctl -m 8MB device port list --format 'table{{.PortNo}}\t{{.Label}}\t{{.Type}}\t{{.AdminState}}\t{{.OperStatus}}' # > $LOG_FOLDER/${stack_ns}/voltha-device-ports-#.txt" || true
+
+            printf '%s\n' \$(voltctl -m 8MB logicaldevice list -q) | xargs --no-run-if-empty -I# bash -c "voltctl -m 8MB logicaldevice flows # > $LOG_FOLDER/${stack_ns}/voltha-logicaldevice-flows-#.txt" || true
+            printf '%s\n' \$(voltctl -m 8MB logicaldevice list -q) | xargs --no-run-if-empty -I# bash -c "voltctl -m 8MB logicaldevice port list # > $LOG_FOLDER/${stack_ns}/voltha-logicaldevice-ports-#.txt" || true
+
+            # remove VOLTHA port-forward
+            ps aux | grep port-forw | grep voltha-api | grep -v grep | awk '{print \$2}' | xargs --no-run-if-empty kill -9 || true
+            """
+          } catch(e) {
+            println e
+            sh '''
+            echo "Can't get device list from voltctl"
+            '''
+          }
+        }
+      }
+      // get cpu usage by container
+      sh '''
+      if [ ${withMonitoring} = true ] ; then
+        cd $WORKSPACE/voltha-system-tests
+        source ./vst_venv/bin/activate
+        sleep 60 # we have to wait for prometheus to collect all the information
+        python tests/scale/sizing.py -o $WORKSPACE/plots || true
+      fi
+      '''
+      archiveArtifacts artifacts: 'kind-voltha/install-*.log,execution-time-*.txt,logs/**/*.txt,logs/**/*.tar.gz,RobotLogs/**/*,plots/*,etcd-metrics/*'
+    }
+  }
+}
+
+def deploy_voltha_stacks(numberOfStacks) {
+  for (int i = 1; i <= numberOfStacks.toInteger(); i++) {
+    stage("Deploy VOLTHA stack " + i) {
+      // ${logLevel}
+      def extraHelmFlags = "${extraHelmFlags} --set global.log_level=${logLevel},enablePerf=true,onu=${onus},pon=${pons} "
+      extraHelmFlags += " --set securityContext.enabled=false,atomix.persistence.enabled=false "
+
+      // FIXME having to set all of these values is annoying, is there a better solution?
+      def volthaHelmFlags = extraHelmFlags +
+        ofAgentConnections(onosReplicas.toInteger(), "voltha-infra", "infra")
+
+      def localCharts = false
+      if (volthaHelmChartsChange != "") {
+        localCharts = true
+      }
+
+      volthaStackDeploy([
+        bbsimReplica: olts.toInteger(),
+        infraNamespace: "infra",
+        volthaNamespace: "voltha${i}",
+        stackName: "voltha${i}",
+        stackId: i,
+        workflow: workflow,
+        extraHelmFlags: volthaHelmFlags,
+        localCharts: localCharts
+      ])
+    }
+  }
+}
+
+def test_voltha_stacks(numberOfStacks) {
+  for (int i = 1; i <= numberOfStacks.toInteger(); i++) {
+    stage("Test VOLTHA stack " + i) {
+      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"&
+
+
+          ROBOT_PARAMS="-v stackId:${i} \
+            -v olt:${olts} \
+            -v pon:${pons} \
+            -v onu:${onus} \
+            -v workflow:${workflow} \
+            -v withEapol:${withEapol} \
+            -v withDhcp:${withDhcp} \
+            -v withIgmp:${withIgmp} \
+            --noncritical non-critical \
+            -e igmp \
+            -e teardown "
+
+          if [ ${withEapol} = false ] ; then
+            ROBOT_PARAMS+="-e authentication "
+          fi
+
+          if [ ${withDhcp} = false ] ; then
+            ROBOT_PARAMS+="-e dhcp "
+          fi
+
+          if [ ${provisionSubscribers} = false ] ; then
+            # if we're not considering subscribers then we don't care about authentication and dhcp
+            ROBOT_PARAMS+="-e authentication -e provision -e flow-after -e dhcp "
+          fi
+
+          if [ ${withFlows} = false ] ; then
+            ROBOT_PARAMS+="-i setup -i activation "
+          fi
+
+          cd $WORKSPACE/voltha-system-tests
+          source ./vst_venv/bin/activate
+          robot -d $WORKSPACE/RobotLogs/voltha${i} \
+          \$ROBOT_PARAMS tests/scale/Voltha_Scale_Tests.robot
+
+          # collect results
+          python tests/scale/collect-result.py -r $WORKSPACE/RobotLogs/voltha${i}/output.xml -p $WORKSPACE/plots > $WORKSPACE/execution-time-voltha${i}.txt || true
+          cat $WORKSPACE/execution-time-voltha${i}.txt
+        """
+        sh """
+          # remove VOLTHA port-forward
+          ps aux | grep port-forw | grep voltha-api | grep -v grep | awk '{print \$2}' | xargs --no-run-if-empty kill -9 2>&1 > /dev/null || true
+        """
+      }
+    }
+  }
+}
diff --git a/jjb/pipeline/voltha/voltha-2.7/voltha-scale-test.groovy b/jjb/pipeline/voltha/voltha-2.8/voltha-scale-test.groovy
similarity index 83%
rename from jjb/pipeline/voltha/voltha-2.7/voltha-scale-test.groovy
rename to jjb/pipeline/voltha/voltha-2.8/voltha-scale-test.groovy
index 11bb1c4..85e32e4 100644
--- a/jjb/pipeline/voltha/voltha-2.7/voltha-scale-test.groovy
+++ b/jjb/pipeline/voltha/voltha-2.8/voltha-scale-test.groovy
@@ -14,8 +14,14 @@
 
 // deploy VOLTHA and performs a scale test
 
+library identifier: 'cord-jenkins-libraries@master',
+    retriever: modernSCM([
+      $class: 'GitSCMSource',
+      remote: 'https://gerrit.opencord.org/ci-management.git'
+])
+
 // this function generates the correct parameters for ofAgent
-// to connect to multple ONOS instances
+// to connect to multiple ONOS instances
 def ofAgentConnections(numOfOnos, releaseName, namespace) {
     def params = " "
     numOfOnos.times {
@@ -36,14 +42,14 @@
   environment {
     JENKINS_NODE_COOKIE="dontKillMe" // do not kill processes after the build is done
     KUBECONFIG="$HOME/.kube/config"
-    VOLTCONFIG="$HOME/.volt/config-2.7" // voltha-2.7 does not have ingress and still relies on port-forwarding
+    VOLTCONFIG="$HOME/.volt/config"
     SSHPASS="karaf"
     VOLTHA_LOG_LEVEL="${logLevel}"
     NUM_OF_BBSIM="${olts}"
     NUM_OF_OPENONU="${openonuAdapterReplicas}"
     NUM_OF_ONOS="${onosReplicas}"
     NUM_OF_ATOMIX="${atomixReplicas}"
-    EXTRA_HELM_FLAGS="${extraHelmFlags} " // note that the trailing space is required to separate the parameters from appends done later
+    EXTRA_HELM_FLAGS=" "
 
     APPS_TO_LOG="etcd kafka onos-classic adapter-open-onu adapter-open-olt rw-core ofagent bbsim radius bbsim-sadis-server onos-config-loader"
     LOG_FOLDER="$WORKSPACE/logs"
@@ -55,27 +61,19 @@
     stage ('Cleanup') {
       steps {
         timeout(time: 11, unit: 'MINUTES') {
+          script {
+            helmTeardown(["default"])
+          }
           sh returnStdout: false, script: '''
             helm repo add onf https://charts.opencord.org
             helm repo update
 
-            NAMESPACES="voltha1 voltha2 infra default"
-            for NS in $NAMESPACES
-            do
-                for hchart in $(helm list -n $NS -q | grep -E -v 'docker-registry|kafkacat');
-                do
-                    echo "Purging chart: ${hchart}"
-                    helm delete -n $NS "${hchart}"
-                done
-            done
-
-            # wait for pods to be removed
-            echo -ne "\nWaiting for PODs to be removed..."
-            PODS=$(kubectl get pods --all-namespaces --no-headers  | grep -v -E "kube|cattle|registry|fleet|ingress-nginx" | wc -l)
-            while [[ $PODS != 0 ]]; do
+            # remove all persistent volume claims
+            kubectl delete pvc --all-namespaces --all
+            PVCS=\$(kubectl get pvc --all-namespaces --no-headers | wc -l)
+            while [[ \$PVCS != 0 ]]; do
               sleep 5
-              echo -ne "."
-              PODS=$(kubectl get pods --all-namespaces --no-headers  | grep -v -E "kube|cattle|registry|fleet|ingress-nginx" | wc -l)
+              PVCS=\$(kubectl get pvc --all-namespaces --no-headers | wc -l)
             done
 
             # remove orphaned port-forward from different namespaces
@@ -87,54 +85,13 @@
         }
       }
     }
-    stage('Clone voltha-system-tests') {
+    stage('Download Code') {
       steps {
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/voltha-system-tests",
-            refspec: "${volthaSystemTestsChange}"
-          ]],
-          branches: [[ name: "${release}", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "voltha-system-tests"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
+        getVolthaCode([
+          branch: "${release}",
+          volthaSystemTestsChange: "${volthaSystemTestsChange}",
+          volthaHelmChartsChange: "${volthaHelmChartsChange}",
         ])
-        script {
-          sh(script:"""
-            if [ '${volthaSystemTestsChange}' != '' ] ; then
-              cd $WORKSPACE/voltha-system-tests;
-              git fetch https://gerrit.opencord.org/voltha-system-tests ${volthaSystemTestsChange} && git checkout FETCH_HEAD
-            fi
-            """)
-        }
-      }
-    }
-    stage('Clone voltha-helm-charts') {
-      steps {
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/voltha-helm-charts",
-            refspec: "${volthaHelmChartsChange}"
-          ]],
-          branches: [[ name: "${release}", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "voltha-helm-charts"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
-        ])
-        script {
-          sh(script:"""
-            if [ '${volthaHelmChartsChange}' != '' ] ; then
-              cd $WORKSPACE/voltha-helm-charts;
-              git fetch https://gerrit.opencord.org/voltha-helm-charts ${volthaHelmChartsChange} && git checkout FETCH_HEAD
-            fi
-            """)
-        }
       }
     }
     stage('Build patch') {
@@ -155,19 +112,8 @@
       }
     }
     stage('Deploy common infrastructure') {
-      // includes monitoring, kafka, etcd
       steps {
         sh '''
-        helm install kafka $HOME/teone/helm-charts/kafka --set replicaCount=${kafkaReplicas},replicas=${kafkaReplicas} --set persistence.enabled=false \
-          --set zookeeper.replicaCount=${kafkaReplicas} --set zookeeper.persistence.enabled=false \
-          --set prometheus.kafka.enabled=true,prometheus.operator.enabled=true,prometheus.jmx.enabled=true,prometheus.operator.serviceMonitor.namespace=default
-
-        # the ETCD chart use "auth" for resons different than BBsim, so strip that away
-        ETCD_FLAGS=$(echo ${extraHelmFlags} | sed -e 's/--set auth=false / /g') | sed -e 's/--set auth=true / /g'
-        ETCD_FLAGS+=" --set auth.rbac.enabled=false,persistence.enabled=false,statefulset.replicaCount=${etcdReplicas}"
-        ETCD_FLAGS+=" --set memoryMode=${inMemoryEtcdStorage} "
-        helm install --set replicas=${etcdReplicas} etcd $HOME/teone/helm-charts/etcd $ETCD_FLAGS
-
         if [ ${withMonitoring} = true ] ; then
           helm install nem-monitoring onf/nem-monitoring \
           -f $HOME/voltha-scale/grafana.yaml \
@@ -193,7 +139,7 @@
               _TAG=kail-$app kail -l app=$app --since 1h > $LOG_FOLDER/$app.log&
             done
             '''
-            sh returnStdout: false, script: """
+            def returned_flags = sh (returnStdout: true, script: """
 
               export EXTRA_HELM_FLAGS+=' '
 
@@ -248,11 +194,6 @@
               # No persistent-volume-claims in Atomix
               EXTRA_HELM_FLAGS+="--set onos-classic.atomix.persistence.enabled=false "
 
-              echo "Installing with the following extra arguments:"
-              echo $EXTRA_HELM_FLAGS
-
-
-
               # Use custom built images
 
               if [ '\$GERRIT_PROJECT' == 'voltha-go' ]; then
@@ -282,43 +223,49 @@
               if [ '\$GERRIT_PROJECT' == 'bbsim' ]; then
                 EXTRA_HELM_FLAGS+="--set images.bbsim.repository=${dockerRegistry}/voltha/bbsim,images.bbsim.tag=voltha-scale "
               fi
+              echo \$EXTRA_HELM_FLAGS
 
-              helm upgrade --install voltha-infra onf/voltha-infra \$EXTRA_HELM_FLAGS \
-                --set onos-classic.replicas=${onosReplicas},onos-classic.atomix.replicas=${atomixReplicas} \
-                --set etcd.enabled=false,kafka.enabled=false \
-                --set global.log_level=${logLevel} \
-                -f $WORKSPACE/voltha-helm-charts/examples/${workflow}-values.yaml \
-                --set onos-classic.onosSshPort=30115 --set onos-classic.onosApiPort=30120 \
-                --version 0.1.13
+            """).trim()
 
-              helm upgrade --install voltha1 onf/voltha-stack \$EXTRA_HELM_FLAGS \
-                --set global.stack_name=voltha1 \
-                --set global.voltha_infra_name=voltha-infra \
-                --set global.voltha_infra_namespace=default \
-                --set global.log_level=${logLevel} \
-                ${ofAgentConnections(onosReplicas.toInteger(), "voltha-infra", "default")} \
-                --set voltha.services.kafka.adapter.address=kafka.default.svc:9092 \
-                --set voltha.services.kafka.cluster.address=kafka.default.svc:9092 \
-                --set voltha.services.etcd.address=etcd.default.svc:2379 \
-                --set voltha-adapter-openolt.services.kafka.adapter.address=kafka.default.svc:9092 \
-                --set voltha-adapter-openolt.services.kafka.cluster.address=kafka.default.svc:9092 \
-                --set voltha-adapter-openolt.services.etcd.address=etcd.default.svc:2379 \
-                --set voltha-adapter-openonu.services.kafka.adapter.address=kafka.default.svc:9092 \
-                --set voltha-adapter-openonu.services.kafka.cluster.address=kafka.default.svc:9092 \
-                --set voltha-adapter-openonu.services.etcd.address=etcd.default.svc:2379 \
-                --version 0.1.17
+            def extraHelmFlags = returned_flags
+            // The added space before params.extraHelmFlags is required due to the .trim() above
+            def infraHelmFlags =
+              " --set global.log_level=${logLevel} " +
+              "--set onos-classic.onosSshPort=30115 " +
+              "--set onos-classic.onosApiPort=30120 " +
+              extraHelmFlags + " " + params.extraHelmFlags
 
+            println "Passing the following parameters to the VOLTHA infra deploy: ${infraHelmFlags}."
 
-              for i in {0..${olts.toInteger() - 1}}; do
-                stackId=1
-                helm upgrade --install bbsim\$i onf/bbsim \$EXTRA_HELM_FLAGS \
-                  --set olt_id="\${stackId}\${i}" \
-                  --set onu=${onus},pon=${pons} \
-                  --set global.log_level=${logLevel.toLowerCase()} \
-                  -f $WORKSPACE/voltha-helm-charts/examples/${workflow}-values.yaml \
-                  --version 4.2.0
-              done
-            """
+            def localCharts = false
+            if (volthaHelmChartsChange != "" || branch != "master") {
+              localCharts = true
+            }
+
+            volthaInfraDeploy([
+              workflow: workflow,
+              infraNamespace: "default",
+              extraHelmFlags: infraHelmFlags,
+              localCharts: localCharts,
+              onosReplica: onosReplicas,
+              atomixReplica: atomixReplicas,
+              kafkaReplica: kafkaReplicas,
+              etcdReplica: etcdReplicas,
+            ])
+
+            stackHelmFlags = " --set onu=${onus},pon=${pons} --set global.log_level=${logLevel.toLowerCase()} "
+            stackHelmFlags += " --set voltha.ingress.enabled=true --set voltha.ingress.enableVirtualHosts=true --set voltha.fullHostnameOverride=voltha.scale1.dev "
+            stackHelmFlags += extraHelmFlags + " " + params.extraHelmFlags
+
+            volthaStackDeploy([
+              bbsimReplica: olts.toInteger(),
+              infraNamespace: "default",
+              volthaNamespace: "default",
+              stackName: "voltha1", // TODO support custom charts
+              workflow: workflow,
+              extraHelmFlags: stackHelmFlags,
+              localCharts: localCharts,
+            ])
             sh """
               set +x
 
@@ -365,24 +312,31 @@
           # sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 log:set DEBUG org.onosproject.mcast
           # sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 log:set DEBUG org.opencord.igmpproxy
           # sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 log:set DEBUG org.opencord.olt
+          # sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 log:set DEBUG org.onosproject.net.flowobjective.impl.FlowObjectiveManager
 
           kubectl exec \$(kubectl get pods | grep -E "bbsim[0-9]" | awk 'NR==1{print \$1}') -- bbsimctl log ${logLevel.toLowerCase()} false
 
-          # Set Flows/Ports/Meters poll frequency
+          # Set Flows/Ports/Meters/Groups poll frequency
           sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 cfg set org.onosproject.provider.of.flow.impl.OpenFlowRuleProvider flowPollFrequency ${onosStatInterval}
           sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 cfg set org.onosproject.provider.of.device.impl.OpenFlowDeviceProvider portStatsPollFrequency ${onosStatInterval}
+          sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 cfg set org.onosproject.provider.of.group.impl.OpenFlowGroupProvider groupPollInterval ${onosGroupInterval}
+          sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 cfg set org.onosproject.net.flowobjective.impl.FlowObjectiveManager numThreads ${flowObjWorkerThreads}
+          sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 cfg set org.onosproject.net.flowobjective.impl.InOrderFlowObjectiveManager objectiveTimeoutMs 300000
+
+          #SR is not needed in scale tests and not currently used by operators in production, can be disabled.
+          sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 app deactivate org.onosproject.segmentrouting
 
           if [ ${withFlows} = false ]; then
             sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 app deactivate org.opencord.olt
           fi
 
           if [ '${workflow}' = 'tt' ]; then
-            etcd_container=\$(kubectl get pods --all-namespaces | grep etcd | awk 'NR==1{print \$2}')
+            etcd_container=\$(kubectl get pods --all-namespaces | grep etcd-0 | awk 'NR==1{print \$2}')
             kubectl cp $WORKSPACE/voltha-system-tests/tests/data/TechProfile-TT-HSIA.json \$etcd_container:/tmp/hsia.json
             put_result=\$(kubectl exec -it \$etcd_container -- /bin/sh -c 'cat /tmp/hsia.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/${tech_prof_directory}/64')
             kubectl cp $WORKSPACE/voltha-system-tests/tests/data/TechProfile-TT-VoIP.json \$etcd_container:/tmp/voip.json
             put_result=\$(kubectl exec -it \$etcd_container -- /bin/sh -c 'cat /tmp/voip.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/${tech_prof_directory}/65')
-            kubectl cp $WORKSPACE/voltha-system-tests/tests/data/TechProfile-TT-MCAST.json \$etcd_container:/tmp/mcast.json
+            kubectl cp $WORKSPACE/voltha-system-tests/tests/data/TechProfile-TT-MCAST-AdditionalBW-NA.json \$etcd_container:/tmp/mcast.json
             put_result=\$(kubectl exec -it \$etcd_container -- /bin/sh -c 'cat /tmp/mcast.json | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/${tech_prof_directory}/66')
           fi
 
@@ -423,7 +377,7 @@
         sh """
         # load MIB template
         wget https://raw.githubusercontent.com/opencord/voltha-openonu-adapter-go/master/templates/BBSM-12345123451234512345-00000000000001-v1.json
-        cat BBSM-12345123451234512345-00000000000001-v1.json | kubectl exec -it \$(kubectl get pods |grep etcd | awk 'NR==1{print \$1}') -- etcdctl put service/voltha/omci_mibs/go_templates/BBSM/12345123451234512345/00000000000001
+        cat BBSM-12345123451234512345-00000000000001-v1.json | kubectl exec -it \$(kubectl get pods |grep etcd-0 | awk 'NR==1{print \$1}') -- etcdctl put service/voltha/omci_mibs/go_templates/BBSM/12345123451234512345/00000000000001
         """
       }
     }
@@ -477,12 +431,12 @@
               -v olt:${olts} \
               -v pon:${pons} \
               -v onu:${onus} \
+              -v ONOS_SSH_PORT:30115 \
+              -v ONOS_REST_PORT:30120 \
               -v workflow:${workflow} \
               -v withEapol:${withEapol} \
               -v withDhcp:${withDhcp} \
               -v withIgmp:${withIgmp} \
-              -v ONOS_SSH_PORT:30115 \
-              -v ONOS_REST_PORT:30120 \
               --noncritical non-critical \
               -e igmp -e teardown "
 
@@ -521,6 +475,9 @@
         }
       }
       steps {
+        sh returnStdout: false, script: """
+          # sshpass -e ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 30115 karaf@127.0.0.1 log:set DEBUG org.onosproject.store.group.impl
+        """
         sh '''
           set +e
           mkdir -p $ROBOT_LOGS_DIR
@@ -537,6 +494,8 @@
               -v withEapol:${withEapol} \
               -v withDhcp:${withDhcp} \
               -v withIgmp:${withIgmp} \
+              -v ONOS_SSH_PORT:30115 \
+              -v ONOS_REST_PORT:30120 \
               --noncritical non-critical \
               -i igmp \
               -e setup -e activation -e flow-before \
@@ -610,7 +569,7 @@
         fi
 
         cd voltha-system-tests
-        source ./vst_venv/bin/activate
+        source ./vst_venv/bin/activate || true
         python tests/scale/collect-result.py -r $WORKSPACE/RobotLogs/output.xml -p $WORKSPACE/plots > $WORKSPACE/execution-time.txt || true
         cat $WORKSPACE/execution-time.txt
       '''
@@ -650,6 +609,7 @@
         outputPath: 'RobotLogs',
         passThreshold: 100,
         reportFileName: '**/report*.html',
+        onlyCritical: true,
         unstableThreshold: 0]);
       // get all the logs from kubernetes PODs
       sh returnStdout: false, script: '''
@@ -666,8 +626,13 @@
         printf '%s\n' $(kubectl get pods -l app=onos-classic -o=jsonpath="{.items[*]['metadata.name']}") | xargs --no-run-if-empty -I# bash -c "kubectl cp #:${karafHome}/data/log/karaf.log $LOG_FOLDER/#.log" || true
 
         # get ONOS cfg from the 3 nodes
-        printf '%s\n' $(kubectl get pods -l app=onos-classic -o=jsonpath="{.items[*]['metadata.name']}") | xargs --no-run-if-empty -I# bash -c "kubectl exec -it # -- ${karafHome}/bin/client cfg get > $LOG_FOLDER/#.cfg" || true
+        # kubectl exec -t voltha-infra-onos-classic-0 -- sh /root/onos/apache-karaf-4.2.9/bin/client cfg get > ~/voltha-infra-onos-classic-0-cfg.txt || true
+        # kubectl exec -t voltha-infra-onos-classic-1 -- sh /root/onos/apache-karaf-4.2.9/bin/client cfg get > ~/voltha-infra-onos-classic-1-cfg.txt || true
+        # kubectl exec -t voltha-infra-onos-classic-2 -- sh /root/onos/apache-karaf-4.2.9/bin/client cfg get > ~/voltha-infra-onos-classic-2-cfg.txt || true
 
+        # kubectl exec -t voltha-infra-onos-classic-0 -- sh /root/onos/apache-karaf-4.2.9/bin/client obj-next-ids > ~/voltha-infra-onos-classic-0-next-objs.txt || true
+        # kubectl exec -t voltha-infra-onos-classic-1 -- sh /root/onos/apache-karaf-4.2.9/bin/client obj-next-ids > ~/voltha-infra-onos-classic-1-next-objs.txt || true
+        # kubectl exec -t voltha-infra-onos-classic-2 -- sh /root/onos/apache-karaf-4.2.9/bin/client obj-next-ids > ~/voltha-infra-onos-classic-2-next-objs.txt || true
 
         # get radius logs out of the container
         kubectl cp $(kubectl get pods -l app=radius --no-headers  | awk '{print $1}'):/var/log/freeradius/radius.log $LOG_FOLDER/radius.log || true
@@ -751,6 +716,10 @@
         curl -s -X GET -G http://10.90.0.101:31301/api/v1/query --data-urlencode 'query=etcd_disk_backend_commit_duration_seconds_bucket' | jq '.data'  > $WORKSPACE/etcd-metrics/etcd-backend-write-time-bucket.json || true
         curl -s -X GET -G http://10.90.0.101:31301/api/v1/query --data-urlencode 'query=etcd_disk_wal_fsync_duration_seconds_bucket' | jq '.data'  > $WORKSPACE/etcd-metrics/etcd-wal-fsync-time-bucket.json || true
         curl -s -X GET -G http://10.90.0.101:31301/api/v1/query --data-urlencode 'query=etcd_network_peer_round_trip_time_seconds_bucket' | jq '.data'  > $WORKSPACE/etcd-metrics/etcd-network-peer-round-trip-time-seconds.json || true
+        etcd_namespace=\$(kubectl get pods --all-namespaces | grep etcd-0 | awk 'NR==1{print \$1}')
+        etcd_container=\$(kubectl get pods --all-namespaces | grep etcd-0 | awk 'NR==1{print \$2}')
+        kubectl exec -it -n  \$etcd_namespace \$etcd_container -- etcdctl defrag --cluster || true
+        kubectl exec -it -n  \$etcd_namespace \$etcd_container -- etcdctl endpoint status -w table > $WORKSPACE/etcd-metrics/etcd-status-table.txt || true
 
       '''
       // get VOLTHA debug infos
@@ -778,7 +747,7 @@
       sh '''
       if [ ${withMonitoring} = true ] ; then
         cd $WORKSPACE/voltha-system-tests
-        source ./vst_venv/bin/activate
+        source ./vst_venv/bin/activate || true
         sleep 60 # we have to wait for prometheus to collect all the information
         python tests/scale/sizing.py -o $WORKSPACE/plots || true
       fi
@@ -790,8 +759,6 @@
 
 def start_port_forward(olts) {
   sh """
-  daemonize -E JENKINS_NODE_COOKIE="dontKillMe" /usr/local/bin/kubectl port-forward --address 0.0.0.0 -n default svc/voltha1-voltha-api 55555:55555
-
   bbsimRestPortFwd=50071
   for i in {0..${olts.toInteger() - 1}}; do
     daemonize -E JENKINS_NODE_COOKIE="dontKillMe" /usr/local/bin/kubectl port-forward --address 0.0.0.0 -n default svc/bbsim\${i} \${bbsimRestPortFwd}:50071
diff --git a/jjb/software-upgrades.yaml b/jjb/software-upgrades.yaml
index 7deb46f..8e809b1 100644
--- a/jjb/software-upgrades.yaml
+++ b/jjb/software-upgrades.yaml
@@ -11,24 +11,24 @@
           pipeline-script: 'voltha/master/software-upgrades.groovy'
           build-node: 'ubuntu18.04-basebuild-8c-15g'
           code-branch: 'master'
-          aaa-version: '2.4.0.SNAPSHOT'
-          aaa-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/aaa-app/2.4.0-SNAPSHOT/aaa-app-2.4.0-20210604.083415-3.oar'
-          olt-version: '4.5.0.SNAPSHOT'
-          olt-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/olt-app/4.5.0-SNAPSHOT/olt-app-4.5.0-20210701.210511-9.oar'
-          dhcpl2relay-version: '2.5.0.SNAPSHOT'
-          dhcpl2relay-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/dhcpl2relay-app/2.5.0-SNAPSHOT/dhcpl2relay-app-2.5.0-20210621.141815-7.oar'
-          igmpproxy-version: '2.3.0.SNAPSHOT'
-          igmpproxy-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/onos-app-igmpproxy-app/2.3.0-SNAPSHOT/onos-app-igmpproxy-app-2.3.0-20210604.083403-4.oar'
-          sadis-version: '5.4.0.SNAPSHOT'
-          sadis-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/sadis-app/5.4.0-SNAPSHOT/sadis-app-5.4.0-20210625.184654-7.oar'
-          mcast-version: '2.4.0.SNAPSHOT'
-          mcast-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/mcast-app/2.4.0-SNAPSHOT/mcast-app-2.4.0-20210604.083722-5.oar'
-          kafka-version: '2.7.0.SNAPSHOT'
-          kafka-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/kafka/2.7.0-SNAPSHOT/kafka-2.7.0-20210604.093616-4.oar'
-          adapter-open-olt-image: 'voltha/voltha-openolt-adapter:3.5.0'
-          adapter-open-onu-image: 'voltha/voltha-openonu-adapter-go:1.3.1'
-          rw-core-image: 'voltha/voltha-rw-core:2.9.2'
-          ofagent-image: 'voltha/voltha-ofagent-go:1.6.3'
+          aaa-version: '2.4.0'
+          aaa-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/aaa-app/2.4.0/aaa-app-2.4.0.oar'
+          olt-version: '4.5.0'
+          olt-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/olt-app/4.5.0/olt-app-4.5.0.oar'
+          dhcpl2relay-version: '2.5.0'
+          dhcpl2relay-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/dhcpl2relay-app/2.5.0/dhcpl2relay-app-2.5.0.oar'
+          igmpproxy-version: '2.3.0'
+          igmpproxy-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/onos-app-igmpproxy-app/2.3.0/onos-app-igmpproxy-app-2.3.0.oar'
+          sadis-version: '5.4.0'
+          sadis-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/sadis-app/5.4.0/sadis-app-5.4.0.oar'
+          mcast-version: '2.4.0'
+          mcast-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/mcast-app/2.4.0/mcast-app-2.4.0.oar'
+          kafka-version: '2.7.0'
+          kafka-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/kafka/2.7.0/kafka-2.7.0.oar'
+          adapter-open-olt-image: 'voltha/voltha-openolt-adapter:3.5.1'
+          adapter-open-onu-image: 'voltha/voltha-openonu-adapter-go:1.3.2'
+          rw-core-image: 'voltha/voltha-rw-core:2.9.3'
+          ofagent-image: 'voltha/voltha-ofagent-go:1.6.5'
           onu-image-version: 'BBSM_IMG_00002'
           onu-image-url: 'http://bbsim0:50074/images/software-image.img'
           onu-image-vendor: 'BBSM'
@@ -37,221 +37,38 @@
           onu-image-crc: '0'
           time-trigger: "H H/23 * * *"
 
-      - 'software-upgrades-test-legacy':
-          name: 'periodic-software-upgrade-test-bbsim-2.7'
-          pipeline-script: 'voltha/voltha-2.7/software-upgrades.groovy'
+      - 'software-upgrades-test':
+          name: 'periodic-software-upgrade-test-bbsim-2.8'
+          pipeline-script: 'voltha/voltha-2.8/software-upgrades.groovy'
           build-node: 'ubuntu18.04-basebuild-8c-15g'
-          code-branch: 'voltha-2.7'
-          aaa-version: '2.3.0'
-          aaa-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/aaa-app/2.3.0/aaa-app-2.3.0.oar'
-          olt-version: '4.4.0'
-          olt-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/olt-app/4.4.0/olt-app-4.4.0.oar'
-          dhcpl2relay-version: '2.4.0'
-          dhcpl2relay-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/dhcpl2relay-app/2.4.0/dhcpl2relay-app-2.4.0.oar'
-          igmpproxy-version: '2.2.0'
-          igmpproxy-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/onos-app-igmpproxy-app/2.2.0/onos-app-igmpproxy-app-2.2.0.oar'
-          sadis-version: '5.3.0'
-          sadis-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/sadis-app/5.3.0/sadis-app-5.3.0.oar'
-          mcast-version: '2.3.2'
-          mcast-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/mcast-app/2.3.2/mcast-app-2.3.2.oar'
-          kafka-version: '2.6.0'
-          kafka-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/kafka/2.6.0/kafka-2.6.0.oar'
-          adapter-open-olt-image: 'voltha/voltha-openolt-adapter:3.1.8'
-          adapter-open-onu-image: 'voltha/voltha-openonu-adapter-go:1.2.14'
-          rw-core-image: 'voltha/voltha-rw-core:2.7.0'
-          ofagent-image: 'voltha/voltha-ofagent-go:1.5.2'
-          onu-image-name: 'software-image.img'
-          onu-image-url: 'http://bbsim0:50074/images'
-          onu-image-version: 'v1.0.0'
+          code-branch: 'voltha-2.8'
+          aaa-version: '2.4.0'
+          aaa-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/aaa-app/2.4.0/aaa-app-2.4.0.oar'
+          olt-version: '4.5.0'
+          olt-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/olt-app/4.5.0/olt-app-4.5.0.oar'
+          dhcpl2relay-version: '2.5.0'
+          dhcpl2relay-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/dhcpl2relay-app/2.5.0/dhcpl2relay-app-2.5.0.oar'
+          igmpproxy-version: '2.3.0'
+          igmpproxy-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/onos-app-igmpproxy-app/2.3.0/onos-app-igmpproxy-app-2.3.0.oar'
+          sadis-version: '5.4.0'
+          sadis-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/sadis-app/5.4.0/sadis-app-5.4.0.oar'
+          mcast-version: '2.4.0'
+          mcast-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/mcast-app/2.4.0/mcast-app-2.4.0.oar'
+          kafka-version: '2.7.0'
+          kafka-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/kafka/2.7.0/kafka-2.7.0.oar'
+          adapter-open-olt-image: 'voltha/voltha-openolt-adapter:3.5.1'
+          adapter-open-onu-image: 'voltha/voltha-openonu-adapter-go:1.3.2'
+          rw-core-image: 'voltha/voltha-rw-core:2.9.3'
+          ofagent-image: 'voltha/voltha-ofagent-go:1.6.5'
+          onu-image-version: 'BBSM_IMG_00002'
+          onu-image-url: 'http://bbsim0:50074/images/software-image.img'
+          onu-image-vendor: 'BBSM'
+          onu-image-activate-on-success: 'false'
+          onu-image-commit-on-success: 'false'
           onu-image-crc: '0'
-          onu-image-local-dir: '/tmp'
           time-trigger: "H H/23 * * *"
 
 - job-template:
-    id: 'software-upgrades-test-legacy'
-    name: '{name}'
-    sandbox: true
-    volthaSystemTestsChange: ''
-    volthaHelmChartsChange: ''
-    kindVolthaChange: ''
-
-    description: |
-      <!-- Managed by Jenkins Job Builder -->
-      Created by {id} job-template from ci-management/jjb/software-upgrades.yaml  <br /><br />
-      E2E Validation for Voltha 2.X
-    properties:
-      - cord-infra-properties:
-          build-days-to-keep: '{build-days-to-keep}'
-          artifact-num-to-keep: '{artifact-num-to-keep}'
-
-    wrappers:
-      - lf-infra-wrappers:
-          build-timeout: '{build-timeout}'
-          jenkins-ssh-credential: '{jenkins-ssh-credential}'
-
-    parameters:
-      - string:
-          name: buildNode
-          default: '{build-node}'
-          description: 'Name of the Jenkins node to run the job on'
-
-      - string:
-          name: extraHelmFlags
-          default: ''
-          description: 'Helm flags to pass to every helm install command'
-
-      - string:
-          name: volthaSystemTestsChange
-          default: ''
-          description: 'Download a change for gerrit in the voltha-system-tests repo, example value: "refs/changes/79/18779/13"'
-
-      - string:
-          name: volthaHelmChartsChange
-          default: ''
-          description: 'Download a change for gerrit in the voltha-helm-charts repo, example value: "refs/changes/79/18779/13"'
-
-      - string:
-          name: branch
-          default: '{code-branch}'
-          description: 'Name of the branch to use'
-
-      # deprecated params (not used in master, remove after 2.6 support is dropped)
-      - string:
-          name: kindVolthaChange
-          default: ''
-          description: 'Download a change for gerrit in the kind-voltha repo, example value: "refs/changes/32/19132/1"'
-
-      - string:
-          name: onosImg
-          default: ''
-          description: 'ONOS Image to use'
-
-      - string:
-          name: aaaVer
-          default: '{aaa-version}'
-          description: 'ONOS AAA App Version to Test Upgrade'
-
-      - string:
-          name: aaaOarUrl
-          default: '{aaa-oar-url}'
-          description: 'ONOS AAA App OAR File Url'
-
-      - string:
-          name: oltVer
-          default: '{olt-version}'
-          description: 'ONOS OLT App Version to Test Upgrade'
-
-      - string:
-          name: oltOarUrl
-          default: '{olt-oar-url}'
-          description: 'ONOS OLT App OAR File Url'
-
-      - string:
-          name: dhcpl2relayVer
-          default: '{dhcpl2relay-version}'
-          description: 'ONOS DHCP L2 Relay App Version to Test Upgrade'
-
-      - string:
-          name: dhcpl2relayOarUrl
-          default: '{dhcpl2relay-oar-url}'
-          description: 'ONOS DHCP L2 Relay App OAR File Url'
-
-      - string:
-          name: igmpproxyVer
-          default: '{igmpproxy-version}'
-          description: 'ONOS Igmp Proxy App Version to Test Upgrade'
-
-      - string:
-          name: igmpproxyOarUrl
-          default: '{igmpproxy-oar-url}'
-          description: 'ONOS Igmp Proxy App OAR File Url'
-
-      - string:
-          name: sadisVer
-          default: '{sadis-version}'
-          description: 'ONOS Sadis App Version to Test Upgrade'
-
-      - string:
-          name: sadisOarUrl
-          default: '{sadis-oar-url}'
-          description: 'ONOS Sadis App OAR File Url'
-
-      - string:
-          name: mcastVer
-          default: '{mcast-version}'
-          description: 'ONOS MCast App Version to Test Upgrade'
-
-      - string:
-          name: mcastOarUrl
-          default: '{mcast-oar-url}'
-          description: 'ONOS MCast App OAR File Url'
-
-      - string:
-          name: kafkaVer
-          default: '{kafka-version}'
-          description: 'ONOS Kafka App Version to Test Upgrade'
-
-      - string:
-          name: kafkaOarUrl
-          default: '{kafka-oar-url}'
-          description: 'ONOS Kafka App OAR File Url'
-
-      - string:
-          name: adapterOpenOltImage
-          default: '{adapter-open-olt-image}'
-          description: 'Voltha Adapter Open OLT Component Image'
-
-      - string:
-          name: adapterOpenOnuImage
-          default: '{adapter-open-onu-image}'
-          description: 'Voltha Adapter Open ONU Component Image'
-
-      - string:
-          name: rwCoreImage
-          default: '{rw-core-image}'
-          description: 'Voltha RW Core Component Image'
-
-      - string:
-          name: ofAgentImage
-          default: '{ofagent-image}'
-          description: 'Voltha Ofagent Component Image'
-
-      - string:
-          name: onuImageName
-          default: '{onu-image-name}'
-          description: 'Name of ONU Image to Upgrade'
-
-      - string:
-          name: onuImageUrl
-          default: '{onu-image-url}'
-          description: 'Url of ONU Image to Upgrade'
-
-      - string:
-          name: onuImageVersion
-          default: '{onu-image-version}'
-          description: 'Version of ONU Image to Upgrade'
-
-      - string:
-          name: onuImageCrc
-          default: '{onu-image-crc}'
-          description: 'CRC of ONU Image to Upgrade'
-
-      - string:
-          name: onuImageLocalDir
-          default: '{onu-image-local-dir}'
-          description: 'Local Dir of ONU Image to Upgrade'
-
-    project-type: pipeline
-    concurrent: true
-
-    dsl: !include-raw-escape: pipeline/{pipeline-script}
-
-    triggers:
-      - timed: |
-                 TZ=America/Los_Angeles
-                 {time-trigger}
-
-- job-template:
     id: 'software-upgrades-test'
     name: '{name}'
     sandbox: true
diff --git a/jjb/verify/bbsim-sadis-server.yaml b/jjb/verify/bbsim-sadis-server.yaml
index 9ca6e61..a5c90cf 100644
--- a/jjb/verify/bbsim-sadis-server.yaml
+++ b/jjb/verify/bbsim-sadis-server.yaml
@@ -8,8 +8,8 @@
     jobs:
       - 'verify-bbsim-sadis-server-jobs':
           branch-regexp: '{all-branches-regexp}'
-      - 'verify-bbsim-sadis-server-jobs-voltha-2.7':
-          name-extension: '-voltha-2.7'
+      - 'verify-bbsim-sadis-server-jobs-voltha-2.8':
+          name-extension: '-voltha-2.8'
           branch-regexp: '{kind-voltha-regexp}'
       - 'verify-bbsim-sadis-server-jobs-master':
           branch-regexp: '^master$'
@@ -29,10 +29,10 @@
           unit-test-keep-going: 'true'
 
 - job-group:
-    name: 'verify-bbsim-sadis-server-jobs-voltha-2.7'
+    name: 'verify-bbsim-sadis-server-jobs-voltha-2.8'
     jobs:
       - 'voltha-patch-test':
-          pipeline-script: 'voltha/voltha-2.7/bbsim-tests.groovy'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
 
 - job-group:
     name: 'verify-bbsim-sadis-server-jobs-master'
diff --git a/jjb/verify/bbsim.yaml b/jjb/verify/bbsim.yaml
index 45b6707..3d99840 100644
--- a/jjb/verify/bbsim.yaml
+++ b/jjb/verify/bbsim.yaml
@@ -8,9 +8,9 @@
     jobs:
       - 'verify-bbsim-jobs':
           branch-regexp: '{all-branches-regexp}'
-      - 'verify-bbsim-jobs-voltha-2.7':
-          name-extension: '-voltha-2.7'
-          override-branch: 'voltha-2.7'
+      - 'verify-bbsim-jobs-voltha-2.8':
+          name-extension: '-voltha-2.8'
+          override-branch: 'voltha-2.8'
           branch-regexp: '{kind-voltha-regexp}'
       - 'verify-bbsim-jobs-master':
           branch-regexp: '^master$'
@@ -30,10 +30,10 @@
           unit-test-keep-going: 'true'
 
 - job-group:
-    name: 'verify-bbsim-jobs-voltha-2.7'
+    name: 'verify-bbsim-jobs-voltha-2.8'
     jobs:
       - 'voltha-patch-test':
-          pipeline-script: 'voltha/voltha-2.7/bbsim-tests.groovy'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
 
 - job-group:
     name: 'verify-bbsim-jobs-master'
diff --git a/jjb/verify/kind-voltha.yaml b/jjb/verify/kind-voltha.yaml
deleted file mode 100644
index 8b43798..0000000
--- a/jjb/verify/kind-voltha.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
----
-# verification jobs for 'kind-voltha' repo
-
-- project:
-    name: kind-voltha
-    project: '{name}'
-
-    jobs:
-      - 'verify-kind-voltha-jobs':
-          branch-regexp: '{all-branches-regexp}'
-
-- job-group:
-    name: 'verify-kind-voltha-jobs'
-    jobs:
-      - 'verify-licensed'
-      - 'tag-collision-reject'
-      - 'make-unit-test':
-          unit-test-targets: 'test'
-          junit-allow-empty-results: true
-      - 'voltha-patch-test':
-          pipeline-script: 'voltha/voltha-2.7/voltha-bbsim-tests.groovy'
-          name-extension: '-2.7'
-          override-branch: 'voltha-2.7'
-          kindVolthaChange: '$GERRIT_REFSPEC'
diff --git a/jjb/verify/ofagent-go.yaml b/jjb/verify/ofagent-go.yaml
index 09dac06..c629c6b 100644
--- a/jjb/verify/ofagent-go.yaml
+++ b/jjb/verify/ofagent-go.yaml
@@ -8,9 +8,9 @@
     jobs:
       - 'verify-ofagent-go-jobs':
           branch-regexp: '{all-branches-regexp}'
-      - 'verify-ofagent-jobs-voltha-2.7':
-          name-extension: '-voltha-2.7'
-          override-branch: 'voltha-2.7'
+      - 'verify-ofagent-jobs-voltha-2.8':
+          name-extension: '-voltha-2.8'
+          override-branch: 'voltha-2.8'
           branch-regexp: '{kind-voltha-regexp}'
       - 'verify-ofagent-jobs-master':
           branch-regexp: '^master$'
@@ -31,10 +31,10 @@
           junit-allow-empty-results: true
 
 - job-group:
-    name: 'verify-ofagent-jobs-voltha-2.7'
+    name: 'verify-ofagent-jobs-voltha-2.8'
     jobs:
       - 'voltha-patch-test':
-          pipeline-script: 'voltha/voltha-2.7/bbsim-tests.groovy'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
 
 - job-group:
     name: 'verify-ofagent-jobs-master'
diff --git a/jjb/verify/ofagent-py.yaml b/jjb/verify/ofagent-py.yaml
index 59a231a..333246b 100644
--- a/jjb/verify/ofagent-py.yaml
+++ b/jjb/verify/ofagent-py.yaml
@@ -22,7 +22,7 @@
           unit-test-keep-going: 'true'
           junit-allow-empty-results: true
       - 'voltha-patch-test':
-          pipeline-script: 'voltha/voltha-2.7/bbsim-tests.groovy'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
 
 - job-group:
     name: 'publish-ofagent-py-jobs'
diff --git a/jjb/verify/voltha-api-server.yaml b/jjb/verify/voltha-api-server.yaml
index fe82286..0dd61e6 100644
--- a/jjb/verify/voltha-api-server.yaml
+++ b/jjb/verify/voltha-api-server.yaml
@@ -26,7 +26,7 @@
           unit-test-keep-going: 'true'
           junit-allow-empty-results: true
       - 'voltha-patch-test':
-          pipeline-script: 'voltha/voltha-2.7/bbsim-tests.groovy'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
 
 - job-group:
     name: 'publish-voltha-api-server-jobs'
diff --git a/jjb/verify/voltha-go.yaml b/jjb/verify/voltha-go.yaml
index 8a808a6..95faaed 100644
--- a/jjb/verify/voltha-go.yaml
+++ b/jjb/verify/voltha-go.yaml
@@ -8,9 +8,9 @@
     jobs:
       - 'verify-voltha-go-jobs':
           branch-regexp: '{all-branches-regexp}'
-      - 'verify-voltha-go-jobs-voltha-2.7':
-          name-extension: '-voltha-2.7'
-          override-branch: 'voltha-2.7'
+      - 'verify-voltha-go-jobs-voltha-2.8':
+          name-extension: '-voltha-2.8'
+          override-branch: 'voltha-2.8'
           branch-regexp: '{kind-voltha-regexp}'
       - 'verify-voltha-go-jobs-master':
           branch-regexp: '^master$'
@@ -39,10 +39,10 @@
           unit-test-keep-going: 'true'
 
 - job-group:
-    name: 'verify-voltha-go-jobs-voltha-2.7'
+    name: 'verify-voltha-go-jobs-voltha-2.8'
     jobs:
       - 'voltha-patch-test':
-          pipeline-script: 'voltha/voltha-2.7/bbsim-tests.groovy'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
 
 - job-group:
     name: 'verify-voltha-go-jobs-master'
diff --git a/jjb/verify/voltha-helm-charts.yaml b/jjb/verify/voltha-helm-charts.yaml
index e947800..5599400 100644
--- a/jjb/verify/voltha-helm-charts.yaml
+++ b/jjb/verify/voltha-helm-charts.yaml
@@ -8,9 +8,9 @@
     jobs:
       - 'verify-voltha-helm-charts-jobs':
           branch-regexp: '{all-branches-regexp}'
-      - 'verify-voltha-helm-charts-jobs-voltha-2.7':
-          name-extension: '-voltha-2.7'
-          override-branch: 'voltha-2.7'
+      - 'verify-voltha-helm-charts-jobs-voltha-2.8':
+          name-extension: '-voltha-2.8'
+          override-branch: 'voltha-2.8'
           branch-regexp: '{kind-voltha-regexp}'
       - 'verify-voltha-helm-charts-jobs-master':
           branch-regexp: '^master$'
@@ -25,10 +25,10 @@
           dependency-jobs: 'verify_voltha-helm-charts_tag-collision'
 
 - job-group:
-    name: 'verify-voltha-helm-charts-jobs-voltha-2.7'
+    name: 'verify-voltha-helm-charts-jobs-voltha-2.8'
     jobs:
       - 'voltha-patch-test':
-          pipeline-script: 'voltha/voltha-2.7/bbsim-tests.groovy'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
 
 - job-group:
     name: 'verify-voltha-helm-charts-jobs-master'
diff --git a/jjb/verify/voltha-onos.yaml b/jjb/verify/voltha-onos.yaml
index f85cc9c..1f2ad0c 100644
--- a/jjb/verify/voltha-onos.yaml
+++ b/jjb/verify/voltha-onos.yaml
@@ -8,9 +8,9 @@
     jobs:
       - 'verify-voltha-onos-jobs':
           branch-regexp: '{all-branches-regexp}'
-      - 'verify-voltha-onos-jobs-voltha-2.7':
-          name-extension: '-voltha-2.7'
-          override-branch: 'voltha-2.7'
+      - 'verify-voltha-onos-jobs-voltha-2.8':
+          name-extension: '-voltha-2.8'
+          override-branch: 'voltha-2.8'
           branch-regexp: '{kind-voltha-regexp}'
       - 'verify-voltha-onos-jobs-master':
           branch-regexp: '^master$'
@@ -25,10 +25,10 @@
           dependency-jobs: 'verify_voltha-onos_licensed'
 
 - job-group:
-    name: 'verify-voltha-onos-jobs-voltha-2.7'
+    name: 'verify-voltha-onos-jobs-voltha-2.8'
     jobs:
       - 'voltha-patch-test':
-          pipeline-script: 'voltha/voltha-2.7/bbsim-tests.groovy'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
 
 - job-group:
     name: 'verify-voltha-onos-jobs-master'
diff --git a/jjb/verify/voltha-openolt-adapter.yaml b/jjb/verify/voltha-openolt-adapter.yaml
index 7bb77c8..afc7300 100644
--- a/jjb/verify/voltha-openolt-adapter.yaml
+++ b/jjb/verify/voltha-openolt-adapter.yaml
@@ -8,9 +8,9 @@
     jobs:
       - 'verify-voltha-openolt-adapter-jobs':
           branch-regexp: '{all-branches-regexp}'
-      - 'verify-voltha-openolt-adapter-jobs-voltha-2.7':
-          name-extension: '-voltha-2.7'
-          override-branch: 'voltha-2.7'
+      - 'verify-voltha-openolt-adapter-jobs-voltha-2.8':
+          name-extension: '-voltha-2.8'
+          override-branch: 'voltha-2.8'
           branch-regexp: '{kind-voltha-regexp}'
       - 'verify-voltha-openolt-adapter-jobs-master':
           branch-regexp: '^master$'
@@ -39,10 +39,10 @@
           build-node: 'ubuntu18.04-basebuild-2c-4g'
 
 - job-group:
-    name: 'verify-voltha-openolt-adapter-jobs-voltha-2.7'
+    name: 'verify-voltha-openolt-adapter-jobs-voltha-2.8'
     jobs:
       - 'voltha-patch-test':
-          pipeline-script: 'voltha/voltha-2.7/bbsim-tests.groovy'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
 
 - job-group:
     name: 'verify-voltha-openolt-adapter-jobs-master'
diff --git a/jjb/verify/voltha-openonu-adapter-go.yaml b/jjb/verify/voltha-openonu-adapter-go.yaml
index 258ec5e..fad5989 100644
--- a/jjb/verify/voltha-openonu-adapter-go.yaml
+++ b/jjb/verify/voltha-openonu-adapter-go.yaml
@@ -8,9 +8,9 @@
     jobs:
       - 'verify-voltha-openonu-adapter-go-jobs':
           branch-regexp: '{all-branches-regexp}'
-      - 'verify-voltha-openonu-adapter-go-jobs-voltha-2.7':
-          name-extension: '-voltha-2.7'
-          override-branch: 'voltha-2.7'
+      - 'verify-voltha-openonu-adapter-go-jobs-voltha-2.8':
+          name-extension: '-voltha-2.8'
+          override-branch: 'voltha-2.8'
           branch-regexp: '{kind-voltha-regexp}'
       - 'verify-voltha-openonu-adapter-go-jobs-master':
           branch-regexp: '^master$'
@@ -38,10 +38,10 @@
           build-node: 'ubuntu18.04-basebuild-2c-4g'
 
 - job-group:
-    name: 'verify-voltha-openonu-adapter-go-jobs-voltha-2.7'
+    name: 'verify-voltha-openonu-adapter-go-jobs-voltha-2.8'
     jobs:
       - 'voltha-patch-test':
-          pipeline-script: 'voltha/voltha-2.7/bbsim-tests.groovy'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
 
 - job-group:
     name: 'verify-voltha-openonu-adapter-go-jobs-master'
diff --git a/jjb/verify/voltha-openonu-adapter.yaml b/jjb/verify/voltha-openonu-adapter.yaml
index 1388ae0..564846a 100644
--- a/jjb/verify/voltha-openonu-adapter.yaml
+++ b/jjb/verify/voltha-openonu-adapter.yaml
@@ -9,9 +9,9 @@
     jobs:
       - 'verify-voltha-openonu-adapter-jobs':
           branch-regexp: '{all-branches-regexp}'
-      - 'verify-voltha-openonu-adapter-jobs-voltha-2.7':
-          name-extension: '-voltha-2.7'
-          override-branch: 'voltha-2.7'
+      - 'verify-voltha-openonu-adapter-jobs-voltha-2.8':
+          name-extension: '-voltha-2.8'
+          override-branch: 'voltha-2.8'
           branch-regexp: '{kind-voltha-regexp}'
       - 'verify-voltha-openonu-adapter-jobs-master':
           branch-regexp: '^master$'
@@ -36,10 +36,10 @@
           build-timeout: 15
 
 - job-group:
-    name: 'verify-voltha-openonu-adapter-jobs-voltha-2.7'
+    name: 'verify-voltha-openonu-adapter-jobs-voltha-2.8'
     jobs:
       - 'voltha-patch-test':
-          pipeline-script: 'voltha/voltha-2.7/bbsim-tests.groovy'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
 
 - job-group:
     name: 'verify-voltha-openonu-adapter-jobs-master'
diff --git a/jjb/verify/voltha-system-tests.yaml b/jjb/verify/voltha-system-tests.yaml
index c068b55..d17c0b9 100644
--- a/jjb/verify/voltha-system-tests.yaml
+++ b/jjb/verify/voltha-system-tests.yaml
@@ -9,10 +9,10 @@
       - 'verify-voltha-system-tests-jobs':
           build-node: 'ubuntu18.04-basebuild-4c-8g'
           branch-regexp: '{all-branches-regexp}'
-      - 'verify-voltha-system-tests-jobs-voltha-2.7':
+      - 'verify-voltha-system-tests-jobs-voltha-2.8':
           build-node:  'ubuntu18.04-basebuild-4c-8g'
-          name-extension: '-voltha-2.7'
-          override-branch: 'voltha-2.7'
+          name-extension: '-voltha-2.8'
+          override-branch: 'voltha-2.8'
           branch-regexp: '{kind-voltha-regexp}'
       - 'verify-voltha-system-tests-jobs-master':
           build-node:  'ubuntu18.04-basebuild-4c-8g'
@@ -30,10 +30,10 @@
           junit-allow-empty-results: true
 
 - job-group:
-    name: 'verify-voltha-system-tests-jobs-voltha-2.7'
+    name: 'verify-voltha-system-tests-jobs-voltha-2.8'
     jobs:
       - 'voltha-patch-test':
-          pipeline-script: 'voltha/voltha-2.7/bbsim-tests.groovy'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
 
 - job-group:
     name: 'verify-voltha-system-tests-jobs-master'
diff --git a/jjb/voltha-e2e.yaml b/jjb/voltha-e2e.yaml
index 721d084..53452a0 100755
--- a/jjb/voltha-e2e.yaml
+++ b/jjb/voltha-e2e.yaml
@@ -69,6 +69,54 @@
               teardown: false
 
       - 'voltha-periodic-test':
+          name: 'periodic-voltha-test-bbsim-2.8'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
+          code-branch: 'voltha-2.8'
+          time-trigger: "H H/23 * * *"
+          testTargets: |
+            - target: functional-single-kind
+              workflow: att
+              flags: ""
+              teardown: true
+            - target: bbsim-alarms-kind
+              workflow: att
+              flags: ""
+              teardown: false
+            - target: bbsim-failurescenarios
+              workflow: att
+              flags: ""
+              teardown: false
+            - target: bbsim-errorscenarios
+              workflow: att
+              flags: ""
+              teardown: false
+
+      - 'voltha-periodic-test':
+          name: 'periodic-voltha-multiple-olts-test-bbsim-2.8'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
+          code-branch: 'voltha-2.8'
+          olts: 2
+          extraHelmFlags: '--set onu=2,pon=2'
+          time-trigger: "H H/23 * * *"
+          testTargets: |
+            - target: functional-multi-olt
+              workflow: att
+              flags: ""
+              teardown: true
+            - target: bbsim-multiolt-failurescenarios
+              workflow: att
+              flags: ""
+              teardown: false
+            - target: bbsim-multiolt-errorscenarios
+              workflow: att
+              flags: ""
+              teardown: false
+            - target: bbsim-multiolt-kind
+              workflow: att
+              flags: ""
+              teardown: false
+
+      - 'voltha-periodic-test':
           name: 'periodic-voltha-multi-uni-test-bbsim'
           code-branch: 'master'
           extraHelmFlags: '--set global.image_tag=master --set onos-classic.image.tag=master --set voltha-adapter-openonu.adapter_open_onu.uni_port_mask=0x00FF'
@@ -106,22 +154,48 @@
               workflow: att
               flags: ""
               teardown: false
+          timeout: 150
 
-      - 'voltha-periodic-test-kind-voltha-based':
-          name: 'periodic-voltha-multiple-olts-test-bbsim-2.7'
-          pipeline-script: 'voltha/voltha-2.7/voltha-nightly-tests-bbsim.groovy'
-          build-node: 'qct-pod4-node2'
-          make-target: functional-multi-olt
-          make-target-failtest: bbsim-multiolt-failurescenarios
-          make-target-errortest: bbsim-multiolt-errorscenarios
-          make-target-alarmtest: bbsim-alarms-kind
-          make-target-multipleolt: bbsim-multiolt-kind
-          withAlarms: false
-          code-branch: 'voltha-2.7'
+      - 'voltha-periodic-test':
+          name: 'periodic-voltha-multi-uni-test-bbsim-2.8'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
+          code-branch: 'voltha-2.8'
+          extraHelmFlags: '--set voltha-adapter-openonu.adapter_open_onu.uni_port_mask=0x00FF'
+          time-trigger: "H H/23 * * *"
+          testTargets: |
+            - target: functional-single-kind-multiuni-att
+              workflow: att
+              flags: ""
+              teardown: true
+            - target: bbsim-multiuni-failurescenarios-att
+              workflow: att
+              flags: ""
+              teardown: false
+            - target: bbsim-multiuni-errorscenarios-att
+              workflow: att
+              flags: ""
+              teardown: false
+
+      - 'voltha-periodic-test':
+          name: 'periodic-voltha-multi-uni-multiple-olts-test-bbsim-2.8'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
+          code-branch: 'voltha-2.8'
           olts: 2
-          onus: 2
-          pons: 2
-          time-trigger: "H H * * *"
+          extraHelmFlags: '--set onu=2,pon=2 --set voltha-adapter-openonu.adapter_open_onu.uni_port_mask=0x00FF'
+          time-trigger: "H H/23 * * *"
+          testTargets: |
+            - target: functional-multiuni-multiolt-att
+              workflow: att
+              flags: ""
+              teardown: true
+            - target: bbsim-multiuni-multiolt-failurescenarios-att
+              workflow: att
+              flags: ""
+              teardown: false
+            - target: bbsim-multiuni-multiolt-errorscenarios-att
+              workflow: att
+              flags: ""
+              teardown: false
 
       # openonu Go periodic tests
       - 'voltha-periodic-test':
@@ -181,6 +255,62 @@
               teardown: true
 
       - 'voltha-periodic-test':
+          name: 'periodic-voltha-openonu-go-test-bbsim-2.8'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
+          code-branch: 'voltha-2.8'
+          time-trigger: "H H/12 * * *"
+          logLevel: 'DEBUG'
+          testTargets: |
+            - target: 1t1gem-openonu-go-adapter-test
+              workflow: att
+              flags: ""
+              teardown: true
+            - target: 1t4gem-openonu-go-adapter-test
+              workflow: att
+              flags: ""
+              teardown: true
+            - target: 1t8gem-openonu-go-adapter-test
+              workflow: att
+              flags: ""
+              teardown: true
+            - target: mib-upload-templating-openonu-go-adapter-test
+              workflow: att
+              flags: "--set pon=2,onu=2,controlledActivation=only-onu"
+              teardown: true
+            - target: reconcile-openonu-go-adapter-test-att
+              workflow: att
+              flags: ""
+              teardown: true
+            - target: reconcile-openonu-go-adapter-test-dt
+              workflow: dt
+              flags: ""
+              teardown: true
+            - target: reconcile-openonu-go-adapter-test-tt
+              workflow: tt
+              flags: ""
+              teardown: true
+            - target: openonu-go-adapter-omci-hardening-passed-test
+              workflow: att
+              flags: "--set omci_response_rate=9 --set omci_timeout=1s"
+              teardown: true
+            - target: openonu-go-adapter-omci-hardening-failed-test
+              workflow: att
+              flags: "--set omci_response_rate=7"
+              teardown: true
+            - target: voltha-onu-omci-get-single-kind-att
+              workflow: att
+              flags: ""
+              teardown: true
+            - target: voltha-onu-omci-get-single-kind-dt
+              workflow: dt
+              flags: ""
+              teardown: true
+            - target: voltha-onu-omci-get-single-kind-tt
+              workflow: tt
+              flags: ""
+              teardown: true
+
+      - 'voltha-periodic-test':
           name: 'patchset-voltha-openonu-go-test-bbsim'
           trigger-comment: "voltha test openonu singleolt"
           code-branch: '$GERRIT_BRANCH'
@@ -238,20 +368,6 @@
               flags: ""
               teardown: true
 
-      - 'voltha-periodic-test-kind-voltha-based':
-          name: 'periodic-voltha-openonu-go-test-bbsim-2.7'
-          pipeline-script: 'voltha/voltha-2.7/voltha-openonu-go-test-bbsim.groovy'
-          build-node: 'ubuntu18.04-basebuild-8c-15g'
-          make-target: openonu-go-adapter-test
-          make-target-1t4gemtest: 1t4gem-openonu-go-adapter-test
-          make-target-1t8gemtest: 1t8gem-openonu-go-adapter-test
-          make-target-reconciletest: reconcile-openonu-go-adapter-test
-          make-target-reconciledttest: reconcile-openonu-go-adapter-test-dt
-          make-target-reconciletttest: reconcile-openonu-go-adapter-test-tt
-          withAlarms: false
-          code-branch: 'voltha-2.7'
-          time-trigger: "H H/23 * * *"
-
       - 'voltha-periodic-test':
           name: 'periodic-voltha-multiple-olts-openonu-go-test-bbsim'
           code-branch: 'master'
@@ -298,6 +414,52 @@
           time-trigger: "H H/12 * * *"
 
       - 'voltha-periodic-test':
+          name: 'periodic-voltha-multiple-olts-openonu-go-test-bbsim-2.8'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
+          code-branch: 'voltha-2.8'
+          extraHelmFlags: '--set onu=2,pon=2'
+          olts: 2
+          logLevel: 'DEBUG'
+          testTargets: |
+            - target: 1t1gem-openonu-go-adapter-multi-olt-test
+              workflow: att
+              flags: ""
+              teardown: true
+            - target: 1t4gem-openonu-go-adapter-multi-olt-test
+              workflow: att
+              flags: ""
+              teardown: true
+            - target: 1t8gem-openonu-go-adapter-multi-olt-test
+              workflow: att
+              flags: ""
+              teardown: true
+            - target: reconcile-openonu-go-adapter-multi-olt-test-att
+              workflow: att
+              flags: ""
+              teardown: true
+            - target: reconcile-openonu-go-adapter-multi-olt-test-dt
+              workflow: dt
+              flags: ""
+              teardown: true
+            - target: reconcile-openonu-go-adapter-multi-olt-test-tt
+              workflow: tt
+              flags: ""
+              teardown: true
+            - target: voltha-onu-omci-get-multiolt-kind-att
+              workflow: att
+              flags: ""
+              teardown: true
+            - target: voltha-onu-omci-get-multiolt-kind-dt
+              workflow: dt
+              flags: ""
+              teardown: true
+            - target: voltha-onu-omci-get-multiolt-kind-tt
+              workflow: tt
+              flags: ""
+              teardown: true
+          time-trigger: "H H/12 * * *"
+
+      - 'voltha-periodic-test':
           name: 'patchset-voltha-multiple-olts-openonu-go-test-bbsim'
           trigger-comment: "voltha test openonu multiolt"
           code-branch: '$GERRIT_BRANCH'
@@ -368,7 +530,6 @@
       - 'voltha-periodic-test':
           name: 'patchset-voltha-pm-data-test-bbsim'
           trigger-comment: "voltha test pm data singleolt"
-          code-branch: '$GERRIT_BRANCH'
           extraHelmFlags: '--set global.image_tag=master --set onos-classic.image.tag=master --set kafka.externalAccess.enabled=true,kafka.externalAccess.service.type=NodePort,kafka.externalAccess.service.nodePorts[0]=30201,kafka.externalAccess.service.domain=127.0.0.1'
           code-branch: '$GERRIT_BRANCH'
           gerrit-project: '$GERRIT_PROJECT'
@@ -435,23 +596,6 @@
           olts: 2
           timeout: 180
 
-      - 'voltha-periodic-test-kind-voltha-based':
-          name: 'periodic-voltha-multiple-olts-openonu-go-test-bbsim-2.7'
-          pipeline-script: 'voltha/voltha-2.7/voltha-openonu-go-test-bbsim.groovy'
-          build-node: 'ubuntu18.04-basebuild-8c-15g'
-          make-target: openonu-go-adapter-multi-olt-test
-          make-target-1t4gemtest: 1t4gem-openonu-go-adapter-multi-olt-test
-          make-target-1t8gemtest: 1t8gem-openonu-go-adapter-multi-olt-test
-          make-target-reconciletest: reconcile-openonu-go-adapter-multi-olt-test
-          make-target-reconciledttest: reconcile-openonu-go-adapter-multi-olt-test-dt
-          make-target-reconciletttest: reconcile-openonu-go-adapter-multi-olt-test-tt
-          withAlarms: false
-          code-branch: 'voltha-2.7'
-          olts: 2
-          onus: 2
-          pons: 2
-          time-trigger: "H H/23 * * *"
-
       - 'voltha-periodic-test':
           name: 'periodic-voltha-test-DMI'
           extraHelmFlags: '--set global.image_tag=master --set onos-classic.image.tag=master'
@@ -463,26 +607,16 @@
               flags: ""
               teardown: true
 
-      - 'voltha-periodic-test-kind-voltha-based':
-          name: 'periodic-voltha-test-DMI-2.7'
-          pipeline-script: 'voltha/voltha-2.7/voltha-DMI-bbsim-tests.groovy'
-          build-node: 'qct-pod4-node2'
-          make-target: bbsim-dmi-hw-management-test
-          withAlarms: false
-          code-branch: 'voltha-2.7'
+      - 'voltha-periodic-test':
+          name: 'periodic-voltha-test-DMI-2.8'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
+          code-branch: 'voltha-2.8'
           time-trigger: "H H/23 * * *"
-
-      - 'voltha-periodic-test-kind-voltha-based':
-          name: 'periodic-voltha-test-bbsim-2.7'
-          pipeline-script: 'voltha/voltha-2.7/voltha-nightly-tests-bbsim.groovy'
-          build-node: 'qct-pod4-node2'
-          make-target: functional-single-kind
-          make-target-failtest: bbsim-failurescenarios
-          make-target-errortest: bbsim-errorscenarios
-          make-target-alarmtest: bbsim-alarms-kind
-          withAlarms: true
-          code-branch: 'voltha-2.7'
-          time-trigger: "H H * * *"
+          testTargets: |
+            - target: bbsim-dmi-hw-management-test
+              workflow: att
+              flags: ""
+              teardown: true
 
       - 'voltha-periodic-test':
           name: 'periodic-voltha-etcd-test'
@@ -496,15 +630,18 @@
               flags: ""
               teardown: true
 
-      - 'voltha-periodic-test-kind-voltha-based':
-          name: 'periodic-voltha-etcd-test-2.7'
-          pipeline-script: 'voltha/voltha-2.7/voltha-system-test-bbsim.groovy'
+      - 'voltha-periodic-test':
+          name: 'periodic-voltha-etcd-test-2.8'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
           build-node: 'ubuntu18.04-basebuild-4c-8g'
-          code-branch: 'voltha-2.7'
-          make-target: sanity-multi-kind
-          onus: 2
-          pons: 2
+          code-branch: 'voltha-2.8'
+          extraHelmFlags: '--set onu=2,pon=2'
           time-trigger: "H H/12 * * *"
+          testTargets: |
+            - target: sanity-multi-kind
+              workflow: att
+              flags: ""
+              teardown: true
 
       - 'voltha-periodic-test':
           name: 'periodic-voltha-sanity-test-multi-runs'
@@ -533,16 +670,32 @@
               flags: ""
               teardown: false
 
-      - 'voltha-periodic-test-kind-voltha-based':
-          name: 'periodic-voltha-sanity-test-multi-runs-2.7'
-          pipeline-script: 'voltha/voltha-2.7/voltha-go-multi-tests.groovy'
-          build-node: 'qct-pod4-node2'
-          code-branch: 'voltha-2.7'
-          make-target: sanity-kind
-          onus: 1
-          pons: 1
-          test-runs: 5
+      - 'voltha-periodic-test':
+          name: 'periodic-voltha-sanity-test-multi-runs-2.8'
+          pipeline-script: 'voltha/voltha-2.8/bbsim-tests.groovy'
+          code-branch: 'voltha-2.8'
           time-trigger: "H H/23 * * *"
+          testTargets: |
+            - target: sanity-kind
+              workflow: att
+              flags: ""
+              teardown: true
+            - target: sanity-kind
+              workflow: att
+              flags: ""
+              teardown: false
+            - target: sanity-kind
+              workflow: att
+              flags: ""
+              teardown: false
+            - target: sanity-kind
+              workflow: att
+              flags: ""
+              teardown: false
+            - target: sanity-kind
+              workflow: att
+              flags: ""
+              teardown: false
 
       - 'voltha-periodic-test':
           name: 'nightly-voltha-DTflow-sanity-test'
@@ -563,14 +716,14 @@
           workflow: 'att'
           branch-pattern: master
 
-      # ATT Per-patchset Pod builds on Tucson pod (voltha-2.7)
+
+      # ATT Per-patchset Pod builds on Tucson pod (voltha-2.8)
       - 'verify_physical_voltha_patchset_auto':
-          name: 'verify_physical_voltha_patchset_auto_voltha-2.7'
-          oltDebVersionMaster: 'openolt_asfvolt16-3.4.8-eec0fc9e9a01dc0d35b0b8441e0a22a4c0cc51b4-40G-NNI.deb'
-          oltDebVersionVoltha23: 'openolt_asfvolt16-3.3.3-1a5d68b50d8bcc5ba6cb1630d3294c30c37cd2f5-40G-NNI.deb'
-          pipeline-script: 'voltha/voltha-2.7/voltha-physical-build-and-tests.groovy'
-          branch-pattern: voltha-2.7
+          name: 'verify_physical_voltha_patchset_auto-2.8'
+          pipeline-script: 'voltha/voltha-2.8/tucson-build-and-test.groovy'
+          extraHelmFlags: '--set global.log_level=debug'
           workflow: 'att'
+          branch-pattern: voltha-2.8
 
       # ATT Manual Pod builds on Tucson pod (master)
       - 'verify_physical_voltha_patchset_manual':
@@ -580,14 +733,13 @@
           extraHelmFlags: '--set global.image_tag=master --set onos-classic.image.tag=master --set global.log_level=debug'
           workflow: 'att'
 
-      #  ATT Manual Pod builds on Tucson pod (voltha-2.7)
+      # ATT Manual Pod builds on Tucson pod (voltha-2.8)
       - 'verify_physical_voltha_patchset_manual':
-          name: 'verify_physical_voltha_patchset_manual_voltha-2.7'
-          oltDebVersionMaster: 'openolt_asfvolt16-3.4.8-eec0fc9e9a01dc0d35b0b8441e0a22a4c0cc51b4-40G-NNI.deb'
-          oltDebVersionVoltha23: 'openolt_asfvolt16-3.3.3-1a5d68b50d8bcc5ba6cb1630d3294c30c37cd2f5-40G-NNI.deb'
-          pipeline-script: 'voltha/voltha-2.7/voltha-physical-build-and-tests.groovy'
+          name: 'verify_physical_voltha_patchset_manual-2.8'
+          pipeline-script: 'voltha/voltha-2.8/tucson-build-and-test.groovy'
           trigger-string: 'hardware test'
-          branch-pattern: voltha-2.7
+          branch-pattern: voltha-2.8
+          extraHelmFlags: '--set global.log_level=debug'
           workflow: 'att'
 
       # DT Manual Pod builds on Tucson pod  (master)
@@ -599,16 +751,15 @@
           branch-pattern: master
           extraHelmFlags: '--set global.image_tag=master --set onos-classic.image.tag=master --set global.log_level=debug'
 
-      # DT Per-patchset Pod builds on Tucson pod  (voltha-2.7)
+      # DT Manual Pod builds on Tucson pod  (voltha-2.8)
       - 'verify_physical_voltha_patchset_manual':
-          name: 'verify_physical_voltha_patchset_manual_DT_voltha-2.7'
+          name: 'verify_physical_voltha_patchset_manual_DT-2.8'
+          pipeline-script: 'voltha/voltha-2.8/tucson-build-and-test.groovy'
           workflow: 'dt'
-          oltDebVersionMaster: 'openolt_asfvolt16-3.4.8-eec0fc9e9a01dc0d35b0b8441e0a22a4c0cc51b4-40G-NNI.deb'
-          oltDebVersionVoltha23: 'openolt_asfvolt16-3.3.3-1a5d68b50d8bcc5ba6cb1630d3294c30c37cd2f5-40G-NNI.deb'
-          pipeline-script: 'voltha/voltha-2.7/voltha-physical-build-and-tests.groovy'
           trigger-string: 'DT hardware test'
           default-test-args: '-i sanityDt -i PowerSwitch -X'
-          branch-pattern: voltha-2.7
+          branch-pattern: voltha-2.8
+          extraHelmFlags: '--set global.log_level=debug'
 
 - job-template:
     id: 'voltha-periodic-test'
@@ -748,173 +899,6 @@
                   branch-pattern: '{all-branches-regexp}'
 
 - job-template:
-    id: 'voltha-periodic-test-kind-voltha-based'
-    name: '{name}'
-    pipeline-script: 'voltha/voltha-2.7/voltha-go-tests.groovy'
-    test-runs: 1
-    robot-args: ''
-    gerrit-project: ''
-    work-flow: ''
-    volthaSystemTestsChange: ''
-    volthaHelmChartsChange: ''
-    kindVolthaChange: ''
-    extraHelmFlags: ''
-    sandbox: true
-    olts: 1
-    withAlarms: false
-
-    description: |
-      <!-- Managed by Jenkins Job Builder -->
-      Created by {id} job-template from ci-management/jjb/voltha-e2e.yaml  <br /><br />
-      E2E Validation for Voltha 2.X
-
-    properties:
-      - cord-infra-properties:
-          build-days-to-keep: '{big-build-days-to-keep}'
-          artifact-num-to-keep: '{big-artifact-num-to-keep}'
-
-    wrappers:
-      - lf-infra-wrappers:
-          build-timeout: '{build-timeout}'
-          jenkins-ssh-credential: '{jenkins-ssh-credential}'
-
-    parameters:
-      - string:
-          name: buildNode
-          default: '{build-node}'
-          description: 'Name of the Jenkins node to run the job on'
-
-      - string:
-          name: extraHelmFlags
-          default: '--set onu={onus},pon={pons} {extraHelmFlags}'
-          description: 'Helm flags to pass to ./voltha up'
-
-      - bool:
-          name: withAlarms
-          default: '{withAlarms}'
-          description: "Run alarm based tests when true"
-
-      - string:
-          name: makeTarget
-          default: '{make-target}'
-          description: 'Makefile target to invoke during test'
-
-      - string:
-          name: makeFailtestTarget
-          default: '{make-target-failtest}'
-          description: 'Makefile target to invoke during failure/based test'
-
-      - string:
-          name: makeMultiOltTarget
-          default: '{make-target-multipleolt}'
-          description: 'Makefile target to invoke during multiple olt test'
-
-      - string:
-          name: makeErrortestTarget
-          default: '{make-target-errortest}'
-          description: 'Makefile target to invoke during error test'
-
-      - string:
-          name: makeAlarmtestTarget
-          default: '{make-target-alarmtest}'
-          description: 'Makefile target to invoke during alarm test'
-
-      - string:
-          name: make1t4gemTestTarget
-          default: '{make-target-1t4gemtest}'
-          description: 'Makefile target to invoke during 1t4gem test'
-
-      - string:
-          name: make1t8gemTestTarget
-          default: '{make-target-1t8gemtest}'
-          description: 'Makefile target to invoke during 1t8gem test'
-
-      - string:
-          name: makeReconcileTestTarget
-          default: '{make-target-reconciletest}'
-          description: 'Makefile target to invoke during reconcile test'
-
-      - string:
-          name: makeReconcileDtTestTarget
-          default: '{make-target-reconciledttest}'
-          description: 'Makefile target to invoke during reconcile dt test'
-
-      - string:
-          name: makeReconcileTtTestTarget
-          default: '{make-target-reconciletttest}'
-          description: 'Makefile target to invoke during reconcile tt test'
-
-      - string:
-          name: manifestUrl
-          default: '{gerrit-server-url}/{voltha-test-manifest-repo}'
-          description: 'Repo manifest URL for code checkout'
-
-      - string:
-          name: branch
-          default: '{code-branch}'
-          description: 'Repo manifest branch for code checkout'
-
-      - string:
-          name: gerritProject
-          default: '{gerrit-project}'
-          description: 'Name of the Gerrit project'
-
-      - string:
-          name: gerritChangeNumber
-          default: ''
-          description: 'Changeset number in Gerrit'
-
-      - string:
-          name: gerritPatchsetNumber
-          default: ''
-          description: 'PatchSet number in Gerrit'
-
-      - string:
-          name: testRuns
-          default: '{test-runs}'
-          description: 'How many times to repeat the tests'
-
-      - string:
-          name: extraRobotArgs
-          default: '{robot-args}'
-          description: 'Arguments to pass to robot'
-
-      - string:
-          name: workFlow
-          default: '{work-flow}'
-          description: 'Workflow for testcase'
-
-      - string:
-          name: karafHome
-          default: '{karaf-home}'
-          description: 'Karaf home'
-
-      - string:
-          name: volthaSystemTestsChange
-          default: '{volthaSystemTestsChange}'
-          description: 'Download a change for gerrit in the voltha-system-tests repo, example value: "refs/changes/79/18779/13"'
-
-      - string:
-          name: kindVolthaChange
-          default: '{kindVolthaChange}'
-          description: 'Download a change for gerrit in the kind-voltha repo, example value: "refs/changes/32/19132/1"'
-
-      - string:
-          name: olts
-          default: '{olts}'
-          description: 'How many BBSim instances to run'
-
-    project-type: pipeline
-    concurrent: true
-
-    dsl: !include-raw-escape: pipeline/{pipeline-script}
-
-    triggers:
-      - timed: |
-                 TZ=America/Los_Angeles
-                 {time-trigger}
-
-- job-template:
     id: 'voltha-patch-test'
     name: 'verify_{project}_sanity-test{name-extension}'
     build-node: 'ubuntu18.04-basebuild-4c-8g'
@@ -943,7 +927,6 @@
         workflow: tt
         flags: ""
         teardown: true
-    kindVolthaChange: '' # this is only needed to test kind-voltha patches
 
     description: |
       <!-- Managed by Jenkins Job Builder -->
@@ -1030,12 +1013,6 @@
           default: '{logLevel}'
           description: 'Log level for all the components'
 
-      # Used in the 2.7 based pipeline, can be removed after 2.8
-      - string:
-          name: kindVolthaChange
-          default: '{kindVolthaChange}'
-          description: 'Download a change for gerrit in the kind-voltha repo, example value: "refs/changes/32/19132/1" (only used to test kind-voltha changes in 2.7)'
-
     project-type: pipeline
     concurrent: true
 
diff --git a/jjb/voltha-scale.yaml b/jjb/voltha-scale.yaml
index e298930..96140b2 100644
--- a/jjb/voltha-scale.yaml
+++ b/jjb/voltha-scale.yaml
@@ -25,7 +25,7 @@
           withEapol: true
           withDhcp: true
           withIgmp: false
-          extraHelmFlags: '--set authRetry=true,dhcpRetry=true'
+          extraHelmFlags: '--set authRetry=false,dhcpRetry=false'
           withPcap: false
 
       - 'voltha-scale-measurements':
@@ -63,13 +63,7 @@
           withDhcp: true
           withIgmp: false
           inMemoryEtcdStorage: false
-          extraHelmFlags: '--set authRetry=true,dhcpRetry=true -f /home/jenkins/voltha-scale/voltha-values.yaml --set etcd.persistence.enabled=true,etcd.persistence.storageClass=longhorn'
-          onosImg: andreacampanella/voltha-onos:voltha-onos-2.5
-          bbsimImg: gcgirish/bbsim:etcd
-          rwCoreImg: volthacore/voltha-rw-core:noflows
-          ofAgentImg: volthacore/voltha-ofagent:noflows
-          openoltAdapterImg: gcgirish/voltha-openolt-adapter:etcdNew
-          openonuAdapterGoImg: gcgirish/voltha-openonu-adapter-go:etcdNew
+          extraHelmFlags: '--set authRetry=false,dhcpRetry=false -f /home/jenkins/voltha-scale/voltha-values.yaml --set etcd.persistence.enabled=true,etcd.persistence.storageClass=longhorn'
           volthaHelmChartsChange: refs/changes/69/25069/7
 
       # jobs for 1024 ONUs with openonu-go and clustered ONOS (2 OLTs)
@@ -86,7 +80,8 @@
           withEapol: true
           withDhcp: true
           withIgmp: false
-          extraHelmFlags: '--set authRetry=true,dhcpRetry=true -f /home/jenkins/voltha-scale/voltha-values.yaml '
+          extraHelmFlags: '--set authRetry=false,dhcpRetry=false -f /home/jenkins/voltha-scale/voltha-values.yaml '
+          rwCoreImg: volthacore/voltha-rw-core:meter
 
       - 'voltha-scale-measurements':
           name: 'voltha-scale-measurements-master-2-16-32-dt-subscribers'
@@ -103,6 +98,7 @@
           withDhcp: false
           withIgmp: false
           extraHelmFlags: '-f /home/jenkins/voltha-scale/voltha-values.yaml '
+          rwCoreImg: volthacore/voltha-rw-core:meter
 
       - 'voltha-scale-measurements':
           name: 'voltha-scale-measurements-master-2-16-32-tt-subscribers'
@@ -120,7 +116,8 @@
           withIgmp: true
           onosReplicas: 3
           atomixReplicas: 3
-          extraHelmFlags: '--set dhcpRetry=true -f /home/jenkins/voltha-scale/voltha-values.yaml '
+          extraHelmFlags: '--set dhcpRetry=false -f /home/jenkins/voltha-scale/voltha-values.yaml '
+          rwCoreImg: volthacore/voltha-rw-core:meter
 
       # multi-stack jobs
       - 'voltha-scale-measurements':
@@ -180,11 +177,11 @@
           withIgmp: true
           extraHelmFlags: "-f /home/jenkins/voltha-scale/voltha-values.yaml "
 
-      # voltha-2.7 Jobs
+      # voltha-2.8 Jobs
       - 'voltha-scale-measurements':
-          name: 'voltha-scale-measurements-voltha-2.7-2-16-32-att-subscribers'
+          name: 'voltha-scale-measurements-voltha-2.8-2-16-32-att-subscribers'
           'disable-job': true
-          pipeline-script: 'voltha/voltha-2.7/voltha-scale-test.groovy'
+          pipeline-script: 'voltha/voltha-2.8/voltha-scale-test.groovy'
           build-node: 'voltha-scale-1'
           time-trigger: "H H/4 * * *"
           olts: 2
@@ -196,7 +193,7 @@
           withDhcp: true
           withIgmp: false
           extraHelmFlags: '--set defaults.rw_core.timeout=30s '
-          release: voltha-2.7
+          release: voltha-2.8
           bbsimImg: ''
           rwCoreImg: ''
           ofAgentImg: ''
@@ -206,9 +203,9 @@
           onosImg: ''
 
       - 'voltha-scale-measurements':
-          name: 'voltha-scale-measurements-voltha-2.7-2-16-32-dt-subscribers'
+          name: 'voltha-scale-measurements-voltha-2.8-2-16-32-dt-subscribers'
           'disable-job': true
-          pipeline-script: 'voltha/voltha-2.7/voltha-scale-test.groovy'
+          pipeline-script: 'voltha/voltha-2.8/voltha-scale-test.groovy'
           build-node: 'voltha-scale-1'
           time-trigger: "H H/4 * * *"
           olts: 2
@@ -221,7 +218,7 @@
           withDhcp: false
           withIgmp: false
           extraHelmFlags: '--set defaults.rw_core.timeout=30s '
-          release: voltha-2.7
+          release: voltha-2.8
           bbsimImg: ''
           rwCoreImg: ''
           ofAgentImg: ''
@@ -231,9 +228,9 @@
           onosImg: ''
 
       - 'voltha-scale-measurements':
-          name: 'voltha-scale-measurements-voltha-2.7-2-16-32-tt-subscribers'
+          name: 'voltha-scale-measurements-voltha-2.8-2-16-32-tt-subscribers'
           'disable-job': true
-          pipeline-script: 'voltha/voltha-2.7/voltha-scale-test.groovy'
+          pipeline-script: 'voltha/voltha-2.8/voltha-scale-test.groovy'
           build-node: 'voltha-scale-1'
           time-trigger: "H H/4 * * *"
           olts: 2
@@ -246,7 +243,7 @@
           withDhcp: true
           withIgmp: true
           extraHelmFlags: '--set defaults.rw_core.timeout=30s '
-          release: voltha-2.7
+          release: voltha-2.8
           bbsimImg: ''
           rwCoreImg: ''
           ofAgentImg: ''
diff --git a/jjb/voltha-test/voltha-nightly-jobs.yaml b/jjb/voltha-test/voltha-nightly-jobs.yaml
index 106696c..cf7c91b 100644
--- a/jjb/voltha-test/voltha-nightly-jobs.yaml
+++ b/jjb/voltha-test/voltha-nightly-jobs.yaml
@@ -98,12 +98,6 @@
           default: '{uniPortMask}'
           description: 'Open ONU adapter uni_port_mask, used when enableMultiUni is set to True, values: 0x0001-0x00FF'
 
-      # installBBSim is not used in the master branch pipeline, remove after 2.8
-      - bool:
-          name: installBBSim
-          default: '{installBBSim}'
-          description: "Install the BBSim container"
-
       - string:
           name: bbsimReplicas
           default: '{bbsimReplicas}'
@@ -144,12 +138,6 @@
           default: '{reinstall-olt}'
           description: "Re-install olt software bringing up CORD"
 
-      # withKind is not used in the master branch pipeline, remove after 2.8
-      - bool:
-          name: withKind
-          default: '{with-kind}'
-          description: "The pods uses kind and a physical fabric thus port forward to the management is needed"
-
       - string:
           name: VolthaEtcdPort
           default: '{VolthaEtcdPort}'
@@ -170,12 +158,6 @@
           default: '{volthaHelmChartsChange}'
           description: 'Download a change for gerrit in the voltha-helm-charts repo, example value: "refs/changes/32/19132/1"'
 
-      # kind-voltha is not used in the master branch pipeline, remove after 2.8
-      - string:
-          name: kindVolthaChange
-          default: '{kindVolthaChange}'
-          description: 'Download a change for gerrit in the kind-voltha repo, example value: "refs/changes/32/19132/1"'
-
       # NOTE is this needed/used?
       - string:
           name: cordTesterChange
@@ -231,8 +213,6 @@
     logLevel: 'DEBUG'
     enableMultiUni: false
     uniPortMask: '0x0001'
-    # installBBSim is not used in the master branch pipeline, remove after 2.8
-    installBBSim: false
     bbsimReplicas: 0
     num-of-onus: 0
     num-of-ponports: 0
@@ -274,8 +254,6 @@
     logLevel: 'DEBUG'
     enableMultiUni: false
     uniPortMask: '0x0001'
-    # installBBSim is not used in the master branch pipeline, remove after 2.8
-    installBBSim: false
     bbsimReplicas: 0
     num-of-onus: 0
     num-of-ponports: 0
@@ -292,52 +270,6 @@
                  TZ=America/Los_Angeles
                  H {time} * * *
 
-# this job template is defined to support VOLTHA-2.7 builds, remove after 2.8
-- job-template:
-    name: 'build_{config-pod}_{profile}{name-extension}_voltha_{release}'
-    id: build_voltha_pod_release_legacy
-    disabled: '{disable-job}'
-    description: |
-                  Automatic Build on POD {config-pod}, using {Jenkinsfile} in {gerrit-server-url}/voltha-system-tests' <br /><br />
-                  Created from job-template {id} from ci-management/jjb/voltha-test/voltha-nightly-jobs.yaml <br />
-                  Created by QA (Suchitra Vemuri - suchitra@opennetworking.org ) <br />
-                  This job is triggered upon completion of a dependent _test job <br />
-                  Copyright (c) 2020 Open Networking Foundation (ONF)
-
-    <<: *voltha-pipe-job-boiler-plate
-    VolthaEtcdPort: '2379'
-    release: '2.7'
-    branch: 'voltha-2.7'
-    volthaHelmChartsChange: '' # this is not supported in the VOLTHA-2.7 build, but the parameters are shared, ideally we should split them
-    logLevel: 'DEBUG'
-    enableMultiUni: false
-    uniPortMask: '0x0001'
-    installBBSim: false
-    # bbsimReplicas is not applicable for 2.7 Jobs
-    bbsimReplicas: 0
-    num-of-onus: 0
-    num-of-ponports: 0
-    num-of-kafka: 1
-    num-of-etcd: 1
-    extraHelmFlags: ''
-
-    <<: *voltha-build-job-parameters
-
-    concurrent: true
-
-    pipeline-scm:
-      script-path: '{Jenkinsfile}'
-      scm:
-        - git:
-            url: '{gerrit-server-url}/voltha-system-tests'
-            branches:
-              - '{branch}'
-
-    triggers:
-      - timed: |
-                 TZ=America/Los_Angeles
-                 H {time} * * *
-
 # VOLTHA Test Job
 # This job is automatically triggered after a build job has successfully completed
 - job-template:
diff --git a/jjb/voltha-test/voltha.yaml b/jjb/voltha-test/voltha.yaml
index 8144d4b..ea29df6 100644
--- a/jjb/voltha-test/voltha.yaml
+++ b/jjb/voltha-test/voltha.yaml
@@ -52,25 +52,6 @@
           test-repo: 'voltha-system-tests'
           pipeline-script: 'voltha-tt-physical-functional-tests.groovy'
 
-      # onlab pod1 OCP pod with olt/onu - Manual testing BAL3.1 release voltha master build job
-      - 'build_pod_manual':
-          build-node: 'onf-build'
-          config-pod: 'onlab-pod1'
-          release: 'master'
-          branch: 'master'
-          test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-build'
-          profile: '1T4GEM'
-
-      # onlab pod1 test job - BAL3.1 tests using voltha branch
-      - 'build_pod_test':
-          build-node: 'onf-build'
-          config-pod: 'onlab-pod1'
-          profile: '1T4GEM'
-          branch: 'master'
-          test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-test'
-
       # flex OCP pod with olt/onu - Default tech profile and timer based job
       - 'build_voltha_pod_release_timer':
           build-node: 'qa-testvm-pod'
@@ -91,66 +72,29 @@
           test-repo: 'voltha-system-tests'
           profile: 'Default'
 
-      # flex OCP pod with olt/onu - Released versions Default tech profile and timer based job
-      - 'build_voltha_pod_release_legacy':
+      # flex OCP pod with olt/onu - 1T4GEM tech profile and timer based job
+      - 'build_voltha_pod_release_timer':
           build-node: 'qa-testvm-pod'
           config-pod: 'flex-ocp-cord'
-          release: '2.7'
-          branch: 'voltha-2.7'
-          num-of-openonu: '1'
-          num-of-onos: '3'
-          num-of-atomix: '3'
-          test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-build'
-          configurePod: true
+          release: '2.8'
+          branch: 'voltha-2.8'
           profile: '1T4GEM'
           time: '1'
           VolthaEtcdPort: 9999
+          num-of-onos: '3'
+          num-of-atomix: '3'
+          pipeline-script: 'voltha/voltha-2.8/physical-build.groovy'
 
       # flex pod1 test job - released versions: uses tech profile on voltha branch
       - 'build_voltha_pod_test':
           build-node: 'qa-testvm-pod'
           config-pod: 'flex-ocp-cord'
-          release: '2.7'
-          branch: 'voltha-2.7'
+          release: '2.8'
+          branch: 'voltha-2.8'
           power-switch: True
           test-repo: 'voltha-system-tests'
           profile: '1T4GEM'
 
-     # flex OCP pod with olt/onu - Released versions Default tech profile and timer based job
-      - 'build_voltha_pod_release_legacy':
-          build-node: 'qa-testvm-pod'
-          config-pod: 'flex-ocp-cord'
-          disable-job: true
-          release: '2.7'
-          branch: 'voltha-2.7'
-          num-of-openonu: '1'
-          num-of-onos: '3'
-          num-of-atomix: '3'
-          name-extension: '_TT'
-          work-flow: 'TT'
-          test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-build'
-          configurePod: true
-          profile: 'TP'
-          # Update this value while enabling the job
-          time: ''
-          VolthaEtcdPort: 9999
-
-      # flex pod1 test job - released versions: uses tech profile on voltha branch
-      - 'build_voltha_pod_test':
-          build-node: 'qa-testvm-pod'
-          config-pod: 'flex-ocp-cord'
-          disable-job: true
-          release: '2.7'
-          branch: 'voltha-2.7'
-          name-extension: '_TT'
-          work-flow: 'TT'
-          power-switch: True
-          pipeline-script: 'voltha-tt-physical-functional-tests.groovy'
-          test-repo: 'voltha-system-tests'
-          profile: 'TP'
-
     # flex OCP pod with olt/onu - Released versions Default tech profile and timer based job
       - 'build_voltha_pod_release_timer':
           build-node: 'qa-testvm-pod'
@@ -181,6 +125,34 @@
     # flex OCP pod with olt/onu - Released versions Default tech profile and timer based job
       - 'build_voltha_pod_release_timer':
           build-node: 'qa-testvm-pod'
+          config-pod: 'flex-ocp-cord'
+          release: '2.8'
+          branch: 'voltha-2.8'
+          name-extension: '_TT'
+          work-flow: 'TT'
+          profile: 'TP'
+          time: '20'
+          VolthaEtcdPort: 9999
+          num-of-onos: '3'
+          num-of-atomix: '3'
+          pipeline-script: 'voltha/voltha-2.8/physical-build.groovy'
+
+      # flex pod1 test job - released versions: uses tech profile on voltha branch
+      - 'build_voltha_pod_test':
+          build-node: 'qa-testvm-pod'
+          config-pod: 'flex-ocp-cord'
+          release: '2.8'
+          branch: 'voltha-2.8'
+          name-extension: '_TT'
+          work-flow: 'TT'
+          power-switch: True
+          pipeline-script: 'voltha-tt-physical-functional-tests.groovy'
+          test-repo: 'voltha-system-tests'
+          profile: 'TP'
+
+    # flex OCP pod with olt/onu - Released versions Default tech profile and timer based job
+      - 'build_voltha_pod_release_timer':
+          build-node: 'qa-testvm-pod'
           config-pod: 'flex-ocp-cord-multi-uni'
           release: 'master'
           branch: 'master'
@@ -257,30 +229,27 @@
           power-switch: True
 
       # Menlo pod with olt/onu - released branch,  Default tech profile and timer based job
-      - 'build_voltha_pod_release_legacy':
+      - 'build_voltha_pod_release_timer':
           build-node: 'menlo-demo-pod'
           config-pod: 'onf-demo-pod'
-          release: '2.7'
-          branch: 'voltha-2.7'
+          release: '2.8'
+          branch: 'voltha-2.8'
           name-extension: '_DT'
           work-flow: 'DT'
-          num-of-openonu: '1'
+          profile: '1T8GEM'
           num-of-onos: '3'
           num-of-atomix: '3'
-          test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-build'
-          configurePod: true
-          profile: '1T8GEM'
           VolthaEtcdPort: 9999
           in-band-management: true
           time: '7'
+          pipeline-script: 'voltha/voltha-2.8/physical-build.groovy'
 
       # Menlo pod test job - uses tech profile on voltha branch
       - 'build_voltha_pod_test':
           build-node: 'menlo-demo-pod'
           config-pod: 'onf-demo-pod'
-          release: '2.7'
-          branch: 'voltha-2.7'
+          release: '2.8'
+          branch: 'voltha-2.8'
           name-extension: '_DT'
           work-flow: 'DT'
           test-repo: 'voltha-system-tests'
@@ -288,53 +257,6 @@
           pipeline-script: 'voltha-dt-physical-functional-tests.groovy'
           power-switch: True
 
-      # Menlo DEMO-POD - 1 1TCONT 4 4GEMs TechProfile - Manual build and test job
-      - 'build_pod_manual':
-          build-node: 'menlo-demo-pod'
-          config-pod: 'onf-demo-pod'
-          release: 'master'
-          branch: 'master'
-          test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-build'
-          configurePod: true
-          profile: '1T4GEM'
-          num-of-openonu: '1'
-          num-of-onos: '3'
-          num-of-atomix: '3'
-          in-band-management: true
-
-      - 'build_pod_test':
-          build-node: 'menlo-demo-pod'
-          config-pod: 'onf-demo-pod'
-          branch: 'master'
-          test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-test'
-          profile: '1T4GEM'
-
-      # Menlo DEMO-POD - Default TechProfile - manual build job
-      - 'build_pod_manual':
-          build-node: 'menlo-demo-pod'
-          config-pod: 'onf-demo-pod'
-          release: 'master'
-          branch: 'master'
-          num-of-openonu: '1'
-          num-of-onos: '3'
-          num-of-atomix: '3'
-          test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-build'
-          configurePod: true
-          profile: 'Default'
-          in-band-management: true
-
-      # ONF DEMO OCP test job - voltha-master branch
-      - 'build_pod_test':
-          build-node: 'menlo-demo-pod'
-          config-pod: 'onf-demo-pod'
-          profile: 'Default'
-          branch: 'master'
-          test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-test'
-
       # ONF Menlo Soak POD build job - voltha-master branch
       - 'build_voltha_pod_manual':
           build-node: 'menlo-soak-pod'
@@ -349,17 +271,6 @@
           logLevel: 'WARN'
 
       # ONF Menlo Soak POD test job - voltha-master branch
-      # FIXME once the soak-pod is back use 'build_voltha_pod_test'
-      - 'build_pod_test':
-          build-node: 'menlo-soak-pod'
-          config-pod: 'onf-soak-pod'
-          'disable-job': true
-          profile: 'Default'
-          branch: 'master'
-          test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-test'
-
-      # ONF Menlo Soak POD test job - voltha-master branch
       # Run tests manually triggering the job
       - 'build_voltha_pod_manual_test':
           build-node: 'menlo-soak-pod'
@@ -507,66 +418,6 @@
           power-switch: True
           pipeline-script: 'voltha-dt-physical-functional-tests.groovy'
 
-      # Berlin pod with olt/onu -  voltha-2.7 timer based job , two OLTs
-      - 'build_voltha_pod_release_legacy':
-          build-node: 'dt-berlin-community-pod'
-          config-pod: 'dt-berlin-pod-multi-olt'
-          disable-job: true
-          release: '2.7'
-          branch: 'voltha-2.7'
-          name-extension: '_DT'
-          work-flow: 'DT'
-          num-of-openonu: '1'
-          num-of-onos: '3'
-          num-of-atomix: '3'
-          test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-build'
-          configurePod: true
-          profile: '1T8GEM'
-          # Update this value accordingly once the job is enabled
-          time: ''
-
-      # Berlin POD test job -  voltha-2.7 versions: two OLTs
-      - 'build_voltha_pod_test':
-          build-node: 'dt-berlin-community-pod'
-          config-pod: 'dt-berlin-pod-multi-olt'
-          disable-job: true
-          release: '2.7'
-          branch: 'voltha-2.7'
-          name-extension: '_DT'
-          work-flow: 'DT'
-          test-repo: 'voltha-system-tests'
-          profile: '1T8GEM'
-          power-switch: True
-          pipeline-script: 'voltha-dt-physical-functional-tests.groovy'
-
-     # Berlin pod with olt/onu - voltha-2.7 Default tech profile and timer based job
-      - 'build_voltha_pod_release_legacy':
-          build-node: 'dt-berlin-community-pod'
-          config-pod: 'dt-berlin-pod'
-          release: '2.7'
-          branch: 'voltha-2.7'
-          num-of-openonu: '1'
-          num-of-onos: '3'
-          num-of-atomix: '3'
-          test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-build'
-          configurePod: true
-          disable-job: true
-          profile: 'Default'
-          # Update this value accordingly once the job is enabled
-          time: ''
-
-      # Berlin POD test job - released versions: uses tech profile on voltha branch
-      - 'build_voltha_pod_test':
-          build-node: 'dt-berlin-community-pod'
-          config-pod: 'dt-berlin-pod'
-          release: '2.7'
-          branch: 'voltha-2.7'
-          test-repo: 'voltha-system-tests'
-          profile: 'Default'
-          power-switch: True
-
       # Berlin pod with gpon olt/onu - master 1T8GEM tech profile and timer based job
       - 'build_voltha_pod_release_timer':
           build-node: 'dt-berlin-community-pod'
@@ -591,31 +442,28 @@
           power-switch: True
           pipeline-script: 'voltha-dt-physical-functional-tests.groovy'
 
-     # Berlin pod with gpon olt/onu - released 1T8GEM tech profile and timer based job
-      - 'build_voltha_pod_release_legacy':
+      # Berlin pod with gpon olt/onu - master 1T8GEM tech profile and timer based job
+      - 'build_voltha_pod_release_timer':
           build-node: 'dt-berlin-community-pod'
           config-pod: 'dt-berlin-pod-gpon'
-          release: '2.7'
-          branch: 'voltha-2.7'
-          num-of-openonu: '1'
-          num-of-onos: '3'
-          num-of-atomix: '3'
+          release: '2.8'
+          branch: 'voltha-2.8'
           name-extension: '_DT'
           work-flow: 'DT'
-          test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-build'
-          configurePod: true
           profile: '1T8GEM'
+          num-of-onos: '3'
+          num-of-atomix: '3'
           time: '13'
+          pipeline-script: 'voltha/voltha-2.8/physical-build.groovy'
 
-      # Berlin POD test job - released versions: uses 1T8GEM tech profile on voltha branch
+      # Berlin POD test job - master versions: uses 1T8GEM tech profile on voltha branch
       - 'build_voltha_pod_test':
           build-node: 'dt-berlin-community-pod'
           config-pod: 'dt-berlin-pod-gpon'
           name-extension: '_DT'
           work-flow: 'DT'
-          release: '2.7'
-          branch: 'voltha-2.7'
+          release: '2.8'
+          branch: 'voltha-2.8'
           test-repo: 'voltha-system-tests'
           profile: '1T8GEM'
           power-switch: True
@@ -648,52 +496,3 @@
           profile: '1T8GEM'
           power-switch: True
           pipeline-script: 'voltha-dt-physical-functional-tests.groovy'
-
-      # Berlin pod with olt/onu - manual test job, voltha master build job
-      - 'build_pod_manual':
-          build-node: 'dt-berlin-community-pod'
-          config-pod: 'dt-berlin-pod-gpon'
-          release: 'master'
-          branch: 'master'
-          num-of-openonu: '1'
-          test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-build'
-          profile: 'Default'
-
-      # Berlin pod1 test job - using voltha branch
-      - 'build_pod_test':
-          build-node: 'dt-berlin-community-pod'
-          config-pod: 'dt-berlin-pod-gpon'
-          profile: 'Default'
-          branch: 'master'
-          test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-test'
-
-      # Berlin pod with adtran gpon olt/onu - master 1T8GEM tech profile and timer based job
-      - 'build_voltha_pod_release_legacy':
-          build-node: 'dt-berlin-community-pod'
-          config-pod: 'dt-berlin-pod-gpon-adtran'
-          release: '2.6'
-          branch: 'voltha-2.6'
-          VolthaEtcdPort: 9999
-          name-extension: '_DT'
-          work-flow: 'DT'
-          profile: '1T8GEM'
-          reinstall-olt: false
-          Jenkinsfile: 'Jenkinsfile-voltha-build' # we are cloning voltha-system-test@2.6 that still has it
-          openoltAdapterChart: '/home/community/adtran-2021-01-29/voltha-adapter-adtran-olt'
-          time: '7'
-
-      # Berlin POD adtran test job - master versions: uses 1T8GEM tech profile on voltha branch
-      - 'build_voltha_pod_test':
-          build-node: 'dt-berlin-community-pod'
-          config-pod: 'dt-berlin-pod-gpon-adtran'
-          name-extension: '_DT'
-          work-flow: 'DT'
-          release: '2.6'
-          branch: 'voltha-2.6'
-          test-repo: 'voltha-system-tests'
-          profile: '1T8GEM'
-          power-switch: True
-          oltAdapterAppLabel: 'adapter-adtran-olt'
-          pipeline-script: 'voltha-dt-physical-functional-tests.groovy'
diff --git a/vars/createKubernetesCluster.groovy b/vars/createKubernetesCluster.groovy
index a1a2bde..5ef69f9 100644
--- a/vars/createKubernetesCluster.groovy
+++ b/vars/createKubernetesCluster.groovy
@@ -3,6 +3,7 @@
 def call(Map config) {
     // note that I can't define this outside the function as there's no global scope in Groovy
     def defaultConfig = [
+      branch: "master",
       nodes: 1,
       name: "kind-ci"
     ]
@@ -58,7 +59,11 @@
       if [ "\$HOSTARCH" == "x86_64" ]; then
           HOSTARCH="amd64"
       fi
-      VC_VERSION="\$(curl --fail -sSL https://api.github.com/repos/opencord/voltctl/releases/latest | jq -r .tag_name | sed -e 's/^v//g')"
+      if [ "${cfg.branch}" == "voltha-2.8" ]; then
+          VC_VERSION="1.6.10"
+      else
+          VC_VERSION="\$(curl --fail -sSL https://api.github.com/repos/opencord/voltctl/releases/latest | jq -r .tag_name | sed -e 's/^v//g')"
+      fi
       curl -Lo $WORKSPACE/bin/voltctl https://github.com/opencord/voltctl/releases/download/v\$VC_VERSION/voltctl-\$VC_VERSION-\$HOSTOS-\$HOSTARCH
       chmod +x $WORKSPACE/bin/voltctl
 
diff --git a/vars/getVolthaImageFlags.groovy b/vars/getVolthaImageFlags.groovy
index 8770ff2..957d586 100644
--- a/vars/getVolthaImageFlags.groovy
+++ b/vars/getVolthaImageFlags.groovy
@@ -15,11 +15,6 @@
       chart = "voltha-adapter-openonu"
       image = "adapter_open_onu_go"
     break
-    // TODO remove after 2.7
-    case "voltha-openonu-adapter":
-      chart = "voltha-adapter-openonu"
-      image = "adapter_open_onu"
-    break
     // TODO end
     case "voltha-openolt-adapter":
       chart = "voltha-adapter-openolt"
