Merge "Adding the JJB config for EPC service"
diff --git a/jjb/cord-macros.yaml b/jjb/cord-macros.yaml
index 1cca914..c6a71db 100644
--- a/jjb/cord-macros.yaml
+++ b/jjb/cord-macros.yaml
@@ -22,6 +22,27 @@
           reset-first: true
           depth: 1
 
+# same as lf-infra-gerrit-scm, but allows checkouts to a subdir of $WORKSPACE
+# with the `basedir` option
+#
+# `basedir` serves the same function as `destination-dir` in the repo scm
+# macros, seems strange that they're named differently.
+- scm:
+    name: cord-infra-gerrit-scm
+    scm:
+      - git:
+          credentials-id: '{jenkins-ssh-credential}'
+          url: '{git-url}'
+          refspec: '{refspec}'
+          branches:
+            - 'refs/heads/{branch}'
+          skip-tag: true
+          wipe-workspace: true
+          submodule:
+            recursive: '{submodule-recursive}'
+          choosing-strategy: '{choosing-strategy}'
+          basedir: '{basedir}'
+
 # download a specific patchset after checking out entire source tree with repo
 # docs: https://docs.openstack.org/infra/jenkins-job-builder/builders.html#builders.inject
 - builder:
diff --git a/jjb/cord-test/att-workflow.yaml b/jjb/cord-test/att-workflow.yaml
new file mode 100644
index 0000000..2cd21aa
--- /dev/null
+++ b/jjb/cord-test/att-workflow.yaml
@@ -0,0 +1,29 @@
+---
+# POD Build Pipeline Jobs for ATT-WorkflowDriver
+
+- project:
+    name: attworkflowdriver-build-job
+
+    project-name: '{name}'
+
+    build-timeout: '300'
+
+    jobs:
+      - 'build_pod_manual':
+         testvm: 'onf-build'
+         config-pod: 'onlab-pod1'
+         profile: 'att-workflow'
+         branch: 'master'
+         scenario: ''
+         Jenkinsfile: 'Jenkinsfile-att-workflow'
+         oltDebVersion: 'openolt-master.deb'
+
+    # flex pod1 with olt/onu
+      - 'build_pod_manual':
+         testvm: 'qa-testvm-pod'
+         config-pod: 'flex-pod1-olt'
+         profile: 'att-workflow'
+         branch: 'master'
+         scenario: ''
+         Jenkinsfile: 'Jenkinsfile-attworkflow'
+         oltDebVersion: 'openolt-master.deb'
diff --git a/jjb/cord-test/ecord-build.yaml b/jjb/cord-test/ecord-build.yaml
deleted file mode 100644
index 0194247..0000000
--- a/jjb/cord-test/ecord-build.yaml
+++ /dev/null
@@ -1,78 +0,0 @@
----
-# POD Nightly Build Pipeline E-CORD Jobs
-
-- project:
-    name: ecord-nightly-build-pipeline
-
-    project-name: '{name}'
-
-    build-timeout: '300'
-
-    jobs:
-      # ONLAB ECORD build jobs (ecord-global)
-      - 'build_ecord_pod_manual':
-         pod: 'onf-build'
-         pod_config: 'onlab-ecord-global.yml'
-         profile: 'ecord-global'
-         branch: 'cord-4.1'
-         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
-         local_pod_name: 'onlab-ecord-global'
-
-      # ONLAB Global POD test jobs (ecord-global)
-      - 'build_ecord_pod_manual_test':
-         pod: 'onf-build'
-         pod_config: 'onlab-ecord-global.yml'
-         profile: 'ecord-global'
-         branch: 'cord-4.1'
-         Jenkinsfile: 'Jenkinsfile-ecord-global'
-         local_pod_name: 'onlab_ecord-global'
-
-      # ONLAB LOCAL build jobs (ecord-local)
-      - 'build_ecord_pod_manual':
-         pod: 'onf-build'
-         pod_config: 'onlab-ecord-local-pod1.yml'
-         profile: 'ecord-local'
-         branch: 'cord-4.1'
-         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
-         local_pod_name: 'onlab-ecord-local-pod1'
-
-      - 'build_ecord_pod_manual':
-         pod: 'onf-build'
-         pod_config: 'onlab-ecord-local-pod2.yml'
-         profile: 'ecord-local'
-         branch: 'cord-4.1'
-         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
-         local_pod_name: 'onlab-ecord-local-pod2'
-
-      - 'build_ecord_pod_manual':
-         pod: 'onf-build'
-         pod_config: 'onlab-ecord-local-pod3.yml'
-         profile: 'ecord-local'
-         branch: 'cord-4.1'
-         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
-         local_pod_name: 'onlab-ecord-local-pod3'
-
-      # ONLAB Local POD test jobs (ecord-local)
-      - 'build_ecord_pod_manual_test':
-         pod: 'onf-build'
-         pod_config: 'onlab-ecord-local-pod1.yml'
-         profile: 'ecord-local'
-         branch: 'cord-4.1'
-         Jenkinsfile: 'Jenkinsfile-ecord-local'
-         local_pod_name: 'onlab-ecord-local-pod1'
-
-      - 'build_ecord_pod_manual_test':
-         pod: 'onf-build'
-         pod_config: 'onlab-ecord-local-pod2.yml'
-         profile: 'ecord-local'
-         branch: 'cord-4.1'
-         Jenkinsfile: 'Jenkinsfile-ecord-local'
-         local_pod_name: 'onlab-ecord-local-pod2'
-
-      - 'build_ecord_pod_manual_test':
-         pod: 'onf-build'
-         pod_config: 'onlab-ecord-local-pod3.yml'
-         profile: 'ecord-local'
-         branch: 'cord-4.1'
-         Jenkinsfile: 'Jenkinsfile-ecord-local'
-         local_pod_name: 'onlab-ecord-local-pod3'
diff --git a/jjb/cord-test/nightly-build-pipeline.yaml b/jjb/cord-test/nightly-build-pipeline.yaml
index 1f6177e..5918318 100644
--- a/jjb/cord-test/nightly-build-pipeline.yaml
+++ b/jjb/cord-test/nightly-build-pipeline.yaml
@@ -13,187 +13,13 @@
           build-days-to-keep: '{build-days-to-keep}'
           artifact-num-to-keep: '{artifact-num-to-keep}'
 
