Merge "CSIT tests for SO vCPE/OOF/HPA"
diff --git a/S3Ptools/locustfile.py b/S3Ptools/locustfile.py
new file mode 100644
index 0000000..5fe5b37
--- /dev/null
+++ b/S3Ptools/locustfile.py
@@ -0,0 +1,28 @@
+import random
+import string
+from locust import HttpLocust, TaskSet, task
+ 
+class UserBehavior(TaskSet):
+    def on_start(self):
+        """ on_start is called when a Locust start before any task is scheduled """
+        self.init()
+ 
+    def init(self):
+        pass
+ 
+    @task(1)
+    def DCI(self):
+        method = "POST"
+        url = "/ecomp/mso/infra/e2eServiceInstances/v3"
+        headers = {"Accept":"application/json","Content-Type":"application/json","Authorization":"Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA=="}
+        service_instance_name = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(10))
+        data = "{\"service\": {\"name\": \"E2E_volte_%s\", \"description\": \"E2E_volte_ONAP_deploy\", \"serviceDefId\": \"a16eb184-4a81-4c8c-89df-c287d390315a\", \"templateId\": \"012c3446-51db-4a2a-9e64-a936f10a5e3c\", \"parameters\": { \"globalSubscriberId\": \"Demonstration\", \"subscriberName\": \"Demonstration\", \"serviceType\": \"vIMS\", \"templateName\": \"VoLTE e2e Service:null\", \"resources\": [ { \"resourceName\": \"VL OVERLAYTUNNEL\", \"resourceDefId\": \"671d4757-b018-47ab-9df3-351c3bda0a98\", \"resourceId\": \"e859b0fd-d928-4cc8-969e-0fee7795d623\", \"nsParameters\": { \"locationConstraints\": [], \"additionalParamForNs\": { \"site2_vni\": \"5010\", \"site1_localNetworkAll\": \"false\", \"site1_vni\": \"5010\", \"site1_exportRT1\": \"11:1\", \"description\": \"overlay\", \"site2_localNetworkAll\": \"false\", \"site1_routerId\": \"9.9.9.9\", \"site1_fireWallEnable\": \"false\", \"site1_networkName\": \"network1\", \"site2_description\": \"overlay\", \"site1_importRT1\": \"11:1\", \"site1_description\": \"overlay\", \"site2_networkName\": \"network3\", \"name\": \"overlay\", \"site2_fireWallEnable\": \"false\", \"site2_id\": \"ZTE-DCI-Controller\", \"site2_routerId\": \"9.9.9.9\", \"site2_importRT1\": \"11:1\", \"site2_exportRT1\": \"11:1\", \"site2_fireWallId\": \"false\", \"site1_id\": \"DCI-Controller-1\", \"tunnelType\": \"L3-DCI\" } } } ] } } }" % service_instance_name
+        print(data)
+        response = self.client.request(method, url, headers=headers, data=data)
+        print(response.json())
+ 
+class WebsiteUser(HttpLocust):
+    task_set = UserBehavior
+    host = "http://10.0.5.1:8080"
+    min_wait = 5000
+    max_wait = 9000
diff --git a/deployment/heat/onap-oom/env/gwu/onap.env b/deployment/heat/onap-oom/env/gwu/onap.env
index 1a9aa9a..c510eb4 100644
--- a/deployment/heat/onap-oom/env/gwu/onap.env
+++ b/deployment/heat/onap-oom/env/gwu/onap.env
@@ -1,33 +1,35 @@
 parameters:
 
-  keystone_url: http://192.168.1.11:5000
-  openstack_tenant_id: 4c93f99551604bf7af25a8f80c7f34cb
-  openstack_tenant_name: onap
-  openstack_username: demo
-  openstack_api_key: demo
-
-  ubuntu_1404_image: trusty
   ubuntu_1604_image: xenial
-  centos_7_image: centos7
 
   apt_proxy: 192.168.1.51:3142
   docker_proxy: 192.168.1.51:5000
 
-  rancher_vm_flavor: m1.large
-  k8s_vm_flavor: m2.xxlarge
+  rancher_vm_flavor: m1.xlarge
+  k8s_vm_flavor: m1.xlarge
 
   public_net_id: 024582bd-ef9b-48b9-9e70-e6732559d9df
-  public_net_name: provider
 
-  oam_network_cidr: 172.16.0.0/16
-  dns_forwarder: 192.168.1.11
-  external_dns: 192.168.1.3
+  oam_network_cidr: 10.0.0.0/16
 
-  dnsaas_proxy_enable: "false"
-  dnsaas_proxied_keystone_url_path: "v2.0"
-  dnsaas_keystone_url: http://192.168.1.11:5000
-  dnsaas_region: RegionOne
-  dnsaas_tenant_id: 4c93f99551604bf7af25a8f80c7f34cb
-  dnsaas_tenant_name: onap
-  dnsaas_username: demo
-  dnsaas_password: demo
+  integration_override_yaml: >
+    global:
+      repository: 192.168.1.51:5000
+      pullPolicy: IfNotPresent
+    robot:
+      openStackKeyStoneUrl: "http://192.168.1.11:5000"
+      openStackPublicNetId: "024582bd-ef9b-48b9-9e70-e6732559d9df"
+      openStackPassword: "${OS_PASSWORD}"
+      openStackTenantId: "${OS_PROJECT_ID}"
+      openStackUserName: "${OS_USERNAME}"
+      ubuntu14Image: "trusty"
+      ubuntu16Image: "xenial"
+      openStackPrivateNetId: "__oam_network_id__"
+      openStackPrivateSubnetId: "__oam_subnet_id__"
+      openStackPrivateNetCidr: "10.0.0.0/16"
+      openStackOamNetworkCidrPrefix: "10.0"
+    so:
+      config:
+        openStackUserName: "${OS_USERNAME}"
+        openStackKeyStoneUrl: "http://192.168.1.11:5000"
+        openStackEncryptedPasswordHere: "${OS_PASSWORD_ENCRYPTED}"
diff --git a/deployment/heat/onap-oom/env/huawei/onap-beijing-oom.env b/deployment/heat/onap-oom/env/huawei/onap-beijing-oom.env
index 88d6b74..18171f2 100644
--- a/deployment/heat/onap-oom/env/huawei/onap-beijing-oom.env
+++ b/deployment/heat/onap-oom/env/huawei/onap-beijing-oom.env
@@ -1,33 +1,35 @@
 parameters:
 
-  keystone_url: http://10.145.122.117:5000
-  openstack_tenant_id: 3d228d2fcbb7447bbba3cde703431bc1
-  openstack_tenant_name: onap-beijing-oom
-  openstack_username: demo
-  openstack_api_key: demo
-
-  ubuntu_1404_image: trusty
   ubuntu_1604_image: xenial
-  centos_7_image: centos7
 
   apt_proxy: 10.145.122.118:3142
   docker_proxy: 10.145.122.118:5000
 
-  rancher_vm_flavor: m1.large
-  k8s_vm_flavor: m2.xxlarge
+  rancher_vm_flavor: m1.xlarge
+  k8s_vm_flavor: m1.xlarge
 
   public_net_id: 3a6247f1-fac6-4167-a49f-33cc8415ccf4
-  public_net_name: provider
 
-  oam_network_cidr: 172.16.0.0/16
-  dns_forwarder: 10.145.122.117
-  external_dns: 10.145.122.118
+  oam_network_cidr: 10.0.0.0/16
 
-  dnsaas_proxy_enable: "false"
-  dnsaas_proxied_keystone_url_path: "v2.0"
-  dnsaas_keystone_url: http://10.145.122.117:5000
-  dnsaas_region: RegionOne
-  dnsaas_tenant_id: 3d228d2fcbb7447bbba3cde703431bc1
-  dnsaas_tenant_name: onap-beijing-oom
-  dnsaas_username: demo
-  dnsaas_password: demo
+  integration_override_yaml: >
+    global:
+      repository: 10.145.122.118:5000
+      pullPolicy: IfNotPresent
+    robot:
+      openStackKeyStoneUrl: "http://10.145.122.117:5000"
+      openStackPublicNetId: "3a6247f1-fac6-4167-a49f-33cc8415ccf4"
+      openStackPassword: "${OS_PASSWORD}"
+      openStackTenantId: "${OS_PROJECT_ID}"
+      openStackUserName: "${OS_USERNAME}"
+      ubuntu14Image: "trusty"
+      ubuntu16Image: "xenial"
+      openStackPrivateNetId: "__oam_network_id__"
+      openStackPrivateSubnetId: "__oam_subnet_id__"
+      openStackPrivateNetCidr: "10.0.0.0/16"
+      openStackOamNetworkCidrPrefix: "10.0"
+    so:
+      config:
+        openStackUserName: "${OS_USERNAME}"
+        openStackKeyStoneUrl: "http://10.145.122.117:5000"
+        openStackEncryptedPasswordHere: "${OS_PASSWORD_ENCRYPTED}"
diff --git a/deployment/heat/onap-oom/env/tlab/ETE-HEAT-Test.env b/deployment/heat/onap-oom/env/tlab/ETE-HEAT-Test.env
index daa145a..d0beefa 100644
--- a/deployment/heat/onap-oom/env/tlab/ETE-HEAT-Test.env
+++ b/deployment/heat/onap-oom/env/tlab/ETE-HEAT-Test.env
@@ -1,34 +1,35 @@
 parameters:
 
-  keystone_url: https://bdc1tlab01.research.att.com:5000
-  openstack_tenant_id: 76b1938dd3b9471fa1ed413a1b212a96
-  openstack_tenant_name: ETE-HEAT-Test
-  openstack_username: ${OS_USERNAME}
-  openstack_api_key: ${OS_PASSWORD}
-
-  ubuntu_1404_image: "Ubuntu 14.04 LTS Generic"
   ubuntu_1604_image: "Ubuntu 16.04 LTS Generic"
-  centos_7_image: "centos7"
 
-  lab_name: tlab
   apt_proxy: 192.168.31.204:3142
   docker_proxy: 192.168.31.204:5000
 
-  rancher_vm_flavor: m2.large
-  k8s_vm_flavor: m5.xxlarge
+  rancher_vm_flavor: m1.xlarge
+  k8s_vm_flavor: m1.xlarge
 
   public_net_id: fbe8fd92-6636-4e63-ab28-bb6a5b0888a9
-  public_net_name: admin-vpn-floating
 
   oam_network_cidr: 10.0.0.0/16
-  dns_forwarder: 204.178.3.230
-  external_dns: 8.8.8.8
 
-  dnsaas_proxy_enable: "false"
-  dnsaas_proxied_keystone_url_path: "v3"
-  dnsaas_keystone_url: https://bdc1tlab01.research.att.com:5000
-  dnsaas_region: RegionOne
-  dnsaas_tenant_id: 76b1938dd3b9471fa1ed413a1b212a96
-  dnsaas_tenant_name: ETE-HEAT-Test
-  dnsaas_username: ${OS_USERNAME}
-  dnsaas_password: ${OS_PASSWORD}
+  integration_override_yaml: >
+    global:
+      repository: 192.168.31.204:5000
+      pullPolicy: IfNotPresent
+    robot:
+      openStackKeyStoneUrl: "https://bdc1tlab01.research.att.com:5000"
+      openStackPublicNetId: "fbe8fd92-6636-4e63-ab28-bb6a5b0888a9"
+      openStackPassword: "${OS_PASSWORD}"
+      openStackTenantId: "${OS_PROJECT_ID}"
+      openStackUserName: "${OS_USERNAME}"
+      ubuntu14Image: "Ubuntu 14.04 LTS Generic"
+      ubuntu16Image: "Ubuntu 16.04 LTS Generic"
+      openStackPrivateNetId: "__oam_network_id__"
+      openStackPrivateSubnetId: "__oam_subnet_id__"
+      openStackPrivateNetCidr: "10.0.0.0/16"
+      openStackOamNetworkCidrPrefix: "10.0"
+    so:
+      config:
+        openStackUserName: "${OS_USERNAME}"
+        openStackKeyStoneUrl: "https://bdc1tlab01.research.att.com:5000"
+        openStackEncryptedPasswordHere: "${OS_PASSWORD_ENCRYPTED}"
diff --git a/deployment/heat/onap-oom/env/tlab/ETE-OOM-Test.env b/deployment/heat/onap-oom/env/tlab/ETE-OOM-Test.env
index cbda112..d0beefa 100644
--- a/deployment/heat/onap-oom/env/tlab/ETE-OOM-Test.env
+++ b/deployment/heat/onap-oom/env/tlab/ETE-OOM-Test.env
@@ -1,34 +1,35 @@
 parameters:
 
-  keystone_url: https://bdc1tlab01.research.att.com:5000
-  openstack_tenant_id: b4062c7fbf9646b8a2bcb71c46695ff3
-  openstack_tenant_name: ETE-OOM-Test
-  openstack_username: ${OS_USERNAME}
-  openstack_api_key: ${OS_PASSWORD}
-
-  ubuntu_1404_image: "Ubuntu 14.04 LTS Generic"
   ubuntu_1604_image: "Ubuntu 16.04 LTS Generic"
-  centos_7_image: "centos7"
 
-  lab_name: tlab
   apt_proxy: 192.168.31.204:3142
   docker_proxy: 192.168.31.204:5000
 
-  rancher_vm_flavor: m2.large
-  k8s_vm_flavor: m5.xxlarge
+  rancher_vm_flavor: m1.xlarge
+  k8s_vm_flavor: m1.xlarge
 
   public_net_id: fbe8fd92-6636-4e63-ab28-bb6a5b0888a9
-  public_net_name: admin-vpn-floating
 
   oam_network_cidr: 10.0.0.0/16
-  dns_forwarder: 204.178.3.230
-  external_dns: 8.8.8.8
 
-  dnsaas_proxy_enable: "false"
-  dnsaas_proxied_keystone_url_path: "v3"
-  dnsaas_keystone_url: https://bdc1tlab01.research.att.com:5000
-  dnsaas_region: RegionOne
-  dnsaas_tenant_id: b4062c7fbf9646b8a2bcb71c46695ff3
-  dnsaas_tenant_name: ETE-OOM-Test
-  dnsaas_username: ${OS_USERNAME}
-  dnsaas_password: ${OS_PASSWORD}
+  integration_override_yaml: >
+    global:
+      repository: 192.168.31.204:5000
+      pullPolicy: IfNotPresent
+    robot:
+      openStackKeyStoneUrl: "https://bdc1tlab01.research.att.com:5000"
+      openStackPublicNetId: "fbe8fd92-6636-4e63-ab28-bb6a5b0888a9"
+      openStackPassword: "${OS_PASSWORD}"
+      openStackTenantId: "${OS_PROJECT_ID}"
+      openStackUserName: "${OS_USERNAME}"
+      ubuntu14Image: "Ubuntu 14.04 LTS Generic"
+      ubuntu16Image: "Ubuntu 16.04 LTS Generic"
+      openStackPrivateNetId: "__oam_network_id__"
+      openStackPrivateSubnetId: "__oam_subnet_id__"
+      openStackPrivateNetCidr: "10.0.0.0/16"
+      openStackOamNetworkCidrPrefix: "10.0"
+    so:
+      config:
+        openStackUserName: "${OS_USERNAME}"
+        openStackKeyStoneUrl: "https://bdc1tlab01.research.att.com:5000"
+        openStackEncryptedPasswordHere: "${OS_PASSWORD_ENCRYPTED}"
diff --git a/deployment/heat/onap-oom/env/tlab/EXTONAP_DEV.env b/deployment/heat/onap-oom/env/tlab/EXTONAP_DEV.env
index cb92442..d0beefa 100644
--- a/deployment/heat/onap-oom/env/tlab/EXTONAP_DEV.env
+++ b/deployment/heat/onap-oom/env/tlab/EXTONAP_DEV.env
@@ -1,33 +1,35 @@
 parameters:
 
-  keystone_url: https://bdc1tlab01.research.att.com:5000
-  openstack_tenant_id: 01b47c21807242598cd5ab63d1c6ba8e
-  openstack_tenant_name: EXTONAP_DEV
-  openstack_username: ${OS_USERNAME}
-  openstack_api_key: ${OS_PASSWORD}
-
-  ubuntu_1404_image: "Ubuntu 14.04 LTS Generic"
   ubuntu_1604_image: "Ubuntu 16.04 LTS Generic"
-  centos_7_image: "centos7"
 
   apt_proxy: 192.168.31.204:3142
   docker_proxy: 192.168.31.204:5000
 
-  rancher_vm_flavor: m1.large
-  k8s_vm_flavor: m2.xxlarge
+  rancher_vm_flavor: m1.xlarge
+  k8s_vm_flavor: m1.xlarge
 
   public_net_id: fbe8fd92-6636-4e63-ab28-bb6a5b0888a9
-  public_net_name: admin-vpn-floating
 
   oam_network_cidr: 10.0.0.0/16
-  dns_forwarder: 204.178.3.230
-  external_dns: 8.8.8.8
 
-  dnsaas_proxy_enable: "false"
-  dnsaas_proxied_keystone_url_path: "v3"
-  dnsaas_keystone_url: https://bdc1tlab01.research.att.com:5000
-  dnsaas_region: RegionOne
-  dnsaas_tenant_id: 01b47c21807242598cd5ab63d1c6ba8e
-  dnsaas_tenant_name: EXTONAP_DEV
-  dnsaas_username: ${OS_USERNAME}
-  dnsaas_password: ${OS_PASSWORD}
+  integration_override_yaml: >
+    global:
+      repository: 192.168.31.204:5000
+      pullPolicy: IfNotPresent
+    robot:
+      openStackKeyStoneUrl: "https://bdc1tlab01.research.att.com:5000"
+      openStackPublicNetId: "fbe8fd92-6636-4e63-ab28-bb6a5b0888a9"
+      openStackPassword: "${OS_PASSWORD}"
+      openStackTenantId: "${OS_PROJECT_ID}"
+      openStackUserName: "${OS_USERNAME}"
+      ubuntu14Image: "Ubuntu 14.04 LTS Generic"
+      ubuntu16Image: "Ubuntu 16.04 LTS Generic"
+      openStackPrivateNetId: "__oam_network_id__"
+      openStackPrivateSubnetId: "__oam_subnet_id__"
+      openStackPrivateNetCidr: "10.0.0.0/16"
+      openStackOamNetworkCidrPrefix: "10.0"
+    so:
+      config:
+        openStackUserName: "${OS_USERNAME}"
+        openStackKeyStoneUrl: "https://bdc1tlab01.research.att.com:5000"
+        openStackEncryptedPasswordHere: "${OS_PASSWORD_ENCRYPTED}"
diff --git a/deployment/heat/onap-oom/env/tlab/integration-override.yaml b/deployment/heat/onap-oom/env/tlab/integration-override.yaml
deleted file mode 100644
index 87302c9..0000000
--- a/deployment/heat/onap-oom/env/tlab/integration-override.yaml
+++ /dev/null
@@ -1,136 +0,0 @@
-# Copyright © 2017 Amdocs, Bell Canada
-#
-# 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.
-
-# This override file is useful to test one or more subcharts.
-# It overrides the default ONAP parent chart behaviour to deploy
-# all of ONAP.
-#
-# Example use to enable a single subchart (from this directory):
-#
-# helm install local/onap -n onap --namespace onap -f disable-allcharts.yaml --set so.enabled=true
-
-
-#################################################################
-# Global configuration overrides.
-#
-# These overrides will affect all helm charts (ie. applications)
-# that are listed below and are 'enabled'.
-#################################################################
-global:
-  # Change to an unused port prefix range to prevent port conflicts
-  # with other instances running within the same k8s cluster
-  nodePortPrefix: 302
-
-  # lab local nexus proxy - nexus3 default
-  repository: 192.168.31.204:5000
-  # image pull policy
-  #pullPolicy: Always
-  pullPolicy: IfNotPresent
-
-
-  # default mount path root directory referenced
-  # by persistent volumes and log files
-#  persistence:
-#    mountPath: /onapdata
-
-#################################################################
-# Enable/disable and configure helm charts (ie. applications)
-# to customize the ONAP deployment.
-#################################################################
-aaf:
-  enabled: true
-aai:
-  enabled: true
-  # aai subchart image overrides
-  aai-champ:
-    image: onap/champ:1.2-STAGING-latest
-  aai-data-router:
-    image: onap/data-router:1.2-STAGING-latest
-  aai-modelloader:
-    image: onap/model-loader:1.2-STAGING-latest
-  aai-resources:
-    image: onap/aai-resources:1.2-STAGING-latest
-  aai-search-data:
-    image: onap/search-data-service:1.2-STAGING-latest
-  aai-sparky-be:
-    image: onap/sparky-be:1.2-STAGING-latest
-  aai-traveral:
-    image: onap/aai-traversal:1.2-STAGING-latest
-appc:
-  enabled: false
-clamp:
-  enabled: true
-cli:
-  enabled: true
-consul:
-  enabled: true
-dcaegen2:
-  enabled: false
-esr:
-  enabled: true
-  # esr parent chart (server) image override
-  image: onap/aai/esr-server:1.1.0-SNAPSHOT
-  # esr subchart omage override
-  esr-gui:
-    image: onap/aai/esr-gui:1.1.0-SNAPSHOT
-log:
-  enabled: true
-message-router:
-  enabled: true
-#  kafka:
-#    repositoryOverride: docker.io
-#    image: wurstmeister/kafka:latest
-mock:
-  enabled: true
-msb:
-  enabled: true
-multicloud:
-  enabled: true
-policy:
-  enabled: true
-portal:
-  enabled: true
-robot:
-  enabled: true
-  #pullPolicy: Always
-#  config:
-    # openstack configuration
-#    openStackUserName: "demo"
-#    openStackRegion: "RegionOne"
-#    openStackKeyStoneUrl: "http://10.12.25.2:5000"
-#    openStackServiceTenantName: "service"
-#    openStackEncryptedPasswordHere: "c124921a3a0efbe579782cde8227681e"
-sdc:
-  enabled: true
-sdnc:
-  enabled: true
-so:
-  enabled: true
-  # so server configuration
-  config:
-    # openstack configuration
-    openStackUserName: "demo"
-    openStackRegion: "RegionOne"
-    openStackKeyStoneUrl: "https://bdc1tlab01.research.att.com:5000"
-    openStackServiceTenantName: "service"
-    openStackEncryptedPasswordHere: "bbaef6cd76625ab9eb60deedeae7dbb9"
-
-uui:
-  enabled: true
-vfc:
-  enabled: true
-vid:
-  enabled: true
-vnfsdk:
-  enabled: true
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-Jenkins-DNS-openrc b/deployment/heat/onap-oom/env/windriver/Integration-Jenkins-DNS-openrc
deleted file mode 120000
index ad27388..0000000
--- a/deployment/heat/onap-oom/env/windriver/Integration-Jenkins-DNS-openrc
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../test/ete/labs/windriver/Integration-Jenkins-DNS-openrc
\ No newline at end of file
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-Jenkins.env b/deployment/heat/onap-oom/env/windriver/Integration-Jenkins.env
index d80b8a5..fa16c25 100644
--- a/deployment/heat/onap-oom/env/windriver/Integration-Jenkins.env
+++ b/deployment/heat/onap-oom/env/windriver/Integration-Jenkins.env
@@ -1,34 +1,35 @@
 parameters:
 
-  keystone_url: http://10.12.25.2:5000
-  openstack_tenant_id: 09d8566ea45e43aa974cf447ed591d77
-  openstack_tenant_name: Integration-Jenkins
-  openstack_username: demo
-  openstack_api_key: onapdemo
-
-  ubuntu_1404_image: ubuntu-14-04-cloud-amd64
   ubuntu_1604_image: ubuntu-16-04-cloud-amd64
-  centos_7_image: CentOS-7
 
-  lab_name: windriver
   apt_proxy: 10.12.5.2:3142
   docker_proxy: 10.12.5.2:5000
 
-  rancher_vm_flavor: m1.large
-  k8s_vm_flavor: m1.xxlarge
+  rancher_vm_flavor: m1.xlarge
+  k8s_vm_flavor: m1.xlarge
 
   public_net_id: 971040b2-7059-49dc-b220-4fab50cb2ad4
-  public_net_name: external
 
   oam_network_cidr: 10.0.0.0/16
-  dns_forwarder: 10.12.25.5
-  external_dns: 8.8.8.8
 
-  dnsaas_proxy_enable: "true"
-  dnsaas_proxied_keystone_url_path: "api/multicloud-titanium_cloud/v0/pod25_RegionOne/identity/v2.0"
-  dnsaas_keystone_url: http://10.12.25.5:5000
-  dnsaas_region: RegionOne
-  dnsaas_tenant_id: bf80d09fbc804b42b3bc727d6cf1fcbe
-  dnsaas_tenant_name: Integration-Jenkins
-  dnsaas_username: demo
-  dnsaas_password: onapdemo
+  integration_override_yaml: >
+    global:
+      repository: 10.12.5.2:5000
+      pullPolicy: IfNotPresent
+    robot:
+      openStackKeyStoneUrl: "http://10.12.25.2:5000"
+      openStackPublicNetId: "971040b2-7059-49dc-b220-4fab50cb2ad4"
+      openStackPassword: "${OS_PASSWORD}"
+      openStackTenantId: "${OS_PROJECT_ID}"
+      openStackUserName: "${OS_USERNAME}"
+      ubuntu14Image: "ubuntu-14-04-cloud-amd64"
+      ubuntu16Image: "ubuntu-16-04-cloud-amd64"
+      openStackPrivateNetId: "__oam_network_id__"
+      openStackPrivateSubnetId: "__oam_subnet_id__"
+      openStackPrivateNetCidr: "10.0.0.0/16"
+      openStackOamNetworkCidrPrefix: "10.0"
+    so:
+      config:
+        openStackUserName: "${OS_USERNAME}"
+        openStackKeyStoneUrl: "http://10.12.25.2:5000"
+        openStackEncryptedPasswordHere: "${OS_PASSWORD_ENCRYPTED}"
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-SB-00-DNS-openrc b/deployment/heat/onap-oom/env/windriver/Integration-SB-00-DNS-openrc
deleted file mode 120000
index f5d04b1..0000000
--- a/deployment/heat/onap-oom/env/windriver/Integration-SB-00-DNS-openrc
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../test/ete/labs/windriver/Integration-SB-00-DNS-openrc
\ No newline at end of file
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-SB-00.env b/deployment/heat/onap-oom/env/windriver/Integration-SB-00.env
index 1696597..fa16c25 100644
--- a/deployment/heat/onap-oom/env/windriver/Integration-SB-00.env
+++ b/deployment/heat/onap-oom/env/windriver/Integration-SB-00.env
@@ -1,34 +1,35 @@
 parameters:
 
-  keystone_url: http://10.12.25.2:5000
-  openstack_tenant_id: 41d6d38489bd40b09ea8a6b6b852dcbd
-  openstack_tenant_name: Integration-SB-00
-  openstack_username: demo
-  openstack_api_key: onapdemo
-
-  ubuntu_1404_image: ubuntu-14-04-cloud-amd64
   ubuntu_1604_image: ubuntu-16-04-cloud-amd64
-  centos_7_image: CentOS-7
 
-  lab_name: windriver
   apt_proxy: 10.12.5.2:3142
   docker_proxy: 10.12.5.2:5000
 
-  rancher_vm_flavor: m1.large
-  k8s_vm_flavor: m1.xxlarge
+  rancher_vm_flavor: m1.xlarge
+  k8s_vm_flavor: m1.xlarge
 
   public_net_id: 971040b2-7059-49dc-b220-4fab50cb2ad4
-  public_net_name: external
 
   oam_network_cidr: 10.0.0.0/16
-  dns_forwarder: 10.12.25.5
-  external_dns: 8.8.8.8
 
