Merge "Add CODECOV_TOKEN to up4 jobs"
diff --git a/global-jjb b/global-jjb
index 5a6965f..5dc3432 160000
--- a/global-jjb
+++ b/global-jjb
@@ -1 +1 @@
-Subproject commit 5a6965f43f220bf6002bfde60897afd216f52ab0
+Subproject commit 5dc3432cae2f13d9e5151a00a76a78ce73d92d70
diff --git a/jjb/api-test.yaml b/jjb/api-test.yaml
index 145a4fa..7e7275e 100644
--- a/jjb/api-test.yaml
+++ b/jjb/api-test.yaml
@@ -29,7 +29,7 @@
     parameters:
       - string:
           name: buildNode
-          default: 'ubuntu16.04-basebuild-4c-8g'
+          default: 'ubuntu18.04-basebuild-4c-8g'
           description: 'Name of the Jenkins node to run the job on'
 
       - string:
diff --git a/jjb/bbr.yaml b/jjb/bbr.yaml
index f5bd5c9..14b4caa 100644
--- a/jjb/bbr.yaml
+++ b/jjb/bbr.yaml
@@ -48,5 +48,5 @@
     parameters:
       - string:
           name: buildNode
-          default: 'ubuntu16.04-basebuild-4c-8g'
+          default: 'ubuntu18.04-basebuild-4c-8g'
           description: 'Name of the Jenkins node to run the job on'
diff --git a/jjb/charts.yaml b/jjb/charts.yaml
index 9908e7c..9999d4b 100644
--- a/jjb/charts.yaml
+++ b/jjb/charts.yaml
@@ -45,7 +45,7 @@
           choosing-strategy: 'gerrit'
           jenkins-ssh-credential: '{jenkins-ssh-credential}'
 
-    node: 'ubuntu16.04-basebuild-2c-4g'
+    node: 'ubuntu18.04-basebuild-2c-4g'
     project-type: freestyle
     concurrent: false
 
@@ -153,7 +153,7 @@
           choosing-strategy: gerrit
           jenkins-ssh-credential: '{jenkins-ssh-credential}'
 
-    node: 'ubuntu16.04-basebuild-2c-4g'
+    node: 'ubuntu18.04-basebuild-2c-4g'
     project-type: freestyle
     concurrent: true
 
diff --git a/jjb/ci-management/ci-management.yaml b/jjb/ci-management/ci-management.yaml
index 476e37b..f73d9b5 100644
--- a/jjb/ci-management/ci-management.yaml
+++ b/jjb/ci-management/ci-management.yaml
@@ -3,20 +3,13 @@
     archive-artifacts: '**/*.log'
     branch: 'master'
     build-timeout: '60'
-    build-node: 'centos7-basebuild-1c-1g'
+    build-node: 'ubuntu18.04-basebuild-1c-1g'
 
     jobs:
       - '{project-name}-ci-jobs'
-      - '{project-name}-packer-jobs':
-          platforms:
-            - 'centos-7'
-            - 'ubuntu-16.04'
-          templates:
-            - basebuild
 
     name: ci-management-jobs
     project: 'ci-management'
     project-name: 'ci-management'
 
     jjb-version: 3.2.0
-    packer-version: 1.2.4
diff --git a/jjb/defaults.yaml b/jjb/defaults.yaml
index 34cb3e1..d7da8ca 100644
--- a/jjb/defaults.yaml
+++ b/jjb/defaults.yaml
@@ -56,7 +56,7 @@
     # The most frequently used type of Build Executor. Name is per the LF global-jjb.
     # See build node types under "Cloud > Amazon EC2" at
     #  https://jenkins.opencord.org/configure
-    build-node: ubuntu16.04-basebuild-1c-1g
+    build-node: ubuntu18.04-basebuild-1c-1g
 
     # CORD Gerrit server definition, set in configuration
     gerrit-server-name: 'CORD Gerrit'
@@ -207,3 +207,7 @@
     # karaf-home
     # Use to grab the logs or onos-diagnostics
     karaf-home: 'apache-karaf-4.2.9'
+
+    # maven version
+    # Have to setup JAVA_HOME correctly if we upgrade to mvn36
+    maven-version: mvn33
diff --git a/jjb/device-management.yaml b/jjb/device-management.yaml
index dcbf82b..1c6d46f 100644
--- a/jjb/device-management.yaml
+++ b/jjb/device-management.yaml
@@ -43,7 +43,7 @@
     parameters:
       - string:
           name: buildNode
-          default: 'ubuntu16.04-basebuild-4c-8g'
+          default: 'ubuntu18.04-basebuild-4c-8g'
           description: 'Name of the Jenkins node to run the job on'
 
       - string:
diff --git a/jjb/docker-publish.yaml b/jjb/docker-publish.yaml
index d264eb9..dc0185c 100644
--- a/jjb/docker-publish.yaml
+++ b/jjb/docker-publish.yaml
@@ -28,7 +28,7 @@
     parameters:
       - string:
           name: buildNode
-          default: 'ubuntu16.04-basebuild-1c-2g'
+          default: 'ubuntu18.04-basebuild-1c-2g'
           description: 'Name of the Jenkins build executor to run the job on'
 
       - string:
diff --git a/jjb/gui-unit.yaml b/jjb/gui-unit.yaml
index 6cb5c2e..bb10618 100644
--- a/jjb/gui-unit.yaml
+++ b/jjb/gui-unit.yaml
@@ -40,7 +40,7 @@
           jenkins-ssh-credential: '{jenkins-ssh-credential}'
 
     # `npm install` fails on 1Gb RAM
-    node: 'ubuntu16.04-basebuild-1c-2g'
+    node: 'ubuntu18.04-basebuild-1c-2g'
     project-type: freestyle
     concurrent: true
 
diff --git a/jjb/maven.yaml b/jjb/maven.yaml
index 195c9e3..162209f 100644
--- a/jjb/maven.yaml
+++ b/jjb/maven.yaml
@@ -8,7 +8,7 @@
       <!-- Managed by Jenkins Job Builder -->
       Created by {id} job-template from ci-management/jjb/maven.yaml
 
-    node: 'ubuntu16.04-basebuild-1c-2g'
+    node: 'ubuntu18.04-basebuild-1c-2g'
     project-type: freestyle
 
     parameters:
@@ -57,6 +57,7 @@
           settings: 'cord-apps-maven-settings'
           settings-type: cfp
           goals: '-Pci-verify clean test install spotbugs:check'
+          maven-version: '{maven-version}'
 
     publishers:
       - junit:
@@ -81,7 +82,7 @@
       <!-- Managed by Jenkins Job Builder -->
       Created by {id} job-template from ci-management/jjb/maven.yaml
 
-    node: 'ubuntu16.04-basebuild-1c-2g'
+    node: 'ubuntu18.04-basebuild-1c-2g'
     project-type: freestyle
 
     parameters:
@@ -137,3 +138,4 @@
           settings: 'cord-apps-maven-settings'
           settings-type: cfp
           goals: '-Prelease clean deploy'
+          maven-version: '{maven-version}'
diff --git a/jjb/omec-ci.yaml b/jjb/omec-ci.yaml
index d78f5ae..fa09154 100644
--- a/jjb/omec-ci.yaml
+++ b/jjb/omec-ci.yaml
@@ -94,14 +94,14 @@
           pipeline-file: 'Jenkinsfile-omec-install-ngic-rtc-vnf.groovy'
       - 'omec-fossa':
           pipeline-file: 'omec-fossa-scan.groovy'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
       - 'omec-reuse':
           pipeline-file: 'omec-reuse-scan.groovy'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
       - 'docker-publish-github':
           build-timeout: 30
           docker-repo: 'omecproject'
-          build-node: 'ubuntu16.04-basebuild-4c-8g'
+          build-node: 'ubuntu18.04-basebuild-4c-8g'
       - 'omec-container'
 
 # for c3po
@@ -131,14 +131,14 @@
           pipeline-file: 'Jenkinsfile-omec-install-c3po-hss-vnf.groovy'
       - 'omec-fossa':
           pipeline-file: 'omec-fossa-scan.groovy'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
       - 'omec-reuse':
           pipeline-file: 'omec-reuse-scan.groovy'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
       - 'docker-publish-github':
           build-timeout: 30
           docker-repo: 'omecproject'
-          build-node: 'ubuntu16.04-basebuild-8c-15g'
+          build-node: 'ubuntu18.04-basebuild-8c-15g'
       - 'omec-container'
       - 'omec-container-remote':
           pod: 'dev'
@@ -168,14 +168,14 @@
           pipeline-file: 'Jenkinsfile-omec-install-openmme-vnf.groovy'
       - 'omec-fossa':
           pipeline-file: 'omec-fossa-scan.groovy'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
       - 'omec-reuse':
           pipeline-file: 'omec-reuse-scan.groovy'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
       - 'docker-publish-github':
           build-timeout: 30
           docker-repo: 'omecproject'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
 
 # for nucleus
 - project:
@@ -200,17 +200,17 @@
           pipeline-file: 'Jenkinsfile-omec-install-Nucleus-vnf.groovy'
       - 'omec-fossa':
           pipeline-file: 'omec-fossa-scan.groovy'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
       - 'omec-reuse':
           pipeline-file: 'omec-reuse-scan.groovy'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
       - 'omec-cppcheck':
           pipeline-file: 'omec-cppcheck.groovy'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
       - 'docker-publish-github':
           build-timeout: 60
           docker-repo: 'omecproject'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
       - 'omec-container'
       - 'omec-container-remote':
           pod: 'dev'
@@ -233,10 +233,10 @@
     jobs:
       - 'omec-fossa':
           pipeline-file: 'omec-fossa-scan.groovy'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
       - 'omec-reuse':
           pipeline-file: 'omec-reuse-scan.groovy'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
 
 # for ignite
 - project:
@@ -254,10 +254,10 @@
     jobs:
       - 'omec-fossa':
           pipeline-file: 'omec-fossa-scan.groovy'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
       - 'omec-reuse':
           pipeline-file: 'omec-reuse-scan.groovy'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
 
 # for upf-epc
 - project:
@@ -274,14 +274,14 @@
     jobs:
       - 'omec-fossa':
           pipeline-file: 'omec-fossa-scan.groovy'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
       - 'omec-reuse':
           pipeline-file: 'omec-reuse-scan.groovy'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
       - 'docker-publish-github':
           build-timeout: 30
           docker-repo: 'omecproject'
-          build-node: 'ubuntu16.04-basebuild-2c-4g'
+          build-node: 'ubuntu18.04-basebuild-2c-4g'
           extraEnvironmentVars: CPU=haswell
       - 'omec-container'
       - 'omec-container-remote':
diff --git a/jjb/onos-app-release.yaml b/jjb/onos-app-release.yaml
index 92cf4f1..e168556 100644
--- a/jjb/onos-app-release.yaml
+++ b/jjb/onos-app-release.yaml
@@ -69,7 +69,7 @@
           default: '{jdk-distribution}'
           description: 'Distribution of the JDK to use with update-java-alternatives'
 
-    node: 'ubuntu16.04-basebuild-1c-2g'
+    node: 'ubuntu18.04-basebuild-1c-2g'
     project-type: pipeline
     concurrent: true
 
diff --git a/jjb/pipeline/onos-app-release.groovy b/jjb/pipeline/onos-app-release.groovy
index ee14658..f8d87de 100644
--- a/jjb/pipeline/onos-app-release.groovy
+++ b/jjb/pipeline/onos-app-release.groovy
@@ -42,7 +42,7 @@
 
 // TODO: use the declarative pipeline syntax, like all other groovy files.
 //  This implementation is based on the legacy cord-onos-publisher/Jenkinsfile.release
-node ('ubuntu16.04-basebuild-1c-2g') {
+node ('ubuntu18.04-basebuild-1c-2g') {
 
   sh 'echo Releasing ' + appRepo + ' repository on ' + branch + ' branch'
   sh 'echo Releasing version ' + version + ' with API version ' + apiVersion + ' and starting ' + nextVersion + '-SNAPSHOT with API version ' + nextApiVersion + '-SNAPSHOT'
diff --git a/jjb/pipeline/voltha-nightly-tests-bbsim.groovy b/jjb/pipeline/voltha-nightly-tests-bbsim.groovy
index 5fb1278..d86aac9 100644
--- a/jjb/pipeline/voltha-nightly-tests-bbsim.groovy
+++ b/jjb/pipeline/voltha-nightly-tests-bbsim.groovy
@@ -103,6 +103,7 @@
              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
 
diff --git a/jjb/pipeline/voltha-openonu-go-tests.groovy b/jjb/pipeline/voltha-openonu-go-tests.groovy
deleted file mode 100755
index d810638..0000000
--- a/jjb/pipeline/voltha-openonu-go-tests.groovy
+++ /dev/null
@@ -1,519 +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 {
-    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"
-    ROBOT_MISC_ARGS="-d $WORKSPACE/RobotLogs"
-    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 {
-        sh """
-           cd $WORKSPACE/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
-           bash <( curl -sfL https://raw.githubusercontent.com/boz/kail/master/godownloader.sh) -b "$WORKSPACE/kind-voltha/bin"
-           """
-      }
-    }
-
-    stage('Build Images') {
-      steps {
-        sh """
-          make -C $WORKSPACE/voltha-openonu-adapter-go DOCKER_REGISTRY=mirror.registry.opennetworking.org/ DOCKER_REPOSITORY=voltha/ DOCKER_TAG=citest docker-build
-          """
-      }
-    }
-
-    stage('Push Images') {
-      steps {
-        sh '''
-           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-control-plane,voltha-\$NAME-worker,voltha-\$NAME-worker2; done
-           '''
-      }
-    }
-    stage('Deploy Voltha') {
-      steps {
-        sh """
-           export EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${extraHelmFlags} "
-
-           IMAGES="adapter_open_onu_go"
-
-           for I in \$IMAGES
-           do
-             EXTRA_HELM_FLAGS+="--set images.\$I.tag=citest,images.\$I.pullPolicy=Never "
-           done
-
-           cd $WORKSPACE/kind-voltha/
-           echo \$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
-
-           ./voltha up
-           """
-      }
-    }
-
-    stage('Run E2E Tests 1t8gem') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/1t8gem"
-      }
-      steps {
-        sh '''
-          cd $WORKSPACE/kind-voltha/
-          WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down
-
-          export EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${extraHelmFlags} "
-
-          IMAGES="adapter_open_onu_go"
-
-          for I in \$IMAGES
-          do
-            EXTRA_HELM_FLAGS+="--set images.\$I.tag=citest,images.\$I.pullPolicy=Never "
-          done
-          #1t8gem
-          mkdir -p $WORKSPACE/1t8gem
-          _TAG=kail-1t8gem kail -n voltha -n default > $WORKSPACE/1t8gem/onos-voltha-combined.log &
-
-          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
-
-          DEPLOY_K8S=n ./voltha up
-
-          mkdir -p $ROBOT_LOGS_DIR/1t8gem
-          export ROBOT_MISC_ARGS="-d $ROBOT_LOGS_DIR"
-          export TARGET_1T8GEM=1t8gem-openonu-go-adapter-test
-
-          if [ "${branch}" != "voltha-2.6" ]; then
-            export KVSTOREPREFIX=voltha_voltha
-          fi
-
-          make -C $WORKSPACE/voltha-system-tests \$TARGET_1T8GEM || 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
-
-          # get pods information
-          kubectl get pods -o wide --all-namespaces > $WORKSPACE/1t8gem/pods.txt || true
-        '''
-      }
-    }
-
-    stage('DT workflow') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/DTWorkflow"
-      }
-      steps {
-        sh '''
-           cd $WORKSPACE/kind-voltha/
-           WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down
-
-           export EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${extraHelmFlags} "
-
-           IMAGES="adapter_open_onu_go"
-
-           for I in \$IMAGES
-           do
-             EXTRA_HELM_FLAGS+="--set images.\$I.tag=citest,images.\$I.pullPolicy=Never "
-           done
-
-           # 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/dt
-           _TAG=kail-dt kail -n voltha -n default > $WORKSPACE/dt/onos-voltha-combined.log &
-
-           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
-
-           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 --all-namespaces > $WORKSPACE/dt/pods.txt || true
-           '''
-      }
-    }
-
-    stage('ATT workflow') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/ATTWorkflow"
-      }
-      steps {
-        sh '''
-           cd $WORKSPACE/kind-voltha/
-           WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down
-
-           export EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${extraHelmFlags} "
-
-           IMAGES="adapter_open_onu_go"
-
-           for I in \$IMAGES
-           do
-             EXTRA_HELM_FLAGS+="--set images.\$I.tag=citest,images.\$I.pullPolicy=Never "
-           done
-
-           # 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/att
-           _TAG=kail-att kail -n voltha -n default > $WORKSPACE/att/onos-voltha-combined.log &
-
-           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
-
-           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 '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 --all-namespaces > $WORKSPACE/att/pods.txt || true
-           '''
-      }
-    }
-
-    stage('TT workflow') {
-      environment {
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/TTWorkflow"
-      }
-      steps {
-        sh '''
-           cd $WORKSPACE/kind-voltha/
-           WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down
-
-           export EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${extraHelmFlags} "
-
-           IMAGES="adapter_open_onu_go"
-
-           for I in \$IMAGES
-           do
-             EXTRA_HELM_FLAGS+="--set images.\$I.tag=citest,images.\$I.pullPolicy=Never "
-           done
-
-           # 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/tt
-           _TAG=kail-tt kail -n voltha -n default > $WORKSPACE/tt/onos-voltha-combined.log &
-
-           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
-
-           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-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
-
-           # get pods information
-           kubectl get pods -o wide --all-namespaces > $WORKSPACE/tt/pods.txt || true
-           '''
-      }
-    }
-  }
-  post {
-    always {
-      sh '''
-         set +e
-         # 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
-
-         sync
-         pkill kail || true
-         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/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,**/*.gz,**/*.txt'
-    }
-  }
-}
diff --git a/jjb/pipeline/voltha/master/openonu-go-periodic-test-bbsim.groovy b/jjb/pipeline/voltha/master/openonu-go-periodic-test-bbsim.groovy
new file mode 100644
index 0000000..eeca95a
--- /dev/null
+++ b/jjb/pipeline/voltha/master/openonu-go-periodic-test-bbsim.groovy
@@ -0,0 +1,231 @@
+// 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(testName, workflow, testTarget, outputDir, testSpecificHelmFlags = "") {
+  def infraNamespace = "default"
+  def volthaNamespace = "voltha"
+  def robotLogsDir = "RobotLogs"
+  stage('Cleanup') {
+    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
+        '''
+      }
+    }
+  }
+  stage('Deploy Voltha') {
+    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 != "") {
+          localCharts = true
+        }
+
+        // NOTE temporary workaround expose ONOS node ports
+        def localHelmFlags = extraHelmFlags + " --set global.log_level=DEBUG --set onos-classic.onosSshPort=30115 " +
+        " --set onos-classic.onosApiPort=30120 " +
+        " --set onos-classic.onosOfPort=31653 " +
+        " --set onos-classic.individualOpenFlowNodePorts=true " + testSpecificHelmFlags
+        volthaDeploy([
+          infraNamespace: infraNamespace,
+          volthaNamespace: volthaNamespace,
+          workflow: workflow.toLowerCase(),
+          extraHelmFlags: localHelmFlags,
+          localCharts: localCharts,
+          bbsimReplica: olts.toInteger(),
+          dockerRegistry: "mirror.registry.opennetworking.org"
+          ])
+      }
+      // start logging
+      sh """
+      mkdir -p ${outputDir}
+      _TAG=kail-${workflow} kail -n infra -n voltha > ${outputDir}/onos-voltha-combined.log &
+      """
+      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("${outputDir}")
+    }
+  }
+  stage('Run test ' + testTarget + ' on ' + workflow + ' workFlow') {
+    sh """
+    mkdir -p $WORKSPACE/${robotLogsDir}/${testName}
+    export ROBOT_MISC_ARGS="-d $WORKSPACE/${robotLogsDir}/${testName} "
+    ROBOT_MISC_ARGS+="-v ONOS_SSH_PORT:30115 -v ONOS_REST_PORT:30120"
+    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
+    """
+  }
+}
+
+def collectArtifacts(exitStatus) {
+  getPodsInfo("$WORKSPACE/${exitStatus}")
+  sh """
+  kubectl logs -n voltha -l app.kubernetes.io/part-of=voltha > $WORKSPACE/${exitStatus}/voltha.log
+  """
+  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]);
+}
+
+pipeline {
+
+  /* no label, executor is determined by JJB */
+  agent {
+    label "${params.buildNode}"
+  }
+  options {
+    timeout(time: 130, 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('Create K8s Cluster') {
+      steps {
+        script {
+          def clusterExists = sh returnStdout: true, script: """
+          kind get clusters | grep ${clusterName} | wc -l
+          """
+          if (clusterExists.trim() == "0") {
+            createKubernetesCluster([nodes: 3, name: clusterName])
+          }
+        }
+      }
+    }
+
+    stage('Run E2E Tests 1t1gem') {
+      steps {
+        execute_test("1t1gem", "att", makeTarget, "$WORKSPACE/1t1gem")
+       }
+     }
+
+    stage('Run E2E Tests 1t4gem') {
+      steps {
+        execute_test("1t4gem", "att", make1t4gemTestTarget, "$WORKSPACE/1t4gem")
+       }
+     }
+
+    stage('Run E2E Tests 1t8gem') {
+      steps {
+        execute_test("1t8gem", "att", make1t8gemTestTarget, "$WORKSPACE/1t8gem")
+      }
+    }
+
+    stage('Run MIB Upload Tests') {
+      when { beforeAgent true; expression { return "${olts}" == "1" } }
+      steps {
+        script {
+          def mibUploadHelmFlags = "--set pon=2,onu=2,controlledActivation=only-onu "
+          execute_test("mibupload", "att", "mib-upload-templating-openonu-go-adapter-test", "$WORKSPACE/mibupload", mibUploadHelmFlags)
+        }
+      }
+    }
+
+    stage('Reconcile DT workflow') {
+      steps {
+        script {
+          execute_test("ReconcileDT", "dt", makeReconcileDtTestTarget, "$WORKSPACE/ReconcileDT")
+        }
+      }
+    }
+
+    stage('Reconcile ATT workflow') {
+      steps {
+        script {
+          execute_test("ReconcileATT", "att", makeReconcileTestTarget, "$WORKSPACE/ReconcileATT")
+        }
+      }
+    }
+
+    stage('Reconcile TT workflow') {
+      steps {
+        script {
+          execute_test("ReconcileTT", "tt", makeReconcileTtTestTarget, "$WORKSPACE/ReconcileTT")
+        }
+      }
+    }
+  }
+  post {
+    aborted {
+      collectArtifacts("aborted")
+    }
+    failure {
+      collectArtifacts("failed")
+    }
+    always {
+      collectArtifacts("always")
+    }
+  }
+}
diff --git a/jjb/pipeline/voltha/master/physical-build.groovy b/jjb/pipeline/voltha/master/physical-build.groovy
index 63c24b6..4a0a9d6 100644
--- a/jjb/pipeline/voltha/master/physical-build.groovy
+++ b/jjb/pipeline/voltha/master/physical-build.groovy
@@ -92,10 +92,18 @@
               localCharts = true
             }
 