-- job-template:
-    name: 'build_{profile}_{pod}_{branch}'
-    id: build_pod_first
-    description: |
-                  <!-- Managed by Jenkins Job Builder -->
-                  Nightly Physical POD Builds at {pod} using {pod_config} <br /><br />
-                  Created from job-template {id} from ci-management/jjb/cord-test/cord-test-pipeline.yaml <br />
-                  Created by Kailash Khalasi - kailash@opennetworking.org <br />
-                  Copyright (c) 2017 Open Networking Foundation (ONF)
-
-    <<: *test-pipe-job-boiler-plate
-
-    parameters:
-      - string:
-         name: devNodeName
-         default: '{pod}'
-         description: 'Jenkins node name of Dev Node'
-
-      - string:
-         name: configRepoUrl
-         default: 'https://gerrit.opencord.org/pod-configs'
-         description: 'The URL of the POD configs repository'
-
-      - string:
-         name: configRepoBaseDir
-         default: 'pod-configs/'
-         description: 'The directory inside the POD configs repository'
-
-      - string:
-         name: configRepoFile
-         default: 'deployment-configs/{pod_config}'
-         description: 'The deployment config file'
-
-      - string:
-         name: branch
-         default: '{branch}'
-
-      - string:
-         name: notificationEmail
-         default: 'kailash@opennetworking.org, you@opennetworking.org, suchitra@opennetworking.org'
-         description: ''
-
-    concurrent: true
-
-    pipeline-scm:
-      script-path: '{Jenkinsfile}'
-      scm:
-        - git:
-           url: '{gerrit-server-url}/cord'
-           branches:
-             - '{branch}'
-
-    triggers:
-       - timed: |
-                 TZ=America/Los_Angeles
-                 H {time} * * *
-
 
 - job-template:
-    name: 'build_{profile}_{pod}_{branch}'
-    id: build_pod
-    description: |
-                  <!-- Managed by Jenkins Job Builder -->
-                  Nightly Physical POD Builds at {pod} using {pod_config} <br /><br />
-                  Created from job-template {id} from ci-management/jjb/cord-test/cord-test-pipeline.yaml <br />
-                  Created by Kailash Khalasi - kailash@opennetworking.org <br />
-                  Copyright (c) 2017 Open Networking Foundation (ONF)
-
-    <<: *test-pipe-job-boiler-plate
-
-    parameters:
-      - string:
-         name: devNodeName
-         default: '{pod}'
-         description: 'Jenkins node name of Dev Node'
-
-      - string:
-         name: configRepoUrl
-         default: 'https://gerrit.opencord.org/pod-configs'
-         description: 'The URL of the POD configs repository'
-
-      - string:
-         name: configRepoBaseDir
-         default: 'pod-configs/'
-         description: 'The directory inside the POD configs repository'
-
-      - string:
-         name: configRepoFile
-         default: 'deployment-configs/{pod_config}'
-         description: 'The deployment config file'
-
-      - string:
-         name: branch
-         default: '{branch}'
-
-      - string:
-         name: notificationEmail
-         default: 'kailash@opennetworking.org, you@opennetworking.org, suchitra@opennetworking.org'
-         description: ''
-
-    concurrent: true
-
-    pipeline-scm:
-      script-path: '{Jenkinsfile}'
-      scm:
-        - git:
-           url: '{gerrit-server-url}/cord'
-           branches:
-             - '{branch}'
-
-    triggers:
-        - reverse:
-            jobs: 'build_{profile}_{pod}_{fromBranch}_test'
-            result: 'failure'
-
-
-- job-template:
-    name: 'build_{profile}_{pod}_{branch}_test'
-    id: build_pod_test
-    description: |
-                  <!-- Managed by Jenkins Job Builder -->
-                  Post Tests on {pod} triggered by build_{pod}_{branch} <br /><br />
-                  Created from job-template {id} from ci-management/jjb/cord-test/cord-test-pipeline.yaml <br />
-                  Created by Kailash Khalasi - kailash@opennetworking.org <br />
-                  Copyright (c) 2017 Open Networking Foundation (ONF)
-
-    branches: '{branch}'
-
-    <<: *test-pipe-job-boiler-plate
-
-    parameters:
-      - string:
-         name: devNodeName
-         default: '{pod}'
-         description: 'Jenkins node name of Dev Node'
-
-      - string:
-         name: configRepoUrl
-         default: 'https://gerrit.opencord.org/pod-configs'
-         description: 'The URL of the POD configs repository'
-
-      - string:
-         name: configRepoBaseDir
-         default: 'pod-configs/'
-         description: 'The directory inside the POD configs repository'
-
-      - string:
-         name: configRepoFile
-         default: 'deployment-configs/{pod_config}'
-         description: 'The deployment config file'
-
-      - string:
-         name: branch
-         default: '{branch}'
-
-      - string:
-         name: notificationEmail
-         default: 'kailash@opennetworking.org, you@opennetworking.org, suchitra@opennetworking.org'
-         description: ''
-
-    concurrent: true
-
-    pipeline-scm:
-      script-path: '{Jenkinsfile}'
-      scm:
-        - git:
-           url: '{gerrit-server-url}/cord-tester'
-           branches:
-             - '{branch}'
-
-    triggers:
-      - reverse:
-          jobs: 'build_{profile}_{pod}_{branch}'
-          result: 'failure'
-
-- job-template:
-    name: 'build_{profile}_{pod}_{branch}'
+    name: 'build_{profile}_{testvm}_{scenario}_{branch}'
     id: build_pod_manual
     description: |
                   <!-- Managed by Jenkins Job Builder -->
-                  Manual Build on POD {pod} using {pod_config} <br /><br />
+                  Manual Build on POD {config-pod} using {Jenkinsfile} <br /><br />
                   Created from job-template {id} from ci-management/jjb/cord-test/cord-test-pipeline.yaml <br />
                   Created by QA (Suchitra Vemuri - suchitra@opennetworking.org ) <br />
                   Copyright (c) 2018 Open Networking Foundation (ONF)
@@ -202,78 +28,39 @@
 
     parameters:
       - string:
-         name: devNodeName
-         default: '{pod}'
-         description: 'Jenkins node name of Dev Node'
+         name: TestNodeName
+         default: '{testvm}'
+         description: 'Jenkins node name of TestVM Node'
 
       - string:
-         name: configRepoUrl
-         default: 'https://gerrit.opencord.org/pod-configs'
-         description: 'The URL of the POD configs repository'
+         name: cordRepoUrl
+         default: '{gerrit-server-url}'
+         description: 'The URL of the CORD Project repository'
 
       - string:
-         name: configRepoBaseDir
-         default: 'pod-configs/'
+         name: configBaseDir
+         default: 'pod-configs'
          description: 'The directory inside the POD configs repository'
 
       - string:
-         name: configRepoFile
-         default: 'deployment-configs/{pod_config}'
-         description: 'The deployment config file'
+         name: configDeploymentDir
+         default: 'deployment-configs'
+         description: 'The deployment configs folder'
 
       - string:
-         name: branch
-         default: '{branch}'
+         name: configKubernetesDir
+         default: 'kubernetes-configs'
+         description: 'The kubernetes config folder'
 
       - string:
-         name: notificationEmail
-         default: 'kailash@opennetworking.org, you@opennetworking.org, suchitra@opennetworking.org'
-         description: ''
-
-    concurrent: true
-
-    pipeline-scm:
-      script-path: '{Jenkinsfile}'
-      scm:
-        - git:
-           url: '{gerrit-server-url}/cord'
-           branches:
-             - '{branch}'
-
-- job-template:
-    name: 'build_{profile}_{pod}_{branch}_test'
-    id: build_pod_manual_test
-    description: |
-                  <!-- Managed by Jenkins Job Builder -->
-                  Post Tests on {pod} triggered by build_{pod}_{branch} <br /><br />
-                  Created from job-template {id} from ci-management/jjb/cord-test/cord-test-pipeline.yaml <br />
-                  Created by QA (Suchitra Vemuri - suchitra@opennetworking.org) <br />
-                  Copyright (c) 2017 Open Networking Foundation (ONF)
-
-    branches: '{branch}'
-
-    <<: *test-pipe-job-boiler-plate
-
-    parameters:
-      - string:
-         name: devNodeName
-         default: '{pod}'
-         description: 'Jenkins node name of Dev Node'
+         name: configFileName
+         default: '{config-pod}'
+         description: 'The config file'
 
       - string:
-         name: configRepoUrl
-         default: 'https://gerrit.opencord.org/pod-configs'
-         description: 'The URL of the POD configs repository'
-
-      - string:
-         name: configRepoBaseDir
-         default: 'pod-configs/'
-         description: 'The directory inside the POD configs repository'
-
-      - string:
-         name: configRepoFile
-         default: 'deployment-configs/{pod_config}'
-         description: 'The deployment config file'
+         name: oltDebVersion
+         default: '{oltDebVersion}'
+         description: 'OLT Software version to install'
 
       - string:
          name: branch
@@ -294,128 +81,12 @@
            branches:
              - '{branch}'
 
-    triggers:
-      - reverse:
-          jobs: 'build_{profile}_{pod}_manual_{branch}'
-          result: 'failure'
-
 - job-template:
-    name: 'build_{profile}_{local_pod_name}_{branch}'
-    id: build_ecord_pod_manual
+    name: 'build_{profile}_{config-pod}_{scenario}_{branch}'
+    id: build_pod_timer
     description: |
                   <!-- Managed by Jenkins Job Builder -->
-                  Manual Build on ECORD POD {pod} using {pod_config} <br /><br />
-                  Created from job-template {id} from ci-management/jjb/cord-test/cord-test-pipeline.yaml <br />
-                  Created by QA (Suchitra Vemuri - suchitra@opennetworking.org ) <br />
-                  Copyright (c) 2018 Open Networking Foundation (ONF)
-
-    <<: *test-pipe-job-boiler-plate
-
-    parameters:
-      - string:
-         name: devNodeName
-         default: '{pod}'
-         description: 'Jenkins node name of Dev Node'
-
-      - string:
-         name: configRepoUrl
-         default: 'https://gerrit.opencord.org/pod-configs'
-         description: 'The URL of the POD configs repository'
-
-      - string:
-         name: configRepoBaseDir
-         default: 'pod-configs/'
-         description: 'The directory inside the POD configs repository'
-
-      - string:
-         name: configRepoFile
-         default: 'deployment-configs/{pod_config}'
-         description: 'The deployment config file'
-
-      - string:
-         name: branch
-         default: '{branch}'
-
-      - string:
-         name: notificationEmail
-         default: 'kailash@opennetworking.org, you@opennetworking.org, suchitra@opennetworking.org'
-         description: ''
-
-    concurrent: true
-
-    pipeline-scm:
-      script-path: '{Jenkinsfile}'
-      scm:
-        - git:
-           url: '{gerrit-server-url}/cord'
-           branches:
-             - '{branch}'
-
-- job-template:
-    name: 'build_{profile}_{local_pod_name}_{branch}_test'
-    id: build_ecord_pod_manual_test
-    description: |
-                  <!-- Managed by Jenkins Job Builder -->
-                  Post Tests on {pod} triggered by build_{pod}_{branch} <br /><br />
-                  Created from job-template {id} from ci-management/jjb/cord-test/cord-test-pipeline.yaml <br />
-                  Created by QA (Suchitra Vemuri - suchitra@opennetworking.org) <br />
-                  Copyright (c) 2017 Open Networking Foundation (ONF)
-
-    branches: '{branch}'
-
-    <<: *test-pipe-job-boiler-plate
-
-    parameters:
-      - string:
-         name: devNodeName
-         default: '{pod}'
-         description: 'Jenkins node name of Dev Node'
-
-      - string:
-         name: configRepoUrl
-         default: 'https://gerrit.opencord.org/pod-configs'
-         description: 'The URL of the POD configs repository'
-
-      - string:
-         name: configRepoBaseDir
-         default: 'pod-configs/'
-         description: 'The directory inside the POD configs repository'
-
-      - string:
-         name: configRepoFile
-         default: 'deployment-configs/{pod_config}'
-         description: 'The deployment config file'
-
-      - string:
-         name: branch
-         default: '{branch}'
-
-      - string:
-         name: notificationEmail
-         default: 'kailash@opennetworking.org, you@opennetworking.org, suchitra@opennetworking.org'
-         description: ''
-
-    concurrent: true
-
-    pipeline-scm:
-      script-path: '{Jenkinsfile}'
-      scm:
-        - git:
-           url: '{gerrit-server-url}/cord-tester'
-           branches:
-             - '{branch}'
-
-    triggers:
-      - reverse:
-          jobs: 'build_{profile}_{pod}_manual_{branch}'
-          result: 'failure'
-
-- job-template:
-    name: 'build_{profile}_{kube-pod}_{scenario}_{branch}'
-    id: build_kube_pod_first
-    description: |
-                  <!-- Managed by Jenkins Job Builder -->
-                  Nightly Kubernetes tests on {kube-pod} <br /><br />
+                  Nightly Kubernetes tests on {config-pod} <br /><br />
                   Created from job-template {id} from ci-management/jjb/cord-test/cord-test-pipeline.yaml <br />
                   Created by Suchitra Vemuri, suchitra@opennetworking.org <br />
                   Copyright (c) 2017 Open Networking Foundation (ONF)