-  dnsaas_proxy_enable: "true"
-  dnsaas_proxied_keystone_url_path: "api/multicloud-titanium_cloud/v0/pod25_RegionOne/identity/v2.0"
-  dnsaas_keystone_url: http://10.12.25.5:5000
-  dnsaas_region: RegionOne
-  dnsaas_tenant_id: a813ac529c6d4b44a3308ed38bcd7480
-  dnsaas_tenant_name: Integration-SB-00
-  dnsaas_username: demo
-  dnsaas_password: onapdemo
+  integration_override_yaml: >
+    global:
+      repository: 10.12.5.2:5000
+      pullPolicy: IfNotPresent
+    robot:
+      openStackKeyStoneUrl: "http://10.12.25.2:5000"
+      openStackPublicNetId: "971040b2-7059-49dc-b220-4fab50cb2ad4"
+      openStackPassword: "${OS_PASSWORD}"
+      openStackTenantId: "${OS_PROJECT_ID}"
+      openStackUserName: "${OS_USERNAME}"
+      ubuntu14Image: "ubuntu-14-04-cloud-amd64"
+      ubuntu16Image: "ubuntu-16-04-cloud-amd64"
+      openStackPrivateNetId: "__oam_network_id__"
+      openStackPrivateSubnetId: "__oam_subnet_id__"
+      openStackPrivateNetCidr: "10.0.0.0/16"
+      openStackOamNetworkCidrPrefix: "10.0"
+    so:
+      config:
+        openStackUserName: "${OS_USERNAME}"
+        openStackKeyStoneUrl: "http://10.12.25.2:5000"
+        openStackEncryptedPasswordHere: "${OS_PASSWORD_ENCRYPTED}"
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-SB-01-DNS-openrc b/deployment/heat/onap-oom/env/windriver/Integration-SB-01-DNS-openrc
deleted file mode 120000
index 208d760..0000000
--- a/deployment/heat/onap-oom/env/windriver/Integration-SB-01-DNS-openrc
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../test/ete/labs/windriver/Integration-SB-01-DNS-openrc
\ No newline at end of file
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-SB-01.env b/deployment/heat/onap-oom/env/windriver/Integration-SB-01.env
index 8e85191..fa16c25 100644
--- a/deployment/heat/onap-oom/env/windriver/Integration-SB-01.env
+++ b/deployment/heat/onap-oom/env/windriver/Integration-SB-01.env
@@ -1,34 +1,35 @@
 parameters:
 
-  keystone_url: http://10.12.25.2:5000
-  openstack_tenant_id: 087050388b204c73a3e418dd2c1fe30b
-  openstack_tenant_name: Integration-SB-01
-  openstack_username: demo
-  openstack_api_key: onapdemo
-
-  ubuntu_1404_image: ubuntu-14-04-cloud-amd64
   ubuntu_1604_image: ubuntu-16-04-cloud-amd64
-  centos_7_image: CentOS-7
 
-  lab_name: windriver
   apt_proxy: 10.12.5.2:3142
   docker_proxy: 10.12.5.2:5000
 
-  rancher_vm_flavor: m1.large
-  k8s_vm_flavor: m1.xxlarge
+  rancher_vm_flavor: m1.xlarge
+  k8s_vm_flavor: m1.xlarge
 
   public_net_id: 971040b2-7059-49dc-b220-4fab50cb2ad4
-  public_net_name: external
 
   oam_network_cidr: 10.0.0.0/16
-  dns_forwarder: 10.12.25.5
-  external_dns: 8.8.8.8
 
-  dnsaas_proxy_enable: "true"
-  dnsaas_proxied_keystone_url_path: "api/multicloud-titanium_cloud/v0/pod25_RegionOne/identity/v2.0"
-  dnsaas_keystone_url: http://10.12.25.5:5000
-  dnsaas_region: RegionOne
-  dnsaas_tenant_id: 4318a6c5788449cc97c88fd745b554b9
-  dnsaas_tenant_name: Integration-SB-01
-  dnsaas_username: demo
-  dnsaas_password: onapdemo
+  integration_override_yaml: >
+    global:
+      repository: 10.12.5.2:5000
+      pullPolicy: IfNotPresent
+    robot:
+      openStackKeyStoneUrl: "http://10.12.25.2:5000"
+      openStackPublicNetId: "971040b2-7059-49dc-b220-4fab50cb2ad4"
+      openStackPassword: "${OS_PASSWORD}"
+      openStackTenantId: "${OS_PROJECT_ID}"
+      openStackUserName: "${OS_USERNAME}"
+      ubuntu14Image: "ubuntu-14-04-cloud-amd64"
+      ubuntu16Image: "ubuntu-16-04-cloud-amd64"
+      openStackPrivateNetId: "__oam_network_id__"
+      openStackPrivateSubnetId: "__oam_subnet_id__"
+      openStackPrivateNetCidr: "10.0.0.0/16"
+      openStackOamNetworkCidrPrefix: "10.0"
+    so:
+      config:
+        openStackUserName: "${OS_USERNAME}"
+        openStackKeyStoneUrl: "http://10.12.25.2:5000"
+        openStackEncryptedPasswordHere: "${OS_PASSWORD_ENCRYPTED}"
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-SB-02-DNS-openrc b/deployment/heat/onap-oom/env/windriver/Integration-SB-02-DNS-openrc
deleted file mode 120000
index 814962e..0000000
--- a/deployment/heat/onap-oom/env/windriver/Integration-SB-02-DNS-openrc
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../test/ete/labs/windriver/Integration-SB-02-DNS-openrc
\ No newline at end of file
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-SB-02.env b/deployment/heat/onap-oom/env/windriver/Integration-SB-02.env
index 99d267b..fa16c25 100644
--- a/deployment/heat/onap-oom/env/windriver/Integration-SB-02.env
+++ b/deployment/heat/onap-oom/env/windriver/Integration-SB-02.env
@@ -1,34 +1,35 @@
 parameters:
 
-  keystone_url: http://10.12.25.2:5000
-  openstack_tenant_id: ebb0ea7144004bacac1e39ff23105fa7
-  openstack_tenant_name: Integration-SB-02
-  openstack_username: demo
-  openstack_api_key: onapdemo
-
-  ubuntu_1404_image: ubuntu-14-04-cloud-amd64
   ubuntu_1604_image: ubuntu-16-04-cloud-amd64
-  centos_7_image: CentOS-7
 
-  lab_name: windriver
   apt_proxy: 10.12.5.2:3142
   docker_proxy: 10.12.5.2:5000
 
-  rancher_vm_flavor: m1.large
-  k8s_vm_flavor: m1.xxlarge
+  rancher_vm_flavor: m1.xlarge
+  k8s_vm_flavor: m1.xlarge
 
   public_net_id: 971040b2-7059-49dc-b220-4fab50cb2ad4
-  public_net_name: external
 
   oam_network_cidr: 10.0.0.0/16
-  dns_forwarder: 10.12.25.5
-  external_dns: 8.8.8.8
 
-  dnsaas_proxy_enable: "true"
-  dnsaas_proxied_keystone_url_path: "api/multicloud-titanium_cloud/v0/pod25_RegionOne/identity/v2.0"
-  dnsaas_keystone_url: http://10.12.25.5:5000
-  dnsaas_region: RegionOne
-  dnsaas_tenant_id: 89fee629f5f044739fb64380be63b6da
-  dnsaas_tenant_name: Integration-SB-02
-  dnsaas_username: demo
-  dnsaas_password: onapdemo
+  integration_override_yaml: >
+    global:
+      repository: 10.12.5.2:5000
+      pullPolicy: IfNotPresent
+    robot:
+      openStackKeyStoneUrl: "http://10.12.25.2:5000"
+      openStackPublicNetId: "971040b2-7059-49dc-b220-4fab50cb2ad4"
+      openStackPassword: "${OS_PASSWORD}"
+      openStackTenantId: "${OS_PROJECT_ID}"
+      openStackUserName: "${OS_USERNAME}"
+      ubuntu14Image: "ubuntu-14-04-cloud-amd64"
+      ubuntu16Image: "ubuntu-16-04-cloud-amd64"
+      openStackPrivateNetId: "__oam_network_id__"
+      openStackPrivateSubnetId: "__oam_subnet_id__"
+      openStackPrivateNetCidr: "10.0.0.0/16"
+      openStackOamNetworkCidrPrefix: "10.0"
+    so:
+      config:
+        openStackUserName: "${OS_USERNAME}"
+        openStackKeyStoneUrl: "http://10.12.25.2:5000"
+        openStackEncryptedPasswordHere: "${OS_PASSWORD_ENCRYPTED}"
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-SB-03-DNS-openrc b/deployment/heat/onap-oom/env/windriver/Integration-SB-03-DNS-openrc
deleted file mode 120000
index 10a7b0b..0000000
--- a/deployment/heat/onap-oom/env/windriver/Integration-SB-03-DNS-openrc
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../test/ete/labs/windriver/Integration-SB-03-DNS-openrc
\ No newline at end of file
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-SB-03.env b/deployment/heat/onap-oom/env/windriver/Integration-SB-03.env
index 89fc801..fa16c25 100644
--- a/deployment/heat/onap-oom/env/windriver/Integration-SB-03.env
+++ b/deployment/heat/onap-oom/env/windriver/Integration-SB-03.env
@@ -1,34 +1,35 @@
 parameters:
 
-  keystone_url: http://10.12.25.2:5000
-  openstack_tenant_id: bc43d50ffcb84750bac0c1707a9a765b
-  openstack_tenant_name: Integration-SB-03
-  openstack_username: demo
-  openstack_api_key: onapdemo
-
-  ubuntu_1404_image: ubuntu-14-04-cloud-amd64
   ubuntu_1604_image: ubuntu-16-04-cloud-amd64
-  centos_7_image: CentOS-7
 
-  lab_name: windriver
   apt_proxy: 10.12.5.2:3142
   docker_proxy: 10.12.5.2:5000
 
-  rancher_vm_flavor: m1.large
-  k8s_vm_flavor: m1.xxlarge
+  rancher_vm_flavor: m1.xlarge
+  k8s_vm_flavor: m1.xlarge
 
   public_net_id: 971040b2-7059-49dc-b220-4fab50cb2ad4
-  public_net_name: external
 
   oam_network_cidr: 10.0.0.0/16
-  dns_forwarder: 10.12.25.5
-  external_dns: 8.8.8.8
 
-  dnsaas_proxy_enable: "true"
-  dnsaas_proxied_keystone_url_path: "api/multicloud-titanium_cloud/v0/pod25_RegionOne/identity/v2.0"
-  dnsaas_keystone_url: http://10.12.25.5:5000
-  dnsaas_region: RegionOne
-  dnsaas_tenant_id: 29fb1a7806e84d8fbc93fa3945f1e2a5
-  dnsaas_tenant_name: Integration-SB-03
-  dnsaas_username: demo
-  dnsaas_password: onapdemo
+  integration_override_yaml: >
+    global:
+      repository: 10.12.5.2:5000
+      pullPolicy: IfNotPresent
+    robot:
+      openStackKeyStoneUrl: "http://10.12.25.2:5000"
+      openStackPublicNetId: "971040b2-7059-49dc-b220-4fab50cb2ad4"
+      openStackPassword: "${OS_PASSWORD}"
+      openStackTenantId: "${OS_PROJECT_ID}"
+      openStackUserName: "${OS_USERNAME}"
+      ubuntu14Image: "ubuntu-14-04-cloud-amd64"
+      ubuntu16Image: "ubuntu-16-04-cloud-amd64"
+      openStackPrivateNetId: "__oam_network_id__"
+      openStackPrivateSubnetId: "__oam_subnet_id__"
+      openStackPrivateNetCidr: "10.0.0.0/16"
+      openStackOamNetworkCidrPrefix: "10.0"
+    so:
+      config:
+        openStackUserName: "${OS_USERNAME}"
+        openStackKeyStoneUrl: "http://10.12.25.2:5000"
+        openStackEncryptedPasswordHere: "${OS_PASSWORD_ENCRYPTED}"
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-SB-04-DNS-openrc b/deployment/heat/onap-oom/env/windriver/Integration-SB-04-DNS-openrc
deleted file mode 120000
index cd1eeb5..0000000
--- a/deployment/heat/onap-oom/env/windriver/Integration-SB-04-DNS-openrc
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../test/ete/labs/windriver/Integration-SB-04-DNS-openrc
\ No newline at end of file
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-SB-04.env b/deployment/heat/onap-oom/env/windriver/Integration-SB-04.env
index ec4227e..fa16c25 100644
--- a/deployment/heat/onap-oom/env/windriver/Integration-SB-04.env
+++ b/deployment/heat/onap-oom/env/windriver/Integration-SB-04.env
@@ -1,34 +1,35 @@
 parameters:
 
-  keystone_url: http://10.12.25.2:5000
-  openstack_tenant_id: d570c718cbc545029f40e50b75eb13df
-  openstack_tenant_name: Integration-SB-04
-  openstack_username: demo
-  openstack_api_key: onapdemo
-
-  ubuntu_1404_image: ubuntu-14-04-cloud-amd64
   ubuntu_1604_image: ubuntu-16-04-cloud-amd64
-  centos_7_image: CentOS-7
 
-  lab_name: windriver
   apt_proxy: 10.12.5.2:3142
   docker_proxy: 10.12.5.2:5000
 
-  rancher_vm_flavor: m1.large
-  k8s_vm_flavor: m1.xxlarge
+  rancher_vm_flavor: m1.xlarge
+  k8s_vm_flavor: m1.xlarge
 
   public_net_id: 971040b2-7059-49dc-b220-4fab50cb2ad4
-  public_net_name: external
 
   oam_network_cidr: 10.0.0.0/16
-  dns_forwarder: 10.12.25.5
-  external_dns: 8.8.8.8
 
-  dnsaas_proxy_enable: "true"
-  dnsaas_proxied_keystone_url_path: "api/multicloud-titanium_cloud/v0/pod25_RegionOne/identity/v2.0"
-  dnsaas_keystone_url: http://10.12.25.5:5000
-  dnsaas_region: RegionOne
-  dnsaas_tenant_id: 024b911be9514ed7885af0c6bf6f68c8
-  dnsaas_tenant_name: Integration-SB-04
-  dnsaas_username: demo
-  dnsaas_password: onapdemo
+  integration_override_yaml: >
+    global:
+      repository: 10.12.5.2:5000
+      pullPolicy: IfNotPresent
+    robot:
+      openStackKeyStoneUrl: "http://10.12.25.2:5000"
+      openStackPublicNetId: "971040b2-7059-49dc-b220-4fab50cb2ad4"
+      openStackPassword: "${OS_PASSWORD}"
+      openStackTenantId: "${OS_PROJECT_ID}"
+      openStackUserName: "${OS_USERNAME}"
+      ubuntu14Image: "ubuntu-14-04-cloud-amd64"
+      ubuntu16Image: "ubuntu-16-04-cloud-amd64"
+      openStackPrivateNetId: "__oam_network_id__"
+      openStackPrivateSubnetId: "__oam_subnet_id__"
+      openStackPrivateNetCidr: "10.0.0.0/16"
+      openStackOamNetworkCidrPrefix: "10.0"
+    so:
+      config:
+        openStackUserName: "${OS_USERNAME}"
+        openStackKeyStoneUrl: "http://10.12.25.2:5000"
+        openStackEncryptedPasswordHere: "${OS_PASSWORD_ENCRYPTED}"
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-SB-05-DNS-openrc b/deployment/heat/onap-oom/env/windriver/Integration-SB-05-DNS-openrc
deleted file mode 120000
index 2210fcc..0000000
--- a/deployment/heat/onap-oom/env/windriver/Integration-SB-05-DNS-openrc
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../test/ete/labs/windriver/Integration-SB-05-DNS-openrc
\ No newline at end of file
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-SB-05.env b/deployment/heat/onap-oom/env/windriver/Integration-SB-05.env
index af6c5fe..fa16c25 100644
--- a/deployment/heat/onap-oom/env/windriver/Integration-SB-05.env
+++ b/deployment/heat/onap-oom/env/windriver/Integration-SB-05.env
@@ -1,34 +1,35 @@
 parameters:
 
-  keystone_url: http://10.12.25.2:5000
-  openstack_tenant_id: b8ad3842ab3642f7bf3fbe4e4d3b9f86
-  openstack_tenant_name: Integration-SB-05
-  openstack_username: demo
-  openstack_api_key: onapdemo
-
-  ubuntu_1404_image: ubuntu-14-04-cloud-amd64
   ubuntu_1604_image: ubuntu-16-04-cloud-amd64
-  centos_7_image: CentOS-7
 
-  lab_name: windriver
   apt_proxy: 10.12.5.2:3142
   docker_proxy: 10.12.5.2:5000
 
-  rancher_vm_flavor: m1.large
-  k8s_vm_flavor: m1.xxlarge
+  rancher_vm_flavor: m1.xlarge
+  k8s_vm_flavor: m1.xlarge
 
   public_net_id: 971040b2-7059-49dc-b220-4fab50cb2ad4
-  public_net_name: external
 
   oam_network_cidr: 10.0.0.0/16
-  dns_forwarder: 10.12.25.5
-  external_dns: 8.8.8.8
 
-  dnsaas_proxy_enable: "true"
-  dnsaas_proxied_keystone_url_path: "api/multicloud-titanium_cloud/v0/pod25_RegionOne/identity/v2.0"
-  dnsaas_keystone_url: http://10.12.25.5:5000
-  dnsaas_region: RegionOne
-  dnsaas_tenant_id: d4e1d9e89456490cb7213092086e5c66
-  dnsaas_tenant_name: Integration-SB-05
-  dnsaas_username: demo
-  dnsaas_password: onapdemo
+  integration_override_yaml: >
+    global:
+      repository: 10.12.5.2:5000
+      pullPolicy: IfNotPresent
+    robot:
+      openStackKeyStoneUrl: "http://10.12.25.2:5000"
+      openStackPublicNetId: "971040b2-7059-49dc-b220-4fab50cb2ad4"
+      openStackPassword: "${OS_PASSWORD}"
+      openStackTenantId: "${OS_PROJECT_ID}"
+      openStackUserName: "${OS_USERNAME}"
+      ubuntu14Image: "ubuntu-14-04-cloud-amd64"
+      ubuntu16Image: "ubuntu-16-04-cloud-amd64"
+      openStackPrivateNetId: "__oam_network_id__"
+      openStackPrivateSubnetId: "__oam_subnet_id__"
+      openStackPrivateNetCidr: "10.0.0.0/16"
+      openStackOamNetworkCidrPrefix: "10.0"
+    so:
+      config:
+        openStackUserName: "${OS_USERNAME}"
+        openStackKeyStoneUrl: "http://10.12.25.2:5000"
+        openStackEncryptedPasswordHere: "${OS_PASSWORD_ENCRYPTED}"
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-SB-06-DNS-openrc b/deployment/heat/onap-oom/env/windriver/Integration-SB-06-DNS-openrc
deleted file mode 120000
index 850c255..0000000
--- a/deployment/heat/onap-oom/env/windriver/Integration-SB-06-DNS-openrc
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../test/ete/labs/windriver/Integration-SB-06-DNS-openrc
\ No newline at end of file
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-SB-06.env b/deployment/heat/onap-oom/env/windriver/Integration-SB-06.env
index 72ddd41..fa16c25 100644
--- a/deployment/heat/onap-oom/env/windriver/Integration-SB-06.env
+++ b/deployment/heat/onap-oom/env/windriver/Integration-SB-06.env
@@ -1,34 +1,35 @@
 parameters:
 
-  keystone_url: http://10.12.25.2:5000
-  openstack_tenant_id: 7fad299815104c0a8f90a8df80343f03
-  openstack_tenant_name: Integration-SB-06
-  openstack_username: demo
-  openstack_api_key: onapdemo
-
-  ubuntu_1404_image: ubuntu-14-04-cloud-amd64
   ubuntu_1604_image: ubuntu-16-04-cloud-amd64
-  centos_7_image: CentOS-7
 
-  lab_name: windriver
   apt_proxy: 10.12.5.2:3142
   docker_proxy: 10.12.5.2:5000
 
-  rancher_vm_flavor: m1.large
-  k8s_vm_flavor: m1.xxlarge
+  rancher_vm_flavor: m1.xlarge
+  k8s_vm_flavor: m1.xlarge
 
   public_net_id: 971040b2-7059-49dc-b220-4fab50cb2ad4
-  public_net_name: external
 
   oam_network_cidr: 10.0.0.0/16
-  dns_forwarder: 10.12.25.5
-  external_dns: 8.8.8.8
 
-  dnsaas_proxy_enable: "true"
-  dnsaas_proxied_keystone_url_path: "api/multicloud-titanium_cloud/v0/pod25_RegionOne/identity/v2.0"
-  dnsaas_keystone_url: http://10.12.25.5:5000
-  dnsaas_region: RegionOne
-  dnsaas_tenant_id: 2d7c6ec2cf9147fa974fa059b3673d7a
-  dnsaas_tenant_name: Integration-SB-06
-  dnsaas_username: demo
-  dnsaas_password: onapdemo
+  integration_override_yaml: >
+    global:
+      repository: 10.12.5.2:5000
+      pullPolicy: IfNotPresent
+    robot:
+      openStackKeyStoneUrl: "http://10.12.25.2:5000"
+      openStackPublicNetId: "971040b2-7059-49dc-b220-4fab50cb2ad4"
+      openStackPassword: "${OS_PASSWORD}"
+      openStackTenantId: "${OS_PROJECT_ID}"
+      openStackUserName: "${OS_USERNAME}"
+      ubuntu14Image: "ubuntu-14-04-cloud-amd64"
+      ubuntu16Image: "ubuntu-16-04-cloud-amd64"
+      openStackPrivateNetId: "__oam_network_id__"
+      openStackPrivateSubnetId: "__oam_subnet_id__"
+      openStackPrivateNetCidr: "10.0.0.0/16"
+      openStackOamNetworkCidrPrefix: "10.0"
+    so:
+      config:
+        openStackUserName: "${OS_USERNAME}"
+        openStackKeyStoneUrl: "http://10.12.25.2:5000"
+        openStackEncryptedPasswordHere: "${OS_PASSWORD_ENCRYPTED}"
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-SB-07-DNS-openrc b/deployment/heat/onap-oom/env/windriver/Integration-SB-07-DNS-openrc
deleted file mode 120000
index 7e4a3af..0000000
--- a/deployment/heat/onap-oom/env/windriver/Integration-SB-07-DNS-openrc
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../test/ete/labs/windriver/Integration-SB-07-DNS-openrc
\ No newline at end of file
diff --git a/deployment/heat/onap-oom/env/windriver/Integration-SB-07.env b/deployment/heat/onap-oom/env/windriver/Integration-SB-07.env
index 6c5f23a..fa16c25 100644
--- a/deployment/heat/onap-oom/env/windriver/Integration-SB-07.env
+++ b/deployment/heat/onap-oom/env/windriver/Integration-SB-07.env
@@ -1,34 +1,35 @@
 parameters:
 
-  keystone_url: http://10.12.25.2:5000
-  openstack_tenant_id: 1e097c6713e74fd7ac8e4295e605ee1e
-  openstack_tenant_name: Integration-SB-07
-  openstack_username: demo
-  openstack_api_key: onapdemo
-
-  ubuntu_1404_image: ubuntu-14-04-cloud-amd64
   ubuntu_1604_image: ubuntu-16-04-cloud-amd64
-  centos_7_image: CentOS-7
 
-  lab_name: windriver
   apt_proxy: 10.12.5.2:3142
   docker_proxy: 10.12.5.2:5000
 
-  rancher_vm_flavor: m1.large
-  k8s_vm_flavor: m1.xxlarge
+  rancher_vm_flavor: m1.xlarge
+  k8s_vm_flavor: m1.xlarge
 
   public_net_id: 971040b2-7059-49dc-b220-4fab50cb2ad4
-  public_net_name: external
 
   oam_network_cidr: 10.0.0.0/16
-  dns_forwarder: 10.12.25.5
-  external_dns: 8.8.8.8
 
-  dnsaas_proxy_enable: "true"
-  dnsaas_proxied_keystone_url_path: "api/multicloud-titanium_cloud/v0/pod25_RegionOne/identity/v2.0"
-  dnsaas_keystone_url: http://10.12.25.5:5000
-  dnsaas_region: RegionOne
-  dnsaas_tenant_id: 885777d5e9074f31ad7801f9e6876b84
-  dnsaas_tenant_name: Integration-SB-07
-  dnsaas_username: demo
-  dnsaas_password: onapdemo
+  integration_override_yaml: >
+    global:
+      repository: 10.12.5.2:5000
+      pullPolicy: IfNotPresent
+    robot:
+      openStackKeyStoneUrl: "http://10.12.25.2:5000"
+      openStackPublicNetId: "971040b2-7059-49dc-b220-4fab50cb2ad4"
+      openStackPassword: "${OS_PASSWORD}"
+      openStackTenantId: "${OS_PROJECT_ID}"
+      openStackUserName: "${OS_USERNAME}"
+      ubuntu14Image: "ubuntu-14-04-cloud-amd64"
+      ubuntu16Image: "ubuntu-16-04-cloud-amd64"
+      openStackPrivateNetId: "__oam_network_id__"
+      openStackPrivateSubnetId: "__oam_subnet_id__"
+      openStackPrivateNetCidr: "10.0.0.0/16"
+      openStackOamNetworkCidrPrefix: "10.0"
+    so:
+      config:
+        openStackUserName: "${OS_USERNAME}"
+        openStackKeyStoneUrl: "http://10.12.25.2:5000"
+        openStackEncryptedPasswordHere: "${OS_PASSWORD_ENCRYPTED}"
diff --git a/deployment/heat/onap-oom/env/windriver/integration-override.yaml b/deployment/heat/onap-oom/env/windriver/integration-override.yaml
deleted file mode 100644
index 31c28fe..0000000
--- a/deployment/heat/onap-oom/env/windriver/integration-override.yaml
+++ /dev/null
@@ -1,136 +0,0 @@
-# Copyright © 2017 Amdocs, Bell Canada
-#
-# 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.
-
-# This override file is useful to test one or more subcharts.
-# It overrides the default ONAP parent chart behaviour to deploy
-# all of ONAP.
-#
-# Example use to enable a single subchart (from this directory):
-#
-# helm install local/onap -n onap --namespace onap -f disable-allcharts.yaml --set so.enabled=true
-
-
-#################################################################
-# Global configuration overrides.
-#
-# These overrides will affect all helm charts (ie. applications)
-# that are listed below and are 'enabled'.
-#################################################################
-global:
-  # Change to an unused port prefix range to prevent port conflicts
-  # with other instances running within the same k8s cluster
-  nodePortPrefix: 302
-
-  # windriver local nexus proxy - nexus3 default
-  repository: 10.12.5.2:5000
-  # image pull policy
-  #pullPolicy: Always
-  pullPolicy: IfNotPresent
-
-
-  # default mount path root directory referenced
-  # by persistent volumes and log files
-#  persistence:
-#    mountPath: /onapdata
-
-#################################################################
-# Enable/disable and configure helm charts (ie. applications)
-# to customize the ONAP deployment.
-#################################################################
-aaf:
-  enabled: true
-aai:
-  enabled: true
-  # aai subchart image overrides
-  aai-champ:
-    image: onap/champ:1.2-STAGING-latest
-  aai-data-router:
-    image: onap/data-router:1.2-STAGING-latest
-  aai-modelloader:
-    image: onap/model-loader:1.2-STAGING-latest
-  aai-resources:
-    image: onap/aai-resources:1.2-STAGING-latest
-  aai-search-data:
-    image: onap/search-data-service:1.2-STAGING-latest
-  aai-sparky-be:
-    image: onap/sparky-be:1.2-STAGING-latest
-  aai-traveral:
-    image: onap/aai-traversal:1.2-STAGING-latest
-appc:
-  enabled: false
-clamp:
-  enabled: true
-cli:
-  enabled: true
-consul:
-  enabled: true
-dcaegen2:
-  enabled: false
-esr:
-  enabled: true
-  # esr parent chart (server) image override
-  image: onap/aai/esr-server:1.1.0-SNAPSHOT
-  # esr subchart omage override
-  esr-gui:
-    image: onap/aai/esr-gui:1.1.0-SNAPSHOT
-log:
-  enabled: true
-message-router:
-  enabled: true
-#  kafka:
-#    repositoryOverride: docker.io
-#    image: wurstmeister/kafka:latest
-mock:
-  enabled: true
-msb:
-  enabled: true
-multicloud:
-  enabled: true
-policy:
-  enabled: true
-portal:
-  enabled: true
-robot:
-  enabled: true
-  #pullPolicy: Always
-#  config:
-    # openstack configuration
-#    openStackUserName: "demo"
-#    openStackRegion: "RegionOne"
-#    openStackKeyStoneUrl: "http://10.12.25.2:5000"
-#    openStackServiceTenantName: "service"
-#    openStackEncryptedPasswordHere: "c124921a3a0efbe579782cde8227681e"
-sdc:
-  enabled: true
-sdnc:
-  enabled: true
-so:
-  enabled: true
-  # so server configuration
-  config:
-    # openstack configuration
-    openStackUserName: "demo"
-    openStackRegion: "RegionOne"
-    openStackKeyStoneUrl: "http://10.12.25.2:5000"
-    openStackServiceTenantName: "service"
-    openStackEncryptedPasswordHere: "bbaef6cd76625ab9eb60deedeae7dbb9"
-
-uui:
-  enabled: true
-vfc:
-  enabled: true
-vid:
-  enabled: true
-vnfsdk:
-  enabled: true
diff --git a/deployment/heat/onap-oom/k8s_vm_entrypoint.sh b/deployment/heat/onap-oom/k8s_vm_entrypoint.sh
index f4c6eb6..1ec659c 100644
--- a/deployment/heat/onap-oom/k8s_vm_entrypoint.sh
+++ b/deployment/heat/onap-oom/k8s_vm_entrypoint.sh
@@ -3,7 +3,9 @@
 
 mkdir -p /opt/config
 echo "__rancher_ip_addr__" > /opt/config/rancher_ip_addr.txt