+            // should the config file be suffixed with the workflow? see "deployment_config"
             def extraHelmFlags = "-f $WORKSPACE/${configBaseDir}/${configKubernetesDir}/voltha/${configFileName}.yml "
 
+            if (workFlow.toLowerCase() == "dt") {
+              extraHelmFlags += " --set radius.enabled=false "
+            }
+            if (workFlow.toLowerCase() == "tt") {
+              extraHelmFlags += " --set radius.enabled=false --set global.incremental_evto_update=true "
+            }
+
             // NOTE temporary workaround expose ONOS node ports (pod-config needs to be updated to contain these values)
-            extraHelmFlags = extraHelmFlags + "--set onos-classic.onosSshPort=30115 " +
+            extraHelmFlags = extraHelmFlags + " --set onos-classic.onosSshPort=30115 " +
             "--set onos-classic.onosApiPort=30120 " +
             "--set onos-classic.onosOfPort=31653 " +
             "--set onos-classic.individualOpenFlowNodePorts=true "
@@ -110,12 +118,13 @@
               // NOTE does this needs to be configured?
               kafkaReplica: 3,
               etcdReplica: 3,
+              bbsimReplica: 0,
               ])
           }
           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 ${params.VolthaEtcdPort}: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"&
+          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")
@@ -306,7 +315,7 @@
             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' || true