@@ -429,19 +100,34 @@
          description: 'Jenkins node name of TestVM Node'
 
       - string:
-         name: configRepoUrl
-         default: 'https://gerrit.opencord.org/pod-configs'
-         description: 'The URL of the POD configs repository'
+         name: cordRepoUrl
+         default: '{gerrit-server-url}'
+         description: 'The URL of the CORD Project repository'
 
       - string:
-         name: configRepoBaseDir
-         default: 'pod-configs/'
+         name: configBaseDir
+         default: 'pod-configs'
          description: 'The directory inside the POD configs repository'
 
       - string:
-         name: configRepoFile
-         default: 'kubernetes-configs/{kube-pod}.yml'
-         description: 'The kubernetes deployment config file'
+         name: configDeploymentDir
+         default: 'deployment-configs'
+         description: 'The deployment configs folder'
+
+      - string:
+         name: configKubernetesDir
+         default: 'kubernetes-configs'
+         description: 'The kubernetes config folder'
+
+      - string:
+         name: configFileName
+         default: '{config-pod}'
+         description: 'The config file'
+
+      - string:
+         name: oltDebVersion
+         default: '{oltDebVersion}'
+         description: 'OLT Software version to install'
 
       - string:
          name: branch
diff --git a/jjb/cord-test/rcord-build.yaml b/jjb/cord-test/rcord-build.yaml
deleted file mode 100644
index 7e4eede..0000000
--- a/jjb/cord-test/rcord-build.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
----
-# POD Nightly Build Pipeline R-CORD Jobs
-
-- project:
-    name: rcord-nightly-build-pipeline
-
-    project-name: '{name}'
-
-    build-timeout: '300'
-
-    jobs:
-      # Flex POD1 build job for (rcord) - soak platform
-      - 'build_pod_manual':
-         pod: 'flex-pod1'
-         pod_config: 'flex-pod1.yml'
-         profile: 'rcord'
-         branch: 'cord-5.0'
-         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
diff --git a/jjb/cord-test/rcord-lite.yaml b/jjb/cord-test/rcord-lite.yaml
index 3ddf057..b10b1ba 100644
--- a/jjb/cord-test/rcord-lite.yaml
+++ b/jjb/cord-test/rcord-lite.yaml
@@ -10,56 +10,86 @@
 
     jobs:
       # flex onf pod 1 kubernetes build jobs (rcord lite)
-      - 'build_kube_pod_first':
+      - 'build_pod_timer':
          testvm: 'qa-testvm-pod'
-         kube-pod: 'flex-onf-pod1'
+         config-pod: 'flex-onf-pod1'
          profile: 'rcord-lite'
          scenario: ''
          branch: 'master'
          Jenkinsfile: 'Jenkinsfile-rcordlite'
+         oltDebVersion: 'openolt-1.4.deb'
          time: '20'
          day: '0-31/1'
 
      # flex pod1 with olt/onu  kubernetes build jobs (rcord lite)
-      - 'build_kube_pod_first':
+      - 'build_pod_timer':
          testvm: 'qa-testvm-pod'
-         kube-pod: 'flex-pod1-olt'
+         config-pod: 'flex-pod1-olt'
          profile: 'rcord-lite'
          branch: 'cord-6.0'
          scenario: 'zerotouch'
          Jenkinsfile: 'Jenkinsfile-rcordlite-zerotouch'