-echo `hostname -I` `hostname` >> /etc/hosts
+HOST_IP=$(hostname -I)
+echo $HOST_IP `hostname` >> /etc/hosts
+
 mkdir -p /etc/docker
 if [ ! -z "__docker_proxy__" ]; then
     cat > /etc/docker/daemon.json <<EOF
@@ -19,7 +21,11 @@
 EOF
 fi
 apt-get -y update
-apt-get -y install linux-image-extra-$(uname -r) jq make
+
+mkdir -p /dockerdata-nfs
+echo "__rancher_ip_addr__:/dockerdata-nfs /dockerdata-nfs nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0" | tee -a /etc/fstab
+
+apt-get -y install linux-image-extra-$(uname -r) jq nfs-common
 
 cd ~
 
@@ -27,149 +33,16 @@
 curl -s https://releases.rancher.com/install-docker/17.03.sh | sh
 usermod -aG docker ubuntu
 
-# install kubernetes 1.8.6
-curl -s -LO https://storage.googleapis.com/kubernetes-release/release/v1.8.6/bin/linux/amd64/kubectl
-chmod +x ./kubectl
-sudo mv ./kubectl /usr/local/bin/kubectl
-mkdir ~/.kube
-
-# install helm
-wget -q http://storage.googleapis.com/kubernetes-helm/helm-v2.7.2-linux-amd64.tar.gz
-tar -zxvf helm-v2.7.2-linux-amd64.tar.gz
-sudo mv linux-amd64/helm /usr/local/bin/helm
-
 # Fix virtual memory allocation for onap-log:elasticsearch:
 echo "vm.max_map_count=262144" >> /etc/sysctl.conf
 sysctl -p
 
-# install rancher agent
-echo export RANCHER_IP=__rancher_ip_addr__ > api-keys-rc
-source api-keys-rc
-
-sleep 50
-until curl -s -o projects.json -H "Accept: application/json" http://$RANCHER_IP:8080/v2-beta/projects; do
-    sleep 10
-done
-OLD_PID=$(jq -r '.data[0].id' projects.json)
-
-curl -s -H "Accept: application/json" -H "Content-Type: application/json" -d '{"accountId":"1a1"}' http://$RANCHER_IP:8080/v2-beta/apikeys > apikeys.json
-echo export RANCHER_ACCESS_KEY=`jq -r '.publicValue' apikeys.json` >> api-keys-rc
-echo export RANCHER_SECRET_KEY=`jq -r '.secretValue' apikeys.json` >> api-keys-rc
-source api-keys-rc
-
-curl -s -u "${RANCHER_ACCESS_KEY}:${RANCHER_SECRET_KEY}" -X DELETE -H 'Content-Type: application/json' "http://$RANCHER_IP:8080/v2-beta/projects/$OLD_PID"
-
-until [ ! -z "$TEMPLATE_ID" ] && [ "$TEMPLATE_ID" != "null" ]; do
-    sleep 5
-    curl -s -H "Accept: application/json" http://$RANCHER_IP:8080/v2-beta/projectTemplates?name=Kubernetes > projectTemplatesKubernetes.json
-    TEMPLATE_ID=$(jq -r '.data[0].id' projectTemplatesKubernetes.json)
-done
-
-curl -s -u "${RANCHER_ACCESS_KEY}:${RANCHER_SECRET_KEY}" -X POST -H 'Content-Type: application/json' -d '{ "name":"oom", "projectTemplateId":"'$TEMPLATE_ID'" }' "http://$RANCHER_IP:8080/v2-beta/projects" > project.json
-PID=`jq -r '.id' project.json`
-echo export RANCHER_URL=http://$RANCHER_IP:8080/v1/projects/$PID >> api-keys-rc
-source api-keys-rc
-
-until [ $(jq -r '.state' project.json) == "active" ]; do
-    sleep 5
-    curl -s -H "Accept: application/json" http://$RANCHER_IP:8080/v1/projects/$PID > project.json
-done
-
-TID=$(curl -s -X POST -H "Accept: application/json" -H "Content-Type: application/json" http://$RANCHER_IP:8080/v1/projects/$PID/registrationTokens | jq -r '.id')
-touch token.json
-while [ $(jq -r .command token.json | wc -c) -lt 10 ]; do
-    sleep 5
-    curl -s -X GET -H "Accept: application/json" http://$RANCHER_IP:8080/v1/projects/$PID/registrationToken/$TID > token.json
-done
-RANCHER_AGENT_CMD=$(jq -r .command token.json)
-eval $RANCHER_AGENT_CMD
-
-
-KUBETOKEN=$(echo -n 'Basic '$(echo -n "$RANCHER_ACCESS_KEY:$RANCHER_SECRET_KEY" | base64 -w 0) | base64 -w 0)
-
-# create .kube/config
-cat > ~/.kube/config <<EOF
-apiVersion: v1
-kind: Config
-clusters:
-- cluster:
-    api-version: v1
-    insecure-skip-tls-verify: true
-    server: "https://$RANCHER_IP:8080/r/projects/$PID/kubernetes:6443"
-  name: "oom"
-contexts:
-- context:
-    cluster: "oom"
-    user: "oom"
-  name: "oom"
-current-context: "oom"
-users:
-- name: "oom"
-  user:
-    token: "$KUBETOKEN"
-EOF
-
-export KUBECONFIG=/root/.kube/config
-kubectl config view
-
-# wait for kubernetes to initialze
 sleep 100
-until [ $(kubectl get pods --namespace kube-system | tail -n +2 | grep -c Running) -ge 6 ]; do
-    sleep 10
+
+while [ ! -e /dockerdata-nfs/rancher_agent_cmd.sh ]; do
+    mount /dockerdata-nfs
+    sleep 5
 done
-
-
-# Install using OOM
-export HOME=/root
-
-# Clone OOM:
-cd ~
-git clone -b master http://gerrit.onap.org/r/oom
-cd oom
-git log -1
-
-# Update values.yaml to point to docker-proxy instead of nexus3:
-cd ~/oom/kubernetes
-#perl -p -i -e 's/nexus3.onap.org:10001/__docker_proxy__/g' `find ./ -name values.yaml`
-sed -i 's/nexus3.onap.org:10001/__docker_proxy__/g' onap/values.yaml
-sed -i 's/#repository:/repository:/g' onap/values.yaml
-sed -i 's/#repositorySecret:/repositorySecret:/g' onap/values.yaml
-git diff
-
-
-# Clone integration:
-cd ~
-git clone -b master http://gerrit.onap.org/r/integration
-cd integration
-git log -1
-
-cd ~
-ln -s ~/integration/deployment/heat/onap-oom/env/__lab_name__/integration-override.yaml
-
-
-# version control the persistence volume to see what's happening
-mkdir -p /dockerdata-nfs/
-cd /dockerdata-nfs/
-git init
-git config user.email "root@k8s"
-git config user.name "root"
-git add -A
-git commit -m "initial commit"
-
-# Run ONAP:
-cd ~/oom/kubernetes/
-# verify version
-helm version
-helm init --client-only
-helm init --upgrade
-helm serve &
-sleep 3
-helm repo add local http://127.0.0.1:8879
-helm repo list
-make all
-helm search -l | grep local
-helm install local/onap -n dev --namespace onap -f ~/integration/deployment/heat/onap-oom/env/__lab_name__/integration-override.yaml
-
-# Check ONAP status:
-sleep 3
-kubectl get pods --all-namespaces
+cp /dockerdata-nfs/rancher_agent_cmd.sh .
+sed -i "s/docker run/docker run -e CATTLE_AGENT_IP=${HOST_IP}/g" rancher_agent_cmd.sh
+source rancher_agent_cmd.sh
diff --git a/deployment/heat/onap-oom/onap-oom.yaml b/deployment/heat/onap-oom/onap-oom.yaml
index a6a5cf0..c290e17 100644
--- a/deployment/heat/onap-oom/onap-oom.yaml
+++ b/deployment/heat/onap-oom/onap-oom.yaml
@@ -1,10 +1,10 @@
+#
+# Generated by scripts/gen-onap-oom-yaml.sh; MANUAL CHANGES WILL BE LOST
+#
 heat_template_version: 2015-10-15
 description: ONAP on Kubernetes using OOM
 
 parameters:
-  lab_name:
-    type: string
-
   docker_proxy:
     type: string
 
@@ -15,93 +15,25 @@
     type: string
     description: The ID of the Public network for floating IP address allocation
 
-  public_net_name:
-    type: string
-    description: The name of the Public network referred by public_net_id
-
   oam_network_cidr:
     type: string
     description: CIDR of the OAM ONAP network
 
-  keystone_url:
-    type: string
-    description: URL of OpenStack Keystone
-
-  openstack_tenant_id:
-    type: string
-    description: OpenStack tenant ID
-
-  openstack_tenant_name:
-    type: string
-    description: OpenStack tenant name (matching with the openstack_tenant_id)
-
-  openstack_username:
-    type: string
-    description: OpenStack username
-
-  openstack_api_key:
-    type: string
-    description: OpenStack password or API Key
-
-  ubuntu_1404_image:
-    type: string
-    description: Name of the Ubuntu 14.04 image
-
   ubuntu_1604_image:
     type: string
     description: Name of the Ubuntu 16.04 image
 
-  centos_7_image:
-    type: string
-    description: the id/name of the CentOS 7 VM imange
-
   rancher_vm_flavor:
     type: string
-    description: Name of the Ubuntu 14.04 image
+    description: VM flavor for Rancher
 
   k8s_vm_flavor:
     type: string
-    description: Name of the Ubuntu 14.04 image
+    description: VM flavor for k8s hosts
 
-  dns_forwarder:
+  integration_override_yaml:
     type: string
-    description: the forwarder address for setting up ONAP's private DNS server
-
-  external_dns:
-    type: string
-    description: Public IP of the external DNS for ONAP network
-
-  dnsaas_proxy_enable:
-    type: string
-    description: whether to enable DNSaaS proxy via multicloud
-
-  dnsaas_region:
-    type: string
-    description: the region of the cloud instance providing the Designate DNS as a Service
-
-  dnsaas_proxied_keystone_url_path:
-    type: string
-    description: the proxy keystone URL path for DCAE to use (via MultiCloud)
-
-  dnsaas_keystone_url:
-    type: string
-    description: the keystone URL of the cloud instance providing the Designate DNS as a Service
-
-  dnsaas_username:
-    type: string
-    description: the username of the cloud instance providing the Designate DNS as a Service
-
-  dnsaas_password:
-    type: string
-    description: the password of the cloud instance providing the Designate DNS as a Service
-
-  dnsaas_tenant_id:
-    type: string
-    description: the ID of the tenant in the cloud instance providing the Designate DNS as a Service
-
-  dnsaas_tenant_name:
-    type: string
-    description: the name of the tenant in the cloud instance providing the Designate DNS as a Service
+    description: Content for integration_override.yaml
 
 resources:
   random-str:
@@ -157,7 +89,7 @@
             rand: { get_resource: random-str }
       network_id: { get_resource: oam_network }
       cidr: { get_param: oam_network_cidr }
-      dns_nameservers: [ get_param: dns_forwarder ]
+      dns_nameservers: [ "8.8.8.8" ]
 
   router:
     type: OS::Neutron::Router
@@ -197,13 +129,25 @@
       user_data_format: RAW
       user_data:
         str_replace:
+          template:
+            get_file: rancher_vm_entrypoint.sh
           params:
             __docker_proxy__: { get_param: docker_proxy }
             __apt_proxy__: { get_param: apt_proxy }
-          template:
-            get_file: rancher_vm_entrypoint.sh
-
-  k8s_private_port:
+            __rancher_ip_addr__: { get_attr: [rancher_floating_ip, floating_ip_address] }
+            __integration_override_yaml__: { get_param: integration_override_yaml }
+            __oam_network_id__: { get_resource: oam_network }
+            __oam_subnet_id__: { get_resource: oam_subnet }
+            __k8s_vm_ips__: [
+              get_attr: [k8s_1_floating_ip, floating_ip_address],
+              get_attr: [k8s_2_floating_ip, floating_ip_address],
+              get_attr: [k8s_3_floating_ip, floating_ip_address],
+              get_attr: [k8s_4_floating_ip, floating_ip_address],
+              get_attr: [k8s_5_floating_ip, floating_ip_address],
+              get_attr: [k8s_6_floating_ip, floating_ip_address],
+              get_attr: [k8s_7_floating_ip, floating_ip_address],
+            ]
+  k8s_1_private_port:
     type: OS::Neutron::Port
     properties:
       network: { get_resource: oam_network }
@@ -211,53 +155,226 @@
       security_groups:
       - { get_resource: onap_sg }
 
-  k8s_floating_ip:
+  k8s_1_floating_ip:
     type: OS::Neutron::FloatingIP
     properties:
       floating_network_id: { get_param: public_net_id }
-      port_id: { get_resource: k8s_private_port }
+      port_id: { get_resource: k8s_1_private_port }
 
-  k8s_vm:
+  k8s_1_vm:
     type: OS::Nova::Server
     properties:
-      name: k8s
+      name: k8s_1
       image: { get_param: ubuntu_1604_image }
       flavor: { get_param: k8s_vm_flavor }
       key_name: onap_key
       networks:
-      - port: { get_resource: k8s_private_port }
+      - port: { get_resource: k8s_1_private_port }
       user_data_format: RAW
       user_data:
         str_replace:
           params:
-            __lab_name__: { get_param: lab_name }
             __docker_proxy__: { get_param: docker_proxy }
             __apt_proxy__: { get_param: apt_proxy }
             __rancher_ip_addr__: { get_attr: [rancher_floating_ip, floating_ip_address] }
-            __k8s_ip_addr__: { get_attr: [k8s_floating_ip, floating_ip_address] }
-            __openstack_tenant_id__: { get_param: openstack_tenant_id }
-            __openstack_tenant_name__: { get_param: openstack_tenant_name }
-            __openstack_username__: { get_param: openstack_username }
-            __openstack_api_key__: { get_param : openstack_api_key }
-            __public_net_id__: { get_param: public_net_id }
-            __public_net_name__: { get_param: public_net_name }
-            __oam_network_id__: { get_resource: oam_network }
-            __oam_subnet_id__: { get_resource: oam_subnet }
-            __oam_network_cidr__: { get_param: oam_network_cidr }
-            __ubuntu_1404_image__: { get_param: ubuntu_1404_image }
-            __ubuntu_1604_image__: { get_param: ubuntu_1604_image }
-            __centos_7_image__: { get_param: centos_7_image }
-            __keystone_url__: { get_param: keystone_url }
-            __dns_forwarder__: { get_param: dns_forwarder }
-            __external_dns__: { get_param: external_dns }
-            __dnsaas_proxy_enable__: { get_param: dnsaas_proxy_enable }
-            __dnsaas_proxied_keystone_url_path__: { get_param: dnsaas_proxied_keystone_url_path }
-            __dnsaas_keystone_url__: { get_param: dnsaas_keystone_url }
-            __dnsaas_region__: { get_param: dnsaas_region }
-            __dnsaas_tenant_id__: { get_param: dnsaas_tenant_id }
-            __dnsaas_tenant_name__: { get_param: dnsaas_tenant_name }
-            __dnsaas_username__: { get_param: dnsaas_username }
-            __dnsaas_password__: { get_param: dnsaas_password }
+          template:
+            get_file: k8s_vm_entrypoint.sh
+
+  k8s_2_private_port:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_resource: oam_network }
+      fixed_ips: [{"subnet": { get_resource: oam_subnet }}]
+      security_groups:
+      - { get_resource: onap_sg }
+
+  k8s_2_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: { get_param: public_net_id }
+      port_id: { get_resource: k8s_2_private_port }
+
+  k8s_2_vm:
+    type: OS::Nova::Server
+    properties:
+      name: k8s_2
+      image: { get_param: ubuntu_1604_image }
+      flavor: { get_param: k8s_vm_flavor }
+      key_name: onap_key
+      networks:
+      - port: { get_resource: k8s_2_private_port }
+      user_data_format: RAW
+      user_data:
+        str_replace:
+          params:
+            __docker_proxy__: { get_param: docker_proxy }
+            __apt_proxy__: { get_param: apt_proxy }
+            __rancher_ip_addr__: { get_attr: [rancher_floating_ip, floating_ip_address] }
+          template:
+            get_file: k8s_vm_entrypoint.sh
+
+  k8s_3_private_port:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_resource: oam_network }
+      fixed_ips: [{"subnet": { get_resource: oam_subnet }}]
+      security_groups:
+      - { get_resource: onap_sg }
+
+  k8s_3_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: { get_param: public_net_id }
+      port_id: { get_resource: k8s_3_private_port }
+
+  k8s_3_vm:
+    type: OS::Nova::Server
+    properties:
+      name: k8s_3
+      image: { get_param: ubuntu_1604_image }
+      flavor: { get_param: k8s_vm_flavor }
+      key_name: onap_key
+      networks:
+      - port: { get_resource: k8s_3_private_port }
+      user_data_format: RAW
+      user_data:
+        str_replace:
+          params:
+            __docker_proxy__: { get_param: docker_proxy }
+            __apt_proxy__: { get_param: apt_proxy }
+            __rancher_ip_addr__: { get_attr: [rancher_floating_ip, floating_ip_address] }
+          template:
+            get_file: k8s_vm_entrypoint.sh
+
+  k8s_4_private_port:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_resource: oam_network }
+      fixed_ips: [{"subnet": { get_resource: oam_subnet }}]
+      security_groups:
+      - { get_resource: onap_sg }
+
+  k8s_4_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: { get_param: public_net_id }
+      port_id: { get_resource: k8s_4_private_port }
+
+  k8s_4_vm:
+    type: OS::Nova::Server
+    properties:
+      name: k8s_4
+      image: { get_param: ubuntu_1604_image }
+      flavor: { get_param: k8s_vm_flavor }
+      key_name: onap_key
+      networks:
+      - port: { get_resource: k8s_4_private_port }
+      user_data_format: RAW
+      user_data:
+        str_replace:
+          params:
+            __docker_proxy__: { get_param: docker_proxy }
+            __apt_proxy__: { get_param: apt_proxy }
+            __rancher_ip_addr__: { get_attr: [rancher_floating_ip, floating_ip_address] }
+          template:
+            get_file: k8s_vm_entrypoint.sh
+
+  k8s_5_private_port:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_resource: oam_network }
+      fixed_ips: [{"subnet": { get_resource: oam_subnet }}]
+      security_groups:
+      - { get_resource: onap_sg }
+
+  k8s_5_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: { get_param: public_net_id }
+      port_id: { get_resource: k8s_5_private_port }
+
+  k8s_5_vm:
+    type: OS::Nova::Server
+    properties:
+      name: k8s_5
+      image: { get_param: ubuntu_1604_image }
+      flavor: { get_param: k8s_vm_flavor }
+      key_name: onap_key
+      networks:
+      - port: { get_resource: k8s_5_private_port }
+      user_data_format: RAW
+      user_data:
+        str_replace:
+          params:
+            __docker_proxy__: { get_param: docker_proxy }
+            __apt_proxy__: { get_param: apt_proxy }
+            __rancher_ip_addr__: { get_attr: [rancher_floating_ip, floating_ip_address] }
+          template:
+            get_file: k8s_vm_entrypoint.sh
+
+  k8s_6_private_port:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_resource: oam_network }
+      fixed_ips: [{"subnet": { get_resource: oam_subnet }}]
+      security_groups:
+      - { get_resource: onap_sg }
+
+  k8s_6_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: { get_param: public_net_id }
+      port_id: { get_resource: k8s_6_private_port }
+
+  k8s_6_vm:
+    type: OS::Nova::Server
+    properties:
+      name: k8s_6
+      image: { get_param: ubuntu_1604_image }
+      flavor: { get_param: k8s_vm_flavor }
+      key_name: onap_key
+      networks:
+      - port: { get_resource: k8s_6_private_port }
+      user_data_format: RAW
+      user_data:
+        str_replace:
+          params:
+            __docker_proxy__: { get_param: docker_proxy }
+            __apt_proxy__: { get_param: apt_proxy }
+            __rancher_ip_addr__: { get_attr: [rancher_floating_ip, floating_ip_address] }
+          template:
+            get_file: k8s_vm_entrypoint.sh
+
+  k8s_7_private_port:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_resource: oam_network }
+      fixed_ips: [{"subnet": { get_resource: oam_subnet }}]
+      security_groups:
+      - { get_resource: onap_sg }
+
+  k8s_7_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: { get_param: public_net_id }
+      port_id: { get_resource: k8s_7_private_port }
+
+  k8s_7_vm:
+    type: OS::Nova::Server
+    properties:
+      name: k8s_7
+      image: { get_param: ubuntu_1604_image }
+      flavor: { get_param: k8s_vm_flavor }
+      key_name: onap_key
+      networks:
+      - port: { get_resource: k8s_7_private_port }
+      user_data_format: RAW
+      user_data:
+        str_replace:
+          params:
+            __docker_proxy__: { get_param: docker_proxy }
+            __apt_proxy__: { get_param: apt_proxy }
+            __rancher_ip_addr__: { get_attr: [rancher_floating_ip, floating_ip_address] }
           template:
             get_file: k8s_vm_entrypoint.sh
 
@@ -266,6 +383,31 @@
     description: The IP address of the rancher instance
     value: { get_attr: [rancher_floating_ip, floating_ip_address] }
 
-  k8s_vm_ip:
-    description: The IP address of the k8s instance
-    value: { get_attr: [k8s_floating_ip, floating_ip_address] }
+  k8s_1_vm_ip:
+    description: The IP address of the k8s_1 instance
+    value: { get_attr: [k8s_1_floating_ip, floating_ip_address] }
+
+  k8s_2_vm_ip:
+    description: The IP address of the k8s_2 instance
+    value: { get_attr: [k8s_2_floating_ip, floating_ip_address] }
+
+  k8s_3_vm_ip:
+    description: The IP address of the k8s_3 instance
+    value: { get_attr: [k8s_3_floating_ip, floating_ip_address] }
+
+  k8s_4_vm_ip:
+    description: The IP address of the k8s_4 instance
+    value: { get_attr: [k8s_4_floating_ip, floating_ip_address] }
+
+  k8s_5_vm_ip:
+    description: The IP address of the k8s_5 instance
+    value: { get_attr: [k8s_5_floating_ip, floating_ip_address] }
+
+  k8s_6_vm_ip:
+    description: The IP address of the k8s_6 instance
+    value: { get_attr: [k8s_6_floating_ip, floating_ip_address] }
+
+  k8s_7_vm_ip:
+    description: The IP address of the k8s_7 instance
+    value: { get_attr: [k8s_7_floating_ip, floating_ip_address] }
+
diff --git a/deployment/heat/onap-oom/parts/onap-oom-1.yaml b/deployment/heat/onap-oom/parts/onap-oom-1.yaml
new file mode 100644
index 0000000..e29f6cd
--- /dev/null
+++ b/deployment/heat/onap-oom/parts/onap-oom-1.yaml
@@ -0,0 +1,116 @@
+heat_template_version: 2015-10-15
+description: ONAP on Kubernetes using OOM
+
+parameters:
+  docker_proxy:
+    type: string
+
+  apt_proxy:
+    type: string
+
+  public_net_id:
+    type: string
+    description: The ID of the Public network for floating IP address allocation
+
+  oam_network_cidr:
+    type: string
+    description: CIDR of the OAM ONAP network
+
+  ubuntu_1604_image:
+    type: string
+    description: Name of the Ubuntu 16.04 image
+
+  rancher_vm_flavor:
+    type: string
+    description: VM flavor for Rancher
+
+  k8s_vm_flavor:
+    type: string
+    description: VM flavor for k8s hosts
+
+  integration_override_yaml:
+    type: string
+    description: Content for integration_override.yaml
+
+resources:
+  random-str:
+    type: OS::Heat::RandomString
+    properties:
+      length: 4
+
+  # ONAP security group
+  onap_sg:
+    type: OS::Neutron::SecurityGroup
+    properties:
+      name:
+        str_replace:
+          template: base_rand
+          params:
+            base: onap_sg
+            rand: { get_resource: random-str }
+      description: security group used by ONAP
+      rules:
+        # All egress traffic
+        - direction: egress
+          ethertype: IPv4
+        - direction: egress
+          ethertype: IPv6
+        # ingress traffic
+        # ICMP
+        - protocol: icmp
+        - protocol: udp
+          port_range_min: 1
+          port_range_max: 65535
+        - protocol: tcp
+          port_range_min: 1
+          port_range_max: 65535
+
+
+  # ONAP management private network
+  oam_network:
+    type: OS::Neutron::Net
+    properties:
+      name:
+        str_replace:
+          template: oam_network_rand
+          params:
+            rand: { get_resource: random-str }
+
+  oam_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      name:
+        str_replace:
+          template: oam_network_rand
+          params:
+            rand: { get_resource: random-str }
+      network_id: { get_resource: oam_network }
+      cidr: { get_param: oam_network_cidr }
+      dns_nameservers: [ "8.8.8.8" ]
+
+  router:
+    type: OS::Neutron::Router
+    properties:
+      external_gateway_info:
+        network: { get_param: public_net_id }
+
+  router_interface:
+    type: OS::Neutron::RouterInterface
+    properties:
+      router_id: { get_resource: router }
+      subnet_id: { get_resource: oam_subnet }
+
+  rancher_private_port:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_resource: oam_network }
+      fixed_ips: [{"subnet": { get_resource: oam_subnet }}]
+      security_groups:
+      - { get_resource: onap_sg }
+
+  rancher_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: { get_param: public_net_id }
+      port_id: { get_resource: rancher_private_port }
+
diff --git a/deployment/heat/onap-oom/parts/onap-oom-2.yaml b/deployment/heat/onap-oom/parts/onap-oom-2.yaml
new file mode 100644
index 0000000..7ee9021
--- /dev/null
+++ b/deployment/heat/onap-oom/parts/onap-oom-2.yaml
@@ -0,0 +1,33 @@
+  ${K8S_VM_NAME}_private_port:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_resource: oam_network }
+      fixed_ips: [{"subnet": { get_resource: oam_subnet }}]
+      security_groups:
+      - { get_resource: onap_sg }
+
+  ${K8S_VM_NAME}_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: { get_param: public_net_id }
+      port_id: { get_resource: ${K8S_VM_NAME}_private_port }
+
+  ${K8S_VM_NAME}_vm:
+    type: OS::Nova::Server
+    properties:
+      name: ${K8S_VM_NAME}
+      image: { get_param: ubuntu_1604_image }
+      flavor: { get_param: k8s_vm_flavor }
+      key_name: onap_key
+      networks:
+      - port: { get_resource: ${K8S_VM_NAME}_private_port }
+      user_data_format: RAW
+      user_data:
+        str_replace:
+          params:
+            __docker_proxy__: { get_param: docker_proxy }
+            __apt_proxy__: { get_param: apt_proxy }
+            __rancher_ip_addr__: { get_attr: [rancher_floating_ip, floating_ip_address] }
+          template:
+            get_file: k8s_vm_entrypoint.sh
+
diff --git a/deployment/heat/onap-oom/parts/onap-oom-3.yaml b/deployment/heat/onap-oom/parts/onap-oom-3.yaml
new file mode 100644
index 0000000..8dc35b6
--- /dev/null
+++ b/deployment/heat/onap-oom/parts/onap-oom-3.yaml
@@ -0,0 +1,5 @@
+outputs:
+  rancher_vm_ip:
+    description: The IP address of the rancher instance
+    value: { get_attr: [rancher_floating_ip, floating_ip_address] }
+
diff --git a/deployment/heat/onap-oom/rancher_vm_entrypoint.sh b/deployment/heat/onap-oom/rancher_vm_entrypoint.sh
index 12ed51f..a729b6b 100644
--- a/deployment/heat/onap-oom/rancher_vm_entrypoint.sh
+++ b/deployment/heat/onap-oom/rancher_vm_entrypoint.sh
@@ -1,6 +1,19 @@
 #!/bin/bash -x
 printenv
 