+              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 -f > /dev/null &' || true
               sleep ${waitTimerForOltUp}
               """
             }
diff --git a/jjb/pipeline/voltha/master/software-upgrades.groovy b/jjb/pipeline/voltha/master/software-upgrades.groovy
index 811d642..2b8f5e2 100644
--- a/jjb/pipeline/voltha/master/software-upgrades.groovy
+++ b/jjb/pipeline/voltha/master/software-upgrades.groovy
@@ -24,7 +24,7 @@
   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") {
-          extraHelmFlags = extraHelmFlags + "--set global.image_tag=master "
+          extraHelmFlags = extraHelmFlags + "--set global.image_tag=master --set images.onos_config_loader.tag=master-onos-config-loader --set onos-classic.image.tag=master "
       }
       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 \
diff --git a/jjb/pipeline/voltha/master/voltha-scale-test.groovy b/jjb/pipeline/voltha/master/voltha-scale-test.groovy
index 2c99359..e0b65d3 100644
--- a/jjb/pipeline/voltha/master/voltha-scale-test.groovy
+++ b/jjb/pipeline/voltha/master/voltha-scale-test.groovy
@@ -325,7 +325,7 @@
           # 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
+          # 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
 
@@ -334,6 +334,7 @@
           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
 
           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
@@ -485,7 +486,7 @@
       }
       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
+          # 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
diff --git a/jjb/pipeline/voltha-openonu-go-test-bbsim.groovy b/jjb/pipeline/voltha/voltha-2.7/voltha-openonu-go-test-bbsim.groovy
similarity index 100%
rename from jjb/pipeline/voltha-openonu-go-test-bbsim.groovy
rename to jjb/pipeline/voltha/voltha-2.7/voltha-openonu-go-test-bbsim.groovy
diff --git a/jjb/software-upgrades.yaml b/jjb/software-upgrades.yaml
index 1fced67..d2dd947 100644
--- a/jjb/software-upgrades.yaml
+++ b/jjb/software-upgrades.yaml
@@ -14,21 +14,21 @@
           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-20210330.115023-1.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-20210330.115335-1.oar'
+          olt-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/olt-app/4.5.0-SNAPSHOT/olt-app-4.5.0-20210421.101421-2.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-20210401.173400-2.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-20210330.123148-1.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-20210330.080559-1.oar'
+          sadis-oar-url: 'https://oss.sonatype.org/content/groups/public/org/opencord/sadis-app/5.4.0-SNAPSHOT/sadis-app-5.4.0-20210421.084108-2.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-20210330.215302-2.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-20210330.193240-1.oar'
-          adapter-open-olt-image: 'voltha/voltha-openolt-adapter:3.2.1'
-          adapter-open-onu-image: 'voltha/voltha-openonu-adapter-go:1.2.10'
-          rw-core-image: 'voltha/voltha-rw-core:2.8.2'
-          ofagent-image: 'voltha/voltha-ofagent-go:1.5.2'
+          adapter-open-olt-image: 'voltha/voltha-openolt-adapter:3.3.2'
+          adapter-open-onu-image: 'voltha/voltha-openonu-adapter-go:1.2.11'
+          rw-core-image: 'voltha/voltha-rw-core:2.9.1'
+          ofagent-image: 'voltha/voltha-ofagent-go:1.6.1'
           onu-image-name: 'software-image.img'
           onu-image-url: 'http://bbsim0:50074/images'
           onu-image-version: 'v1.0.0'
diff --git a/jjb/triggered-api-test.yaml b/jjb/triggered-api-test.yaml
index 853fd5a..8e4cc33 100644
--- a/jjb/triggered-api-test.yaml
+++ b/jjb/triggered-api-test.yaml
@@ -30,7 +30,7 @@
     parameters:
       - string:
           name: buildNode
-          default: 'ubuntu16.04-basebuild-4c-8g'
+          default: 'ubuntu18.04-basebuild-4c-8g'
           description: 'Name of the Jenkins node to run the job on'
 
       - string:
diff --git a/jjb/verify/abstract-olt.yaml b/jjb/verify/abstract-olt.yaml
index 3aab818..fcd9bff 100644
--- a/jjb/verify/abstract-olt.yaml
+++ b/jjb/verify/abstract-olt.yaml
@@ -51,7 +51,7 @@
           jenkins-ssh-credential: '{jenkins-ssh-credential}'
           basedir: '{project}'
 
-    node: 'ubuntu16.04-basebuild-1c-2g'
+    node: 'ubuntu18.04-basebuild-1c-2g'
     project-type: freestyle
     concurrent: true
 
diff --git a/jjb/verify/bbsim-sadis-server.yaml b/jjb/verify/bbsim-sadis-server.yaml
index 0cc823b..2ce60d3 100644
--- a/jjb/verify/bbsim-sadis-server.yaml
+++ b/jjb/verify/bbsim-sadis-server.yaml
@@ -23,7 +23,7 @@
       - 'tag-collision-reject':
           dependency-jobs: 'verify_bbsim-sadis-server_licensed'
       - 'make-unit-test':
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
           dest-gopath: "github.com/opencord"
           unit-test-targets: 'lint sca test'
           unit-test-keep-going: 'true'
@@ -39,6 +39,7 @@
     jobs:
       - 'voltha-patch-test':
           pipeline-script: 'voltha/master/bbsim-tests.groovy'
+          extraHelmFlags: '--set global.image_tag=master --set onos-classic.image.tag=master'
 
 - job-group:
     name: 'publish-bbsim-sadis-server-jobs'
diff --git a/jjb/verify/bbsim.yaml b/jjb/verify/bbsim.yaml
index 19b9c69..37dfbae 100644
--- a/jjb/verify/bbsim.yaml
+++ b/jjb/verify/bbsim.yaml
@@ -24,7 +24,7 @@
       - 'tag-collision-reject':
           dependency-jobs: 'verify_bbsim_licensed'
       - 'make-unit-test':
-          build-node: 'ubuntu16.04-basebuild-4c-8g'
+          build-node: 'ubuntu18.04-basebuild-4c-8g'
           dest-gopath: "github.com/opencord"
           unit-test-targets: 'lint sca test'
           unit-test-keep-going: 'true'
@@ -40,6 +40,7 @@
     jobs:
       - 'voltha-patch-test':
           pipeline-script: 'voltha/master/bbsim-tests.groovy'
+          extraHelmFlags: '--set global.image_tag=master --set onos-classic.image.tag=master'
 
 - job-group:
     name: 'publish-bbsim-jobs'
diff --git a/jjb/verify/device-management.yaml b/jjb/verify/device-management.yaml
index 58f2dec..0179a40 100644
--- a/jjb/verify/device-management.yaml
+++ b/jjb/verify/device-management.yaml
@@ -19,7 +19,7 @@
           dependency-jobs: 'verify_device-management_licensed'
       - 'make-unit-test':
           junit-allow-empty-results: true
-          build-node: 'ubuntu16.04-basebuild-2c-4g'
+          build-node: 'ubuntu18.04-basebuild-2c-4g'
       - 'device-management-patch-test':
           pipeline-script: 'voltha/master/device-management-mock-tests.groovy'
 
diff --git a/jjb/verify/ofagent-go.yaml b/jjb/verify/ofagent-go.yaml
index 458e030..9483d6e 100644
--- a/jjb/verify/ofagent-go.yaml
+++ b/jjb/verify/ofagent-go.yaml
@@ -24,7 +24,7 @@
       - 'tag-collision-reject':
           dependency-jobs: 'verify_ofagent-go_licensed'
       - 'make-unit-test':
-          build-node: 'ubuntu16.04-basebuild-4c-8g'
+          build-node: 'ubuntu18.04-basebuild-4c-8g'
           dest-gopath: "github.com/opencord"
           unit-test-targets: 'lint sca test'
           unit-test-keep-going: 'true'
@@ -41,6 +41,7 @@
     jobs:
       - 'voltha-patch-test':
           pipeline-script: 'voltha/master/bbsim-tests.groovy'
+          extraHelmFlags: '--set global.image_tag=master --set onos-classic.image.tag=master'
 
 - job-group:
     name: 'publish-ofagent-go-jobs'
diff --git a/jjb/verify/opendevice-manager.yaml b/jjb/verify/opendevice-manager.yaml
index 9ed0715..f3ee4b4 100644
--- a/jjb/verify/opendevice-manager.yaml
+++ b/jjb/verify/opendevice-manager.yaml
@@ -15,7 +15,7 @@
       - 'verify-licensed'
       - 'tag-collision-reject'
       - 'make-unit-test':
-          build-node: 'ubuntu16.04-basebuild-2c-4g'
+          build-node: 'ubuntu18.04-basebuild-2c-4g'
           unit-test-targets: 'test'
           # opendm-agent uses gtest which outputs in xunit format
           junit-allow-empty-results: true
diff --git a/jjb/verify/opendm-agent.yaml b/jjb/verify/opendm-agent.yaml
index ee5fce9..2d5a258 100644
--- a/jjb/verify/opendm-agent.yaml
+++ b/jjb/verify/opendm-agent.yaml
@@ -15,7 +15,7 @@
       - 'verify-licensed'
       - 'tag-collision-reject'
       - 'make-unit-test':
-          build-node: 'ubuntu16.04-basebuild-2c-4g'
+          build-node: 'ubuntu18.04-basebuild-2c-4g'
           unit-test-targets: 'test'
           # opendm-agent uses gtest which outputs in xunit format
           junit-allow-empty-results: true
diff --git a/jjb/verify/openolt-test.yaml b/jjb/verify/openolt-test.yaml
index c8ef753..67d0f99 100644
--- a/jjb/verify/openolt-test.yaml
+++ b/jjb/verify/openolt-test.yaml
@@ -16,7 +16,7 @@
       - 'verify-licensed'
       - 'tag-collision-reject'
       - 'make-unit-test':
-          build-node: 'ubuntu16.04-basebuild-2c-4g'
+          build-node: 'ubuntu18.04-basebuild-2c-4g'
           build-timeout: 60
           unit-test-targets: 'lint docker-build'
           junit-allow-empty-results: true
diff --git a/jjb/verify/openolt.yaml b/jjb/verify/openolt.yaml
index ef8ab38..04ae7b4 100644
--- a/jjb/verify/openolt.yaml
+++ b/jjb/verify/openolt.yaml
@@ -15,7 +15,7 @@
       - 'verify-licensed'
       - 'tag-collision-reject'
       - 'make-unit-test':
-          build-node: 'ubuntu16.04-basebuild-2c-4g'
+          build-node: 'ubuntu18.04-basebuild-2c-4g'
           unit-test-targets: 'test'
           # openolt uses gtest which outputs in xunit format
           junit-allow-empty-results: true
diff --git a/jjb/verify/osam.yaml b/jjb/verify/osam.yaml
index a89f1cc..a09a43d 100644
--- a/jjb/verify/osam.yaml
+++ b/jjb/verify/osam.yaml
@@ -51,7 +51,7 @@
           jenkins-ssh-credential: '{jenkins-ssh-credential}'
           basedir: '{basedir}'
 
-    node: 'ubuntu16.04-basebuild-1c-2g'
+    node: 'ubuntu18.04-basebuild-1c-2g'
     project-type: freestyle
     concurrent: true
 
@@ -91,6 +91,7 @@
       - maven-target:
           goals: "test"
           pom: "pom.xml"
+          maven-version: '{maven-version}'
 
     publishers:
       - postbuildscript:
diff --git a/jjb/verify/ponsim.yaml b/jjb/verify/ponsim.yaml
index 68cf602..527c0cd 100644
--- a/jjb/verify/ponsim.yaml
+++ b/jjb/verify/ponsim.yaml
@@ -18,7 +18,7 @@
       - 'tag-collision-reject':
           dependency-jobs: 'verify_ponsim_licensed'
       - 'make-unit-test':
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
           dest-gopath: "github.com/opencord"
           unit-test-targets: 'test docker-build'
           unit-test-keep-going: 'true'
diff --git a/jjb/verify/sadis-server.yaml b/jjb/verify/sadis-server.yaml
index 3d1b591..5edbd53 100644
--- a/jjb/verify/sadis-server.yaml
+++ b/jjb/verify/sadis-server.yaml
@@ -53,7 +53,7 @@
           jenkins-ssh-credential: '{jenkins-ssh-credential}'
           basedir: '{project}'
 
-    node: 'ubuntu16.04-basebuild-1c-2g'
+    node: 'ubuntu18.04-basebuild-1c-2g'
     project-type: freestyle
     concurrent: true
 
diff --git a/jjb/verify/up4.yaml b/jjb/verify/up4.yaml
index 043dc55..087b66b 100644
--- a/jjb/verify/up4.yaml
+++ b/jjb/verify/up4.yaml
@@ -13,7 +13,7 @@
           stream: "master"
           # As we run integration tests with 3 ONOS instances,
           # we need a beefy node.
-          build-node: "ubuntu16.04-basebuild-8c-15g"
+          build-node: "ubuntu18.04-basebuild-8c-15g"
 
 - job-group:
     name: "up4-jobs"
diff --git a/jjb/verify/voltctl.yaml b/jjb/verify/voltctl.yaml
index d7fca71..220e0ce 100644
--- a/jjb/verify/voltctl.yaml
+++ b/jjb/verify/voltctl.yaml
@@ -20,18 +20,19 @@
       - 'tag-collision-reject':
           dependency-jobs: 'verify_voltctl_licensed'
       - 'make-unit-test':
-          build-node: 'ubuntu16.04-basebuild-2c-4g'
+          build-node: 'ubuntu18.04-basebuild-2c-4g'
           unit-test-targets: 'lint sca test'
           unit-test-keep-going: 'true'
           dependency-jobs: 'verify_voltctl_tag-collision'
       - 'voltha-patch-test':
           pipeline-script: 'voltha/master/bbsim-tests.groovy'
+          extraHelmFlags: '--set global.image_tag=master --set onos-classic.image.tag=master'
 
 - job-group:
     name: 'post-submit-voltctl-jobs'
     jobs:
       - 'github-release':
-          build-node: 'ubuntu16.04-basebuild-2c-4g'
+          build-node: 'ubuntu18.04-basebuild-2c-4g'
           dependency-jobs: 'version-tag'
           github-organization: 'opencord'
           artifact-glob: 'release/*'
diff --git a/jjb/verify/voltha-api-server.yaml b/jjb/verify/voltha-api-server.yaml
index 58982e2..fe82286 100644
--- a/jjb/verify/voltha-api-server.yaml
+++ b/jjb/verify/voltha-api-server.yaml
@@ -20,7 +20,7 @@
       - 'tag-collision-reject':
           dependency-jobs: 'verify_voltha-api-server_licensed'
       - 'make-unit-test':
-          build-node: 'ubuntu16.04-basebuild-2c-4g'
+          build-node: 'ubuntu18.04-basebuild-2c-4g'
           dest-gopath: "github.com/opencord"
           unit-test-targets: 'lint sca test'
           unit-test-keep-going: 'true'
diff --git a/jjb/verify/voltha-bbsim.yaml b/jjb/verify/voltha-bbsim.yaml
index 1ad61e9..5cdf7ad 100644
--- a/jjb/verify/voltha-bbsim.yaml
+++ b/jjb/verify/voltha-bbsim.yaml
@@ -21,7 +21,7 @@
           unit-test-targets: 'test'
           dest-gopath: "github.com/opencord"
           junit-allow-empty-results: true
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
 
 - job-group:
     name: 'publish-voltha-bbsim-jobs'
diff --git a/jjb/verify/voltha-go.yaml b/jjb/verify/voltha-go.yaml
index d3db340..e4a4576 100644
--- a/jjb/verify/voltha-go.yaml
+++ b/jjb/verify/voltha-go.yaml
@@ -24,7 +24,7 @@
       - 'tag-collision-reject':
           dependency-jobs: 'verify_voltha-go_licensed'
       - 'make-unit-test':
-          build-node: 'ubuntu16.04-basebuild-4c-8g'
+          build-node: 'ubuntu18.04-basebuild-4c-8g'
           build-timeout: 20
           dest-gopath: "github.com/opencord"
           name-extension: "-lint"
@@ -32,7 +32,7 @@
           unit-test-keep-going: 'true'
           junit-allow-empty-results: true
       - 'make-unit-test':
-          build-node: 'ubuntu16.04-basebuild-2c-4g'
+          build-node: 'ubuntu18.04-basebuild-2c-4g'
           dest-gopath: "github.com/opencord"
           name-extension: "-tests"
           unit-test-targets: 'test'
@@ -49,6 +49,7 @@
     jobs:
       - 'voltha-patch-test':
           pipeline-script: 'voltha/master/bbsim-tests.groovy'
+          extraHelmFlags: '--set global.image_tag=master --set onos-classic.image.tag=master'
 
 - job-group:
     name: 'publish-voltha-go-jobs'
diff --git a/jjb/verify/voltha-lib-go.yaml b/jjb/verify/voltha-lib-go.yaml
index d03b6d4..f6e2b7a 100644
--- a/jjb/verify/voltha-lib-go.yaml
+++ b/jjb/verify/voltha-lib-go.yaml
@@ -16,7 +16,7 @@
       - 'tag-collision-reject':
           dependency-jobs: 'verify_voltha-lib-go_licensed'
       - 'make-unit-test':
-          build-node: 'ubuntu16.04-basebuild-4c-8g'
+          build-node: 'ubuntu18.04-basebuild-4c-8g'
           build-timeout: 20
           dest-gopath: "github.com/opencord"
           unit-test-targets: 'lint sca test'
diff --git a/jjb/verify/voltha-onos.yaml b/jjb/verify/voltha-onos.yaml
index 7c7bd07..d708a43 100644
--- a/jjb/verify/voltha-onos.yaml
+++ b/jjb/verify/voltha-onos.yaml
@@ -35,6 +35,7 @@
     jobs:
       - 'voltha-patch-test':
           pipeline-script: 'voltha/master/bbsim-tests.groovy'
+          extraHelmFlags: '--set global.image_tag=master --set onos-classic.image.tag=master'
 
 - job-group:
     name: 'publish-voltha-onos-jobs'
diff --git a/jjb/verify/voltha-openolt-adapter.yaml b/jjb/verify/voltha-openolt-adapter.yaml
index f19edc7..ff3587b 100644
--- a/jjb/verify/voltha-openolt-adapter.yaml
+++ b/jjb/verify/voltha-openolt-adapter.yaml
@@ -29,14 +29,14 @@
           unit-test-targets: 'lint sca'
           unit-test-keep-going: 'true'
           junit-allow-empty-results: true
-          build-node: 'ubuntu16.04-basebuild-4c-8g'
+          build-node: 'ubuntu18.04-basebuild-4c-8g'
       - 'make-unit-test':
           dest-gopath: "github.com/opencord"
           name-extension: "-tests"
           unit-test-targets: 'test'
           unit-test-keep-going: 'true'
           junit-allow-empty-results: true
-          build-node: 'ubuntu16.04-basebuild-2c-4g'
+          build-node: 'ubuntu18.04-basebuild-2c-4g'
 
 - job-group:
     name: 'verify-voltha-openolt-adapter-jobs-voltha-2.7'
@@ -49,6 +49,7 @@
     jobs:
       - 'voltha-patch-test':
           pipeline-script: 'voltha/master/bbsim-tests.groovy'
+          extraHelmFlags: '--set global.image_tag=master --set onos-classic.image.tag=master'
 
 - job-group:
     name: 'publish-voltha-openolt-adapter-jobs'
diff --git a/jjb/verify/voltha-openonu-adapter-go.yaml b/jjb/verify/voltha-openonu-adapter-go.yaml
index 4746e97..e4e67e3 100644
--- a/jjb/verify/voltha-openonu-adapter-go.yaml
+++ b/jjb/verify/voltha-openonu-adapter-go.yaml
@@ -28,14 +28,14 @@
           unit-test-targets: 'lint sca'
           unit-test-keep-going: 'true'
           junit-allow-empty-results: true
-          build-node: 'ubuntu16.04-basebuild-4c-8g'
+          build-node: 'ubuntu18.04-basebuild-4c-8g'
       - 'make-unit-test':
           dest-gopath: "github.com/opencord"
           name-extension: "-tests"
           unit-test-targets: 'test'
           unit-test-keep-going: 'true'
           junit-allow-empty-results: true
-          build-node: 'ubuntu16.04-basebuild-2c-4g'
+          build-node: 'ubuntu18.04-basebuild-2c-4g'
 
 - job-group:
     name: 'verify-voltha-openonu-adapter-go-jobs-voltha-2.7'
@@ -48,6 +48,7 @@
     jobs:
       - 'voltha-patch-test':
           pipeline-script: 'voltha/master/bbsim-tests.groovy'
+          extraHelmFlags: '--set global.image_tag=master --set onos-classic.image.tag=master'
 
 - job-group:
     name: 'publish-voltha-openonu-adapter-go-jobs'
diff --git a/jjb/verify/voltha-openonu-adapter.yaml b/jjb/verify/voltha-openonu-adapter.yaml
index fe18d4d..21a1968 100644
--- a/jjb/verify/voltha-openonu-adapter.yaml
+++ b/jjb/verify/voltha-openonu-adapter.yaml
@@ -46,6 +46,7 @@
     jobs:
       - 'voltha-patch-test':
           pipeline-script: 'voltha/master/bbsim-tests.groovy'
+          extraHelmFlags: '--set global.image_tag=master --set onos-classic.image.tag=master'
 
 - job-group:
     name: 'publish-voltha-openonu-adapter-jobs'
diff --git a/jjb/verify/voltha-protos.yaml b/jjb/verify/voltha-protos.yaml
index aefda8b..14ebf9a 100644
--- a/jjb/verify/voltha-protos.yaml
+++ b/jjb/verify/voltha-protos.yaml
@@ -19,7 +19,7 @@
       - 'verify-licensed'
       - 'tag-collision-reject':
       - 'make-unit-test':
-          build-node: 'ubuntu16.04-basebuild-2c-4g'
+          build-node: 'ubuntu18.04-basebuild-2c-4g'
           build-timeout: 20
           unit-test-targets: 'test'
           unit-test-keep-going: 'true'
diff --git a/jjb/verify/voltha-system-tests.yaml b/jjb/verify/voltha-system-tests.yaml
index 3624903..b385e2f 100644
--- a/jjb/verify/voltha-system-tests.yaml
+++ b/jjb/verify/voltha-system-tests.yaml
@@ -7,15 +7,15 @@
 
     jobs:
       - 'verify-voltha-system-tests-jobs':
-          buildNode: 'ubuntu18.04-basebuild-4c-8g'
+          build-node: 'ubuntu18.04-basebuild-4c-8g'
           branch-regexp: '{all-branches-regexp}'
       - 'verify-voltha-system-tests-jobs-voltha-2.7':
-          buildNode:  'ubuntu18.04-basebuild-4c-8g'
+          build-node:  'ubuntu18.04-basebuild-4c-8g'
           name-extension: '-voltha-2.7'
           override-branch: 'voltha-2.7'
           branch-regexp: '{kind-voltha-regexp}'
       - 'verify-voltha-system-tests-jobs-master':
-          buildNode:  'ubuntu18.04-basebuild-4c-8g'
+          build-node:  'ubuntu18.04-basebuild-4c-8g'
           branch-regexp: '^master$'
 
 - job-group:
@@ -40,3 +40,4 @@
     jobs:
       - 'voltha-patch-test':
           pipeline-script: 'voltha/master/bbsim-tests.groovy'
+          extraHelmFlags: '--set global.image_tag=master --set onos-classic.image.tag=master'
diff --git a/jjb/verify/xos.yaml b/jjb/verify/xos.yaml
index ff385f5..b33d7d2 100644
--- a/jjb/verify/xos.yaml
+++ b/jjb/verify/xos.yaml
@@ -31,7 +31,7 @@
     jobs:
       - 'python-unit-test':
           build-timeout: 45
-          build-node: 'ubuntu16.04-basebuild-2c-4g'
+          build-node: 'ubuntu18.04-basebuild-2c-4g'
       - 'api-test':
           pipeline-script: 'xos-core.groovy'
 
diff --git a/jjb/voltha-e2e.yaml b/jjb/voltha-e2e.yaml
index d5b8bad..39e22c7 100755
--- a/jjb/voltha-e2e.yaml
+++ b/jjb/voltha-e2e.yaml
@@ -21,7 +21,7 @@
     make-target-reconciletttest: reconcile-openonu-go-adapter-test-tt
 
     jobs:
-      - 'voltha-periodic-test':
+      - 'voltha-periodic-test-kind-voltha-based':
           name: 'periodic-voltha-test-bbsim'
           pipeline-script: 'voltha-nightly-tests-bbsim.groovy'
           build-node: 'qct-pod4-node2'
@@ -37,7 +37,7 @@
           pons: 2
           time-trigger: "H H/23 * * *"
 
-      - 'voltha-periodic-test':
+      - 'voltha-periodic-test-kind-voltha-based':
           name: 'periodic-voltha-multiple-olts-test-bbsim'
           pipeline-script: 'voltha-nightly-tests-bbsim.groovy'
           build-node: 'qct-pod4-node2'
@@ -53,7 +53,7 @@
           pons: 2
           time-trigger: "H H/23 * * *"
 
-      - 'voltha-periodic-test':
+      - 'voltha-periodic-test-kind-voltha-based':
           name: 'periodic-voltha-multiple-olts-test-bbsim-2.7'
           pipeline-script: 'voltha-nightly-tests-bbsim.groovy'
           build-node: 'qct-pod4-node2'
@@ -71,22 +71,20 @@
 
       - 'voltha-periodic-test':
           name: 'periodic-voltha-openonu-go-test-bbsim'
-          pipeline-script: 'voltha-openonu-go-test-bbsim.groovy'
-          build-node: 'ubuntu16.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: 'master'
           time-trigger: "H H/12 * * *"
 
       - 'voltha-periodic-test':
+          name: 'patchset-voltha-openonu-go-test-bbsim'
+          trigger-comment: "voltha test openonu"
+          code-branch: '$GERRIT_BRANCH'
+          gerrit-project: '$GERRIT_PROJECT'
+          gerritRefspec: '$GERRIT_REFSPEC'
+
+      - 'voltha-periodic-test-kind-voltha-based':
           name: 'periodic-voltha-openonu-go-test-bbsim-2.7'
-          pipeline-script: 'voltha-openonu-go-test-bbsim.groovy'
-          build-node: 'ubuntu16.04-basebuild-8c-15g'
+          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
@@ -99,25 +97,38 @@
 
       - 'voltha-periodic-test':
           name: 'periodic-voltha-multiple-olts-openonu-go-test-bbsim'
-          pipeline-script: 'voltha-openonu-go-test-bbsim.groovy'
-          build-node: 'ubuntu16.04-basebuild-8c-15g'
+          code-branch: 'master'
+          olts: 2
+          onus: 2
+          pons: 2
           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: 'master'
-          olts: 2
-          onus: 2
-          pons: 2
           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'
+          gerrit-project: '$GERRIT_PROJECT'
+          gerritRefspec: '$GERRIT_REFSPEC'
+          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
+          olts: 2
+          onus: 2
+          pons: 2
+
+      - 'voltha-periodic-test-kind-voltha-based':
           name: 'periodic-voltha-multiple-olts-openonu-go-test-bbsim-2.7'
-          pipeline-script: 'voltha-openonu-go-test-bbsim.groovy'
-          build-node: 'ubuntu16.04-basebuild-8c-15g'
+          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
@@ -131,7 +142,7 @@
           pons: 2
           time-trigger: "H H/23 * * *"
 
-      - 'voltha-periodic-test':
+      - 'voltha-periodic-test-kind-voltha-based':
           name: 'periodic-voltha-test-DMI'
           pipeline-script: 'voltha-DMI-bbsim-tests.groovy'
           build-node: 'qct-pod4-node2'
@@ -140,7 +151,7 @@
           code-branch: 'master'
           time-trigger: "H H/23 * * *"
 
-      - 'voltha-periodic-test':
+      - 'voltha-periodic-test-kind-voltha-based':
           name: 'periodic-voltha-test-DMI-2.7'
           pipeline-script: 'voltha-DMI-bbsim-tests.groovy'
           build-node: 'qct-pod4-node2'
@@ -149,7 +160,7 @@
           code-branch: 'voltha-2.7'
           time-trigger: "H H/23 * * *"
 
-      - 'voltha-periodic-test':
+      - 'voltha-periodic-test-kind-voltha-based':
           name: 'periodic-voltha-test-bbsim-2.7'
           pipeline-script: 'voltha-nightly-tests-bbsim.groovy'
           build-node: 'qct-pod4-node2'
@@ -163,20 +174,20 @@
           pons: 2
           time-trigger: "H H * * *"
 
-      - 'voltha-periodic-test':
+      - 'voltha-periodic-test-kind-voltha-based':
           name: 'periodic-voltha-etcd-test'
           pipeline-script: 'voltha-system-test-bbsim.groovy'
-          build-node: 'ubuntu16.04-basebuild-4c-8g'
+          build-node: 'ubuntu18.04-basebuild-4c-8g'
           code-branch: 'master'
           make-target: sanity-multi-kind
           onus: 2
           pons: 2
           time-trigger: "H H/12 * * *"
 
-      - 'voltha-periodic-test':
+      - 'voltha-periodic-test-kind-voltha-based':
           name: 'periodic-voltha-etcd-test-2.7'
           pipeline-script: 'voltha-system-test-bbsim.groovy'
-          build-node: 'ubuntu16.04-basebuild-4c-8g'
+          build-node: 'ubuntu18.04-basebuild-4c-8g'
           code-branch: 'voltha-2.7'
           make-target: sanity-multi-kind
           onus: 2
@@ -184,7 +195,7 @@
           time-trigger: "H H/12 * * *"
 
 
-      - 'voltha-periodic-test':
+      - 'voltha-periodic-test-kind-voltha-based':
           name: 'periodic-voltha-sanity-test-multi-runs'
           pipeline-script: 'voltha-go-multi-tests.groovy'
           build-node: 'qct-pod4-node2'
@@ -195,7 +206,7 @@
           test-runs: 5
           time-trigger: "H H/23 * * *"
 
-      - 'voltha-periodic-test':
+      - 'voltha-periodic-test-kind-voltha-based':
           name: 'periodic-voltha-sanity-test-multi-runs-2.7'
           pipeline-script: 'voltha-go-multi-tests.groovy'
           build-node: 'qct-pod4-node2'
@@ -206,9 +217,9 @@
           test-runs: 5
           time-trigger: "H H/23 * * *"
 
-      - 'voltha-periodic-test':
+      - 'voltha-periodic-test-kind-voltha-based':
           name: 'nightly-voltha-DTflow-sanity-test'
-          build-node: 'ubuntu16.04-basebuild-4c-8g'
+          build-node: 'ubuntu18.04-basebuild-4c-8g'
           code-branch: 'master'
           make-target: sanity-kind-dt
           onus: 1
@@ -285,14 +296,182 @@
           default-test-args: '-i sanityORDeleteOLT -i PowerSwitch -X'
 
 - job-template:
+  # as of now this template is only used by the openonu-go periodic test,
+  # in order to use for multiple pipelines we should change it so that
+  # we can specify a list of make targets and iterate over that
     id: 'voltha-periodic-test'
     name: '{name}'
+    pipeline-script: 'voltha/master/openonu-go-periodic-test-bbsim.groovy'
+    build-node: 'ubuntu18.04-basebuild-8c-15g'
+    test-runs: 1
+    robot-args: ''
+    gerrit-project: ''
+    gerritRefspec: ''
+    work-flow: ''
+    volthaSystemTestsChange: ''
+    volthaHelmChartsChange: ''
+    extraHelmFlags: ''
+    sandbox: true
+    olts: 1
+    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
+    trigger-comment: vv7CBoQQYYonvaN8xcru
+    time-trigger: 0 0 29 2 *
+
+    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'
+
+      # TODO is there a better way to manage the test targets?
+      # maybe we can use a comma separated list?
+      - 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: 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: gerritRefspec
+          default: ''
+          description: 'PatchSet REFSPEC in Gerrit, example value: "refs/changes/79/18779/13"'
+
+      - string:
+          name: extraRobotArgs
+          default: '{robot-args}'
+          description: 'Arguments to pass to robot'
+
+      - 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: volthaHelmChartsChange
+          default: '{volthaHelmChartsChange}'
+          description: 'Download a change for gerrit in the voltha-helm-charts repo, example value: "refs/changes/79/18779/13"'
+
+      - 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:
+      # patchset jobs will set this to "0 0 29 2 *" (feb 29th, it's once every 4 years)
+      - timed: |
+                 TZ=America/Los_Angeles
+                 {time-trigger}
+      # periodic jobs will set this to vv7CBoQQYYonvaN8xcru (hopefully no-one will comment with that)
+      - gerrit:
+          server-name: '{gerrit-server-name}'
+          silent-start: false
+          successful-message: "PASSED openonu-go test"
+          failure-message: "FAILED openonu-go test"
+          unstable-message: "UNSTABLE openonu-go test"
+          trigger-on:
+            - comment-added-contains-event:
+                comment-contains-value: '.*{trigger-comment}.*'
+          projects:
+            - project-compare-type: REG_EXP
+              project-pattern: '^(voltha-go|voltha-openolt-adapter|voltha-openonu-adapter-go|ofagent-go|voltha-onos|bbsim)$'
+              branches:
+                - branch-compare-type: REG_EXP
+                  branch-pattern: '{all-branches-regexp}'
+
+- job-template:
+    id: 'voltha-periodic-test-kind-voltha-based'
+    name: '{name}'
     pipeline-script: 'voltha-go-tests.groovy'
     test-runs: 1
     robot-args: ''
     gerrit-project: ''
     work-flow: ''
     volthaSystemTestsChange: ''
+    volthaHelmChartsChange: ''
     kindVolthaChange: ''
     extraHelmFlags: ''
     sandbox: true
@@ -453,12 +632,13 @@
 - job-template:
     id: 'voltha-patch-test'
     name: 'verify_{project}_sanity-test{name-extension}'
+    build-node: 'ubuntu18.04-basebuild-4c-8g'
     override-branch: '$GERRIT_BRANCH'
     sandbox: true
     build-timeout: 20
     volthaSystemTestsChange: ''
     volthaHelmChartsChange: ''
-    kindVolthaChange: ''
+    extraHelmFlags: ''
     branch-regexp: '{all-branches-regexp}'
 
     description: |
@@ -479,7 +659,7 @@
     parameters:
       - string:
           name: buildNode
-          default: 'ubuntu16.04-basebuild-4c-8g'
+          default: '{build-node}'
           description: 'Name of the Jenkins node to run the job on'
 
       - string:
@@ -494,7 +674,7 @@
 
       - string:
           name: extraHelmFlags
-          default: ''
+          default: '{extraHelmFlags}'
           description: 'Helm flags to pass to ./voltha up'
 
       - string:
@@ -512,12 +692,6 @@
           default: '{override-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: '{kindVolthaChange}'
-          description: 'Download a change for gerrit in the kind-voltha repo, example value: "refs/changes/32/19132/1"'
-
     project-type: pipeline
     concurrent: true
 
@@ -747,7 +921,7 @@
               project-pattern: '^(voltha-openolt-adapter|voltha-openonu-adapter|voltha-openonu-adapter-go|voltha-go)$'
               branches:
                 - branch-compare-type: REG_EXP
-                  branch-pattern: '{all-branches-regexp}'
+                  branch-pattern: '{branch-pattern}'
 
 
 - job-template:
diff --git a/jjb/voltha-publish.yaml b/jjb/voltha-publish.yaml
index d8b8246..aa68028 100644
--- a/jjb/voltha-publish.yaml
+++ b/jjb/voltha-publish.yaml
@@ -9,7 +9,7 @@
       - 'voltha-publish':
           project-regexp: 'voltha'
           branch-regexp: '^(master|voltha-1.6|voltha-1.7)$'
-          build-node: 'ubuntu16.04-basebuild-1c-2g'
+          build-node: 'ubuntu18.04-basebuild-1c-2g'
           dependency-jobs: ''
 
 - job-template:
diff --git a/jjb/voltha-scale.yaml b/jjb/voltha-scale.yaml
index eca1d68..606c3bc 100644
--- a/jjb/voltha-scale.yaml
+++ b/jjb/voltha-scale.yaml
@@ -64,7 +64,6 @@
           withIgmp: false
           extraHelmFlags: '--set authRetry=true,dhcpRetry=true --set global.log_correlation.enabled=true -f /home/jenkins/voltha-scale/voltha-values.yaml'
           onosImg: andreacampanella/voltha-onos:olt-group-pkt-req-mcast-fix
-          bbsimImg: matteoscandolo/bbsim:gemport
 
       - 'voltha-scale-measurements':
           name: 'voltha-scale-measurements-master-2-16-32-dt-subscribers'
@@ -81,7 +80,6 @@
           withDhcp: false
           withIgmp: false
           extraHelmFlags: '--set authRetry=true,dhcpRetry=true --set global.log_correlation.enabled=true -f /home/jenkins/voltha-scale/voltha-values.yaml '
-          bbsimImg: matteoscandolo/bbsim:gemport
 
       - 'voltha-scale-measurements':
           name: 'voltha-scale-measurements-master-2-16-32-tt-subscribers'
@@ -99,9 +97,8 @@
           withIgmp: true
           onosReplicas: 3
           atomixReplicas: 3
-          extraHelmFlags: '--set authRetry=true,dhcpRetry=true --set global.log_correlation.enabled=true -f /home/jenkins/voltha-scale/voltha-values.yaml '
+          extraHelmFlags: '--set authRetry=true,dhcpRetry=true --set global.rw_core.core_timeout=60s --set global.log_correlation.enabled=true -f /home/jenkins/voltha-scale/voltha-values.yaml '
           onosImg: andreacampanella/voltha-onos:olt-group-pkt-req-mcast-fix
-          bbsimImg: matteoscandolo/bbsim:gemport
 
       # multi-stack jobs
       - 'voltha-scale-measurements':
@@ -181,7 +178,7 @@
           withIgmp: false
           extraHelmFlags: '--set defaults.rw_core.timeout=30s '
           release: voltha-2.7
-          bbsimImg: matteoscandolo/bbsim:gemport
+          bbsimImg: ''
           rwCoreImg: ''
           ofAgentImg: ''
           openoltAdapterImg: ''
@@ -206,7 +203,7 @@
           withIgmp: false
           extraHelmFlags: '--set defaults.rw_core.timeout=30s '
           release: voltha-2.7
-          bbsimImg: matteoscandolo/bbsim:gemport
+          bbsimImg: ''
           rwCoreImg: ''
           ofAgentImg: ''
           openoltAdapterImg: ''
@@ -231,7 +228,7 @@
           withIgmp: true
           extraHelmFlags: '--set defaults.rw_core.timeout=30s '
           release: voltha-2.7
-          bbsimImg: matteoscandolo/bbsim:gemport
+          bbsimImg: ''
           rwCoreImg: ''
           ofAgentImg: ''
           openoltAdapterImg: ''
diff --git a/jjb/voltha-test/voltha.yaml b/jjb/voltha-test/voltha.yaml
index 607b2bf..6091b84 100644
--- a/jjb/voltha-test/voltha.yaml
+++ b/jjb/voltha-test/voltha.yaml
@@ -371,6 +371,31 @@
           pipeline-script: 'voltha-physical-soak-dt-tests.groovy'
           time-trigger: "H H */3 * *"
 
+        # Berlin pod with olt/onu - master versions timer based job , two OLTs
+      - 'build_voltha_pod_release_timer':
+          build-node: 'menlo-certification-pod'
+          config-pod: 'menlo-certification-pod-radisys-gpon'
+          disable-job: false
+          reinstall-olt: false
+          name-extension: '_DT'
+          work-flow: 'DT'
+          profile: '1T8GEM-unencrypted'
+          time: '1'
+
+          # Berlin POD test job - master versions: uses tech profile on voltha branch
+      - 'build_voltha_pod_test':
+          build-node: 'menlo-certification-pod'
+          config-pod: 'menlo-certification-pod-radisys-gpon'
+          disable-job: false
+          release: 'master'
+          branch: 'master'
+          name-extension: '_DT'
+          work-flow: 'DT'
+          test-repo: 'voltha-system-tests'
+          profile: '1T8GEM-unencrypted'
+          power-switch: false
+          pipeline-script: 'voltha-dt-physical-functional-tests.groovy'
+
       # Berlin pod with olt/onu - master versions timer based job , two OLTs
       - 'build_voltha_pod_release_timer':
           build-node: 'dt-berlin-community-pod'
diff --git a/jjb/voltha-unit-test.yaml b/jjb/voltha-unit-test.yaml
index c2132fa..f4225a3 100644
--- a/jjb/voltha-unit-test.yaml
+++ b/jjb/voltha-unit-test.yaml
@@ -37,7 +37,7 @@
           choosing-strategy: gerrit
           jenkins-ssh-credential: '{jenkins-ssh-credential}'
 
-    node: 'ubuntu16.04-basebuild-4c-8g'
+    node: 'ubuntu18.04-basebuild-4c-8g'
     project-type: freestyle
     concurrent: true
 
diff --git a/jjb/xos-auth.yaml b/jjb/xos-auth.yaml
index 6b035f9..63a81a1 100644
--- a/jjb/xos-auth.yaml
+++ b/jjb/xos-auth.yaml
@@ -32,7 +32,7 @@
           branch: '$GERRIT_BRANCH'
           destination-dir: 'cord'
 
-    node: 'ubuntu16.04-basebuild-4c-8g'
+    node: 'ubuntu18.04-basebuild-4c-8g'
     project-type: freestyle
     concurrent: true
 
diff --git a/jjb/xos-integration-tests.yaml b/jjb/xos-integration-tests.yaml
index c894947..b1cd814 100644
--- a/jjb/xos-integration-tests.yaml
+++ b/jjb/xos-integration-tests.yaml
@@ -33,7 +33,7 @@
     parameters:
       - string:
           name: buildNode
-          default: 'ubuntu16.04-basebuild-4c-8g'
+          default: 'ubuntu18.04-basebuild-4c-8g'
           description: 'Name of the Jenkins node to run the job on'
 
       - string:
@@ -92,7 +92,7 @@
     parameters:
       - string:
           name: buildNode
-          default: 'ubuntu16.04-basebuild-4c-8g'
+          default: 'ubuntu18.04-basebuild-4c-8g'
           description: 'Name of the Jenkins node to run the job on'
 
       - string:
@@ -151,7 +151,7 @@
     parameters:
       - string:
           name: buildNode
-          default: 'ubuntu16.04-basebuild-4c-8g'
+          default: 'ubuntu18.04-basebuild-4c-8g'
           description: 'Name of the Jenkins node to run the job on'
 
       - string:
@@ -210,7 +210,7 @@
     parameters:
       - string:
           name: buildNode
-          default: 'ubuntu16.04-basebuild-4c-8g'
+          default: 'ubuntu18.04-basebuild-4c-8g'
           description: 'Name of the Jenkins node to run the job on'
 
       - string:
diff --git a/jjb/xos-rest-gw-unit.yaml b/jjb/xos-rest-gw-unit.yaml
index 7b12ffe..5eac9ad 100644
--- a/jjb/xos-rest-gw-unit.yaml
+++ b/jjb/xos-rest-gw-unit.yaml
@@ -40,7 +40,7 @@
           choosing-strategy: gerrit
           jenkins-ssh-credential: '{jenkins-ssh-credential}'
 
-    node: 'ubuntu16.04-basebuild-1c-2g'
+    node: 'ubuntu18.04-basebuild-1c-2g'
     project-type: freestyle
     concurrent: true
 
diff --git a/jjb/xos-synchronizer-update.yaml b/jjb/xos-synchronizer-update.yaml
index 2f49512..3ac10c9 100644
--- a/jjb/xos-synchronizer-update.yaml
+++ b/jjb/xos-synchronizer-update.yaml
@@ -28,7 +28,7 @@
     parameters:
       - string:
           name: buildNode
-          default: 'ubuntu16.04-basebuild-4c-8g'
+          default: 'ubuntu18.04-basebuild-4c-8g'
           description: 'Name of the Jenkins node to run the job on'
 
       - string:
diff --git a/jjb/xos-unit.yaml b/jjb/xos-unit.yaml
index 89fd6c1..12190b5 100644
--- a/jjb/xos-unit.yaml
+++ b/jjb/xos-unit.yaml
@@ -32,7 +32,7 @@
           branch: 'master'
           destination-dir: 'cord'
 
-    node: 'ubuntu16.04-basebuild-1c-2g'
+    node: 'ubuntu18.04-basebuild-1c-2g'
     project-type: freestyle
     concurrent: true
 
diff --git a/jjb/xos-upgrade.yaml b/jjb/xos-upgrade.yaml
index 506d5dd..4889246 100644
--- a/jjb/xos-upgrade.yaml
+++ b/jjb/xos-upgrade.yaml
@@ -29,7 +29,7 @@
     parameters:
       - string:
           name: buildNode
-          default: 'ubuntu16.04-basebuild-4c-8g'
+          default: 'ubuntu18.04-basebuild-4c-8g'
           description: 'Name of the Jenkins node to run the job on'
 
       - string:
diff --git a/packer/common-packer b/packer/common-packer
index e96974f..4a5b0cd 160000
--- a/packer/common-packer
+++ b/packer/common-packer
@@ -1 +1 @@
-Subproject commit e96974fa52edb7d8e7f27d314155bd088255e07d
+Subproject commit 4a5b0cd9032938194c4813fe36663ddee4f9e60e
diff --git a/packer/provision/baseline.yaml b/packer/provision/baseline.yaml
index 1aad172..2c43ecf 100644
--- a/packer/provision/baseline.yaml
+++ b/packer/provision/baseline.yaml
@@ -17,7 +17,7 @@
         dest: /etc/sudoers.d/89-jenkins-user-defaults
         content: |
           Defaults:jenkins !requiretty
-          jenkins ALL=(ALL) NOPASSWD:ALL
+          jenkins ALL = NOPASSWD: /usr/sbin/update-alternatives, /usr/sbin/update-java-alternatives
         validate: /usr/sbin/visudo -cf %s
       become: yes
 
diff --git a/packer/provision/onf-playbook.yaml b/packer/provision/onf-playbook.yaml
index 206fec8..a30a228 100644
--- a/packer/provision/onf-playbook.yaml
+++ b/packer/provision/onf-playbook.yaml
@@ -7,6 +7,16 @@
   become: true
 
   tasks:
+    - name: Add Java Amazon Corretto Jdk repo GPG key
+      apt_key:
+        url: https://apt.corretto.aws/corretto.key
+        state: present
+
+    - name: Add Java Amazon Corretto Jdk repo
+      apt_repository:
+        repo: deb https://apt.corretto.aws stable main
+        state: present
+
     - name: Install apt packages
       apt:
         name:
@@ -37,6 +47,8 @@
           - "nodejs-dev"
           - "node-gyp"
           - "npm"
+          - "java-1.8.0-amazon-corretto-jdk"
+          - "java-11-amazon-corretto-jdk"
         state: "present"
         update_cache: true
         cache_valid_time: 3600
@@ -217,6 +229,26 @@
         path: /usr/local/bin/hadolint
         mode: 0755
 
+    - name: Download github-release
+      get_url:
+        url: "https://github.com/github-release/github-release/releases/download/v0.10.0/linux-amd64-github-release.bz2"
+        checksum: "sha256:b360af98188c5988314d672bb604efd1e99daae3abfb64d04051ee17c77f84b6"
+        dest: /tmp/github-release.bz2
+
+
+    # Unarchive target doesn't support the bz2 format
+    - name: Unarchive github-release
+      shell:
+        cmd: |
+          bzip2 -d /tmp/github-release.bz2
+
+    - name: Install github-release binary
+      copy:
+        src: /tmp/github-release
+        dest: /usr/local/bin/github-release
+        mode: "0755"
+        remote_src: yes
+
     - name: Recursively remove download files and folders
       file:
         path: "{{ item }}"
@@ -228,4 +260,3 @@
         - /tmp/protobuf.zip
         - /tmp/pandoc.deb
         - /tmp/repo.b64
-        - /tmp/golang_1.16.3.tar.gz
diff --git a/packer/templates/basebuild_1804.json b/packer/templates/basebuild_1804.json
index 668b282..0bd5455 100644
--- a/packer/templates/basebuild_1804.json
+++ b/packer/templates/basebuild_1804.json
@@ -11,6 +11,7 @@
         "source_ami_filter_name": null,
         "source_ami_filter_owner": null,
         "source_ami_filter_product_code": "",
+        "vm_volume_size": "20",
         "subnet_id": null,
         "ssh_user": null
     },
@@ -37,6 +38,14 @@
             "ssh_username": "{{user `ssh_user`}}",
             "subnet_id": "{{user `subnet_id`}}",
             "type": "amazon-ebs",
+            "launch_block_device_mappings": [
+                {
+                    "device_name": "/dev/sda1",
+                    "volume_size": "{{user `vm_volume_size`}}",
+                    "volume_type": "gp2",
+                    "delete_on_termination": true
+                }
+            ],
             "user_data_file": "{{user `cloud_user_data`}}"
         }
     ],
diff --git a/vars/getVolthaImageFlags.groovy b/vars/getVolthaImageFlags.groovy
index 76dda9d..8770ff2 100644
--- a/vars/getVolthaImageFlags.groovy
+++ b/vars/getVolthaImageFlags.groovy
@@ -29,6 +29,8 @@
       // BBSIM has a different format that voltha, return directly
       return "--set images.bbsim.tag=${tag},images.bbsim.pullPolicy=${pullPolicy},images.bbsim.registry='' "
     break
+    case "voltha-onos":
+      return "--set onos-classic.image.repository=voltha/voltha-onos,onos-classic.image.tag=citest,onos-classic.image.pullPolicy=${pullPolicy}"
     default:
       return ""
     break
diff --git a/vars/volthaDeploy.groovy b/vars/volthaDeploy.groovy
index 17f9e5d..07146ee 100644
--- a/vars/volthaDeploy.groovy
+++ b/vars/volthaDeploy.groovy
@@ -27,13 +27,16 @@
     def cfg = defaultConfig + config
 
     if (cfg.dockerRegistry != "") {
-      cfg.extraHelmFlags += " --set global.image_registry=${cfg.dockerRegistry}/ "
-      cfg.extraHelmFlags += " --set etcd.image.registry=${cfg.dockerRegistry} "
-      cfg.extraHelmFlags += " --set kafka.image.registry=${cfg.dockerRegistry} "
-      cfg.extraHelmFlags += " --set kafka.zookeper.image.registry=${cfg.dockerRegistry} "
-      cfg.extraHelmFlags += " --set onos-classic.image.repository=${cfg.dockerRegistry}/voltha/voltha-onos "
-      cfg.extraHelmFlags += " --set onos-classic.atomix.image.repository=${cfg.dockerRegistry}/atomix/atomix "
-      cfg.extraHelmFlags += " --set freeradius.images.radius.registry=${cfg.dockerRegistry}/ "
+      def registryFlags = " --set global.image_registry=${cfg.dockerRegistry}/ "
+      registryFlags += " --set etcd.image.registry=${cfg.dockerRegistry} "
+      registryFlags += " --set kafka.image.registry=${cfg.dockerRegistry} "
+      registryFlags += " --set kafka.zookeper.image.registry=${cfg.dockerRegistry} "
+      registryFlags += " --set onos-classic.image.repository=${cfg.dockerRegistry}/voltha/voltha-onos "
+      registryFlags += " --set onos-classic.atomix.image.repository=${cfg.dockerRegistry}/atomix/atomix "
+      registryFlags += " --set freeradius.images.radius.registry=${cfg.dockerRegistry}/ "
+
+      // we want to alway leave the user provided flags at the end, to override changes
+      cfg.extraHelmFlags = registryFlags + " " + cfg.extraHelmFlags
     }
 
     println "Deploying VOLTHA with the following parameters: ${cfg}."
diff --git a/vars/volthaStackDeploy.groovy b/vars/volthaStackDeploy.groovy
index b39c84f..b7e43fc 100644
--- a/vars/volthaStackDeploy.groovy
+++ b/vars/volthaStackDeploy.groovy
@@ -41,13 +41,32 @@
     """
 
     for(int i = 0;i<cfg.bbsimReplica;i++) {
-      // TODO differentiate olt_id between different stacks
-       sh """
-         helm upgrade --install --create-namespace -n ${cfg.volthaNamespace} bbsim${i} onf/bbsim \
-         --set olt_id="${cfg.stackId}${i}" \
-         -f $WORKSPACE/voltha-helm-charts/examples/${cfg.workflow}-values.yaml \
-         ${cfg.extraHelmFlags}
-       """
+      // NOTE we don't need to update the tag for DT
+      script {
+        sh """
+        rm -f $WORKSPACE/bbsimCfg${cfg.stackId}${i}.yaml
+        """
+        if (cfg.workflow == "att" || cfg.workflow == "tt") {
+          def startingStag = 900
+          def bbsimCfg = readYaml file: "$WORKSPACE/voltha-helm-charts/examples/${cfg.workflow}-values.yaml"
+          // NOTE we assume that the only service that needs a different s_tag is the first one in the list
+          bbsimCfg["servicesConfig"]["services"][0]["s_tag"] = startingStag + i
+          println "Using BBSim Service config ${bbsimCfg}"
+          writeYaml file: "$WORKSPACE/bbsimCfg${cfg.stackId}${i}.yaml", data: bbsimCfg
+        } else {
+          // NOTE if it's DT just copy the file over
+          sh """
+          cp $WORKSPACE/voltha-helm-charts/examples/${cfg.workflow}-values.yaml $WORKSPACE/bbsimCfg${cfg.stackId}${i}.yaml
+          """
+        }
+      }
+
+      sh """
+        helm upgrade --install --create-namespace -n ${cfg.volthaNamespace} bbsim${i} onf/bbsim \
+        --set olt_id="${cfg.stackId}${i}" \
+        -f $WORKSPACE/bbsimCfg${cfg.stackId}${i}.yaml \
+        ${cfg.extraHelmFlags}
+      """
     }
 
     println "Wait for VOLTHA Stack ${cfg.stackName} to start"