+         oltDebVersion: 'openolt-1.4.deb'
          time: '0'
          day: '1-31/2'
 
      # flex pod1 with olt/onu  kubernetes build jobs (rcord lite)
-      - 'build_kube_pod_first':
+      - 'build_pod_timer':
          testvm: 'qa-testvm-pod'
-         kube-pod: 'flex-pod1-olt'
+         config-pod: 'flex-pod1-olt'
          profile: 'rcord-lite'
          branch: 'cord-6.0'
          scenario: 'topdown'
          Jenkinsfile: 'Jenkinsfile-rcordlite-topdown'
+         oltDebVersion: 'openolt-1.4.deb'
          time: '0'
          day: '2-30/2'
 
+     # flex pod1 with olt/onu  kubernetes master build jobs (rcord lite)
+      - 'build_pod_timer':
+         testvm: 'qa-testvm-pod'
+         config-pod: 'flex-pod1-olt'
+         profile: 'rcord-lite'
+         branch: 'master'
+         scenario: 'zerotouch'
+         Jenkinsfile: 'Jenkinsfile-rcordlite-zerotouch'
+         oltDebVersion: 'openolt-master'
+         time: '1'
+         day: '1-31/2'
+
+     # flex pod1 with olt/onu  kubernetes master build jobs (rcord lite)
+      - 'build_pod_timer':
+         testvm: 'qa-testvm-pod'
+         config-pod: 'flex-pod1-olt'
+         profile: 'rcord-lite'
+         branch: 'master'
+         scenario: 'topdown'
+         Jenkinsfile: 'Jenkinsfile-rcordlite-topdown'
+         oltDebVersion: 'openolt-master'
+         time: '1'
+         day: '2-30/2'
+
      # qct pod1 kubernetes build jobs (rcord lite)
-      - 'build_kube_pod_first':
+      - 'build_pod_timer':
          testvm: 'qct-pod1'
-         kube-pod: 'qct-pod1'
+         config-pod: 'qct-pod1'
          profile: 'rcord-lite'
          branch: 'master'
          scenario: ''
          Jenkinsfile: 'Jenkinsfile-rcordlite'
+         oltDebVersion: 'openolt-1.4.deb'
          time: '0'
          day: '*'
+
      # flex ocp pod 2 kubernetes build jobs (rcord lite)
-      - 'build_kube_pod_first':
+      - 'build_pod_timer':
          testvm: 'flex-pod2'
-         kube-pod: 'flex-ocp-pod2'
+         config-pod: 'flex-ocp-pod2'
          profile: 'rcord-lite'
          scenario: ''
          branch: 'master'
          Jenkinsfile: 'Jenkinsfile-rcordlite'
+         oltDebVersion: 'openolt-1.4.deb'
          time: '30'
          day: '0-31/1'
 
diff --git a/jjb/defaults.yaml b/jjb/defaults.yaml
index d4b4232..3ab54c1 100644
--- a/jjb/defaults.yaml
+++ b/jjb/defaults.yaml
@@ -14,6 +14,10 @@
     # by default, don't depend on other jobs
     dependency-jobs: ''
 
+    # SCM checkout locations within Jenkins Workspace
+    destination-dir: ''
+    basedir: ''
+
     # used to rename jobs if version/branch forking is required
     name-extension: ''
 
diff --git a/jjb/pipeline/workflow-validations.groovy b/jjb/pipeline/workflow-validations.groovy
index 67dffbe..05c1653 100644
--- a/jjb/pipeline/workflow-validations.groovy
+++ b/jjb/pipeline/workflow-validations.groovy
@@ -107,7 +107,7 @@
              echo "## 'helm status' for chart: \${hchart} ##"
              helm status "\${hchart}"
            done