+mkdir -p /opt/config
+echo "__rancher_ip_addr__" > /opt/config/rancher_ip_addr.txt
+echo "__k8s_vm_ips__" > /opt/config/k8s_vm_ips.txt
+echo "__oam_network_id__" > /opt/config/oam_network_id.txt
+echo "__oam_subnet_id__" > /opt/config/oam_subnet_id.txt
+
+cat <<EOF > /opt/config/integration-override.yaml
+__integration_override_yaml__
+EOF
+sed -i 's/\_\_oam_network_id__/__oam_network_id__/g' /opt/config/integration-override.yaml
+sed -i 's/\_\_oam_subnet_id__/__oam_subnet_id__/g' /opt/config/integration-override.yaml
+cp /opt/config/integration-override.yaml /root
+
 echo `hostname -I` `hostname` >> /etc/hosts
 mkdir -p /etc/docker
 if [ ! -z "__docker_proxy__" ]; then
@@ -17,6 +30,165 @@
 EOF
 fi
 apt-get -y update
-apt-get -y install docker.io
+apt-get -y install linux-image-extra-$(uname -r) jq make nfs-kernel-server
+
+
+# version control the persistence volume to see what's happening
+mkdir -p /dockerdata-nfs/
+chmod 777 /dockerdata-nfs/
+chown nobody:nogroup /dockerdata-nfs/
+cd /dockerdata-nfs/
+git init
+git config user.email "root@onap"
+git config user.name "root"
+git add -A
+git commit -m "initial commit"
+
+# export NFS mount
+NFS_EXP=""
+for K8S_VM_IP in $(tr -d ',[]' < /opt/config/k8s_vm_ips.txt); do
+    NFS_EXP+="$K8S_VM_IP(rw,sync,no_root_squash,no_subtree_check) "
+done
+echo "/dockerdata-nfs $NFS_EXP" | tee /etc/exports
+
+
+exportfs -a
+systemctl restart nfs-kernel-server
+
+cd ~
+
+# install docker 17.03
+curl -s https://releases.rancher.com/install-docker/17.03.sh | sh
 usermod -aG docker ubuntu
-docker run --restart unless-stopped -d -p 8080:8080 rancher/server:v1.6.14
+
+docker run --restart unless-stopped -d -p 8080:8080  -e CATTLE_BOOTSTRAP_REQUIRED_IMAGE=__docker_proxy__/rancher/agent:v1.2.9 __docker_proxy__/rancher/server:v1.6.14
+
+# install kubernetes 1.8.6
+curl -s -LO https://storage.googleapis.com/kubernetes-release/release/v1.8.10/bin/linux/amd64/kubectl
+chmod +x ./kubectl
+sudo mv ./kubectl /usr/local/bin/kubectl
+mkdir ~/.kube
+
+# install helm
+wget -q http://storage.googleapis.com/kubernetes-helm/helm-v2.8.2-linux-amd64.tar.gz
+tar -zxvf helm-v2.8.2-linux-amd64.tar.gz
+sudo mv linux-amd64/helm /usr/local/bin/helm
+
+echo export RANCHER_IP=__rancher_ip_addr__ > api-keys-rc
+source api-keys-rc
+
+sleep 50
+until curl -s -o projects.json -H "Accept: application/json" http://$RANCHER_IP:8080/v2-beta/projects; do
+    sleep 10
+done
+OLD_PID=$(jq -r '.data[0].id' projects.json)
+
+curl -s -H "Accept: application/json" -H "Content-Type: application/json" -d '{"accountId":"1a1"}' http://$RANCHER_IP:8080/v2-beta/apikeys > apikeys.json
+echo export RANCHER_ACCESS_KEY=`jq -r '.publicValue' apikeys.json` >> api-keys-rc
+echo export RANCHER_SECRET_KEY=`jq -r '.secretValue' apikeys.json` >> api-keys-rc
+source api-keys-rc
+
+
+curl -u "${RANCHER_ACCESS_KEY}:${RANCHER_SECRET_KEY}" -X PUT -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"id":"registry.default","type":"activeSetting","baseType":"setting","name":"registry.default","activeValue":"__docker_proxy__","inDb":true,"source":"Database","value":"__docker_proxy__"}'  http://$RANCHER_IP:8080/v2-beta/settings/registry.default
+
+curl -s -u "${RANCHER_ACCESS_KEY}:${RANCHER_SECRET_KEY}" -X DELETE -H 'Content-Type: application/json' "http://$RANCHER_IP:8080/v2-beta/projects/$OLD_PID"
+
+until [ ! -z "$TEMPLATE_ID" ] && [ "$TEMPLATE_ID" != "null" ]; do
+    sleep 5
+    curl -s -H "Accept: application/json" http://$RANCHER_IP:8080/v2-beta/projectTemplates?name=Kubernetes > projectTemplatesKubernetes.json
+    TEMPLATE_ID=$(jq -r '.data[0].id' projectTemplatesKubernetes.json)
+done
+
+curl -s -u "${RANCHER_ACCESS_KEY}:${RANCHER_SECRET_KEY}" -X POST -H 'Content-Type: application/json' -d '{ "name":"oom", "projectTemplateId":"'$TEMPLATE_ID'" }' "http://$RANCHER_IP:8080/v2-beta/projects" > project.json
+PID=`jq -r '.id' project.json`
+echo export RANCHER_URL=http://$RANCHER_IP:8080/v1/projects/$PID >> api-keys-rc
+source api-keys-rc
+
+until [ $(jq -r '.state' project.json) == "active" ]; do
+    sleep 5
+    curl -s -H "Accept: application/json" http://$RANCHER_IP:8080/v1/projects/$PID > project.json
+done
+
+
+curl -s -u $RANCHER_ACCESS_KEY:$RANCHER_SECRET_KEY -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"name":"docker-proxy", "serverAddress":"__docker_proxy__"}' $RANCHER_URL/registries > registry.json
+RID=$(jq -r '.id' registry.json)
+
+
+curl -u "${RANCHER_ACCESS_KEY}:${RANCHER_SECRET_KEY}" -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"publicValue":"docker", "registryId":"'$RID'", "secretValue":"docker", "type":"registryCredential"}' "http://$RANCHER_IP:8080/v2-beta/projects/$PID/registrycredential"
+
+
+
+TID=$(curl -s -X POST -H "Accept: application/json" -H "Content-Type: application/json" http://$RANCHER_IP:8080/v1/projects/$PID/registrationTokens | jq -r '.id')
+touch token.json
+while [ $(jq -r .command token.json | wc -c) -lt 10 ]; do
+    sleep 5
+    curl -s -X GET -H "Accept: application/json" http://$RANCHER_IP:8080/v1/projects/$PID/registrationToken/$TID > token.json
+done
+jq -r .command token.json > rancher_agent_cmd.sh
+chmod +x rancher_agent_cmd.sh
+cp rancher_agent_cmd.sh /dockerdata-nfs
+cd /dockerdata-nfs
+git add -A
+git commit -a -m "Add rancher agent command file"
+cd ~
+
+
+KUBETOKEN=$(echo -n 'Basic '$(echo -n "$RANCHER_ACCESS_KEY:$RANCHER_SECRET_KEY" | base64 -w 0) | base64 -w 0)
+
+# create .kube/config
+cat > ~/.kube/config <<EOF
+apiVersion: v1
+kind: Config
+clusters:
+- cluster:
+    api-version: v1
+    insecure-skip-tls-verify: true
+    server: "https://$RANCHER_IP:8080/r/projects/$PID/kubernetes:6443"
+  name: "oom"
+contexts:
+- context:
+    cluster: "oom"
+    user: "oom"
+  name: "oom"
+current-context: "oom"
+users:
+- name: "oom"
+  user:
+    token: "$KUBETOKEN"
+EOF
+
+export KUBECONFIG=/root/.kube/config
+kubectl config view
+
+# wait for kubernetes to initialze
+sleep 100
+until [ $(kubectl get pods --namespace kube-system | tail -n +2 | grep -c Running) -ge 6 ]; do
+    sleep 10
+done
+
+
+# Install using OOM
+export HOME=/root
+
+# Clone OOM:
+cd ~
+git clone -b master http://gerrit.onap.org/r/oom
+cd oom
+git log -1
+
+# Run ONAP:
+cd ~/oom/kubernetes/
+helm init --client-only
+helm init --upgrade
+helm serve &
+sleep 3
+helm repo add local http://127.0.0.1:8879
+helm repo list
+make all
+helm search -l | grep local
+helm install local/onap -n dev --namespace onap -f ~/integration-override.yaml
+
+
+# Check ONAP status:
+sleep 3
+kubectl get pods --all-namespaces
diff --git a/deployment/heat/onap-oom/scripts/deploy.sh b/deployment/heat/onap-oom/scripts/deploy.sh
index c492394..8ab79a2 100755
--- a/deployment/heat/onap-oom/scripts/deploy.sh
+++ b/deployment/heat/onap-oom/scripts/deploy.sh
@@ -12,6 +12,9 @@
 
 source $WORKSPACE/test/ete/scripts/install_openstack_cli.sh
 
+SO_ENCRYPTION_KEY=aa3871669d893c7fb8abbcda31b88b4f
+export OS_PASSWORD_ENCRYPTED=$(echo -n "$OS_PASSWORD" | openssl aes-128-ecb -e -K "$SO_ENCRYPTION_KEY" -nosalt | xxd -c 256 -p)
+
 for n in $(seq 1 5); do
     $WORKSPACE/test/ete/scripts/teardown-onap.sh
 
@@ -19,33 +22,34 @@
     envsubst < $ENV_FILE > $ENV_FILE~
     openstack stack create -t ./onap-oom.yaml -e $ENV_FILE~ onap-oom
 
-    for i in $(seq 1 10); do
-	sleep 10
-	K8S_IP=$(openstack stack output show onap-oom k8s_vm_ip -c output_value -f value)
+    for i in $(seq 1 30); do
+	sleep 30
 	RANCHER_IP=$(openstack stack output show onap-oom rancher_vm_ip -c output_value -f value)
-	timeout 1 ping -c 1 "$K8S_IP" && timeout 1 ping -c 1 "$RANCHER_IP" && break
+	timeout 1 ping -c 1 "$RANCHER_IP" && break
     done
 
-    timeout 1 ping -c 1 "$K8S_IP" && timeout 1 ping -c 1 "$RANCHER_IP" && break
+    timeout 1 ping -c 1 "$RANCHER_IP" && break
 
-    echo Error: OpenStack infrastructure issue: unable to reach both rancher "$RANCHER_IP" and k8s "$K8S_IP"
+    echo Error: OpenStack infrastructure issue: unable to reach rancher "$RANCHER_IP"
     sleep 10
 done
 
-if ! timeout 1 ping -c 1 "$K8S_IP" || ! timeout 1 ping -c 1 "$RANCHER_IP"; then
+if ! timeout 1 ping -c 1 "$RANCHER_IP"; then
     exit 2
 fi
 
-ssh-keygen -R $K8S_IP
+ssh-keygen -R $RANCHER_IP
 for n in $(seq 1 10); do
-    timeout 15m ssh -o StrictHostKeychecking=no -i ~/.ssh/onap_key ubuntu@$K8S_IP  'sudo su -l root -c "/root/oom/kubernetes/robot/ete-k8s.sh onap health"'
+    timeout 15m ssh -o StrictHostKeychecking=no -i ~/.ssh/onap_key ubuntu@$RANCHER_IP  'sudo su -l root -c "/root/oom/kubernetes/robot/ete-k8s.sh onap health"'
     RESULT=$?
     if [ $RESULT -eq 0 ]; then
   	break
     fi
     sleep 15m
 done
-ROBOT_POD=$(ssh -o StrictHostKeychecking=no -i ~/.ssh/onap_key ubuntu@$K8S_IP 'sudo su -c "kubectl --namespace onap get pods"' | grep robot | sed 's/ .*//')
-LOG_DIR=$(ssh -o StrictHostKeychecking=no -i ~/.ssh/onap_key ubuntu@$K8S_IP "sudo su -c \"kubectl exec $ROBOT_POD --namespace onap -- ls -1t /share/logs | head -1\"")
+ROBOT_POD=$(ssh -o StrictHostKeychecking=no -i ~/.ssh/onap_key ubuntu@$RANCHER_IP 'sudo su -c "kubectl --namespace onap get pods"' | grep robot | sed 's/ .*//')
+LOG_DIR=$(ssh -o StrictHostKeychecking=no -i ~/.ssh/onap_key ubuntu@$RANCHER_IP "sudo su -c \"kubectl exec $ROBOT_POD --namespace onap -- ls -1t /share/logs | head -1\"")
+
+K8S_IP=$(openstack stack output show onap-oom k8s_1_vm_ip -c output_value -f value)
 wget --user=robot --password=robot -r -np -nH --cut-dirs=2 -R "index.html*" -P $WORKSPACE/archives/ http://$K8S_IP:30209/logs/$LOG_DIR/
 exit 0
diff --git a/deployment/heat/onap-oom/scripts/gen-onap-oom-yaml.sh b/deployment/heat/onap-oom/scripts/gen-onap-oom-yaml.sh
new file mode 100755
index 0000000..19e7b60
--- /dev/null
+++ b/deployment/heat/onap-oom/scripts/gen-onap-oom-yaml.sh
@@ -0,0 +1,68 @@
+#!/bin/bash
+
+NUM_K8S_VMS=7
+
+if [ -z "$WORKSPACE" ]; then
+    export WORKSPACE=`git rev-parse --show-toplevel`
+fi
+PARTS_DIR=$WORKSPACE/deployment/heat/onap-oom/parts
+
+cat <<EOF
+#
+# Generated by scripts/gen-onap-oom-yaml.sh; MANUAL CHANGES WILL BE LOST
+#
+EOF
+
+cat $PARTS_DIR/onap-oom-1.yaml
+
+cat <<EOF
+  rancher_vm:
+    type: OS::Nova::Server
+    properties:
+      name: rancher
+      image: { get_param: ubuntu_1604_image }
+      flavor: { get_param: rancher_vm_flavor }
+      key_name: onap_key
+      networks:
+      - port: { get_resource: rancher_private_port }
+      user_data_format: RAW
+      user_data:
+        str_replace:
+          template:
+            get_file: rancher_vm_entrypoint.sh
+          params:
+            __docker_proxy__: { get_param: docker_proxy }
+            __apt_proxy__: { get_param: apt_proxy }
+            __rancher_ip_addr__: { get_attr: [rancher_floating_ip, floating_ip_address] }
+            __integration_override_yaml__: { get_param: integration_override_yaml }
+            __oam_network_id__: { get_resource: oam_network }
+            __oam_subnet_id__: { get_resource: oam_subnet }
+            __k8s_vm_ips__: [
+EOF
+
+for VM_NUM in $(seq $NUM_K8S_VMS); do
+    K8S_VM_NAME=k8s_$VM_NUM
+    cat <<EOF
+              get_attr: [${K8S_VM_NAME}_floating_ip, floating_ip_address],
+EOF
+done
+
+cat <<EOF
+            ]
+EOF
+
+for VM_NUM in $(seq $NUM_K8S_VMS); do
+    K8S_VM_NAME=k8s_$VM_NUM envsubst < $PARTS_DIR/onap-oom-2.yaml
+done
+
+cat $PARTS_DIR/onap-oom-3.yaml
+
+for VM_NUM in $(seq $NUM_K8S_VMS); do
+    K8S_VM_NAME=k8s_$VM_NUM
+    cat <<EOF
+  ${K8S_VM_NAME}_vm_ip:
+    description: The IP address of the ${K8S_VM_NAME} instance
+    value: { get_attr: [${K8S_VM_NAME}_floating_ip, floating_ip_address] }
+
+EOF
+done
diff --git a/deployment/heat/onap-oom/scripts/prepull-docker.sh b/deployment/heat/onap-oom/scripts/prepull-docker.sh
new file mode 100755
index 0000000..d3556a8
--- /dev/null
+++ b/deployment/heat/onap-oom/scripts/prepull-docker.sh
@@ -0,0 +1,15 @@
+#!/bin/bash -x
+
+if [ -z "$WORKSPACE" ]; then
+    export WORKSPACE=`git rev-parse --show-toplevel`
+fi
+
+if [ "$#" -ne 1 ]; then
+    echo "Usage: $0 <docker-proxy>"
+    exit 1
+fi
+DOCKER_PROXY=$1
+
+for DOCKER_IMAGE in $(tail -n +2 $WORKSPACE/version-manifest/src/main/resources/docker-manifest.csv | tr ',' ':'); do
+    docker pull $DOCKER_PROXY/$DOCKER_IMAGE
+done
diff --git a/test/csit/plans/aaf/aafapi/setup.sh b/test/csit/plans/aaf/aafapi/setup.sh
index 4a31270..add9ae1 100644
--- a/test/csit/plans/aaf/aafapi/setup.sh
+++ b/test/csit/plans/aaf/aafapi/setup.sh
@@ -37,12 +37,15 @@
 
 # start aaf containers with docker compose and configuration from docker-compose.yml
 docker-compose up -d
+export aaf_service=$(get_docker_compose_service aaf_container)
+export cassandra_service=$(get_docker_compose_service cassandra_container)
 
-# Wait for initialization of Docker contaienr for AAF & Cassandra
+# Wait for initialization of Docker container for AAF & Cassandra
 for i in {1..12}; do
-	if [ $(docker inspect --format '{{ .State.Running }}' dockercompose_aaf_container_1) ] && \
-		[ $(docker inspect --format '{{ .State.Running }}' dockercompose_cassandra_container_1) ] && \
-		[ $(docker inspect --format '{{ .State.Running }}' dockercompose_aaf_container_1) ]
+
+	if [ $(docker inspect --format '{{ .State.Running }}' $aaf_service) ] && \
+		[ $(docker inspect --format '{{ .State.Running }}' $cassandra_service) ] && \
+		[ $(docker inspect --format '{{ .State.Running }}' $aaf_service) ]
 	then
 		echo "AAF Service Running"
 		break
@@ -53,9 +56,11 @@
 done
 
 
-AAF_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dockercompose_aaf_container_1)
-CASSANDRA_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dockercompose_cassandra_container_1)
+AAF_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $aaf_service)
+CASSANDRA_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $cassandra_service)
 
+bypass_ip_adress $AAF_IP
+bypass_ip_adress $CASSANDRA_IP
 
 echo AAF_IP=${AAF_IP}
 echo CASSANDRA_IP=${CASSANDRA_IP}
diff --git a/test/csit/plans/aaf/aafapi/teardown.sh b/test/csit/plans/aaf/aafapi/teardown.sh
index 1f7b285..41e0b00 100644
--- a/test/csit/plans/aaf/aafapi/teardown.sh
+++ b/test/csit/plans/aaf/aafapi/teardown.sh
@@ -17,6 +17,8 @@
 # Modifications copyright (c) 2017 AT&T Intellectual Property
 #
 
-kill-instance.sh dockercompose_aaf_container_1 
-kill-instance.sh dockercompose_cassandra_container_1 
+kill-instance.sh $aaf_service
+kill-instance.sh $cassandra_service
 
+unset aaf_service
+unset cassandra_service
diff --git a/test/csit/plans/appc/healthcheck/setup.sh b/test/csit/plans/appc/healthcheck/setup.sh
index f476853..ef79483 100755
--- a/test/csit/plans/appc/healthcheck/setup.sh
+++ b/test/csit/plans/appc/healthcheck/setup.sh
@@ -48,8 +48,11 @@
 docker login -u $NEXUS_USERNAME -p $NEXUS_PASSWD $NEXUS_DOCKER_REPO
 docker pull $NEXUS_DOCKER_REPO/${SOLUTION_NAME}/appc-image:$APPC_DOCKER_IMAGE_VERSION
 docker tag $NEXUS_DOCKER_REPO/${SOLUTION_NAME}/appc-image:$APPC_DOCKER_IMAGE_VERSION ${SOLUTION_NAME}/appc-image:latest
-docker pull $NEXUS_DOCKER_REPO/onap/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION
-docker tag $NEXUS_DOCKER_REPO/onap/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION onap/ccsdk-dgbuilder-image:latest
+docker pull $NEXUS_DOCKER_REPO/${SOLUTION_NAME}/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION
+docker tag $NEXUS_DOCKER_REPO/${SOLUTION_NAME}/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION ${SOLUTION_NAME}/ccsdk-dgbuilder-image:latest
+docker pull $NEXUS_DOCKER_REPO/${SOLUTION_NAME}/appc-cdt-image:$APPC_DOCKER_IMAGE_VERSION
+docker tag $NEXUS_DOCKER_REPO/${SOLUTION_NAME}/appc-cdt-image:$APPC_DOCKER_IMAGE_VERSION ${SOLUTION_NAME}/appc-cdt-image:latest
+
 # start APPC containers with docker compose and configuration from docker-compose.yml
 docker-compose up -d
 # WAIT 5 minutes maximum and test every 5 seconds if APPC is up using HealthCheck API
diff --git a/test/csit/plans/appc/healthcheck/teardown.sh b/test/csit/plans/appc/healthcheck/teardown.sh
index 357ead8..94d1bc7 100755
--- a/test/csit/plans/appc/healthcheck/teardown.sh
+++ b/test/csit/plans/appc/healthcheck/teardown.sh
@@ -18,7 +18,8 @@
 #
 
 kill-instance.sh appc_controller_container
-kill-instance.sh sdnc_dgbuilder_container
+kill-instance.sh ccsdk_dgbuilder_container
+kill-instance.sh appc_cdt_container
 kill-instance.sh sdnc_db_container
 
 # $WORKSPACE/archives/appc deleted with archives folder when tests starts so we keep it at the end for debugging
diff --git a/test/csit/plans/dmaap-buscontroller/mock_downstream/setup.sh b/test/csit/plans/dmaap-buscontroller/mock_downstream/setup.sh
index a19454b..d5c77b0 100755
--- a/test/csit/plans/dmaap-buscontroller/mock_downstream/setup.sh
+++ b/test/csit/plans/dmaap-buscontroller/mock_downstream/setup.sh
@@ -40,3 +40,6 @@
 # Pass any variables required by Robot test suites in ROBOT_VARIABLES
 ROBOT_VARIABLES="-v AAF_IP:${AAF_IP} -v MRC_IP:${MRC_IP} -v DRPS_IP:${DRPS_IP} -v DMAAPBC_IP:${DMAAPBC_IP}"
 
+set -x
+${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh ${DMAAPBC_IP} ${DRPS_IP} ${MRC_IP}
+set +x
diff --git a/test/csit/plans/dmaap-buscontroller/with_mr/setup.sh b/test/csit/plans/dmaap-buscontroller/with_mr/setup.sh
index 35534de..3b604fe 100755
--- a/test/csit/plans/dmaap-buscontroller/with_mr/setup.sh
+++ b/test/csit/plans/dmaap-buscontroller/with_mr/setup.sh
@@ -20,25 +20,35 @@
 # 
 #
 
+if [ "$USE_EXISTING_DMAAP" = "Y" ]
+then
+	ROBOT_VARIABLES="-v AAF_IP:0.0.0 -v MRC_IP:172.18.0.3 -v DRPS_IP:0.0.0.0 -v DMAAPBC_IP:172.17.0.4"
+else
 
-# Place the scripts in run order:
-source ${WORKSPACE}/test/csit/scripts/dmaap-message-router/dmaap-mr-launch.sh
-dmaap_mr_launch
-MRC_IP=${IP}
+	# Place the scripts in run order:
+	source ${WORKSPACE}/test/csit/scripts/dmaap-message-router/dmaap-mr-launch.sh
+	dmaap_mr_launch
+	MRC_IP=${IP}
 
-source ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/start-mock.sh
-#start_mock "aaf" 
-AAF_IP=${IP}
-start_mock "drps" 
-DRPS_IP=${IP}
+	source ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/start-mock.sh
+	#start_mock "aaf" 
+	#AAF_IP=${IP}
+	AAF_IP=0.0.0.0
+	#start_mock "drps" 
+	#DRPS_IP=${IP}
+	DRPS_IP=0.0.0.0
 
-source ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh 
-dmaapbc_launch $AAF_IP $MRC_IP $DRPS_IP
-DMAAPBC_IP=${IP}
+	source ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh 
+	dmaapbc_launch $AAF_IP $MRC_IP $DRPS_IP
+	DMAAPBC_IP=${IP}
 
 
-echo "AAF_IP=$AAF_IP MRC_IP=$MRC_IP DRPS_IP=$DRPS_IP DMAAPBC_IP=$DMAAPBC_IP"
+	echo "AAF_IP=$AAF_IP MRC_IP=$MRC_IP DRPS_IP=$DRPS_IP DMAAPBC_IP=$DMAAPBC_IP"
 
-# Pass any variables required by Robot test suites in ROBOT_VARIABLES
-ROBOT_VARIABLES="-v AAF_IP:${AAF_IP} -v MRC_IP:${MRC_IP} -v DRPS_IP:${DRPS_IP} -v DMAAPBC_IP:${DMAAPBC_IP}"
+	# Pass any variables required by Robot test suites in ROBOT_VARIABLES
+	ROBOT_VARIABLES="-v AAF_IP:${AAF_IP} -v MRC_IP:${MRC_IP} -v DRPS_IP:${DRPS_IP} -v DMAAPBC_IP:${DMAAPBC_IP}"
+	set -x
+	${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh ${DMAAPBC_IP} ${DRPS_IP} ${MRC_IP}
+	set +x
+fi
 
diff --git a/test/csit/plans/dmaap-buscontroller/with_mr/teardown.sh b/test/csit/plans/dmaap-buscontroller/with_mr/teardown.sh
index 0474dde..f35b022 100644
--- a/test/csit/plans/dmaap-buscontroller/with_mr/teardown.sh
+++ b/test/csit/plans/dmaap-buscontroller/with_mr/teardown.sh
@@ -21,8 +21,9 @@
 #
 source ${WORKSPACE}/test/csit/scripts/dmaap-message-router/dmaap-mr-teardown.sh
 
+if [ "$KEEP_DMAAP" != "Y" ]
+then
 dmaap_mr_teardown
-kill-instance.sh aaf-mock
-kill-instance.sh drps-mock
 kill-instance.sh dmaapbc
+fi
 
diff --git a/test/csit/plans/multicloud-ocata/functionality1/setup.sh b/test/csit/plans/multicloud-ocata/functionality1/setup.sh
index 7541178..b674fa6 100644
--- a/test/csit/plans/multicloud-ocata/functionality1/setup.sh
+++ b/test/csit/plans/multicloud-ocata/functionality1/setup.sh
@@ -11,16 +11,17 @@
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
-#
-# Place the scripts in run order:
-# Start all process required for executing test case
-
-source ${SCRIPTS}/common_functions.sh
+pushd ${SCRIPTS}
 
 # start multicloud-ocata
-docker run -d --name multicloud-ocata nexus3.onap.org:10001/onap/multicloud/openstack-ocata
-SERVICE_IP=`get-instance-ip.sh multicloud-ocata`
+./run-instance.sh nexus3.onap.org:10001/onap/multicloud/openstack-ocata:latest multicloud-ocata
+SERVICE_IP=$(./get-instance-ip.sh multicloud-ocata)
 SERVICE_PORT=9006
+popd
+
+if [[ $no_proxy && $no_proxy != *$SERVICE_IP* ]]; then
+	export no_proxy+=$no_proxy,$SERVICE_IP
+fi
 
 for i in {1..50}; do
     curl -sS ${SERVICE_IP}:${SERVICE_PORT} && break
@@ -28,7 +29,6 @@
     sleep $i
 done
 
-echo SCRIPTS
 # Pass any variables required by Robot test suites in ROBOT_VARIABLES
 ROBOT_VARIABLES+="-v SERVICE_IP:${SERVICE_IP} "
 ROBOT_VARIABLES+="-v SERVICE_PORT:${SERVICE_PORT} "
diff --git a/test/csit/plans/sdnc/healthcheck/setup.sh b/test/csit/plans/sdnc/healthcheck/setup.sh
index 0b906f4..a8119f6 100644
--- a/test/csit/plans/sdnc/healthcheck/setup.sh
+++ b/test/csit/plans/sdnc/healthcheck/setup.sh
@@ -49,6 +49,9 @@
 docker pull $NEXUS_DOCKER_REPO/onap/sdnc-image:$DOCKER_IMAGE_VERSION
 docker tag $NEXUS_DOCKER_REPO/onap/sdnc-image:$DOCKER_IMAGE_VERSION onap/sdnc-image:latest
 
+docker pull $NEXUS_DOCKER_REPO/onap/sdnc-ansible-server-image:$DOCKER_IMAGE_VERSION
+docker tag $NEXUS_DOCKER_REPO/onap/sdnc-ansible-server-image:$DOCKER_IMAGE_VERSION onap/sdnc-ansible-server-image:latest
+
 docker pull $NEXUS_DOCKER_REPO/onap/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION
 docker tag $NEXUS_DOCKER_REPO/onap/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION onap/ccsdk-dgbuilder-image:latest
 
diff --git a/test/csit/plans/vnfsdk-refrepo/sanity-check/setup.sh b/test/csit/plans/vnfsdk-refrepo/sanity-check/setup.sh
index d1930ce..ecee227 100644
--- a/test/csit/plans/vnfsdk-refrepo/sanity-check/setup.sh
+++ b/test/csit/plans/vnfsdk-refrepo/sanity-check/setup.sh
@@ -23,7 +23,7 @@
 POSTGRES=`docker inspect --format '{{ .NetworkSettings.IPAddress }}' postgres`
 
 #Start market place
-docker run -d -i -t --name=refrepo -e POSTGRES_IP=$POSTGRES  -p 8702:8702 nexus3.onap.org:10001/onap/vnfsdk/refrepo:1.1-STAGING-latest
+docker run -d -i -t --name=refrepo -e POSTGRES_SERVICE_HOST=$POSTGRES  -p 8702:8702 nexus3.onap.org:10001/onap/vnfsdk/refrepo:1.1-STAGING-latest
 
 # Wait for Market place initialization
 echo Wait for VNF Repository initialization
diff --git a/test/csit/scripts/common_functions.sh b/test/csit/scripts/common_functions.sh
index 69856da..4293a52 100755
--- a/test/csit/scripts/common_functions.sh
+++ b/test/csit/scripts/common_functions.sh
@@ -233,3 +233,20 @@
     ROBOT_VARIABLES=${ROBOT_VARIABLES}" -v SIMULATOR_IP:${SIMULATOR_IP}  -v SCRIPTS:${SCRIPTS}"
     echo ${ROBOT_VARIABLES}
 }
+
+function get_docker_compose_service ()
+{
+    local service=$1
+    local compose_file=${2:-docker-compose.yml}
+
+    echo $(docker-compose --file ./${compose_file} ps | grep $service |  cut -d " " -f1 )
+}
+
+function bypass_ip_adress ()
+{
+    local ip_address=$1
+
+    if [[ $no_proxy && $no_proxy != *$ip_address* ]]; then
+        export no_proxy=$no_proxy,$ip_address
+    fi
+}
diff --git a/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh b/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh
index 7ec7345..96ac40f 100755
--- a/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh
+++ b/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh
@@ -17,6 +17,7 @@
 }
 EOF
 