-           helm test att-workflow
+           helm test --timeout 1000 att-workflow
            popd
 
            """
diff --git a/jjb/verify/abstract-olt.yaml b/jjb/verify/abstract-olt.yaml
index b84aa7c..880d49b 100644
--- a/jjb/verify/abstract-olt.yaml
+++ b/jjb/verify/abstract-olt.yaml
@@ -15,3 +15,88 @@
       - 'verify-licensed'
       - 'verify-sonarqube':
           dependency-jobs: 'verify_abstract-olt_licensed'
+      - 'abstract-olt-tests':
+          dependency-jobs: 'verify_abstract-olt_sonarqube'
+
+- job-template:
+    id: 'abstract-olt-tests'
+    name: 'verify_{project}_tests'
+
+    description: |
+      Created by {id} job-template from ci-management/jjb/verify/abstract-olt.yaml
+
+    triggers:
+      - cord-infra-gerrit-trigger-patchset:
+          gerrit-server-name: '{gerrit-server-name}'
+          project-regexp: '^{project}$'
+          branch-regexp: '{branch-regexp}'
+          dependency-jobs: '{dependency-jobs}'
+          file-include-regexp: '{all-files-regexp}'
+
+    properties:
+      - cord-infra-properties:
+          build-days-to-keep: '{build-days-to-keep}'
+          artifact-num-to-keep: '{artifact-num-to-keep}'
+
+    wrappers:
+      - lf-infra-wrappers:
+          build-timeout: 20
+          jenkins-ssh-credential: '{jenkins-ssh-credential}'
+
+    scm:
+      - cord-infra-gerrit-scm:
+          git-url: '$GIT_URL/$GERRIT_PROJECT'
+          refspec: '$GERRIT_REFSPEC'
+          branch: '$GERRIT_BRANCH'
+          submodule-recursive: 'false'
+          choosing-strategy: default
+          jenkins-ssh-credential: '{jenkins-ssh-credential}'
+          basedir: '{project}'
+
+    node: 'ubuntu16.04-basebuild-1c-2g'
+    project-type: freestyle
+    concurrent: true
+
+    builders:
+      - shell: |
+          #!/usr/bin/env bash
+          set -eux -o pipefail
+
+          export GOPATH=~/go
+          export PATH=$PATH:/usr/lib/go-1.10/bin:/usr/local/go/bin:~/go/bin
+
+          # move code the proper location
+          mkdir -p $GOPATH/src/gerrit.opencord.org
+          mv abstract-olt $GOPATH/src/gerrit.opencord.org/abstract-olt
+
+          # get prereqs
+          go get -v github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
+          go get -v github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
+          go get -v github.com/golang/protobuf/protoc-gen-go
+
+          pushd $GOPATH/src/gerrit.opencord.org/abstract-olt
+
+          make test
+
+          go test -v ./...  2>&1 | go-junit-report > $WORKSPACE/junit-report.xml
+
+          go test -coverprofile=coverage.txt -covermode=count ./...
+          gocover-cobertura < coverage.txt > $WORKSPACE/coverage.xml
+
+          popd
+
+
+    publishers:
+      - junit:
+          results: "junit-report.xml"
+      - cobertura:
+          report-file: "coverage.xml"
+          targets:
+            - files:
+                healthy: 80
+                unhealthy: 0
+                failing: 0
+            - method:
+                healthy: 50
+                unhealthy: 0
+                failing: 0
diff --git a/jjb/workflow-validations.yaml b/jjb/workflow-validations.yaml
index 44e50c4..f86fdc3 100644
--- a/jjb/workflow-validations.yaml
+++ b/jjb/workflow-validations.yaml
@@ -11,7 +11,7 @@
 
 - job-template:
     id: 'wf-validation'
-    name: 'workflow-validations'
+    name: 'ATT-Event-Workflow-Validation'
 
     description: |
       <!-- Managed by Jenkins Job Builder -->
diff --git a/jjb/xos-tosca-unit.yaml b/jjb/xos-tosca-unit.yaml
index 17c21c4..2259350 100644
--- a/jjb/xos-tosca-unit.yaml
+++ b/jjb/xos-tosca-unit.yaml
@@ -23,64 +23,54 @@
 
     wrappers:
       - lf-infra-wrappers:
-          build-timeout: 20
+          build-timeout: '{build-timeout}'
           jenkins-ssh-credential: '{jenkins-ssh-credential}'
 
     scm:
-      - lf-infra-gerrit-scm:
-          git-url: '$GIT_URL/$GERRIT_PROJECT'
-          refspec: '$GERRIT_REFSPEC'
+      - cord-infra-gerrit-repo-scm:
+          manifest-url: '{gerrit-server-url}/{cord-repo-manifest}'
           branch: '$GERRIT_BRANCH'
-          submodule-recursive: 'false'
-          choosing-strategy: gerrit
-          jenkins-ssh-credential: '{jenkins-ssh-credential}'
+          destination-dir: 'cord'
 
-    node: 'ubuntu16.04-basebuild-1c-2g'
+    node: '{build-node}'
     project-type: freestyle
     concurrent: true
 
     builders:
+      - cord-infra-gerrit-repo-patch:
+          destination-dir: 'cord'
+          project: '$GERRIT_PROJECT'
+          change-number: '$GERRIT_CHANGE_NUMBER'
+          patchset-number: '$GERRIT_PATCHSET_NUMBER'
       - shell: |
-          #/usr/bin/env bash
-          BASEDIR=$(pwd)
+          #!/usr/bin/env bash
+          set -ex -o pipefail
+
+          export XOS_DIR=$WORKSPACE/cord/orchestration/xos
+          export TOSCA_DIR=$WORKSPACE/cord/orchestration/xos-tosca
 
           # setup virtual env
-          virtualenv -q venv-xos --no-site-packages
-          source $BASEDIR/venv-xos/bin/activate
-          pip install --upgrade pip setuptools
-
-          # download changeset
-          mkdir cord && cd cord/
-          repo init -u https://gerrit.opencord.org/manifest -b $GERRIT_BRANCH
-          repo sync
-          repo download $GERRIT_PROJECT $GERRIT_CHANGE_NUMBER/$GERRIT_PATCHSET_NUMBER
-
-          # Install XOS dependencies
-          pip install nose2 requests_mock plyxproto jinja2 pattern astunparse pyyaml colorama
-          pip install pykwalify==1.6.1
-          pip install multistructlog==1.5
-          pip install networkx==1.11
-          pip install netaddr==0.7.19
-          pip install ipaddress==1.0.19
-          pip install grpcio==1.9.1
-          pip install grpcio-tools==1.9.1
-          pip install nose
-          pip install tosca-parser==0.9.0
-          echo "Requirements Installed"
-
-          cd $BASEDIR/cord/orchestration/xos/lib/xos-util; python setup.py install; echo "xos-util Installed"
-          cd $BASEDIR/cord/orchestration/xos/lib/xos-config; python setup.py install; echo "xos-config Installed"
-          cd $BASEDIR/cord/orchestration/xos/lib/xos-genx; python setup.py install; echo "xos-genx Installed"
-
-          cd $BASEDIR/cord/orchestration/xos/xos/xos_client/xosapi; ln -s ../../../../../component/chameleon chameleon
-          cd $BASEDIR/cord/orchestration/xos/xos/xos_client; make; echo "xos-client Installed"
-
-          cd $BASEDIR/cord/orchestration/xos/xos/xos_client/xosapi/chameleon/protos; VOLTHA_BASE=anything make
-          cd $BASEDIR/cord/orchestration/xos/xos/xos_client; python setup.py install
-          chmod 777 $BASEDIR/venv-xos/lib/python2.7/site-packages/xosapi/chameleon/protoc_plugins/gw_gen.py
-          chmod 777 $BASEDIR/venv-xos/lib/python2.7/site-packages/xosapi/chameleon/protoc_plugins/swagger_gen.py
-          pip install -r $BASEDIR/cord/orchestration/xos-tosca/pip_requirements.txt
+          $XOS_DIR/scripts/setup_venv.sh
+          source "$WORKSPACE/venv-xos/bin/activate"
+          set -u
 
           # Run the tests
-          cd $BASEDIR/cord/orchestration/xos-tosca
+          pushd "$WORKSPACE/cord/orchestration/xos-tosca"
           make tests
+          popd
+
+    publishers:
+      - junit:
+          results: "**/nose2-junit.xml"
+      - cobertura:
+          report-file: "**/coverage.xml"
+          targets:
+            - files:
+                healthy: 80
+                unhealthy: 0
+                failing: 0
+            - method:
+                healthy: 50
+                unhealthy: 0
+                failing: 0
+
diff --git a/packer/provision/basebuild.sh b/packer/provision/basebuild.sh
index 9ca0453..4900948 100644
--- a/packer/provision/basebuild.sh
+++ b/packer/provision/basebuild.sh
@@ -45,6 +45,9 @@
          $(lsb_release -cs) \
          stable"
 
+    # set up golang repo
+    add-apt-repository ppa:gophers/archive
+
     apt-get update
 
     # install basic sofware requirements
@@ -55,6 +58,7 @@
         bzip2 \
         curl \
         git \
+        golang-1.10-go \
         less \
         libpcap-dev \
         libxml2-utils \
@@ -112,6 +116,15 @@
         typings
         # end of npm install list
 
+    # install golang packages in /usr/local/go
+    # Set PATH=$PATH:/usr/local/go/bin` to use these
+    export GOPATH=/usr/local/go
+    mkdir -p $GOPATH
+    export PATH=$PATH:/usr/lib/go-1.10/bin:$GOPATH/bin
+    # converters for unit/coverage test
+    go get -v github.com/t-yuki/gocover-cobertura
+    go get -v github.com/jstemmer/go-junit-report
+
     # ubuntu 16.04 installs the node binary as /usr/bin/nodejs, which breaks
     # tools that expect it to be named just `node`. Symlink it to fix
     ln -s /usr/bin/nodejs /usr/local/bin/node