+echo "Initializing /dmaap endpoint"
 curl -v -X POST -d @${JSON} -H "Content-Type: application/json" http://$1:8080/webapi/dmaap 
 
 
@@ -33,20 +34,28 @@
 }
 EOF
 
+echo "Initializing /dcaeLocations endpoint"
 curl -v -X POST -d @${JSON} -H "Content-Type: application/json" http://$1:8080/webapi/dcaeLocations 
 
 
 # INITIALIZE: MR object in 1 site
+# since MR is currently deployed via docker-compose, its IP doesn't seem
+# to be routable from DBCL. Fortunately, the MR port is mapped from the docker bridge IP address.
+# Found this article for how to deterine the docker bridge IP so using it as a workaround.
+# https://stackoverflow.com/questions/22944631/how-to-get-the-ip-address-of-the-docker-host-from-inside-a-docker-container
+# Used the following snippet found buried in a comment to an answer and then modified for only 1 value.
+DOCKER_HOST=$(ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+' | head -1 )
+# Perhaps there is a better way...
 JSON=/tmp/$$.mrc
 cat << EOF > $JSON
 {
 	"dcaeLocationName": "csit-sanfrancisco",
-	"fqdn": "$3",
-	"hosts" : [ "$3", "$3", "$3" ],
-	"protocol" : "https",
-	"port": "3094"
+	"fqdn": "$DOCKER_HOST",
+	"topicProtocol" : "http",
+	"topicPort": "3904"
 
 }
 EOF
 
+echo "Initializing /mr_clusters endpoint"
 curl -v -X POST -d @${JSON} -H "Content-Type: application/json" http://$1:8080/webapi/mr_clusters
diff --git a/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh b/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh
index 72c4438..688ce7d 100755
--- a/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh
+++ b/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh
@@ -4,13 +4,13 @@
 # sets global var IP with assigned IP address
 
 function dmaapbc_launch() {
-	TAG=onap/dmaap/buscontroller
+	TAG="nexus3.onap.org:10001/onap/dmaap/buscontroller"
 	CONTAINER_NAME=dmaapbc
 	IP=""
 
 	cd ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller
 
-	TMP_CFG=/tmp/docker-databys-controller.conf
+	TMP_CFG=/tmp/docker-databus-controller.conf
 	. ./onapCSIT.env > $TMP_CFG
 	docker run -d --name $CONTAINER_NAME -v $TMP_CFG:/opt/app/config/conf $TAG
 	IP=`get-instance-ip.sh ${CONTAINER_NAME}`
@@ -22,9 +22,4 @@
     	sleep $i
 	done
 
-	set -x
-	${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh ${IP}
-	set +x
-
-	
 }
diff --git a/test/csit/scripts/externalapi-nbi/start_nbi_containers.sh b/test/csit/scripts/externalapi-nbi/start_nbi_containers.sh
index 7237a1f..24de740 100644
--- a/test/csit/scripts/externalapi-nbi/start_nbi_containers.sh
+++ b/test/csit/scripts/externalapi-nbi/start_nbi_containers.sh
@@ -34,18 +34,33 @@
 docker pull $NEXUS_DOCKER_REPO/onap/externalapi/nbi:$DOCKER_IMAGE_VERSION
 
 # Start nbi, MariaDB and MongoDB containers with docker compose and nbi/docker-compose.yml
-docker-compose up -d mariadb mongo && sleep 5 # to ensure that these services are ready for connections
+docker-compose up -d mariadb mongo
+
+# inject a script to ensure that these services are ready for connections
+docker-compose run --rm --entrypoint='/bin/sh' nbi -c '\
+    attempt=1; \
+    while ! nc -z mariadb 3306 || ! nc -z mongo 27017; do \
+        if [ $attempt = 30 ]; then \
+            echo "Timed out!"; \
+            exit 1; \
+        fi; \
+        echo "waiting for db services (attempt #$attempt)..."; \
+        sleep 1; \
+        attempt=$(( attempt + 1)); \
+    done; \
+    echo "all db services are ready for connections!" \
+'
+
 docker-compose up -d nbi
 
 NBI_CONTAINER_NAME=$(docker-compose ps 2> /dev/null | tail -n+3 | tr -s ' ' | cut -d' ' -f1 | grep _nbi_)
-NBI_IP=$(docker inspect $NBI_CONTAINER_NAME --format='{{ range .NetworkSettings.Networks }}{{ .IPAddress }}{{ end }}')
+NBI_IP=$(docker inspect --format='{{ range .NetworkSettings.Networks }}{{ .IPAddress }}{{ end }}' ${NBI_CONTAINER_NAME})
 
 echo "IP address for NBI main container ($NBI_CONTAINER_NAME) is set to ${NBI_IP}."
 
 # Wait for initialization
 for i in {1..30}; do
-    curl -sS ${NBI_IP}:8080 > /dev/null 2>&1 && break
+    curl -sS ${NBI_IP}:8080 > /dev/null 2>&1 && echo 'nbi initialized' && break
     echo sleep $i
     sleep $i
 done
-
diff --git a/test/csit/scripts/optf-has/has/has-properties/conductor.conf.onap b/test/csit/scripts/optf-has/has/has-properties/conductor.conf.onap
index 0f9e749..a8e8484 100644
--- a/test/csit/scripts/optf-has/has/has-properties/conductor.conf.onap
+++ b/test/csit/scripts/optf-has/has/has-properties/conductor.conf.onap
@@ -314,7 +314,7 @@
 #table_prefix = sdnc
 
 # Base URL for SDN-C. (string value)
-server_url = http://localhost:8082/restconf/
+server_url = http://localhost:8083/restconf/
 
 # Basic Authentication Username (string value)
 username = admin
@@ -346,3 +346,33 @@
 # solver will restart any orphaned solving requests at startup. (boolean value)
 #concurrent = false
 
+
+[multicloud]
+
+#
+# From conductor
+#
+
+# Base URL for Multicloud without a trailing slash. (string value)
+server_url = http://msb.onap.org:8082/api/multicloud
+
+# Timeout for Multicloud Rest Call (string value)
+multicloud_rest_timeout = 30
+
+# Number of retry for Multicloud Rest Call (string value)
+multicloud_retries = 3
+
+# The version of Multicloud API. (string value)
+server_url_version = v0
+
+
+
+[vim_controller]
+
+#
+# From conductor
+#
+
+# Extensions list to use (list value)
+extensions = multicloud
+
diff --git a/test/csit/scripts/optf-has/has/has_script.sh b/test/csit/scripts/optf-has/has/has_script.sh
index ac907ee..ee5479e 100755
--- a/test/csit/scripts/optf-has/has/has_script.sh
+++ b/test/csit/scripts/optf-has/has/has_script.sh
@@ -60,7 +60,7 @@
 echo "MULTICLOUDSIM_IP=${MULTICLOUDSIM_IP}"
 
 # change MULTICLOUD reference to the local instance
-sed  -i -e "s%localhost:8082/%${MULTICLOUDSIM_IP}:8082/%g" /tmp/conductor/properties/conductor.conf
+sed  -i -e "s%msb.onap.org:8082/%${MULTICLOUDSIM_IP}:8082/%g" /tmp/conductor/properties/conductor.conf
 
 #onboard conductor into music
 curl -vvvvv --noproxy "*" --request POST http://${MUSIC_IP}:8080/MUSIC/rest/v2/admin/onboardAppWithMusic -H "Content-Type: application/json" --data @${WORKSPACE}/test/csit/tests/optf-has/has/data/onboard.json
diff --git a/test/csit/scripts/so/chef-config/mso-docker.json b/test/csit/scripts/so/chef-config/mso-docker.json
index 13b0d22..120db11 100644
--- a/test/csit/scripts/so/chef-config/mso-docker.json
+++ b/test/csit/scripts/so/chef-config/mso-docker.json
@@ -171,7 +171,7 @@
       "sniroTimeout": "PT30M",
       "serviceAgnosticSniroHost": "http://sniro.api.simpledemo.openecomp.org:8080",
       "serviceAgnosticSniroEndpoint": "/sniro/api/v2/placement",
-      "aaiEndpoint": "https://aai.api.simpledemo.openecomp.org:8443",
+      "aaiEndpoint": "https://aai.api.simpledemo.onap.org:8443",
       "aaiAuth": "2630606608347B7124C244AB0FE34F6F",
       "adaptersNamespace": "http://org.openecomp.mso",
       "adaptersCompletemsoprocessEndpoint": "http://mso:8080/CompleteMsoProcess",
@@ -204,6 +204,16 @@
       "sdncTimeoutFirewall": "20",
       "callbackRetryAttempts": "30",
       "callbackRetrySleepTime": "1000",
+      "appcClientTopicRead": "APPC-LCM-READ",
+      "appcClientTopicWrite": "APPC-LCM-WRITE",
+      "appcClientTopicSdncRead": "SDNC-LCM-READ",
+      "appcClientTopicSdncWrite": "SDNC-LCM-WRITE",
+      "appcClientTopicReadTimeout": "360000",
+      "appcClientResponseTime": "360000",
+      "appcClientPoolMembers": "10.0.11.1:3904",
+      "appcClientKey": "VIlbtVl6YLhNUrtU",
+      "appcClientSecret": "64AG2hF4pYeG2pq7CT6XwUOT",
+      "appcClientService": "ueb",
       "workflowL3ToHigherLayerAddBondingModelName": "WAN Bonding",
       "workflowL3ToHigherLayerAddBondingModelVersion": "2.0"
     }
diff --git a/test/csit/tests/clamp/UIs/02__Create_TCA_model.robot b/test/csit/tests/clamp/UIs/02__Create_TCA_model.robot
index 99d93c3..7349f63 100644
--- a/test/csit/tests/clamp/UIs/02__Create_TCA_model.robot
+++ b/test/csit/tests/clamp/UIs/02__Create_TCA_model.robot
@@ -50,7 +50,7 @@
     Click Element    locator=Properties CL
     Select From List By Label       id=service       vLoadBalancer
     Select From List By Label       id=vf       vLoadBalancer 0
-    Select From List By Label       id=actionSet      eNodeB
+    Select From List By Label       id=actionSet      VNF
     Select From List By Label       id=location      Data Center 1      Data Center 3
     Click Button    locator=Save
 
@@ -59,7 +59,7 @@
     Click Element    xpath=//*[@data-element-id="Policy_12lup3h"]
     Click Button    locator=New Policy
     Input Text      locator=//*[@id="pname"]      text=Policy2
-    Select From List By Label       id=recipe      Reset
+    Select From List By Label       id=recipe      Restart
     Input Text      locator=maxRetries      text=6
     Input Text      locator=retryTimeLimit      text=280
     Input Text      locator=timeout      text=400
diff --git a/test/csit/tests/clamp/UIs/03__Verify_UI_Models.robot b/test/csit/tests/clamp/UIs/03__Verify_UI_Models.robot
index 70cbf12..a9cb787 100644
--- a/test/csit/tests/clamp/UIs/03__Verify_UI_Models.robot
+++ b/test/csit/tests/clamp/UIs/03__Verify_UI_Models.robot
@@ -30,11 +30,11 @@
     ${resp}=    Get Request    clamp   /restservices/clds/v1/clds/model/TCAModel1
     Should Contain Match    ${resp}   *templateTCA1*
     Should Contain Match    ${resp}   *c95b0e7c-c1f0-4287-9928-7964c5377a46*
-    Should Contain Match    ${resp}   *enbRecipe*
+    Should Contain Match    ${resp}   *vnfRecipe*
     Should Contain Match    ${resp}   *DC1*
     Should Contain Match    ${resp}   *DC3*
     Should Contain Match    ${resp}   *Policy2*
-    Should Contain Match    ${resp}   *reset*
+    Should Contain Match    ${resp}   *restart*
     Should Contain Match    ${resp}   *280*
     Should Contain Match    ${resp}   *400*
 
diff --git a/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_pnf_registration_event.json b/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_pnf_registration_event.json
new file mode 100644
index 0000000..49d77eb
--- /dev/null
+++ b/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_pnf_registration_event.json
@@ -0,0 +1,34 @@
+{
+    "event": {
+        "commonEventHeader": {
+            "domain": "other",
+            "eventName": "pnfRegistration_5GDU",
+            "eventId": "QTFCOC540002E-reg",
+            "eventType": "pnfRegistration",
+            "internalHeaderFields": {},
+            "lastEpochMicrosec": 1519837825682,
+            "nfNamingCode": "5GRAN",
+            "nfcNamingCode": "5DU",
+            "priority": "Normal",
+            "reportingEntityName": "5GRAN_DU",
+            "sequence": 0,
+            "sourceId": "QTFCOC540002E",
+            "sourceName": "5GRAN_DU",
+            "startEpochMicrosec": 1519837825682,
+            "version": 3
+        },
+        "otherFields": {
+            "pnfVendorName": "Nokia",
+            "pnfOamIpv4Address": "10.16.123.234",
+            "pnfOamIpv6Address": "<<NONE>>",
+            "pnfFamily": "BBU",
+            "pnfType": "AirScale",
+            "pnfModelNumber": "AJ02",
+            "pnfSerialNumber": "QTFCOC540002E",
+            "pnfSoftwareVersion": "v4.5.0.1",
+            "pnfManufactureDate": 1516406400,
+            "pnfLastServiceDate": 1517206400,
+            "otherFieldsVersion": 1
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/csit/tests/dcaegen2/testcases/dcae_ves.robot b/test/csit/tests/dcaegen2/testcases/dcae_ves.robot
index 47ce5f1..393359f 100644
--- a/test/csit/tests/dcaegen2/testcases/dcae_ves.robot
+++ b/test/csit/tests/dcaegen2/testcases/dcae_ves.robot
@@ -1,6 +1,5 @@
 *** Settings ***
 Documentation	  Testing DCAE VES Listener with various event feeds from VoLTE, vDNS, vFW and cCPE use scenarios
-
 Library 	  RequestsLibrary   
 Library           OperatingSystem
 Library           Collections
@@ -10,9 +9,6 @@
 Suite Setup       VES Collector Suite Setup DMaaP
 Suite Teardown    VES Collector Suite Shutdown DMaaP    
 
-
-
-
 *** Variables ***
 ${VESC_URL_HTTPS}                        https://%{VESC_IP}:8443
 ${VESC_URL}                              http://%{VESC_IP}:8080 
@@ -25,7 +21,7 @@
 ${EVENT_DATA_FILE_BAD}                   %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_volte_single_fault_event_bad.json
 ${EVENT_BATCH_DATA_FILE}                 %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_volte_fault_eventlist_batch.json
 ${EVENT_THROTTLING_STATE_DATA_FILE}      %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_volte_fault_provide_throttle_state.json
-
+${EVENT_PNF_REGISTRATION}               %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_pnf_registration_event.json
 
 #DCAE Health Check
 ${CONFIG_BINDING_URL}                    http://localhost:8443
@@ -34,9 +30,7 @@
 ${VES_Service_Name1}                     dcae-controller-ves-collector
 ${VES_Service_Name2}                     ves-collector-not-exist
 
-    
 *** Test Cases ***    
-
 VES Collector Health Check
     [Tags]    DCAE-VESC-R1
     [Documentation]   Ves Collector Health Check
@@ -44,8 +38,7 @@
     ${session}=    Create Session 	dcae 	${VESC_URL}
     ${headers}=  Create Dictionary     Accept=*/*     X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}    X-FromAppId=${GLOBAL_APPLICATION_ID}
     ${resp}= 	Get Request 	dcae 	/healthcheck        headers=${headers}
-    Should Be Equal As Strings 	${resp.status_code} 	200
-    
+    Should Be Equal As Strings 	${resp.status_code} 	200  
 
 Publish Single VES VoLTE Fault Event
     [Tags]    DCAE-VESC-R1
@@ -82,8 +75,7 @@
     Should Be Equal As Strings 	${resp.status_code} 	200
     #${ret}=  DMaaP Message Receive    ab305d54-85b4-a31b-7db2-fb6b9e546016
     ${ret}=  DMaaP Message Receive    ab305d54-85b4-a31b-7db2-fb6b9e546025
-    Should Be Equal As Strings    ${ret}    true    
-    
+    Should Be Equal As Strings    ${ret}    true      
     
 Publish Single VES VoLTE Fault Event With Bad Data
     [Tags]    DCAE-VESC-R1
@@ -105,8 +97,7 @@
     Log   Send HTTP Request with invalid method Put instead of Post
     ${resp}=  Publish Event To VES Collector With Put Method No Auth  ${VESC_URL}  ${VES_ANY_EVENT_PATH}  ${headers}  ${evtdata}
     Log    Receive HTTP Status code ${resp.status_code}
-    Should Be Equal As Strings 	${resp.status_code} 	404
-    
+    Should Be Equal As Strings 	${resp.status_code} 	404 
     
 Publish VES Event With Invalid URL Path
     [Tags]    DCAE-VESC-R1
@@ -116,8 +107,7 @@
     Log   Send HTTP Request with invalid /listener/v5/ instead of /eventListener/v5 path
     ${resp}=  Publish Event To VES Collector No Auth    ${VESC_URL}  /listener/v5/  ${headers}  ${evtdata}
     Log    Receive HTTP Status code ${resp.status_code}
-    Should Be Equal As Strings 	${resp.status_code} 	404
-    
+    Should Be Equal As Strings 	${resp.status_code} 	404    
     
 #Enable VESC HTTPS And Basic Auth
     #[Tags]    DCAE-VESC-R1
@@ -142,8 +132,7 @@
     ${isEmpty}=   Is Json Empty    ${resp}
     Run Keyword If   '${isEmpty}' == False   Log  ${resp.json()}
     ${ret}=  DMaaP Message Receive    ab305d54-85b4-a31b-7db2-fb6b9e546015
-    Should Be Equal As Strings    ${ret}    true
-    
+    Should Be Equal As Strings    ${ret}    true 
     
 Publish Single VES Measurement Event Over HTTPS
     [Tags]    DCAE-VESC-R1
@@ -169,7 +158,6 @@
     ${ret}=  DMaaP Message Receive    ab305d54-85b4-a31b-7db2-fb6b9e546025
     Should Be Equal As Strings    ${ret}    true
 
-
 Publish VES Event With Invalid URL Path HTTPS
     [Tags]    DCAE-VESC-R1
     [Documentation]    Use invalid url path to expect 404 response
@@ -180,22 +168,16 @@
     Log    Receive HTTP Status code ${resp.status_code}
     Should Be Equal As Strings 	${resp.status_code} 	404
     
-
- 
-    
-
-   
-
-       
-    
-    
-    
-
-    
-        
-    
-  
-    
-  
-
-
+Publish PNF Registration Event  
+    [Tags]    DCAE-VESC-R1
+    [Documentation]   Post PNF registration event and expect 200 Response 
+    ${evtdata}=   Get Event Data From File   ${EVENT_PNF_REGISTRATION}
+    ${headers}=   Create Header From String    ${HEADER_STRING}
+    ${resp}=  Publish Event To VES Collector No Auth    ${VESC_URL}  ${VES_ANY_EVENT_PATH}  ${headers}  ${evtdata}
+    Log    Receive HTTP Status code ${resp.status_code}
+    Should Be Equal As Strings 	${resp.status_code} 	200
+    ${isEmpty}=   Is Json Empty    ${resp}
+    Run Keyword If   '${isEmpty}' == False   Log  ${resp.json()}
+    ${ret}=  DMaaP Message Receive    QTFCOC540002E-reg
+    Should Be Equal As Strings    ${ret}    true
+    
\ No newline at end of file
diff --git a/test/csit/tests/dmaap-buscontroller/single-mr-suite/test1.robot b/test/csit/tests/dmaap-buscontroller/single-mr-suite/test1.robot
index f69538d..d68b9ed 100644
--- a/test/csit/tests/dmaap-buscontroller/single-mr-suite/test1.robot
+++ b/test/csit/tests/dmaap-buscontroller/single-mr-suite/test1.robot
@@ -4,14 +4,25 @@
 Library           json
 Library           OperatingSystem
 Library           RequestsLibrary
-
+Library           HttpLibrary.HTTP
+Library           String
 
 
 *** Variables ***
 ${MESSAGE}    Hello, world!
 ${DBC_URI}    webapi
-${TOPIC1}     singleMRtopic1
-${TOPIC1_DATA} 	{ "topicName":"singleMRtopic1", "topicDescription":"generated for CSIT", "owner":"dgl"}
+${DBC_URL}    http://${DMAAPBC_IP}:8080/${DBC_URI}
+${TOPIC_NS}     org.onap.dmaap.onapCSIT
+${LOC}          csit-sanfrancisco
+${PUB_CORE}     "dcaeLocationName": "${LOC}", "clientRole": "org.onap.dmaap.client.pub", "action": [ "pub", "view" ] 
+${SUB_CORE}     "dcaeLocationName": "${LOC}", "clientRole": "org.onap.dmaap.client.sub", "action": [ "sub", "view" ] 
+${PUB}          { ${PUB_CORE} }
+${SUB}          { ${SUB_CORE} }
+${TOPIC1_DATA}  { "topicName":"singleMRtopic1", "topicDescription":"generated for CSIT", "owner":"dgl"}
+${TOPIC2_DATA}  { "topicName":"singleMRtopic2", "topicDescription":"generated for CSIT", "owner":"dgl", "clients": [ ${PUB}, ${SUB}] }
+${TOPIC3_DATA}  { "topicName":"singleMRtopic3", "topicDescription":"generated for CSIT", "owner":"dgl"}
+${PUB3_DATA}    { "fqtn": "${TOPIC_NS}.singleMRtopic3", ${PUB_CORE} }
+${SUB3_DATA}    { "fqtn": "${TOPIC_NS}.singleMRtopic3", ${SUB_CORE} }
 
 
 
@@ -22,11 +33,54 @@
     ${resp}=           Get Request   sanity    /  
     Should Be Equal As Integers  ${resp.status_code}  200
 
-Create Topic Test
-    [Documentation]        Check POST ${DBC_URI}/topics endpoint
-    ${resp}=         PostCall    http://${DMAAPBC_IP}:8080/${DBC_URI}/topics    ${TOPIC1_DATA}
+(DMAAP-293)
+    [Documentation]        Create Topic w no clients POST ${DBC_URI}/topics endpoint
+    ${resp}=         PostCall    ${DBC_URL}/topics    ${TOPIC1_DATA}
+    Should Be Equal As Integers  ${resp.status_code}  201   
+
+(DMAAP-294)
+    [Documentation]        Create Topic w pub and sub clients POST ${DBC_URI}/topics endpoint
+    ${resp}=         PostCall    ${DBC_URL}/topics    ${TOPIC2_DATA}
     Should Be Equal As Integers  ${resp.status_code}  201
 
+(DMAAP-295)
+    [Documentation]        Create Topic w no clients and then add a client POST ${DBC_URI}/mr_clients endpoint
+    ${resp}=         PostCall    ${DBC_URL}/topics    ${TOPIC3_DATA}
+    Should Be Equal As Integers  ${resp.status_code}  201   
+    ${resp}=         PostCall    ${DBC_URL}/mr_clients    ${PUB3_DATA}
+    Should Be Equal As Integers  ${resp.status_code}  200   
+    ${resp}=         PostCall    ${DBC_URL}/mr_clients    ${SUB3_DATA}
+    Should Be Equal As Integers  ${resp.status_code}  200   
+
+(DMAAP-297)
+    [Documentation]    Query for all topics and specific topic
+    Create Session     get          ${DBC_URL}
+    ${resp}=           Get Request   get    /topics  
+    Should Be Equal As Integers  ${resp.status_code}  200
+    ${resp}=           Get Request   get    /topics/${TOPIC_NS}.singleMRtopic3
+    Should Be Equal As Integers  ${resp.status_code}  200
+
+(DMAAP-301)
+    [Documentation]    Delete a subscriber
+    Create Session     get          ${DBC_URL}
+    ${resp}=           Get Request   get    /topics/${TOPIC_NS}.singleMRtopic3
+    Should Be Equal As Integers  ${resp.status_code}  200
+	${tmp}=            Get Json Value      ${resp.text}           /clients/1/mrClientId
+	${clientId}=       Remove String       ${tmp}         \"
+    ${resp}=           DelCall   ${DBC_URL}/mr_clients/${clientId}
+    Should Be Equal As Integers  ${resp.status_code}  204
+
+(DMAAP-302)
+    [Documentation]    Delete a publisher
+    Create Session     get          ${DBC_URL}
+    ${resp}=           Get Request   get    /topics/${TOPIC_NS}.singleMRtopic3
+    Should Be Equal As Integers  ${resp.status_code}  200
+	${tmp}=            Get Json Value      ${resp.text}           /clients/0/mrClientId
+	${clientId}=       Remove String       ${tmp}         \"
+    ${resp}=           DelCall   ${DBC_URL}/mr_clients/${clientId}
+    Should Be Equal As Integers  ${resp.status_code}  204
+
+
 *** Keywords ***
 CheckDir
     [Arguments]                 ${path}
@@ -43,3 +97,8 @@
     ${resp}=       Evaluate    requests.post('${url}',data='${data}', headers=${headers},verify=False)    requests
     [Return]       ${resp}
 
+DelCall
+    [Arguments]    ${url}           
+    ${headers}=    Create Dictionary    Accept=application/json    Content-Type=application/json
+    ${resp}=       Evaluate    requests.delete('${url}', headers=${headers},verify=False)    requests
+    [Return]       ${resp}
diff --git a/test/csit/tests/optf-has/has/data/plan_with_hpa.json b/test/csit/tests/optf-has/has/data/plan_with_hpa.json
new file mode 100644
index 0000000..bf314a9
--- /dev/null
+++ b/test/csit/tests/optf-has/has/data/plan_with_hpa.json
@@ -0,0 +1,230 @@
+{  
+   "name":"vCPE-with-HPA",
+   "template":{  
+      "homing_template_version":"2017-10-10",
+      "parameters":{  
+         "service_name":"Residential vCPE",
+         "service_id":"vcpe_service_id",
+         "customer_lat":45.395968,
+         "customer_long":-71.135344,
+         "REQUIRED_MEM":4,
+         "REQUIRED_DISK":100,
+         "pnf_id":"some_pnf_id"
+      },
+      "locations":{  
+         "customer_loc":{  
+            "latitude":{  
+               "get_param":"customer_lat"
+            },
+            "longitude":{  
+               "get_param":"customer_long"
+            }
+         }
+      },
+      "demands":{
+         "vG":[  
+            {  
+               "inventory_provider":"aai",
+               "inventory_type":"cloud"
+            }
+         ]
+      },
+      "constraints":{
+        "constraint_vg_customer":{  
+            "type":"distance_to_location",
+            "demands":[  
+               "vG"
+            ],
+            "properties":{  
+               "distance":"< 100 km",
+               "location":"customer_loc"
+            }
+         },
+        "hpa_constraint":{  
+            "type":"hpa",
+            "demands":[  
+               "vG"
+            ],
+            "properties":{  
+               "evaluate":[  
+                  {  
+                     "flavorLabel":"flavor_label_1",
+                     "flavorProperties":[  
+                        {  
+                           "hpa-feature":"basicCapabilities",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory": "False",
+                           "score": "5",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"numVirtualCpu",
+                                 "hpa-attribute-value":"4",
+                                 "operator":">="
+                              },
+                              {  
+                                 "hpa-attribute-key":"virtualMemSize",
+                                 "hpa-attribute-value":"4",
+                                 "operator":">=",
+                                 "unit":"GB"
+                              }
+                           ]
+                        },
+                        {  
+                           "hpa-feature":"numa",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory": "False",
+                           "score": "5",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"numaNodes",
+                                 "hpa-attribute-value":"2",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaCpu-0",
+                                 "hpa-attribute-value":"2",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaCpu-1",
+                                 "hpa-attribute-value":"4",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaMem-0",
+                                 "hpa-attribute-value":"2",
+                                 "operator":"=",
+                                 "unit":"GB"
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaMem-1",
+                                 "hpa-attribute-value":"4",
+                                 "operator":"=",
+                                 "unit":"GB"
+                              }
+                           ]
+                        },
+                        {  
+                           "hpa-feature":"cpuPinning",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory": "False",
+                           "score": "5",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"logicalCpuThreadPinningPolicy",
+                                 "hpa-attribute-value":"prefer",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"logicalCpuPinningPolicy",
+                                 "hpa-attribute-value":"dedicated",
+                                 "operator":"="
+                              }
+                           ]
+                        }
+                     ]
+                  },
+                  {  
+                     "flavorLabel":"flavor_label_2",
+                     "flavorProperties":[  
+                        {  
+                           "hpa-feature":"basicCapabilities",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory": "False",
+                           "score": "5",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"numVirtualCpu",
+                                 "hpa-attribute-value":"8",
+                                 "operator":">="
+                              },
+                              {  
+                                 "hpa-attribute-key":"virtualMemSize",
+                                 "hpa-attribute-value":"16",
+                                 "operator":">=",
+                                 "unit":"GB"
+                              }
+                           ]
+                        },
+                        {  
+                           "hpa-feature":"numa",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory": "False",
+                           "score": "5",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"numaNodes",
+                                 "hpa-attribute-value":"2",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaCpu-0",
+                                 "hpa-attribute-value":"2",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaCpu-1",
+                                 "hpa-attribute-value":"4",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaMem-0",
+                                 "hpa-attribute-value":"2",
+                                 "operator":"=",
+                                 "unit":"GB"
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaMem-1",
+                                 "hpa-attribute-value":"4",
+                                 "operator":"=",
+                                 "unit":"GB"
+                              }
+                           ]
+                        },
+                        {  
+                           "hpa-feature":"ovsDpdk",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory": "False",
+                           "score": "5",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"dataProcessingAccelerationLibrary",
+                                 "hpa-attribute-value":"v18.02",
+                                 "operator":"="
+                              }
+                           ]
+                        }
+                     ]
+                  }
+               ]
+            }
+         }
+      },
+      "optimization":{  
+         "minimize":{  
+            "sum":[  
+               {  
+                  "distance_between":[  
+                     "customer_loc",
+                     "vG"
+                  ]
+               },
+               {  
+                  "distance_between":[  
+                     "customer_loc",
+                     "vG"
+                  ]
+               }
+            ]
+         }
+      }
+   },
+   "timeout":5,
+   "limit":3
+}
diff --git a/test/csit/tests/optf-has/has/data/plan_with_hpa_requirements_mandatory.json b/test/csit/tests/optf-has/has/data/plan_with_hpa_requirements_mandatory.json
new file mode 100644
index 0000000..80685ae
--- /dev/null
+++ b/test/csit/tests/optf-has/has/data/plan_with_hpa_requirements_mandatory.json
@@ -0,0 +1,165 @@
+{  
+   "name":"vCPE-with-HPA-requirement-mandatory",
+   "template":{  
+      "homing_template_version":"2017-10-10",
+      "parameters":{  
+         "service_name":"Residential vCPE",
+         "service_id":"vcpe_service_id",
+         "customer_lat":45.395968,
+         "customer_long":-71.135344,
+         "REQUIRED_MEM":4,
+         "REQUIRED_DISK":100,
+         "pnf_id":"some_pnf_id"
+      },
+      "locations":{  
+         "customer_loc":{  
+            "latitude":{  
+               "get_param":"customer_lat"
+            },
+            "longitude":{  
+               "get_param":"customer_long"
+            }
+         }
+      },
+      "demands":{  
+         "vG":[  
+            {  
+               "inventory_provider":"aai",
+               "inventory_type":"cloud"
+            }
+         ]
+      },
+      "constraints":{  
+         "constraint_vg_customer":{  
+            "type":"distance_to_location",
+            "demands":[  
+               "vG"
+            ],
+            "properties":{  
+               "distance":"< 100 km",
+               "location":"customer_loc"
+            }
+         },
+         "hpa_constraint":{  
+            "type":"hpa",
+            "demands":[  
+               "vG"
+            ],
+            "properties":{  
+               "evaluate":[  
+                  {  
+                     "flavorLabel":"flavor_label_1",
+                     "flavorProperties":[  
+                        {  
+                           "hpa-feature":"basicCapabilities",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory": "True",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"numVirtualCpu",
+                                 "hpa-attribute-value":"64",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"virtualMemSize",
+                                 "hpa-attribute-value":"64",
+                                 "operator":"=",
+                                 "unit":"GB"
+                              }
+                           ]
+                        },
+                        {  
+                           "hpa-feature":"numa",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory":"True",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"numaNodes",
+                                 "hpa-attribute-value":"2",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaCpu-0",
+                                 "hpa-attribute-value":"2",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaCpu-1",
+                                 "hpa-attribute-value":"4",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaMem-0",
+                                 "hpa-attribute-value":"2",
+                                 "operator":"=",
+                                 "unit":"GB"
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaMem-1",
+                                 "hpa-attribute-value":"4",
+                                 "operator":"=",
+                                 "unit":"GB"
+                              }
+                           ]
+                        }
+                     ]
+                  },
+                  {  
+                     "flavorLabel":"flavor_label_2",
+                     "flavorProperties":[  
+                        {  
+                           "hpa-feature":"basicCapabilities",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory": "True",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"numVirtualCpu",
+                                 "hpa-attribute-value":"32",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"virtualMemSize",
+                                 "hpa-attribute-value":"128",
+                                 "operator":"=",
+                                 "unit":"GB"
+                              }
+                           ]
+                        },
+                        {  
+                           "hpa-feature":"ovsDpdk",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory": "True",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"dataProcessingAccelerationLibrary",
+                                 "hpa-attribute-value":"v18.02",
+                                 "operator":"="
+                              }
+                           ]
+                        }
+                     ]
+                  }
+               ]
+            }
+         }
+      },
+      "optimization":{  
+         "minimize":{  
+            "sum":[  
+               {  
+                  "distance_between":[  
+                     "customer_loc",
+                     "vG"
+                  ]
+               }
+            ]
+         }
+      }
+   },
+   "timeout":5,
+   "limit":3
+}
diff --git a/test/csit/tests/optf-has/has/data/plan_with_hpa_requirements_optionals.json b/test/csit/tests/optf-has/has/data/plan_with_hpa_requirements_optionals.json
new file mode 100644
index 0000000..4672349
--- /dev/null
+++ b/test/csit/tests/optf-has/has/data/plan_with_hpa_requirements_optionals.json
@@ -0,0 +1,217 @@
+{  
+   "name":"vCPE-HPA-Requirement-Optional",
+   "template":{  
+      "homing_template_version":"2017-10-10",
+      "parameters":{  
+         "service_name":"Residential vCPE",
+         "service_id":"vcpe_service_id",
+         "customer_lat":45.395968,
+         "customer_long":-71.135344,
+         "REQUIRED_MEM":4,
+         "REQUIRED_DISK":100,
+         "pnf_id":"some_pnf_id"
+      },
+      "locations":{  
+         "customer_loc":{  
+            "latitude":{  
+               "get_param":"customer_lat"
+            },
+            "longitude":{  
+               "get_param":"customer_long"
+            }
+         }
+      },
+      "demands":{  
+         "vG":[  
+            {  
+               "inventory_provider":"aai",
+               "inventory_type":"cloud"
+            }
+         ]
+      },
+      "constraints":{  
+         "constraint_vg_customer":{  
+            "type":"distance_to_location",
+            "demands":[  
+               "vG"
+            ],
+            "properties":{  
+               "distance":"< 100 km",
+               "location":"customer_loc"
+            }
+         },
+         "hpa_constraint":{  
+            "type":"hpa",
+            "demands":[  
+               "vG"
+            ],
+            "properties":{  
+               "evaluate":[  
+                  {  
+                     "flavorLabel":"flavor_label_1",
+                     "flavorProperties":[  
+                        {  
+                           "hpa-feature":"basicCapabilities",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory": "True",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"numVirtualCpu",
+                                 "hpa-attribute-value":"4",
+                                 "operator":">="
+                              },
+                              {  
+                                 "hpa-attribute-key":"virtualMemSize",
+                                 "hpa-attribute-value":"8",
+                                 "operator":">=",
+                                 "unit":"GB"
+                              }
+                           ]
+                        },
+                         {  
+                           "hpa-feature":"instructionSetExtensions",
+                           "hpa-version":"v1",
+                           "architecture":"Intel64",
+                           "mandatory": "True",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"instructionSetExtensions",
+                                 "hpa-attribute-value":["aes", "sse", "avx", "smt"],
+                                 "operator":"ALL",
+                                 "unit":""
+                              }
+                           ]
+                        },
+                        {  
+                           "hpa-feature":"numa",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory":"False",
+                           "score":"3",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"numaNodes",
+                                 "hpa-attribute-value":"2",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaCpu-0",
+                                 "hpa-attribute-value":"2",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaCpu-1",
+                                 "hpa-attribute-value":"4",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaMem-0",
+                                 "hpa-attribute-value":"2",
+                                 "operator":"=",
+                                 "unit":"GB"
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaMem-1",
+                                 "hpa-attribute-value":"4",
+                                 "operator":"=",
+                                 "unit":"GB"
+                              }
+                           ]
+                        }
+                     ]
+                  },
+                  {  
+                     "flavorLabel":"flavor_label_2",
+                     "flavorProperties":[  
+                        {  
+                           "hpa-feature":"basicCapabilities",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory": "True",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"numVirtualCpu",
+                                 "hpa-attribute-value":"4",
+                                 "operator":">="
+                              },
+                              {  
+                                 "hpa-attribute-key":"virtualMemSize",
+                                 "hpa-attribute-value":"8",
+                                 "operator":">=",
+                                 "unit":"GB"
+                              }
+                           ]
+                        },
+                         {  
+                           "hpa-feature":"ovsDpdk",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory": "False",
+                           "score":"5",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"dataProcessingAccelerationLibrary",
+                                 "hpa-attribute-value":"v18.02",
+                                 "operator":"="
+                              }
+                           ]
+                        },
+                        {  
+                           "hpa-feature":"numa",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory":"False",
+                           "score":"3",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"numaNodes",
+                                 "hpa-attribute-value":"2",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaCpu-0",
+                                 "hpa-attribute-value":"2",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaCpu-1",
+                                 "hpa-attribute-value":"4",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaMem-0",
+                                 "hpa-attribute-value":"2",
+                                 "operator":"=",
+                                 "unit":"GB"
+                              },
+                              {  
+                                 "hpa-attribute-key":"numaMem-1",
+                                 "hpa-attribute-value":"4",
+                                 "operator":"=",
+                                 "unit":"GB"
+                              }
+                           ]
+                        }
+                     ]
+                  }
+               ]
+            }
+         }
+      },
+      "optimization":{  
+         "minimize":{  
+            "sum":[  
+               {  
+                  "distance_between":[  
+                     "customer_loc",
+                     "vG"
+                  ]
+               }
+            ]
+         }
+      }
+   },
+   "timeout":5,
+   "limit":3
+}
diff --git a/test/csit/tests/optf-has/has/data/plan_with_hpa_simple.json b/test/csit/tests/optf-has/has/data/plan_with_hpa_simple.json
new file mode 100644
index 0000000..25b2262
--- /dev/null
+++ b/test/csit/tests/optf-has/has/data/plan_with_hpa_simple.json
@@ -0,0 +1,129 @@
+{  
+   "name":"vCPE-with-HPA",
+   "template":{  
+      "homing_template_version":"2017-10-10",
+      "parameters":{  
+         "service_name":"Residential vCPE",
+         "service_id":"vcpe_service_id",
+         "customer_lat":45.395968,
+         "customer_long":-71.135344,
+         "REQUIRED_MEM":4,
+         "REQUIRED_DISK":100,
+         "pnf_id":"some_pnf_id"
+      },
+      "locations":{  
+         "customer_loc":{  
+            "latitude":{  
+               "get_param":"customer_lat"
+            },
+            "longitude":{  
+               "get_param":"customer_long"
+            }
+         }
+      },
+      "demands":{
+         "vG":[  
+            {  
+               "inventory_provider":"aai",
+               "inventory_type":"cloud"
+            }
+         ]
+      },
+      "constraints":{  
+        "hpa_constraint":{  
+            "type":"hpa",
+            "demands":[  
+               "vG"
+            ],
+            "properties":{  
+               "evaluate":[  
+                  {  
+                     "flavorLabel":"flavor_label_1",
+                     "flavorProperties":[  
+                        {  
+                           "hpa-feature":"basicCapabilities",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory": "False",
+                           "score": "5",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"numVirtualCpu",
+                                 "hpa-attribute-value":"32",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"virtualMemSize",
+                                 "hpa-attribute-value":"64",
+                                 "operator":"=",
+                                 "unit":"GB"
+                              }
+                           ]
+                        },
+                        {  
+                           "hpa-feature":"ovsDpdk",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory": "False",
+                           "score": "5",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"dataProcessingAccelerationLibrary",
+                                 "hpa-attribute-value":"v18.02",
+                                 "operator":"="
+                              }
+                           ]
+                        }
+                     ]
+                  },
+                  {  
+                     "flavorLabel":"flavor_label_2",
+                     "flavorProperties":[  
+                        {  
+                           "hpa-feature":"basicCapabilities",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory": "False",
+                           "score": "5",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"numVirtualCpu",
+                                 "hpa-attribute-value":"8",
+                                 "operator":">="
+                              },
+                              {  
+                                 "hpa-attribute-key":"virtualMemSize",
+                                 "hpa-attribute-value":"16",
+                                 "operator":">=",
+                                 "unit":"GB"
+                              }
+                           ]
+                        }
+                     ]
+                  }
+               ]
+            }
+         }
+      },
+      "optimization":{  
+         "minimize":{  
+            "sum":[  
+               {  
+                  "distance_between":[  
+                     "customer_loc",
+                     "vG"
+                  ]
+               },
+               {  
+                  "distance_between":[  
+                     "customer_loc",
+                     "vG"
+                  ]
+               }
+            ]
+         }
+      }
+   },
+   "timeout":5,
+   "limit":3
+}
diff --git a/test/csit/tests/optf-has/has/data/plan_with_hpa_unmatched.json b/test/csit/tests/optf-has/has/data/plan_with_hpa_unmatched.json
new file mode 100644
index 0000000..8a31985
--- /dev/null
+++ b/test/csit/tests/optf-has/has/data/plan_with_hpa_unmatched.json
@@ -0,0 +1,117 @@
+{  
+   "name":"vCPE-with-HPA-unmatched-requirements",
+   "template":{  
+      "homing_template_version":"2017-10-10",
+      "parameters":{  
+         "service_name":"Residential vCPE",
+         "service_id":"vcpe_service_id",
+         "customer_lat":45.395968,
+         "customer_long":-71.135344,
+         "REQUIRED_MEM":4,
+         "REQUIRED_DISK":100,
+         "pnf_id":"some_pnf_id"
+      },
+      "locations":{  
+         "customer_loc":{  
+            "latitude":{  
+               "get_param":"customer_lat"
+            },
+            "longitude":{  
+               "get_param":"customer_long"
+            }
+         }
+      },
+      "demands":{  
+         "vG":[  
+            {  
+               "inventory_provider":"aai",
+               "inventory_type":"cloud"
+            }
+         ]
+      },
+      "constraints":{  
+         "constraint_vgmux_customer":{  
+            "type":"distance_to_location",
+            "demands":[  
+               "vG"
+            ],
+            "properties":{  
+               "distance":"< 100 km",
+               "location":"customer_loc"
+            }
+         },
+         "hpa_constraint":{  
+            "type":"hpa",
+            "demands":[  
+               "vG"
+            ],
+            "properties":{  
+               "evaluate":[  
+                  {  
+                     "flavorLabel":"flavor_label_1",
+                     "flavorProperties":[  
+                        {  
+                           "hpa-feature":"basicCapabilities",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory": "True",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"numVirtualCpu",
+                                 "hpa-attribute-value":"60",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"virtualMemSize",
+                                 "hpa-attribute-value":"64",
+                                 "operator":"=",
+                                 "unit":"GB"
+                              }
+                           ]
+                        }
+                     ]
+                  },
+                  {  
+                     "flavorLabel":"flavor_label_2",
+                     "flavorProperties":[  
+                        {  
+                           "hpa-feature":"basicCapabilities",
+                           "hpa-version":"v1",
+                           "architecture":"generic",
+                           "mandatory":"True",
+                           "hpa-feature-attributes":[  
+                              {  
+                                 "hpa-attribute-key":"numVirtualCpu",
+                                 "hpa-attribute-value":"30",
+                                 "operator":"="
+                              },
+                              {  
+                                 "hpa-attribute-key":"virtualMemSize",
+                                 "hpa-attribute-value":"128",
+                                 "operator":"=",
+                                 "unit":"GB"
+                              }
+                           ]
+                        }
+                     ]
+                  }
+               ]
+            }
+         }
+      },
+      "optimization":{  
+         "minimize":{  
+            "sum":[  
+               {  
+                  "distance_between":[  
+                     "customer_loc",
+                     "vG"
+                  ]
+               }
+            ]
+         }
+      }
+   },
+   "timeout":5,
+   "limit":3
+}
diff --git a/test/csit/tests/optf-has/has/data/plan_with_vim_fit.json b/test/csit/tests/optf-has/has/data/plan_with_vim_fit.json
new file mode 100644
index 0000000..00a5991
--- /dev/null
+++ b/test/csit/tests/optf-has/has/data/plan_with_vim_fit.json
@@ -0,0 +1,89 @@
+{  
+   "name":"vCPE-Sanity1",
+   "template":{  
+      "homing_template_version":"2017-10-10",
+      "parameters":{  
+         "service_name":"Residential vCPE",
+         "service_id":"vcpe_service_id",
+         "customer_lat":45.395968,
+         "customer_long":-71.135344,
+         "REQUIRED_MEM":4,
+         "REQUIRED_DISK":100,
+         "pnf_id":"some_pnf_id"
+      },
+      "locations":{  
+         "customer_loc":{  
+            "latitude":{  
+               "get_param":"customer_lat"
+            },
+            "longitude":{  
+               "get_param":"customer_long"
+            }
+         }
+      },
+      "demands":{  
+         "vG":[  
+            {  
+               "inventory_provider":"aai",
+               "inventory_type":"cloud"
+            }
+         ]
+      },
+      "constraints":{  
+         "constraint_vg_customer":{  
+            "type":"distance_to_location",
+            "demands":[  
+               "vG"
+            ],
+            "properties":{  
+               "distance":"< 100 km",
+               "location":"customer_loc"
+            }
+         },
+         "check_cloud_capacity":{  
+            "type":"vim_fit",
+            "demands":[  
+               "vG"
+            ],
+            "properties":{  
+               "controller":"multicloud",
+               "request":{  
+                  "vCPU":10,
+                  "Memory":{  
+                     "quantity":{  
+                        "get_param":"REQUIRED_MEM"
+                     },
+                     "unit":"GB"
+                  },
+                  "Storage":{  
+                     "quantity":{  
+                        "get_param":"REQUIRED_DISK"
+                     },
+                     "unit":"GB"
+                  }
+               }
+            }
+         }
+      },
+      "optimization":{  
+         "minimize":{  
+            "sum":[  
+               {  
+                  "distance_between":[  
+                     "customer_loc",
+                     "vG"
+                  ]
+               },
+               {  
+                  "distance_between":[  
+                     "customer_loc",
+                     "vG"
+                  ]
+               }
+            ]
+         }
+      }
+   },
+   "timeout":5,
+   "limit":3
+}
diff --git a/test/csit/tests/optf-has/has/optf_has_test.robot b/test/csit/tests/optf-has/has/optf_has_test.robot
index 62db107..815ffa8 100644
--- a/test/csit/tests/optf-has/has/optf_has_test.robot
+++ b/test/csit/tests/optf-has/has/optf_has_test.robot
@@ -295,6 +295,191 @@
     Should Be Equal As Integers    ${resp.status_code}    200
     Should Be Equal    not found    ${resultStatus}
 
+SendPlanWithVimFit
+    [Documentation]    It sends a POST request to conductor
+    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
+    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_vim_fit.json
+    &{headers}=      Create Dictionary    Content-Type=application/json  Accept=application/json
+    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
+    Log To Console              *********************
+    Log To Console              response = ${resp}
+    Log To Console              body = ${resp.text}
+    ${response_json}    json.loads    ${resp.content}
+    ${generatedPlanId}=    Convert To String      ${response_json['id']}
+    Set Global Variable     ${generatedPlanId}
+    Log To Console              generatedPlanId = ${generatedPlanId}
+    Should Be Equal As Integers    ${resp.status_code}    201
+    Sleep    60s    Wait Plan Resolution
+
+GetPlanWithVimFit
+    [Documentation]    It sends a REST GET request to capture recommendations
+    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
+    &{headers}=      Create Dictionary    Content-Type=application/json  Accept=application/json
+    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
+    Log To Console              *********************
+    Log To Console              response = ${resp}
+    ${response_json}    json.loads    ${resp.content}
+    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
+    Set Global Variable     ${resultStatus}
+    Log To Console              resultStatus = ${resultStatus}
+    Log To Console              body = ${resp.text}
+    Should Be Equal As Integers    ${resp.status_code}    200
+    Should Be Equal    done    ${resultStatus}
+
+SendPlanWithHpa
+    [Documentation]    It sends a POST request to conductor
+    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
+    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa.json
+    &{headers}=      Create Dictionary    Content-Type=application/json  Accept=application/json
+    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
+    Log To Console              *********************
+    Log To Console              response = ${resp}
+    Log To Console              body = ${resp.text}
+    ${response_json}    json.loads    ${resp.content}
+    ${generatedPlanId}=    Convert To String      ${response_json['id']}
+    Set Global Variable     ${generatedPlanId}
+    Log To Console              generatedPlanId = ${generatedPlanId}
+    Should Be Equal As Integers    ${resp.status_code}    201
+    Sleep    60s    Wait Plan Resolution
+
+GetPlanWithHpa
+    [Documentation]    It sends a REST GET request to capture recommendations
+    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
+    &{headers}=      Create Dictionary    Content-Type=application/json  Accept=application/json
+    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
+    Log To Console              *********************
+    Log To Console              response = ${resp}
+    ${response_json}    json.loads    ${resp.content}
+    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
+    Set Global Variable     ${resultStatus}
+    Log To Console              resultStatus = ${resultStatus}
+    Log To Console              body = ${resp.text}
+    Should Be Equal As Integers    ${resp.status_code}    200
+    Should Be Equal    done    ${resultStatus}
+
+SendPlanWithHpaSimple
+    [Documentation]    It sends a POST request to conductor
+    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
+    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa_simple.json
+    &{headers}=      Create Dictionary    Content-Type=application/json  Accept=application/json
+    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
+    Log To Console              *********************
+    Log To Console              response = ${resp}
+    Log To Console              body = ${resp.text}
+    ${response_json}    json.loads    ${resp.content}
+    ${generatedPlanId}=    Convert To String      ${response_json['id']}
+    Set Global Variable     ${generatedPlanId}
+    Log To Console              generatedPlanId = ${generatedPlanId}
+    Should Be Equal As Integers    ${resp.status_code}    201
+    Sleep    60s    Wait Plan Resolution
+
+GetPlanWithHpaSimple
+    [Documentation]    It sends a REST GET request to capture recommendations
+    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
+    &{headers}=      Create Dictionary    Content-Type=application/json  Accept=application/json
+    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
+    Log To Console              *********************
+    Log To Console              response = ${resp}
+    ${response_json}    json.loads    ${resp.content}
+    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
+    Set Global Variable     ${resultStatus}
+    Log To Console              resultStatus = ${resultStatus}
+    Log To Console              body = ${resp.text}
+    Should Be Equal As Integers    ${resp.status_code}    200
+    Should Be Equal    done    ${resultStatus}
+
+SendPlanWithHpaMandatory
+    [Documentation]    It sends a POST request to conductor
+    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
+    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa_requirements_mandatory.json
+    &{headers}=      Create Dictionary    Content-Type=application/json  Accept=application/json
+    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
+    Log To Console              *********************
+    Log To Console              response = ${resp}
+    Log To Console              body = ${resp.text}
+    ${response_json}    json.loads    ${resp.content}
+    ${generatedPlanId}=    Convert To String      ${response_json['id']}
+    Set Global Variable     ${generatedPlanId}
+    Log To Console              generatedPlanId = ${generatedPlanId}
+    Should Be Equal As Integers    ${resp.status_code}    201
+    Sleep    60s    Wait Plan Resolution
+
+GetPlanWithHpaMandatory
+    [Documentation]    It sends a REST GET request to capture recommendations
+    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
+    &{headers}=      Create Dictionary    Content-Type=application/json  Accept=application/json
+    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
+    Log To Console              *********************
+    Log To Console              response = ${resp}
+    ${response_json}    json.loads    ${resp.content}
+    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
+    Set Global Variable     ${resultStatus}
+    Log To Console              resultStatus = ${resultStatus}
+    Log To Console              body = ${resp.text}
+    Should Be Equal As Integers    ${resp.status_code}    200
+    Should Be Equal    done    ${resultStatus}
+
+SendPlanWithHpaOptionals
+    [Documentation]    It sends a POST request to conductor
+    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
+    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa_requirements_optionals.json
+    &{headers}=      Create Dictionary    Content-Type=application/json  Accept=application/json
+    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
+    Log To Console              *********************
+    Log To Console              response = ${resp}
+    Log To Console              body = ${resp.text}
+    ${response_json}    json.loads    ${resp.content}
+    ${generatedPlanId}=    Convert To String      ${response_json['id']}
+    Set Global Variable     ${generatedPlanId}
+    Log To Console              generatedPlanId = ${generatedPlanId}
+    Should Be Equal As Integers    ${resp.status_code}    201
+    Sleep    60s    Wait Plan Resolution
+
+GetPlanWithHpaOptionals
+    [Documentation]    It sends a REST GET request to capture recommendations
+    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
+    &{headers}=      Create Dictionary    Content-Type=application/json  Accept=application/json
+    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
+    Log To Console              *********************
+    Log To Console              response = ${resp}
+    ${response_json}    json.loads    ${resp.content}
+    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
+    Set Global Variable     ${resultStatus}
+    Log To Console              resultStatus = ${resultStatus}
+    Log To Console              body = ${resp.text}
+    Should Be Equal As Integers    ${resp.status_code}    200
+    Should Be Equal    done    ${resultStatus}
+
+SendPlanWithHpaUnmatched
+    [Documentation]    It sends a POST request to conductor
+    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
+    ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa_unmatched.json
+    &{headers}=      Create Dictionary    Content-Type=application/json  Accept=application/json
+    ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
+    Log To Console              *********************
+    Log To Console              response = ${resp}
+    Log To Console              body = ${resp.text}
+    ${response_json}    json.loads    ${resp.content}
+    ${generatedPlanId}=    Convert To String      ${response_json['id']}
+    Set Global Variable     ${generatedPlanId}
+    Log To Console              generatedPlanId = ${generatedPlanId}
+    Should Be Equal As Integers    ${resp.status_code}    201
+    Sleep    60s    Wait Plan Resolution
+
+GetPlanWithHpaUnmatched
+    [Documentation]    It sends a REST GET request to capture recommendations
+    Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
+    &{headers}=      Create Dictionary    Content-Type=application/json  Accept=application/json
+    ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
+    Log To Console              *********************
+    Log To Console              response = ${resp}
+    ${response_json}    json.loads    ${resp.content}
+    ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
+    Set Global Variable     ${resultStatus}
+    Log To Console              resultStatus = ${resultStatus}
+    Log To Console              body = ${resp.text}
+    Should Be Equal As Integers    ${resp.status_code}    200
+    Should Be Equal    not found    ${resultStatus}
 
 
 *** Keywords ***
diff --git a/test/csit/tests/portal/testsuites/test1.robot b/test/csit/tests/portal/testsuites/test1.robot
index 90aa107..0b61807 100644
--- a/test/csit/tests/portal/testsuites/test1.robot
+++ b/test/csit/tests/portal/testsuites/test1.robot
@@ -1,17 +1,17 @@
 *** Settings ***
 Documentation    This is RobotFrame work script
-Library    ExtendedSelenium2Library
-Library    OperatingSystem
-Library	          eteutils/RequestsClientCert.py
-Library 	      RequestsLibrary
-Library	          eteutils/UUID.py 
-Library         DateTime  
-Library           Collections
-Library           eteutils/OSUtils.py
-Library 		eteutils/StringTemplater.py
-Library     	XvfbRobot
-Resource        json_templater.robot
-
+Library		ExtendedSelenium2Library
+Library		OperatingSystem
+Library		eteutils/RequestsClientCert.py
+Library		RequestsLibrary
+Library		eteutils/UUID.py 
+Library		DateTime  
+Library		Collections
+Library		eteutils/OSUtils.py
+Library		eteutils/StringTemplater.py
+Library		String
+Library		XvfbRobot
+Resource	json_templater.robot
 
 *** Variables ***
 ${PORTAL_URL}		http://portal.api.simpledemo.onap.org:8989
@@ -40,16 +40,20 @@
 ${Test_LoginPwdCheck}    demo123456!
 ${Existing_User}    portal
 ${PORTAL_HEALTH_CHECK_PATH}        /ONAPPORTAL/portalApi/healthCheck
+${PORTAL_XDEMPAPP_REST_URL}        http://portal-sdk:8080/ONAPPORTALSDK/api/v2
 ${PORTAL_ASSETS_DIRECTORY}    ${CURDIR}
 ${GLOBAL_APPLICATION_ID}           robot-functional
 ${GLOBAL_PORTAL_ADMIN_USER}		demo
 ${GLOBAL_PORTAL_ADMIN_PWD}		demo123456!
+${AppAccountName}        testApp
+${AppUserName}           testApp
+${AppPassword}           testApp123!
 ${GLOBAL_MSO_STATUS_PATH}    /ecomp/mso/infra/orchestrationRequests/v2/
 ${GLOBAL_SELENIUM_BROWSER}        chrome
 ${GLOBAL_SELENIUM_BROWSER_CAPABILITIES}        Create Dictionary
 ${GLOBAL_SELENIUM_DELAY}          0
 ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT}        5
-${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}        15
+${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}        45
 ${GLOBAL_OPENSTACK_HEAT_SERVICE_TYPE}    orchestration
 ${GLOBAL_OPENSTACK_CINDER_SERVICE_TYPE}    volume
 ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE}    compute
@@ -63,7 +67,8 @@
 ${portal_Template}    ${CURDIR}/portal.template
 
 ${Result}    FALSE
-
+${td_id}    0
+${download_link_id}    0
 
 *** Test Cases ***
 
@@ -77,119 +82,134 @@
    # [Documentation]    ONAP Portal R1 functionality  test
     # Notification on ONAP Portal
     # Portal Application Account Management validation
+
+Portal Change REST URL Of X-DemoApp
+   [Documentation]    Portal Change REST URL Of X-DemoApp    
+      Portal Change REST URL
     
 Portal R1 Release for AAF
    [Documentation]    ONAP Portal R1 functionality for AAF test    
       Portal AAF new fields    
     
-#Create Microse service onboarding
-    #Portal admin Microservice Onboarding
+Create Microse service onboarding
+	Portal admin Microservice Onboarding
 	
-#Delete Microse service
-    #Portal admin Microservice Delete
+##Delete Microse service
+	##Portal admin Microservice Delete
    
-#Create Widget for all users
-    #Portal Admin Create Widget for All users 
+Create Widget for all users
+	Portal Admin Create Widget for All users 
 
-# Delete Widget for all users
-    # Portal Admin Delete Widget for All users    
+Delete Widget for all users
+	Portal Admin Delete Widget for All users    
      		
-#Create Widget for Application Roles
-    #Portal Admin Create Widget for Application Roles
+Create Widget for Application Roles
+	Portal Admin Create Widget for Application Roles
     
 #Delete Widget for Application Roles
-     #Portal Admin Delete Widget for Application Roles	
+	#Portal Admin Delete Widget for Application Roles	
 
-#Validate Functional Top Menu Get Access    
-     #Functional Top Menu Get Access  
+##EP Admin widget download
+	##Admin widget download
     
-#Validate Functional Top Menu Contact Us      
-     #Functional Top Menu Contact Us
+EP Admin widget layout reset
+	Reset widget layout option   
+
+Validate Functional Top Menu Get Access    
+	Functional Top Menu Get Access  
     
-#Edit Functional Menu    
-     #Portal admin Edit Functional menu
+Validate Functional Top Menu Contact Us      
+	Functional Top Menu Contact Us
     
+Edit Functional Menu    
+	Portal admin Edit Functional menu
     
-# Broadbond Notification functionality 
-     # ${AdminBroadCastMsg}=    Portal Admin Broadcast Notifications 
-     # set global variable    ${AdminBroadCastMsg}   
+Broadbond Notification functionality 
+	${AdminBroadCastMsg}=    Portal Admin Broadcast Notifications 
+	set global variable    ${AdminBroadCastMsg}   
    
-# Category Notification functionality 
-    # ${AdminCategoryMsg}=   Portal Admin Category Notifications
-    # set global variable    ${AdminCategoryMsg} 	
+Category Notification functionality 
+	${AdminCategoryMsg}=   Portal Admin Category Notifications
+	set global variable    ${AdminCategoryMsg} 	
          
-#Create a Test user for Application Admin -Test
-     #Portal admin Add Application admin User New user -Test
+Create a Test user for Application Admin -Test
+	Portal admin Add Application admin User New user -Test
 	 
-#Create a Test User for Apllication Admin
-		#Portal admin Add Application admin User New user	 
+Create a Test User for Apllication Admin
+	Portal admin Add Application admin User New user	 
 	 
-#Add Application Admin for Existing User Test user 
-     #Portal admin Add Application Admin Exiting User -APPDEMO	 
+Add Application Admin for Existing User Test user 
+	Portal admin Add Application Admin Exiting User -APPDEMO	 
  
-#Create a Test user for Standared User    
-     #Portal admin Add Standard User New user
+Create a Test user for Standared User    
+	Portal admin Add Standard User New user
     
-#Add Application Admin for Exisitng User   
-     #Portal admin Add Application Admin Exiting User 
+Add Application Admin for Exisitng User   
+	Portal admin Add Application Admin Exiting User 
             
-#Delete Application Admin for Exisitng User   
-     #Portal admin Delete Application Admin Existing User
+Delete Application Admin for Exisitng User   
+	Portal admin Delete Application Admin Existing User
     
-# Add Standard User Role for Existing user 
-     # Portal admin Add Standard User Existing user     
+#Add Standard User Role for Existing user 
+	#Portal admin Add Standard User Existing user     
     
-# Edit Standard User Role for Existing user
-     # Portal admin Edit Standard User Existing user 
+#Edit Standard User Role for Existing user
+	#Portal admin Edit Standard User Existing user 
     
- 
 #Delete Standard User Role for Existing user    
-     #Portal admin Delete Standard User Existing user 
-       
-Logout from Portal GUI as Portal Admin
-     Portal admin Logout from Portal GUI
+	#Portal admin Delete Standard User Existing user 
 
-# Application Admin user Test cases 
+#Add Account new account from App Account Management
+	#Portal admin Add New Account
+            
+#Delete Account new account from App Account Management
+	#Portal admin Delete Account
+
+Logout from Portal GUI as Portal Admin
+    Portal admin Logout from Portal GUI
+
+## Application Admin user Test cases 
 	 
-#Login To Portal GUI as APP Admin    
-     #Application admin Login To Portal GUI
+Login To Portal GUI as APP Admin    
+	Application admin Login To Portal GUI
         
 ##Navigate Functional Link as APP Admin  
-##      Application Admin Navigation Functional Menu   
+	##Application Admin Navigation Functional Menu   
     
-# Add Standard User Role for Existing user as APP Admin
-     # Application admin Add Standard User Existing user    
+#Add Standard User Role for Existing user as APP Admin
+	#Application admin Add Standard User Existing user    
     
-# Edit Standard User Role for Existing user as APP Admin
-     # Application admin Edit Standard User Existing user 
+#Edit Standard User Role for Existing user as APP Admin
+	#Application admin Edit Standard User Existing user 
     
-# Delete Standard User Role for Existing user as APP Admin   
-     # Application admin Delete Standard User Existing user 
+#Delete Standard User Role for Existing user as APP Admin   
+	#Application admin Delete Standard User Existing user 
 	 
-# #Navigate Application Link as APP Admin  
-# #     Application Admin Navigation Application Link Tab 	 
+#Navigate Application Link as APP Admin  
+	#Application Admin Navigation Application Link Tab 	 
 
-#Logout from Portal GUI as APP Admin   
-    #Application admin Logout from Portal GUI
+Logout from Portal GUI as APP Admin   
+	Application admin Logout from Portal GUI
    
-#Standard User Test cases
+##Standard User Test cases
    
-#Login To Portal GUI as Standared User    
-     #Standared user Login To Portal GUI   
+Login To Portal GUI as Standared User    
+	Standared user Login To Portal GUI   
 
 #Navigate Application Link as Standared User  
-#     Standared user Navigation Application Link Tab 
+	#Standared user Navigation Application Link Tab 
     
-##Navigate Functional Link as Standared User  
-##      Standared user Navigation Functional Menu     
-
+#Navigate Functional Link as Standared User  
+	#Standared user Navigation Functional Menu     
      
-# Broadcast Notifications Standared user
-         # Standared user Broadcast Notifications    ${AdminBroadCastMsg} 
+#Broadcast Notifications Standared user
+	#Standared user Broadcast Notifications    ${AdminBroadCastMsg} 
       
-# Category Notifications Standared user
-        # Standared user Category Notifications    ${AdminCategoryMsg}      
+#Category Notifications Standared user
+	#Standared user Category Notifications    ${AdminCategoryMsg}      
       
+Logout from Portal GUI as Standared User
+	Standared User Logout from Portal GUI
 
 Teardown  
      [Documentation]    Close All Open browsers     
@@ -231,6 +251,7 @@
      ${resp}=    Run Portal Get Request    ${PORTAL_HEALTH_CHECK_PATH}    
      Should Be Equal As Strings 	${resp.status_code} 	200
      Should Be Equal As Strings 	${resp.json()['statusCode']} 	200
+
 Run Portal Get Request
      [Documentation]    Runs Portal Get request
      [Arguments]    ${data_path}
@@ -259,7 +280,8 @@
     Input Password    xpath=//input[@ng-model='password']    ${GLOBAL_PORTAL_ADMIN_PWD}
     Click Link    xpath=//a[@id='loginBtn']
     Wait Until Page Contains Element    xpath=//img[@alt='Onap Logo']    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}    
-    Log    Logged in to ${PORTAL_URL}${PORTAL_ENV}
+	#Execute Javascript    document.getElementById('w-ecomp-footer').style.display = 'none'
+	Log    Logged in to ${PORTAL_URL}${PORTAL_ENV}
 
 Portal admin Go To Portal HOME
     [Documentation]    Naviage to Portal Home
@@ -272,10 +294,7 @@
     Wait Until Element Is Visible    xpath=//h1[@class='heading-page']    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} 
     Click Button    xpath=//button[@id='button-openAddNewApp']
     Click Button    xpath=(//button[@id='undefined'])[1]
-    #Click Button    xpath=//input[@id='datepicker-start']
-    
-
-    
+    #Click Button    xpath=//input[@id='datepicker-start']   
     
 Portal admin Add Application Admin Exiting User 
     [Documentation]    Naviage to Admins tab
@@ -458,8 +477,6 @@
     #Input Text    xpath=//input[@id='input-table-search']    ${Test_First_Name}
     #Element Text Should Be      xpath=(//span[contains(.,'appdemo')] )[1]   ${Test_First_Name} 
     
-    
-    
 Portal admin Add Application Admin Exiting User -APPDEMO 
     [Documentation]    Naviage to Admins tab
     Wait Until Element Is Visible    xpath=//a[@title='Admins']    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} 
@@ -501,8 +518,8 @@
      Click Button    xpath=//button[@id='next-button']
 #     Click Element    xpath=//*[@id='div-app-name-dropdown-Default']
 #     Click Element    xpath=//*[@id='div-app-name-Default']/following::input[@id='Standard-User-checkbox']
-     Click Element    xpath=//div[@id='div-app-name-dropdown-xDemo-App']
-     Click Element    xpath=//div[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox']
+     Click Element    xpath=//div[@id='app-select-Select roles1']
+     Click Element    xpath=//div[@id='app-select-Select roles1']/following::input[@id='Standard-User-checkbox']
      Set Selenium Implicit Wait    3000
      Click Button    xpath=//button[@id='new-user-save-button']
      Set Selenium Implicit Wait    3000
@@ -520,18 +537,41 @@
      Element Text Should Be      xpath=(.//*[@id='rowheader_t1_0'])[2]   Standard User     
      Set Selenium Implicit Wait    3000
          
-Portal admin Edit Standard User Existing user  
+Portal admin Edit Standard User Existing user
      [Documentation]    Naviage to Users tab
+     Click Link    xpath=//a[@title='Users']
+     Click Element    xpath=//input[@id='dropdown1']
+    #     Click Element    xpath=//li[contains(.,'Default')]
+#     Set Selenium Implicit Wait    3000
+     Click Element    xpath=//li[contains(.,'xDemo App')]
+#     Set Selenium Implicit Wait    3000
+     Input Text    xpath=//input[@id='input-table-search']    ${Existing_User}
+     Element Text Should Be      xpath=(.//*[@id='rowheader_t1_0'])[2]   Standard User     
      Click Element    xpath=(.//*[@id='rowheader_t1_0'])[2]
-#     Click Element    xpath=//*[@id='div-app-name-dropdown-Default']
-#     Click Element    xpath=//*[@id='div-app-name-Default']/following::input[@id='Standard-User-checkbox']
-#     Click Element    xpath=//*[@id='div-app-name-Default']/following::input[@id='Portal-Notification-Admin-checkbox']
-     Click Element    xpath=//*[@id='div-app-name-dropdown-xDemo-App']
-     Click Element    xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox']
-     Click Element    xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Portal-Notification-Admin-checkbox']
-#     Click Element    xpath=//*[@id='div-app-name-dropdown-SDC']
-#     Click Element    xpath=//*[@id='div-app-name-SDC']/following::input[@id='Standard-User-checkbox']
-#     Click Element    xpath=//*[@id='div-app-name-SDC']/following::input[@id='Portal-Notification-Admin-checkbox']
+    #    Click Element    xpath=//*[@id='div-app-name-dropdown-Default']
+    #    Click Element    xpath=//*[@id='div-app-name-Default']/following::input[@id='Standard-User-checkbox']
+    #    Click Element    xpath=//*[@id='div-app-name-Default']/following::input[@id='Portal-Notification-Admin-checkbox']
+     Click Element    xpath=//*[@id='app-select-Standard User1']
+     Click Element    xpath=//*[@id='app-select-Standard User1']/following::input[@id='Standard-User-checkbox']
+     Set Selenium Implicit Wait    3000
+     Click Button    xpath=//button[@id='new-user-save-button']
+     Set Selenium Implicit Wait    3000
+
+     Page Should Contain      Users
+	 Click Button	xpath=//button[@ng-click='toggleSidebar()']
+     Click Button    xpath=//button[@ng-click='users.openAddNewUserModal()']
+     Input Text    xpath=//input[@id='input-user-search']    ${Existing_User}
+     Click Button    xpath=//button[@id='button-search-users']
+     Click Element    xpath=//span[@id='result-uuid-0']
+     Click Button    xpath=//button[@id='next-button']
+     Click Element    xpath=//div[@id='app-select-Select roles1']
+     Click Element    xpath=//div[@id='app-select-Select roles1']/following::input[@id='System-Administrator-checkbox']
+     Set Selenium Implicit Wait    3000
+#     Click Element    xpath=//*[@id='app-select-Standard User1']
+#     Click Element    xpath=//*[@id='app-select-Standard User1']/following::input[@id='System-Administrator-checkbox']
+     # Click Element    xpath=//*[@id='div-app-name-dropdown-SDC']
+     # Click Element    xpath=//*[@id='div-app-name-SDC']/following::input[@id='Standard-User-checkbox']
+     # Click Element    xpath=//*[@id='div-app-name-SDC']/following::input[@id='Portal-Notification-Admin-checkbox']
      Set Selenium Implicit Wait    3000
      Click Button    xpath=//button[@id='new-user-save-button']
      Set Selenium Implicit Wait    3000
@@ -539,6 +579,7 @@
      #Click Button    xpath=//input[@id='dropdown1']
      #Click Element    xpath=//li[contains(.,'xDemo App')]
      Input Text    xpath=//input[@id='input-table-search']    ${Existing_User}
+    #     Element Text Should Be      xpath=(.//*[@id='rowheader_t1_0'])[2]   Portal Notification Admin
      Element Text Should Be      xpath=(.//*[@id='rowheader_t1_0'])[2]   System Administrator
      Set Selenium Implicit Wait    3000     
      
@@ -561,6 +602,7 @@
      
 Functional Top Menu Get Access     
     [Documentation]    Naviage to Support tab
+	Go To    ${PORTAL_HOME_URL}
      Click Link    xpath=//a[contains(.,'Support')]
      Mouse Over    xpath=//*[contains(text(),'Get Access')]
      Click Link    xpath=//a[contains(.,'Get Access')]
@@ -618,7 +660,8 @@
      Set Selenium Implicit Wait    3000
      Element Should Not Contain    xpath=(.//*[contains(.,'Design')]/following::ul[1])[1]      ONAP Test  
      Set Selenium Implicit Wait    3000     
-    
+     Click Image     xpath=//img[@alt='Onap Logo']
+     Set Selenium Implicit Wait    3000
         
 Portal admin Microservice Onboarding
      [Documentation]    Naviage to Edit Functional menu tab
@@ -658,7 +701,7 @@
      Input Text    xpath=//input[@name='username']    ${GLOBAL_PORTAL_ADMIN_USER}
      Input Text    xpath=//input[@name='password']    ${GLOBAL_PORTAL_ADMIN_PWD}
      Click Button    xpath=//button[@id='microservice-details-save-button']
-     Table Column Should Contain    xpath=//*[@table-data='serviceList']    1    TestMS
+     Execute Javascript	    window.scrollTo(0,document.body.scrollHeight);
      Click Element    xpath=(.//*[contains(text(),'TestMS')]/following::*[@ng-click='microserviceOnboarding.deleteService(rowData)'])[1]
      Click Button    xpath=//button[@id="div-confirm-ok-button"]
      Set Selenium Implicit Wait    3000
@@ -666,20 +709,21 @@
 Portal Admin Create Widget for All users 
     [Documentation]    Navigate to Create Widget menu tab
     ${WidgetAttachment}=    Catenate    ${PORTAL_ASSETS_DIRECTORY}//news_widget.zip
+    Wait until page contains Element    xpath=//a[@title='Widget Onboarding']     ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} 
     Click Link    xpath=//a[@title='Widget Onboarding']
 	Click Button	xpath=//button[@ng-click='toggleSidebar()']
     Click Button    xpath=//button[@id='widget-onboarding-button-add']
     Input Text    xpath=//*[@name='name']    ONAP-xDemo
     Input Text    xpath=//*[@name='desc']    ONAP xDemo
     Click Element    xpath=//*[@id='widgets-details-input-endpoint-url']
-    Scroll Element Into View    xpath=//li[contains(.,'Test Microservice')]
-    Click Element    xpath=//li[contains(.,'Test Microservice')]
+    Scroll Element Into View    xpath=//li[contains(.,'News Microservice')]
+    Click Element    xpath=//li[contains(.,'News Microservice')]
     Click Element    xpath=//*[contains(text(),'Allow all user access')]/preceding::input[@ng-model='widgetOnboardingDetails.widget.allUser'][1] 
     Choose File    xpath=//input[@id='widget-onboarding-details-upload-file']    ${WidgetAttachment}
     Click Button    xpath=//button[@id='widgets-details-save-button']
-    Wait Until Page Contains    ONAP-xDemo    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} 
+    Wait Until Page Contains      ONAP-xDemo    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} 
     Page Should Contain    ONAP-xDemo
-     Set Selenium Implicit Wait    3000
+    Set Selenium Implicit Wait    3000
     GO TO    ${PORTAL_HOME_PAGE}
     
     
@@ -711,12 +755,12 @@
     Input Text    xpath=//*[@name='name']    ONAP-xDemo 
     Input Text    xpath=//*[@name='desc']    ONAP xDemo 
     Click Element    xpath=//*[@id='widgets-details-input-endpoint-url'] 
-    Scroll Element Into View    xpath=//li[contains(.,'Test Microservice')] 
-    Click Element    xpath=//li[contains(.,'Test Microservice')] 
+    Scroll Element Into View    xpath=//li[contains(.,'News Microservice')] 
+    Click Element    xpath=//li[contains(.,'News Microservice')] 
     Click element    xpath=//*[@id="app-select-Select Applications"] 
     click element    xpath=//*[@id="xDemo-App-checkbox"] 
     Click element    xpath=//*[@name='desc'] 
-    click element    xpath=//*[@id="app-select-Select Roles"] 
+    click element    xpath=//*[@id="app-select-Select Roles0"] 
     click element    xpath=//*[@id="Standard-User-checkbox"] 
     Click element    xpath=//*[@name='desc'] 
     Scroll Element Into View    xpath=//input[@id='widget-onboarding-details-upload-file'] 
@@ -775,12 +819,12 @@
     
 Portal Admin Broadcast Notifications 
     [Documentation]   Portal Test Admin Broadcast Notifications 
-    
     ${CurrentDay}=    Get Current Date    increment=24:00:00    result_format=%m/%d/%Y 
     ${NextDay}=    Get Current Date    increment=48:00:00    result_format=%m/%d/%Y 
     ${CurrentDate}=    Get Current Date    increment=24:00:00    result_format=%m%d%y%H%M
     ${AdminBroadCastMsg}=    catenate    ONAP VID Broadcast Automation${CurrentDate} 
-    Click Image     xpath=//img[@alt='Onap Logo']
+    Go To    ${PORTAL_HOME_URL}
+	Click Image     xpath=//img[@alt='Onap Logo']
     Set Selenium Implicit Wait    3000
     Click Link    xpath=//*[@id="parent-item-User-Notifications"] 
     Wait until Element is visible    xpath=//*[@id="button-openAddNewApp"]    timeout=10 
@@ -793,8 +837,9 @@
     Wait until Element is visible    xpath=//*[@id="button-openAddNewApp"]    timeout=10 
     click element    xpath=//*[@id="megamenu-notification-button"] 
     click element    xpath=//*[@id="notification-history-link"] 
-    Wait until Element is visible    xpath=//*[@id="notification-history-table"]    timeout=10 
-    Table Column Should Contain    xpath=//*[@id="notification-history-table"]    2    ${AdminBroadCastMsg}
+# Notification bug, Uncomment the code when PORTAL-232 is fixed    
+    # Wait until Element is visible    xpath=//*[@id="notification-history-table"]    timeout=10 
+    # Table Column Should Contain    xpath=//*[@id="notification-history-table"]    2    ${AdminBroadCastMsg}
     Set Selenium Implicit Wait    3000     
     log    ${AdminBroadCastMsg} 
     [Return]     ${AdminBroadCastMsg}
@@ -823,21 +868,19 @@
     Wait until Element is visible    xpath=//*[@id="button-openAddNewApp"]    timeout=10 
     click element    xpath=//*[@id="megamenu-notification-button"] 
     click element    xpath=//*[@id="notification-history-link"] 
-    Wait until Element is visible    xpath=//*[@id="notification-history-table"]    timeout=10 
-    Table Column Should Contain    xpath=//*[@id="notification-history-table"]    2    ${AdminCategoryMsg}
+# Notification bug, Uncomment the code when PORTAL-232 is fixed
+    # Wait until Element is visible    xpath=//*[@id="notification-history-table"]    timeout=10 
+    # Table Column Should Contain    xpath=//*[@id="notification-history-table"]    2    ${AdminCategoryMsg}
     Set Selenium Implicit Wait    3000 
     log    ${AdminCategoryMsg}   
     [Return]     ${AdminCategoryMsg}  
     
-    
 Portal admin Logout from Portal GUI
     [Documentation]   Logout from Portal GUI
     Click Element    xpath=//div[@id='header-user-icon']
     Click Button    xpath=//button[contains(.,'Log out')]
     Title Should Be    Login
     
-    
-    
 Application admin Login To Portal GUI
     [Documentation]   Logs into Portal GUI
     # Setup Browser Now being managed by test case
@@ -876,7 +919,7 @@
      Click Element    xpath=(.//span[@id='tab-Home'])[1]
      
      
-Application admin Add Standard User Existing user   
+Application admin Add Standard User Existing user
      [Documentation]    Naviage to Users tab
      Click Link    xpath=//a[@title='Users']
      Page Should Contain      Users
@@ -887,9 +930,10 @@
      Click Element    xpath=//span[@id='result-uuid-0']
      Click Button    xpath=//button[@id='next-button']
      Click Element    xpath=//*[@id='div-app-name-dropdown-xDemo-App']
-     Set Selenium Implicit Wait    3000
      Click Element    xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox']
-     Set Selenium Implicit Wait    3000
+     # Click Element    xpath=//*[@id='div-app-name-dropdown-Default']
+     # Click Element    xpath=//*[@id='div-app-name-Default']/following::input[@id='Standard-User-checkbox']
+     # Set Selenium Implicit Wait    3000
      Click Button    xpath=//button[@id='new-user-save-button']
      Set Selenium Implicit Wait    3000
      #Set Browser Implicit Wait    ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT}
@@ -900,20 +944,21 @@
      Set Selenium Implicit Wait    3000
      Click Link    xpath=//a[@title='Users']
      Click Element    xpath=//input[@id='dropdown1']
+     #Click Element    xpath=//li[contains(.,'Default')]
      Click Element    xpath=//li[contains(.,'xDemo App')]
      Input Text    xpath=//input[@id='input-table-search']    ${Existing_User}
+    #     Element Text Should Be      xpath=(.//*[@id='rowheader_t1_0'])[2]   Account Administrator
      Element Text Should Be      xpath=(.//*[@id='rowheader_t1_0'])[2]   Standard User
      
-     
-Application admin Edit Standard User Existing user  
+Application admin Edit Standard User Existing user
      [Documentation]    Naviage to Users tab
      Click Element    xpath=(.//*[@id='rowheader_t1_0'])[2]
-#     Click Element    xpath=//*[@id='div-app-name-dropdown-Default']
-#     Click Element    xpath=//*[@id='div-app-name-Default']/following::input[@id='Standard-User-checkbox']
-#     Click Element    xpath=//*[@id='div-app-name-Default']/following::input[@id='Portal-Notification-Admin-checkbox']
+    #    Click Element    xpath=//*[@id='div-app-name-dropdown-Default']
+    #    Click Element    xpath=//*[@id='div-app-name-Default']/following::input[@id='Standard-User-checkbox']
+    #    Click Element    xpath=//*[@id='div-app-name-Default']/following::input[@id='Portal-Notification-Admin-checkbox']
      Click Element    xpath=//*[@id='div-app-name-dropdown-xDemo-App']
      Click Element    xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox']
-     Click Element    xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Portal-Notification-Admin-checkbox']
+     Click Element    xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='System-Administrator-checkbox']
      Set Selenium Implicit Wait    3000
      Click Button    xpath=//button[@id='new-user-save-button']
      Set Selenium Implicit Wait    3000
@@ -921,9 +966,9 @@
      #Click Button    xpath=//input[@id='dropdown1']
      #Click Element    xpath=//li[contains(.,'xDemo App')]
      Input Text    xpath=//input[@id='input-table-search']    ${Existing_User}
+    #     Element Text Should Be      xpath=(.//*[@id='rowheader_t1_0'])[2]   Account Administrator
      Element Text Should Be      xpath=(.//*[@id='rowheader_t1_0'])[2]   System Administrator
      
-     
 Application admin Delete Standard User Existing user    
      [Documentation]    Naviage to Users tab
      Click Element    xpath=(.//*[@id='rowheader_t1_0'])[2]
@@ -939,8 +984,6 @@
 	 #Click Image     xpath=//img[@alt='Onap Logo']
      Set Selenium Implicit Wait    3000
      
-     
-     
 Application admin Logout from Portal GUI
     [Documentation]   Logout from Portal GUI
     Click Element    xpath=//div[@id='header-user-icon']
@@ -948,10 +991,6 @@
     Click Button    xpath=//button[contains(text(),'Log out')]
 	#Set Selenium Implicit Wait    3000
     Title Should Be    Login  
-
-	
-	
-    
     
 Standared user Login To Portal GUI
     [Documentation]   Logs into Portal GUI
@@ -970,7 +1009,6 @@
     Wait Until Page Contains Element    xpath=//img[@alt='Onap Logo']    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}    
     Log    Logged in to ${PORTAL_URL}${PORTAL_ENV}       
      
- 
 Standared user Navigation Application Link Tab    
     [Documentation]   Logs into Portal GUI as application admin
     #Portal admin Go To Portal HOME
@@ -1008,7 +1046,6 @@
     Table Column Should Contain    xpath=//*[@id='notification-history-table']    2    ${AdminCategoryMsg} 
     log    ${AdminCategoryMsg} 
     
-    
 Standared user Logout from Portal GUI
     [Documentation]   Logout from Portal GUI
     Click Element    xpath=//div[@id='header-user-icon']
@@ -1016,35 +1053,48 @@
     #Confirm Action	
     Title Should Be    Login     
         
-     
-     
-     
-Tear Down     
+Portal admin Add New Account
+    Click Link    //*[@id="parent-item-App-Account-Management"]
+    Click Button    xpath=//button[@ng-click='toggleSidebar()']
+    Set Selenium Implicit Wait    3000
+    Click Button    //*[@id="account-onboarding-button-add"]
+    Set Selenium Implicit Wait    3000
+    Input Text    //*[@id="account-details-input-name"]    ${AppAccountName}
+    Input Text    //*[@id="account-details-input-username"]    ${AppUserName}
+    Input Text    //*[@id="account-details-input-password"]    ${AppPassword}
+    Input Text    //*[@id="account-details-input-repassword"]    ${AppPassword}
+    #    Click Button    xpath=//*[@ng-click='accountAddDetails.saveChanges()']
+    #    #Click Button    xpath=//button[@ng-click='admins.openAddNewAdminModal()']
+    #account-details-next-button
+    Click Button    xpath=//button[@ng-click='accountAddDetails.saveChanges()']
+         
+Portal admin Delete Account
+    Click Link    //*[@id="parent-item-App-Account-Management"]
+    Click Button    xpath=//button[@ng-click='toggleSidebar()']
+    Set Selenium Implicit Wait    3000
+    Click Button    //*[@id="account-onboarding-button-add"]
+    Set Selenium Implicit Wait    3000
+         
+Tear Down
     [Documentation]   Close all browsers
     Close All Browsers
 	
-	
 Enhanced Notification on ONAP Portal
     [Documentation]     Runs portal Post request
     [Arguments]     ${data_path}     ${data}
-#   Log     Creating session         ${GLOBAL_PORTAL_SERVER_URL}
+    #   Log     Creating session         ${GLOBAL_PORTAL_SERVER_URL}
     ${session}=         Create Session     portal         ${PORTAL_URL}
     ${headers}=     Create Dictionary     Accept=application/json    Content-Type=application/json    Authorization=Basic amlyYTpfcGFzcw==    username=jira    password=_pass
     ${resp}=     Post Request     portal     ${data_path}     data=${data}     headers=${headers}
-#    Log     Received response from portal     ${resp.text}
+    #    Log     Received response from portal     ${resp.text}
     [Return]     ${resp}    
-    
-
- 
+     
 Notification on ONAP Portal
     [Documentation]     Create Config portal
     ${configportal}=     Create Dictionary     jira_id=${jira}
     ${output} =     Fill JSON Template File     ${portal_Template}     ${configportal}
     ${post_resp} =     Enhanced Notification on ONAP Portal     ${RESOURCE_PATH}     ${output}
     Should Be Equal As Strings     ${post_resp.status_code}     200
- 
-    
-   
     
 Portal Application Account Management
      [Documentation]    Naviage to Application Account Management tab
@@ -1057,7 +1107,7 @@
      Click Element    xpath=//div[@ng-click='accountAddDetails.saveChanges()']
      Element Text Should Be    xpath=//*[@table-data='serviceList']    JIRA  
      
-Portal Application Account Management validation   
+Portal Application Account Management validation
         [Documentation]    Naviage to user notification tab  
      Click Link    xpath=//a[@id='parent-item-User-Notifications']
      click element    xpath=//*[@id="megamenu-notification-button"] 
@@ -1066,13 +1116,40 @@
      Table Column Should Contain    xpath=//*[@id="notification-history-table"]    1    JIRA
      
      
-Portal AAF new fields    
+Portal AAF new fields
      [Documentation]    Naviage to user Application details tab 
     Click Link    xpath=//a[@title='Application Onboarding']
     Click Element    xpath=//td[contains(.,'xDemo App')]
     Page Should Contain    Name Space
     Page Should Contain    Centralized
 	Click Element    xpath=//button[@id='button-notification-cancel']
+
+Portal Change REST URL
+    [Documentation]    Naviage to user Application details tab 
+    Click Link    xpath=//a[@title='Application Onboarding']
+    Click Element    xpath=//td[contains(.,'xDemo App')]
+    Input Text    xpath=//input[@name='restUrl']    ${PORTAL_XDEMPAPP_REST_URL}
+	Click Element    xpath=//button[@id='button-save-app']
 	
-	
-	
+Admin widget download   
+    Go To    ${PORTAL_HOME_URL}
+	Wait until page contains Element    xpath=//a[@title='Widget Onboarding']     ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
+    click Link  xpath=//a[@title='Widget Onboarding']
+    Wait until page contains Element    xpath=//table[@class='ng-scope']
+    ${td_id}=  get element attribute    xpath=//*[contains(text(),'Events')]@id
+    log    ${td_id}
+    ${test}=    Get Substring     ${td_id}   -1
+    log    ${test}
+    ${download_link_id}=    Catenate    'widget-onboarding-div-download-widget-${test}'
+    click Element  xpath=//*[@id=${download_link_id}]
+
+Reset widget layout option
+    Go To    ${PORTAL_HOME_URL}
+    Wait Until Page Contains Element    xpath=//div[@id='widget-boarder']     ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
+    Execute Javascript      document.getElementById('widgets').scrollTo(0,1400)
+    Wait Until Page Contains Element     xpath=//*[@id='widget-gridster-Events-icon']    ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
+    Execute Javascript      document.getElementById('widgets').scrollTo(0,1800)
+    Drag And Drop By Offset   xpath=//*[@id='widget-gridster-Events-icon']   500  500    
+    Execute Javascript      document.getElementById('widgets').scrollTo(0,document.getElementById('widgets').scrollHeight);
+    Execute Javascript      document.getElementById('dashboardDefaultPreference').click()
+    Execute Javascript      document.getElementById('div-confirm-ok-button').click()
diff --git a/test/ete/labs/gwu/apt-proxy.sh b/test/ete/labs/gwu/apt-proxy.sh
index d69415b..e1c4f08 100755
--- a/test/ete/labs/gwu/apt-proxy.sh
+++ b/test/ete/labs/gwu/apt-proxy.sh
@@ -13,6 +13,3 @@
             Acquire::https::Proxy "DIRECT";\
             EOF\
             apt-get -y update' $1
-
-# don't use insecure docker proxy in dcae
-perl -i -0pe 's/(?<=dcae_c_vm:)(.*?)\{ get_param: nexus_docker_repo \}/$1"nexus3.onap.org:10001"/s' $1
diff --git a/test/ete/labs/huawei/apt-proxy.sh b/test/ete/labs/huawei/apt-proxy.sh
index 37018ca..b952993 100755
--- a/test/ete/labs/huawei/apt-proxy.sh
+++ b/test/ete/labs/huawei/apt-proxy.sh
@@ -11,6 +11,3 @@
             Acquire::https::Proxy "DIRECT";\
             EOF\
             apt-get -y update' $1
-
-# don't use insecure docker proxy in dcae
-perl -i -0pe 's/(?<=dcae_c_vm:)(.*?)\{ get_param: nexus_docker_repo \}/$1"nexus3.onap.org:10001"/s' $1
diff --git a/test/ete/labs/tlab/apt-proxy.sh b/test/ete/labs/tlab/apt-proxy.sh
index f2094ee..3cf5474 100755
--- a/test/ete/labs/tlab/apt-proxy.sh
+++ b/test/ete/labs/tlab/apt-proxy.sh
@@ -11,6 +11,3 @@
             Acquire::https::Proxy "DIRECT";\
             EOF\
             apt-get -y update' $1
-
-# don't use insecure docker proxy in dcae
-perl -i -0pe 's/(?<=dcae_c_vm:)(.*?)\{ get_param: nexus_docker_repo \}/$1"nexus3.onap.org:10001"/s' $1
diff --git a/test/ete/labs/tlab/onap-openstack-template.env b/test/ete/labs/tlab/onap-openstack-template.env
index 3da2ca9..3b702c4 100644
--- a/test/ete/labs/tlab/onap-openstack-template.env
+++ b/test/ete/labs/tlab/onap-openstack-template.env
@@ -92,6 +92,7 @@
   music_ip_addr: 10.0.15.1
   oof_ip_addr: 10.0.16.1
   aaf_ip_addr: 10.0.13.1
+  sms_ip_addr: 10.0.13.2
   nbi_ip_addr: 10.0.17.1
 
   ###########################
diff --git a/test/ete/labs/windriver/apt-proxy.sh b/test/ete/labs/windriver/apt-proxy.sh
index 54b15bb..365b5d0 100755
--- a/test/ete/labs/windriver/apt-proxy.sh
+++ b/test/ete/labs/windriver/apt-proxy.sh
@@ -11,6 +11,3 @@
             Acquire::https::Proxy "DIRECT";\
             EOF\
             apt-get -y update' $1
-
-# don't use insecure docker proxy in dcae
-perl -i -0pe 's/(?<=dcae_c_vm:)(.*?)\{ get_param: nexus_docker_repo \}/$1"nexus3.onap.org:10001"/s' $1
diff --git a/test/ete/labs/windriver/onap-openstack-template.env b/test/ete/labs/windriver/onap-openstack-template.env
index 6f4ea87..da4b0e7 100644
--- a/test/ete/labs/windriver/onap-openstack-template.env
+++ b/test/ete/labs/windriver/onap-openstack-template.env
@@ -92,6 +92,7 @@
   music_ip_addr: 10.0.15.1
   oof_ip_addr: 10.0.16.1
   aaf_ip_addr: 10.0.13.1
+  sms_ip_addr: 10.0.13.2
   nbi_ip_addr: 10.0.17.1
 
   ###########################
diff --git a/test/ete/scripts/install_openstack_cli.sh b/test/ete/scripts/install_openstack_cli.sh
index 8f15296..842034e 100755
--- a/test/ete/scripts/install_openstack_cli.sh
+++ b/test/ete/scripts/install_openstack_cli.sh
@@ -24,10 +24,10 @@
     ONAP_VENV=$(mktemp -d --suffix=_onap_venv)
     virtualenv ${ONAP_VENV}
     source ${ONAP_VENV}/bin/activate
-    
+
     pip install --upgrade pip
-    pip install openstacksdk==0.9.19 python-openstackclient python-heatclient python-designateclient
-    
+    pip install python-openstackclient python-heatclient python-designateclient
+
     echo "ONAP_VENV=${ONAP_VENV}" >> $WORKSPACE/env.properties
 fi
 echo "ONAP_VENV=${ONAP_VENV}"
diff --git a/version-manifest/pom.xml b/version-manifest/pom.xml
index b2102d5..22634cb 100644
--- a/version-manifest/pom.xml
+++ b/version-manifest/pom.xml
@@ -121,6 +121,19 @@
               </arguments>
             </configuration>
           </execution>
+          <execution>
+            <id>check-docker-images-exist</id>
+            <phase>validate</phase>
+            <goals>
+              <goal>exec</goal>
+            </goals>
+            <configuration>
+              <arguments>
+                <argument>${project.basedir}/src/main/scripts/check-docker-manifest.sh</argument>
+                <argument>${project.basedir}/src/main/resources/docker-manifest.csv</argument>
+              </arguments>
+            </configuration>
+          </execution>
         </executions>
       </plugin>
     </plugins>
diff --git a/version-manifest/src/main/resources/docker-manifest.csv b/version-manifest/src/main/resources/docker-manifest.csv
index 15d1a0a..c4d5b60 100644
--- a/version-manifest/src/main/resources/docker-manifest.csv
+++ b/version-manifest/src/main/resources/docker-manifest.csv
@@ -1,34 +1,37 @@
 image,tag
-onap/aaf,2.1.0-SNAPSHOT
+onap/aaf/aaf_service,2.1.0-SNAPSHOT
+onap/aaf/sms,latest
 onap/aai-resources,1.2-STAGING-latest
 onap/aai-traversal,1.2-STAGING-latest
 onap/aai/esr-gui,1.1.0-SNAPSHOT
 onap/aai/esr-server,1.1.0-SNAPSHOT
 onap/admportal-sdnc-image,1.3-STAGING-latest
 onap/appc-image,1.3.0-SNAPSHOT-latest
-onap/ccsdk-dgbuilder-image,0.2.1-SNAPSHOT
-onap/ccsdk-odl-image,0.2.1-SNAPSHOT
-onap/ccsdk-odlsli-image,0.2.1-SNAPSHOT
+onap/ccsdk-dgbuilder-image,0.2-STAGING-latest
+onap/ccsdk-odl-image,0.2-STAGING-latest
+onap/ccsdk-odlsli-image,0.2-STAGING-latest
 onap/clamp,2.0-STAGING-latest
-onap/cli,v1.1.0
+onap/cli,2.0-STAGING-latest
 onap/data-router,1.2-STAGING-latest
-onap/dmaap/dmaap-mr,1.0.1
+onap/dmaap/buscontroller,latest
+onap/dmaap/dmaap-mr,1.1.4
 onap/externalapi/nbi,latest
-onap/holmes/engine-management,v1.0.0
-onap/holmes/rule-management,v1.0.0
+onap/holmes/engine-management,latest
+onap/holmes/rule-management,latest
 onap/model-loader,1.2-STAGING-latest
 onap/modeling/javatoscachecker,latest
 onap/msb/msb_apigateway,1.1.0-STAGING-latest
 onap/msb/msb_discovery,1.1.0-STAGING-latest
-onap/multicloud/framework,v1.0.0
-onap/multicloud/openstack-newton,1.0.0-SNAPSHOT
-onap/multicloud/openstack-ocata,1.0.0-SNAPSHOT
-onap/multicloud/openstack-windriver,1.0.0-SNAPSHOT
-onap/multicloud/vio,1.0.0-SNAPSHOT
+onap/multicloud/framework,1.1.2-STAGING
+onap/multicloud/openstack-newton,1.1.2-SNAPSHOT
+onap/multicloud/openstack-ocata,1.1.2-SNAPSHOT
+onap/multicloud/openstack-windriver,1.1.2-SNAPSHOT
+onap/multicloud/vio,1.1.2-STAGING
 onap/multicloud/vio-vesagent,1.0.0
-onap/music,latest
-onap/oof,latest
-onap/oom/kube2msb,1.0.0
+onap/music/music,latest
+onap/oom/kube2msb,v1.0.0
+onap/optf-has,latest
+onap/optf-osdf,latest
 onap/org.onap.dcaegen2.collectors.snmptrap,latest
 onap/org.onap.dcaegen2.collectors.ves.vescollector,latest
 onap/org.onap.dcaegen2.deployments.bootstrap,1.1.2
@@ -44,8 +47,8 @@
 onap/org.onap.dcaegen2.platform.servicechange-handler,latest
 onap/org.onap.dcaegen2.services.heartbeat,latest
 onap/org.onap.dcaegen2.services.prh.prh-app-server,latest
-onap/policy-drools,1.2-STAGING-latest
-onap/policy-pe,1.2-STAGING-latest
+onap/policy-drools,1.2.0
+onap/policy-pe,1.2.0
 onap/portal-app,2.1-STAGING-latest
 onap/portal-db,2.1-STAGING-latest
 onap/portal-wms,2.1-STAGING-latest
@@ -55,6 +58,7 @@
 onap/sdc-kibana,1.2-STAGING-latest
 onap/sdc-sanity,1.2-STAGING-latest
 onap/sdc/sdc-workflow-designer,1.1.0-SNAPSHOT-STAGING-latest
+onap/sdnc-ansible-server-image,1.3-STAGING-latest
 onap/sdnc-dmaap-listener-image,1.3-STAGING-latest
 onap/sdnc-image,1.3-STAGING-latest
 onap/sdnc-ueb-listener-image,1.3-STAGING-latest
@@ -82,6 +86,6 @@
 onap/vfc/ztevmanagerdriver,1.0.3-STAGING-latest
 onap/vfc/ztevnfmdriver,1.1.0-STAGING-latest
 onap/vid,1.2.1
-onap/vnfsdk/refrepo,1.0.0
-onap/vnfsdk/refrepo-postgres,1.0.0
+onap/vnfsdk/refrepo,1.1-STAGING-latest
+onap/vnfsdk/refrepo/postgres,latest
 openecomp/mso,1.2.1
diff --git a/version-manifest/src/main/resources/java-manifest.csv b/version-manifest/src/main/resources/java-manifest.csv
index 4bed11c..8210eb3 100644
--- a/version-manifest/src/main/resources/java-manifest.csv
+++ b/version-manifest/src/main/resources/java-manifest.csv
@@ -55,26 +55,34 @@
 org.onap.aai.sparky-fe,sparky-fe,1.2.0
 org.onap.aai.traversal,aai-traversal,1.2.0
 org.onap.aai.traversal,traversal,1.2.0
-org.onap.ccsdk.parent,odlparent-carbon-sr1,0.0.2
-org.onap.ccsdk.sli.adaptors,aai-service-provider,0.1.0
-org.onap.ccsdk.sli.adaptors,mdsal-resource-provider,0.1.0
-org.onap.ccsdk.sli.adaptors,resource-assignment-provider,0.1.0
-org.onap.ccsdk.sli.adaptors,sql-resource-provider,0.1.0
-org.onap.ccsdk.sli.core,dblib-provider,0.1.2
-org.onap.ccsdk.sli.core,filters-provider,0.1.2
-org.onap.ccsdk.sli.core,sli-common,0.1.2
-org.onap.ccsdk.sli.core,sli-provider,0.1.2
-org.onap.ccsdk.sli.core,sli-recording,0.1.2
-org.onap.ccsdk.sli.core,sliPluginUtils-provider,0.1.2
-org.onap.ccsdk.sli.core,sliapi-provider,0.1.2
-org.onap.ccsdk.sli.core,utils-provider,1.0.0
-org.onap.ccsdk.sli.northbound,asdcApi-provider,0.1.0
-org.onap.ccsdk.sli.northbound,dataChange-provider,0.1.0
-org.onap.ccsdk.sli.northbound,dmaap-listener,0.1.0
-org.onap.ccsdk.sli.northbound,ueb-listener,0.1.0
-org.onap.ccsdk.sli.plugins,fabric-discovery-plugin-provider,0.1.0
-org.onap.ccsdk.sli.plugins,properties-node-provider,0.1.0
-org.onap.ccsdk.sli.plugins,restapi-call-node-provider,0.1.0
+org.onap.ccsdk.parent,binding-parent,1.0.1
+org.onap.ccsdk.parent,bundle-parent,1.0.1
+org.onap.ccsdk.parent,feature-repo-parent,1.0.1
+org.onap.ccsdk.parent,karaf4-parent,1.0.1
+org.onap.ccsdk.parent,mdsal-it-parent,1.0.1
+org.onap.ccsdk.parent,odlparent,1.0.1
+org.onap.ccsdk.parent,odlparent-lite,1.0.1
+org.onap.ccsdk.parent,single-feature-parent,1.0.1
+org.onap.ccsdk.sli.adaptors,aai-service-provider,0.2.1
+org.onap.ccsdk.sli.adaptors,mdsal-resource-provider,0.2.1
+org.onap.ccsdk.sli.adaptors,resource-assignment-provider,0.2.1
+org.onap.ccsdk.sli.adaptors,sql-resource-provider,0.2.1
+org.onap.ccsdk.sli.core,dblib-provider,0.2.1
+org.onap.ccsdk.sli.core,filters-provider,0.2.1
+org.onap.ccsdk.sli.core,sli-common,0.2.1
+org.onap.ccsdk.sli.core,sli-provider,0.2.1
+org.onap.ccsdk.sli.core,sli-recording,0.2.1
+org.onap.ccsdk.sli.core,sliPluginUtils-provider,0.2.1
+org.onap.ccsdk.sli.core,sliapi-provider,0.2.1
+org.onap.ccsdk.sli.core,utils-provider,0.2.1
+org.onap.ccsdk.sli.northbound,asdcApi-provider,0.2.1
+org.onap.ccsdk.sli.northbound,dataChange-provider,0.2.1
+org.onap.ccsdk.sli.northbound,dmaap-listener,0.2.1
+org.onap.ccsdk.sli.northbound,lcm-provider,0.2.1
+org.onap.ccsdk.sli.northbound,ueb-listener,0.2.1
+org.onap.ccsdk.sli.plugins,fabric-discovery-plugin-provider,0.2.1
+org.onap.ccsdk.sli.plugins,properties-node-provider,0.2.1
+org.onap.ccsdk.sli.plugins,restapi-call-node-provider,0.2.1
 org.onap.ccsdk.storage.pgaas,pgaas,1.0.0
 org.onap.ccsdk.utils,utils,1.0.0
 org.onap.clamp.clds.clamp,clamp,2.0.0
@@ -129,10 +137,10 @@
 org.onap.multicloud.openstack.vmware,vesagent,1.0.0
 org.onap.multicloud.openstack.vmware,vio,1.0.0
 org.onap.oparent,oparent,1.1.0
-org.onap.policy.common,common-modules,2.1.0
-org.onap.policy.drools-applications,drools-pdp-apps,2.1.0
-org.onap.policy.drools-pdp,drools-pdp,2.1.0
-org.onap.policy.engine,PolicyEngineSuite,2.1.0
+org.onap.policy.common,common-modules,1.2.0
+org.onap.policy.drools-applications,drools-pdp-apps,1.2.0
+org.onap.policy.drools-pdp,drools-pdp,1.2.0
+org.onap.policy.engine,PolicyEngineSuite,1.2.0
 org.onap.portal.sdk,epsdk-analytics,1.3.2
 org.onap.portal.sdk,epsdk-app-common,1.3.2
 org.onap.portal.sdk,epsdk-app-overlay,1.3.2
@@ -140,9 +148,9 @@
 org.onap.portal.sdk,epsdk-fw,1.3.2
 org.onap.portal.sdk,epsdk-workflow,1.3.2
 org.onap.sdc.sdc-workflow-designer,sdc-workflow-designer,1.0.0
-org.onap.sdnc.northbound,generic-resource-api.provider,1.2.2
-org.onap.sdnc.northbound,vnfapi-provider,1.2.2
-org.onap.sdnc.northbound,vnftools-provider,1.2.2
+org.onap.sdnc.northbound,generic-resource-api.provider,1.3.1
+org.onap.sdnc.northbound,vnfapi-provider,1.3.1
+org.onap.sdnc.northbound,vnftools-provider,1.3.1
 org.onap.usecase-ui,usecaseui-common,1.0.1
 org.onap.usecase-ui.server,usecase-ui-server,1.0.1
 org.onap.vfc.gvnfm.vnflcm.lcm,vfc-gvnfm-vnflcm-lcm,1.0.1
@@ -164,9 +172,9 @@
 org.onap.vnfsdk.refrepo,vnf-sdk-marketplace-deployment,1.1.0
 org.onap.vnfsdk.refrepo,vnfmarket,1.1.0
 org.onap.vnfsdk.refrepo,vnfmarket-deployment,1.1.0
-org.onap.vnfsdk.validation,csarvalidation-deployment,1.1.0
-org.onap.vnfsdk.validation,validation,1.1.1
-org.onap.vnfsdk.validation,validation-csar,1.1.1
+org.onap.vnfsdk.validation,csarvalidation-deployment,1.1.1
+org.onap.vnfsdk.validation,validation,1.1.2
+org.onap.vnfsdk.validation,validation-csar,1.1.2
 org.onap.vnfsdk.ves-agent,evel_javalib2,1.1.0
 org.openecomp.appc,appc-aai-client-provider,1.2.0
 org.openecomp.appc,appc-ansible-adapter-bundle,1.2.0
diff --git a/version-manifest/src/main/scripts/check-docker-manifest.sh b/version-manifest/src/main/scripts/check-docker-manifest.sh
new file mode 100755
index 0000000..9064c83
--- /dev/null
+++ b/version-manifest/src/main/scripts/check-docker-manifest.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+if [ -z "$WORKSPACE" ]; then
+    export WORKSPACE=`git rev-parse --show-toplevel`
+fi
+
+NEXUS_PREFIX="https://nexus3.onap.org/repository/docker.public/v2"
+
+err=0
+for line in $(tail -n +2 $1); do
+    image=$(echo $line | cut -d , -f 1)
+    tag=$(echo $line | cut -d , -f 2)
+    tags=$(curl -s $NEXUS_PREFIX/$image/tags/list | jq -r '.tags[]')
+    echo "$tags" | grep -q "^$tag\$"
+    if [ $? -ne 0 ]; then
+        echo "[ERROR] $image:$tag not found"
+        echo "$tags" | sed 's/^/  /'
+        (( err++ ))
+    fi
+done
+exit $err
diff --git a/version-manifest/src/main/scripts/check-sorted.sh b/version-manifest/src/main/scripts/check-sorted.sh
index d926409..fa120f3 100755
--- a/version-manifest/src/main/scripts/check-sorted.sh
+++ b/version-manifest/src/main/scripts/check-sorted.sh
@@ -3,7 +3,7 @@
 retval=$?
 if [ $retval -ne 0 ]; then
     echo
-    echo "ERROR: $1 is not properly sorted.  Please sort it with the following commands:"
+    echo "[ERROR] $1 is not properly sorted.  Please sort it with the following commands:"
     echo
     echo "  LC_ALL=C sort < $1 > $1.tmp"
     echo "  mv $1.tmp $1"