[SEBA-285] Read deployment configs from robot scripts

Change-Id: I47977a1a85bc2eebf7cd139c4f7e072ee909543c
diff --git a/Jenkinsfile-attworkflow-build b/Jenkinsfile-attworkflow-build
index 97f3de9..9d315e6 100644
--- a/Jenkinsfile-attworkflow-build
+++ b/Jenkinsfile-attworkflow-build
@@ -18,7 +18,7 @@
             stage ("Parse deployment configuration file") {
                 sh returnStdout: true, script: "rm -rf ${configBaseDir}"
                 sh returnStdout: true, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
-                deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yml"
+                deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
             }
             stage('Clean up') {
                 timeout(10) {
diff --git a/Jenkinsfile-attworkflow-test b/Jenkinsfile-attworkflow-test
index 6e04f98..db49939 100644
--- a/Jenkinsfile-attworkflow-test
+++ b/Jenkinsfile-attworkflow-test
@@ -18,12 +18,13 @@
             stage ("Parse deployment configuration file") {
                 sh returnStdout: true, script: "rm -rf ${configBaseDir}"
                 sh returnStdout: true, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
-                deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yml"
+                deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
             }
             stage('Download Cord-Tester Repo') {
                 timeout(2) {
                     sh returnStdout: true, script: """
-                    rm -rf cord-tester
+                    rm -rf helm-charts cord-tester
+                    git clone -b ${branch} ${cordRepoUrl}/helm-charts
                     git clone -b ${branch} ${cordRepoUrl}/cord-tester
                     """
                 }
@@ -47,7 +48,7 @@
                     sh """
                     export KUBECONFIG=$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf
                     cd $WORKSPACE/cord-tester/src/test/cord-api/Tests/
-                    pybot -d Log -T -l log-ATT_Test001 -v src_ip:${deployment_config.hosts.src.ip} -v src_gateway:${deployment_config.hosts.src.dp_iface_gateway} -v src_user:${deployment_config.hosts.src.user} -v src_pass:${deployment_config.hosts.src.pass} -v src_iface:${deployment_config.hosts.src.dp_iface_name} -v dst_ip:${deployment_config.hosts.dst.ip} -v dst_user:${deployment_config.hosts.dst.user} -v dst_pass:${deployment_config.hosts.dst.pass} -v dst_gateway:${deployment_config.hosts.dst.dp_iface_gateway} -v dst_dp_iface:${deployment_config.hosts.dst.dp_iface_name} -v dst_dp_ip:${deployment_config.hosts.dst.dp_iface_ip_qinq} -v olt_ip:${deployment_config.olts[0].ip} -v olt_user:${deployment_config.olts[0].user} -v olt_pass:${deployment_config.olts[0].pass} -v kubernetes_conf:$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf -v kubernetes_yml:$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.yml WorkflowValidations/ATT_Test001.txt || true
+                    pybot -d Log -T -l log-ATT_Test001 -V $WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v HELM_CHARTS_DIR:$WORKSPACE/helm-charts WorkflowValidations/ATT_Test001.robot || true
                     """
                 }
             }
diff --git a/Jenkinsfile-rcordlite-topdown-build b/Jenkinsfile-rcordlite-topdown-build
index 113ae91..d1eabf1 100644
--- a/Jenkinsfile-rcordlite-topdown-build
+++ b/Jenkinsfile-rcordlite-topdown-build
@@ -18,7 +18,7 @@
             stage ("Parse deployment configuration file") {
                 sh returnStdout: true, script: "rm -rf ${configBaseDir}"
                 sh returnStdout: true, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
-                deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yml"
+                deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
             }
             stage('Clean up') {
                 timeout(10) {
diff --git a/Jenkinsfile-rcordlite-topdown-test b/Jenkinsfile-rcordlite-topdown-test
index cd87e1b..c6623b2 100644
--- a/Jenkinsfile-rcordlite-topdown-test
+++ b/Jenkinsfile-rcordlite-topdown-test
@@ -18,7 +18,7 @@
             stage ("Parse deployment configuration file") {
                 sh returnStdout: true, script: "rm -rf ${configBaseDir}"
                 sh returnStdout: true, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
-                deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yml"
+                deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
             }
 
             stage('Download cord-tester repo') {
diff --git a/Jenkinsfile-rcordlite-zerotouch-build b/Jenkinsfile-rcordlite-zerotouch-build
index 2683b74..e413ff7 100644
--- a/Jenkinsfile-rcordlite-zerotouch-build
+++ b/Jenkinsfile-rcordlite-zerotouch-build
@@ -18,7 +18,7 @@
             stage ("Parse deployment configuration file") {
                 sh returnStdout: true, script: "rm -rf ${configBaseDir}"
                 sh returnStdout: true, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
-                deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yml"
+                deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
             }
             stage('Clean up') {
                 timeout(10) {
diff --git a/Jenkinsfile-rcordlite-zerotouch-test b/Jenkinsfile-rcordlite-zerotouch-test
index 67001dc..aa5063a 100644
--- a/Jenkinsfile-rcordlite-zerotouch-test
+++ b/Jenkinsfile-rcordlite-zerotouch-test
@@ -18,7 +18,7 @@
             stage ("Parse deployment configuration file") {
                 sh returnStdout: true, script: "rm -rf ${configBaseDir}"
                 sh returnStdout: true, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
-                deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yml"
+                deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
             }
 
             stage('Download cord-tester repo') {
diff --git a/src/test/cord-api/Framework/DHCP.robot b/src/test/cord-api/Framework/DHCP.robot
index 8af8ada..a8ddb7d 100644
--- a/src/test/cord-api/Framework/DHCP.robot
+++ b/src/test/cord-api/Framework/DHCP.robot
@@ -20,20 +20,20 @@
 
 *** Keywords ***
 Send Dhclient Request
-    [Arguments]    ${iface}    ${ip}    ${user}    ${pass}=${EMPTY}    ${key}=${EMPTY}    ${container_name}=${EMPTY}
+    [Arguments]    ${iface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
     [Documentation]    Executes a dhclient against a particular interface on the RG (src)
-    ${result}=    Login And Run Command On Remote System    sudo dhclient -nw ${iface}    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
+    ${result}=    Login And Run Command On Remote System    sudo dhclient -nw ${iface}    ${ip}    ${user}    ${pass}    ${container_name}
     [Return]    ${result}
 
 Add Default Route to Dst Gateway
-    [Arguments]    ${src_gateway}    ${dst_subnet}    ${iface}    ${ip}    ${user}    ${pass}=${EMPTY}    ${key}=${EMPTY}    ${container_name}=${EMPTY}
+    [Arguments]    ${src_gateway}    ${dst_subnet}    ${iface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
     [Documentation]    Adds an entry to the routing table on the RG (src)
-    ${result}=    Login And Run Command On Remote System    sudo ip route add ${dst_subnet} via ${src_gateway} dev ${iface}    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
+    ${result}=    Login And Run Command On Remote System    sudo ip route add ${dst_subnet} via ${src_gateway} dev ${iface}    ${ip}    ${user}    ${pass}    ${container_name}
     [Return]    ${result}
 
 Check IPv4 Address on DHCP Client
-    [Arguments]    ${ip_should_exist}    ${iface}    ${ip}    ${user}    ${pass}=${EMPTY}    ${key}=${EMPTY}    ${container_name}=${EMPTY}
+    [Arguments]    ${ip_should_exist}    ${iface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
     [Documentation]    Check if the sepcified interface has an IPv4 address assigned
-    ${output}=    Login And Run Command On Remote System    ifconfig ${iface}    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
+    ${output}=    Login And Run Command On Remote System    ifconfig ${iface}    ${ip}    ${user}    ${pass}    ${container_name}
     Run Keyword If    '${ip_should_exist}' == 'True'    Should Match Regexp    ${output}    \\b([0-9]{1,3}\\.){3}[0-9]{1,3}\\b
     Run Keyword If    '${ip_should_exist}' == 'False'    Should Not Match Regexp    ${output}    \\b([0-9]{1,3}\\.){3}[0-9]{1,3}\\b
diff --git a/src/test/cord-api/Framework/Subscriber.robot b/src/test/cord-api/Framework/Subscriber.robot
index 91aff61..f4d296f 100644
--- a/src/test/cord-api/Framework/Subscriber.robot
+++ b/src/test/cord-api/Framework/Subscriber.robot
@@ -59,38 +59,38 @@
     Should Be True    ${api_result}
 
 Send EAPOL Message
-    [Arguments]    ${auth_pass}    ${iface}    ${conf_file}    ${ip}    ${user}    ${pass}=${EMPTY}    ${key}=${EMPTY}    ${container_name}=${EMPTY}
+    [Arguments]    ${auth_pass}    ${iface}    ${conf_file}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
     [Documentation]    Executes a particular auth request on the RG via wpa_supplicant client. Requested packet should exist on src.
-    Login And Run Command On Remote System    sudo rm -f /tmp/wpa.log; sudo wpa_supplicant -B -i ${iface} -Dwired -c /etc/wpa_supplicant/${conf_file} -f /tmp/wpa.log    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
-    Run Keyword If    '${auth_pass}' == 'True'    Wait Until Keyword Succeeds    30s    2s    Check Remote File Contents    True    /tmp/wpa.log    authentication completed successfully    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
+    Login And Run Command On Remote System    sudo rm -f /tmp/wpa.log; sudo wpa_supplicant -B -i ${iface} -Dwired -c /etc/wpa_supplicant/${conf_file} -f /tmp/wpa.log    ${ip}    ${user}    ${pass}    ${container_name}
+    Run Keyword If    '${auth_pass}' == 'True'    Wait Until Keyword Succeeds    30s    2s    Check Remote File Contents    True    /tmp/wpa.log    authentication completed successfully    ${ip}    ${user}    ${pass}    ${container_name}
     Run Keyword If    '${auth_pass}' == 'False'    Sleep    10s
-    Run Keyword If    '${auth_pass}' == 'False'    Check Remote File Contents    False    /tmp/wpa.log    authentication completed successfully    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
+    Run Keyword If    '${auth_pass}' == 'False'    Check Remote File Contents    False    /tmp/wpa.log    authentication completed successfully    ${ip}    ${user}    ${pass}    ${container_name}
 
 Start DHCP Server on Remote Host
-    [Arguments]    ${interface}    ${ip}    ${user}    ${pass}=${EMPTY}    ${key}=${EMPTY}    ${container_name}=${EMPTY}
-    ${result}=    Login And Run Command On Remote System    sudo dhcpd -cf /etc/dhcp/dhcpd.conf ${interface}    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
+    [Arguments]    ${interface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
+    ${result}=    Login And Run Command On Remote System    sudo dhcpd -cf /etc/dhcp/dhcpd.conf ${interface}    ${ip}    ${user}    ${pass}    ${container_name}
     Should Contain    ${result}    Listening on LPF/${interface}
 
 Delete IP Addresses from Interface on Remote Host
-    [Arguments]    ${interface}    ${ip}    ${user}    ${pass}=${EMPTY}    ${key}=${EMPTY}    ${container_name}=${EMPTY}
-    Login And Run Command On Remote System    sudo ip addr flush dev ${interface}    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
+    [Arguments]    ${interface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
+    Login And Run Command On Remote System    sudo ip addr flush dev ${interface}    ${ip}    ${user}    ${pass}    ${container_name}
 
 Add Double Vlan Interface on Host
-    [Arguments]    ${interface}    ${stag}    ${ctag}    ${ip}    ${user}    ${pass}=${EMPTY}    ${key}=${EMPTY}    ${container_name}=${EMPTY}
-    Login And Run Command On Remote System    sudo ip link add link ${interface} name ${interface}.${stag} type vlan id ${stag}    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
-    Login And Run Command On Remote System    sudo ip link set ${interface}.${stag} up    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
-    Login And Run Command On Remote System    sudo ip link add link ${interface}.${stag} name ${interface}.${stag}.${ctag} type vlan id ${ctag}    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
-    Login And Run Command On Remote System    sudo ip link set ${interface}.${stag}.${ctag} up    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
-    Login And Run Command On Remote System    ifconfig ${interface}.${stag}.${ctag}    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
+    [Arguments]    ${interface}    ${stag}    ${ctag}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
+    Login And Run Command On Remote System    sudo ip link add link ${interface} name ${interface}.${stag} type vlan id ${stag}    ${ip}    ${user}    ${pass}    ${container_name}
+    Login And Run Command On Remote System    sudo ip link set ${interface}.${stag} up    ${ip}    ${user}    ${pass}    ${container_name}
+    Login And Run Command On Remote System    sudo ip link add link ${interface}.${stag} name ${interface}.${stag}.${ctag} type vlan id ${ctag}    ${ip}    ${user}    ${pass}    ${container_name}
+    Login And Run Command On Remote System    sudo ip link set ${interface}.${stag}.${ctag} up    ${ip}    ${user}    ${pass}    ${container_name}
+    Login And Run Command On Remote System    ifconfig ${interface}.${stag}.${ctag}    ${ip}    ${user}    ${pass}    ${container_name}
 
 Delete Interface on Remote Host
-    [Arguments]    ${interface}    ${ip}    ${user}    ${pass}=${EMPTY}    ${key}=${EMPTY}    ${container_name}=${EMPTY}
-    Login And Run Command On Remote System    sudo ip link del ${interface}    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
+    [Arguments]    ${interface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
+    Login And Run Command On Remote System    sudo ip link del ${interface}    ${ip}    ${user}    ${pass}    ${container_name}
 
 Add Ip Address on Interface on Host
-    [Arguments]    ${ip_address}    ${interface}    ${ip}    ${user}    ${pass}=${EMPTY}    ${key}=${EMPTY}    ${container_name}=${EMPTY}
-    Login And Run Command On Remote System    sudo ip addr add ${ip_address} dev ${interface}    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
+    [Arguments]    ${ip_address}    ${interface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
+    Login And Run Command On Remote System    sudo ip addr add ${ip_address} dev ${interface}    ${ip}    ${user}    ${pass}    ${container_name}
 
 Add Route to Remote Host
-    [Arguments]    ${subnet}    ${gateway}    ${interface}    ${ip}    ${user}    ${pass}=${EMPTY}    ${key}=${EMPTY}    ${container_name}=${EMPTY}
-    Login And Run Command On Remote System    sudo ip route add ${subnet} via ${gateway} dev ${interface}    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
+    [Arguments]    ${subnet}    ${gateway}    ${interface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
+    Login And Run Command On Remote System    sudo ip route add ${subnet} via ${gateway} dev ${interface}    ${ip}    ${user}    ${pass}    ${container_name}
diff --git a/src/test/cord-api/Framework/utils/utils.robot b/src/test/cord-api/Framework/utils/utils.robot
index 5bd801a..e8a6a6b 100644
--- a/src/test/cord-api/Framework/utils/utils.robot
+++ b/src/test/cord-api/Framework/utils/utils.robot
@@ -24,25 +24,25 @@
 
 *** Keywords ***
 Login And Run Command On Remote System
-    [Arguments]    ${cmd}    ${ip}    ${user}    ${pass}=${EMPTY}    ${key}=${EMPTY}    ${container_name}=${EMPTY}    ${prompt}=~$    ${prompt_timeout}=15s    ${container_prompt}=~#
+    [Arguments]    ${cmd}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}    ${prompt}=~$    ${prompt_timeout}=15s    ${container_prompt}=~#
     [Documentation]    SSH's into a remote host and executes a command and returns output. If container_name is specified, login to the container before executing the command
-    ${conn_id}    ${prompt}=    Login To Remote System    ${ip}    ${user}    ${pass}    ${key}    ${container_name}    ${prompt}    ${prompt_timeout}    ${container_prompt}
+    ${conn_id}    ${prompt}=    Login To Remote System    ${ip}    ${user}    ${pass}    ${container_name}    ${prompt}    ${prompt_timeout}    ${container_prompt}
     ${output}=    Run Command On Remote System    ${cmd}    ${conn_id}    ${user}    ${prompt}    ${pass}
     Logout From Remote System    ${conn_id}
     [Return]    ${output}
 
 Login To Remote System
-    [Arguments]    ${ip}    ${user}    ${pass}=${EMPTY}    ${key}=${EMPTY}    ${container_name}=${EMPTY}    ${prompt}=~$    ${prompt_timeout}=15s    ${container_prompt}=~#
+    [Arguments]    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}    ${prompt}=~$    ${prompt_timeout}=15s    ${container_prompt}=~#
     [Documentation]    SSH's into a remote host and returns connection ID. If container_name is specified, login to the container before returning
     ${conn_id}=    SSHLibrary.Open Connection    ${ip}    prompt=${prompt}    timeout=${prompt_timeout}
-    Run Keyword If    '${key}' != '${EMPTY}'    SSHLibrary.Login With Public Key    ${user}    ${key}
-    ...                                  ELSE    SSHLibrary.Login    ${user}    ${pass}
+    Run Keyword If    '${pass}' != '${None}'    SSHLibrary.Login    ${user}    ${pass}
+    ...                                 ELSE    SSHLibrary.Login With Public Key    ${user}    %{HOME}/.ssh/id_rsa
     # Login to the lxc container
-    Run Keyword If    '${container_name}' != '${EMPTY}'    Run Keywords
+    Run Keyword If    '${container_name}' != '${None}'    Run Keywords
     ...    SSHLibrary.Write    lxc exec ${container_name} /bin/bash    AND
     ...    SSHLibrary.Read Until    ${container_prompt}    AND
     ...    SSHLibrary.Set Client Configuration    prompt=${container_prompt}
-    ${prompt}=    Set Variable If    '${container_name}' != '${EMPTY}'    ${container_prompt}     ${prompt}
+    ${prompt}=    Set Variable If    '${container_name}' != '${None}'    ${container_prompt}     ${prompt}
     [Return]    ${conn_id}    ${prompt}
 
 Logout From Remote System
@@ -52,7 +52,7 @@
     SSHLibrary.Close Connection
 
 Run Command On Remote System
-    [Arguments]    ${cmd}    ${conn_id}    ${user}    ${prompt}    ${pass}=${EMPTY}
+    [Arguments]    ${cmd}    ${conn_id}    ${user}    ${prompt}    ${pass}=${None}
     [Documentation]    Executes a command on remote host and returns output
     SSHLibrary.Switch Connection    ${conn_id}
     SSHLibrary.Write    ${cmd}
@@ -217,19 +217,19 @@
     [Return]    ${id}
 
 Kill Linux Process
-    [Arguments]    ${process}    ${ip}    ${user}    ${pass}=${EMPTY}    ${key}=${EMPTY}    ${container_name}=${EMPTY}
-    ${rc}=    Login And Run Command On Remote System    sudo kill $(ps aux | grep '${process}' | awk '{print $2}'); echo $?    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
+    [Arguments]    ${process}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
+    ${rc}=    Login And Run Command On Remote System    sudo kill $(ps aux | grep '${process}' | awk '{print $2}'); echo $?    ${ip}    ${user}    ${pass}    ${container_name}
     Should Be Equal As Integers    ${rc}    0
 
 Check Remote File Contents
-    [Arguments]    ${file_should_exist}    ${file}    ${pattern}    ${ip}    ${user}    ${pass}=${EMPTY}    ${key}=${EMPTY}    ${container_name}=${EMPTY}    ${prompt}=~$
-    ${output}=    Login And Run Command On Remote System    cat ${file} | grep '${pattern}'    ${ip}    ${user}    ${pass}    ${key}    ${container_name}    ${prompt}
+    [Arguments]    ${file_should_exist}    ${file}    ${pattern}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}    ${prompt}=~$
+    ${output}=    Login And Run Command On Remote System    cat ${file} | grep '${pattern}'    ${ip}    ${user}    ${pass}    ${container_name}    ${prompt}
     Run Keyword If    '${file_should_exist}' == 'True'    Should Contain    ${output}    ${pattern}
     ...                                           ELSE    Should Not Contain    ${output}    ${pattern}
 
 Check Ping
-    [Arguments]    ${ping_should_pass}    ${dst_ip}    ${iface}    ${ip}    ${user}    ${pass}=${EMPTY}    ${key}=${EMPTY}    ${container_name}=${EMPTY}
-    ${result}=    Login And Run Command On Remote System    ping -I ${iface} -c 3 ${dst_ip}    ${ip}    ${user}    ${pass}    ${key}    ${container_name}
+    [Arguments]    ${ping_should_pass}    ${dst_ip}    ${iface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
+    ${result}=    Login And Run Command On Remote System    ping -I ${iface} -c 3 ${dst_ip}    ${ip}    ${user}    ${pass}    ${container_name}
     Check Ping Result    ${ping_should_pass}    ${result}
 
 Check Remote System Reachability
diff --git a/src/test/cord-api/Properties/RestApiProperties.py b/src/test/cord-api/Properties/RestApiProperties.py
index 74264b1..2600c70 100644
--- a/src/test/cord-api/Properties/RestApiProperties.py
+++ b/src/test/cord-api/Properties/RestApiProperties.py
@@ -16,7 +16,8 @@
 
 #!/usr/bin/env python
 
-SERVER_IP = '127.0.0.1'
+SERVER_IP = '10.192.4.241'
+#SERVER_IP = '10.90.0.101'
 SERVER_PORT = '30006'
 XOS_USER = 'admin@opencord.org'
 XOS_PASSWD = 'letmein'
diff --git a/src/test/cord-api/Tests/WorkflowValidations/ATT_Test001.txt b/src/test/cord-api/Tests/WorkflowValidations/ATT_Test001.robot
similarity index 72%
rename from src/test/cord-api/Tests/WorkflowValidations/ATT_Test001.txt
rename to src/test/cord-api/Tests/WorkflowValidations/ATT_Test001.robot
index 59c6e56..48b2fe6 100644
--- a/src/test/cord-api/Tests/WorkflowValidations/ATT_Test001.txt
+++ b/src/test/cord-api/Tests/WorkflowValidations/ATT_Test001.robot
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 *** Settings ***
-Documentation     Test successful ping from end-end
+Documentation     Test various end-to-end scenarios with ATT workflow
 Suite Setup       Setup
 Suite Teardown    Teardown
 Test Setup        Create Models
@@ -35,31 +35,15 @@
 Variables         ../../Properties/RestApiProperties.py
 
 *** Variables ***
-${WHITELIST_PATHFILE}     ${CURDIR}/data/ATTWhiteList.json
-${SUBSCRIBER_PATHFILE}    ${CURDIR}/data/ATTSubscriber.json
-${VOLT_DEVICE_PATHFILE}    ${CURDIR}/../data/RealOLTDevice.json
-${src_ip}          X.X.X.X
-${src_gateway}     X.X.X.X
-${src_user}        user
-${src_pass}        ${EMPTY}
-${src_key}         ${EMPTY}
-${src_container_name}         ${EMPTY}
-${src_iface}       eth0
-${dst_ip}          ${EMPTY}
-${dst_dp_iface}    eth0
-${dst_dp_ip}       X.X.X.X
-${dst_user}        user
-${dst_pass}        ${EMPTY}
-${dst_key}         ${EMPTY}
-${dst_container_name}         ${EMPTY}
-${dst_gateway}     X.X.X.X
-${olt_ip}          X.X.X.X
-${olt_user}          user
-${olt_pass}          ${EMPTY}
-${kubernetes_conf}    x.conf
-${kubernetes_yml}    x.yml
-${helm_dir}    ~/helm-charts
-${voltha_pod_num}    8
+${POD_NAME}                 flex-pod1-olt
+${KUBERNETES_CONFIGS_DIR}   ~/pod-configs/kubernetes-configs
+${HELM_CHARTS_DIR}          ~/helm-charts
+${WHITELIST_PATHFILE}       ${CURDIR}/data/${POD_NAME}/ATTWhiteList.json
+${SUBSCRIBER_PATHFILE}      ${CURDIR}/data/${POD_NAME}/ATTSubscriber.json
+${VOLT_DEVICE_PATHFILE}     ${CURDIR}/data/${POD_NAME}/RealOLTDevice.json
+${KUBERNETES_CONF}          ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.conf
+${KUBERNETES_YAML}          ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.yml
+${VOLTHA_POD_NUM}           8
 
 *** Test Cases ***
 ONU in Correct Location + Successful Auth Request
@@ -73,7 +57,7 @@
     Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED
     Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING
     Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Send EAPOL Message    True    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_key}    ${src_container_name}
+    Send EAPOL Message    True    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
     Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED
     Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled
     Validate DHCP and Ping    True    True
@@ -106,7 +90,7 @@
     Wait Until Keyword Succeeds    300s    15s    Validate ONU States    UNKNOWN    DISABLED
     Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING
     Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Send EAPOL Message    False    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_key}    ${src_container_name}
+    Send EAPOL Message    False    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
     Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING
     Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
     Validate DHCP and Ping    False    False
@@ -136,7 +120,36 @@
     Set Global Variable    ${vlist}    ${VoltDeviceList}
     Set Suite Variable    ${s_tag}
     Set Suite Variable    ${c_tag}
-    Set Global Variable    ${export_kubeconfig}    export KUBECONFIG=${kubernetes_conf}
+    Set Global Variable    ${export_kubeconfig}    export KUBECONFIG=${KUBERNETES_CONF}
+    # Read variables from yaml file
+    ${src_ip}=    Evaluate    ${hosts}.get("src").get("ip")
+    ${src_user}=    Evaluate    ${hosts}.get("src").get("user")
+    ${src_pass}=    Evaluate    ${hosts}.get("src").get("pass")
+    ${src_container_name}=    Evaluate    ${hosts}.get("src").get("container_name")
+    ${src_iface}=    Evaluate    ${hosts}.get("src").get("dp_iface_name")
+    ${dst_ip}=    Evaluate    ${hosts}.get("dst").get("ip")
+    ${dst_user} =    Evaluate    ${hosts}.get("dst").get("user")
+    ${dst_pass}=    Evaluate    ${hosts}.get("dst").get("pass")
+    ${dst_container_name}=    Evaluate    ${hosts}.get("dst").get("container_name")
+    ${dst_dp_iface}=    Evaluate    ${hosts}.get("dst").get("dp_iface_name")
+    ${dst_dp_ip}=    Evaluate    ${hosts}.get("dst").get("dp_iface_ip_qinq")
+    ${olt_ip}=    Evaluate    ${olts}[0].get("ip")
+    ${olt_user}=    Evaluate    ${olts}[0].get("user")
+    ${olt_pass}=    Evaluate    ${olts}[0].get("pass")
+    Set Suite Variable    ${src_ip}
+    Set Suite Variable    ${src_user}
+    Set Suite Variable    ${src_pass}
+    Set Suite Variable    ${src_container_name}
+    Set Suite Variable    ${src_iface}
+    Set Suite Variable    ${dst_ip}
+    Set Suite Variable    ${dst_user}
+    Set Suite Variable    ${dst_pass}
+    Set Suite Variable    ${dst_container_name}
+    Set Suite Variable    ${dst_dp_iface}
+    Set Suite Variable    ${dst_dp_ip}
+    Set Suite Variable    ${olt_ip}
+    Set Suite Variable    ${olt_user}
+    Set Suite Variable    ${olt_pass}
 
 Teardown
     [Documentation]    Performs any additional cleanup required
@@ -147,25 +160,25 @@
     [Documentation]    Re-create Subscriber, whitelist, and olt-device models to test
     Log    Re-creating objects
     #create attwhitelist
-    ${AttWhiteListList} =    Get Variable Value    ${alist}
+    ${AttWhiteListList}=    Get Variable Value    ${alist}
     ${AttWhiteListDict}=    utils.listToDict    ${AttWhiteListList}    0
     CORD Post    ${ATT_WHITELIST}    ${AttWhiteListDict}
     #create subscriber
-    ${SubscriberList} =    Get Variable Value    ${slist}
+    ${SubscriberList}=    Get Variable Value    ${slist}
     ${SubscriberDict}=    utils.listToDict    ${SubscriberList}    0
     Wait Until Keyword Succeeds    120s    15s    CORD Post    ${VOLT_SUBSCRIBER}    ${SubscriberDict}
     #create olt device
-    ${VoltDeviceList} =    Get Variable Value    ${vlist}
+    ${VoltDeviceList}=    Get Variable Value    ${vlist}
     ${VoltDeviceDict}=    utils.listToDict    ${VoltDeviceList}    0
     CORD Post    ${VOLT_DEVICE}    ${VoltDeviceDict}
 
 Clean Test Environment
     [Documentation]    Delete xos objects, kills processes and cleans up interfaces on src+dst servers
-    Run Keyword And Ignore Error    Kill Linux Process    [w]pa_supplicant    ${src_ip}    ${src_user}    ${src_pass}    ${src_key}    ${src_container_name}
-    Run Keyword And Ignore Error    Kill Linux Process    [d]hclient    ${src_ip}    ${src_user}    ${src_pass}    ${src_key}    ${src_container_name}
-    Run Keyword If    '${dst_ip}' != '${EMPTY}'    Run Keyword And Ignore Error    Kill Linux Process    [d]hcpd    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_key}    ${dst_container_name}
-    Delete IP Addresses from Interface on Remote Host    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_key}    ${src_container_name}
-    Run Keyword If    '${dst_ip}' != '${EMPTY}'    Delete Interface on Remote Host    ${dst_dp_iface}.${s_tag}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_key}    ${dst_container_name}
+    Run Keyword And Ignore Error    Kill Linux Process    [w]pa_supplicant    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
+    Run Keyword And Ignore Error    Kill Linux Process    [d]hclient    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
+    Run Keyword If    '${dst_ip}' != '${None}'    Run Keyword And Ignore Error    Kill Linux Process    [d]hcpd    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_name}
+    Delete IP Addresses from Interface on Remote Host    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
+    Run Keyword If    '${dst_ip}' != '${None}'    Delete Interface on Remote Host    ${dst_dp_iface}.${s_tag}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_name}
     Wait Until Keyword Succeeds    60s    2s    Clean Up Objects    ${VOLT_SUBSCRIBER}
     Wait Until Keyword Succeeds    60s    2s    Clean Up Objects    ${VOLT_DEVICE}
     Wait Until Keyword Succeeds    60s    2s    Clean Up Objects    ${ATT_WHITELIST}
@@ -193,22 +206,24 @@
 
 Validate DHCP and Ping
     [Arguments]    ${dhcp_should_pass}    ${ping_should_pass}
-    Run Keyword If    '${dst_ip}' != '${EMPTY}'    Run Keywords
-    ...    Add Double Vlan Interface on Host    ${dst_dp_iface}    ${s_tag}    ${c_tag}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_key}    ${dst_container_name}    AND
-    ...    Add IP Address on Interface on Host    ${dst_dp_ip}/24    ${dst_dp_iface}.${s_tag}.${c_tag}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_key}    ${dst_container_name}    AND
-    ...    Start DHCP Server on Remote Host    ${dst_dp_iface}.${s_tag}.${c_tag}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_key}    ${dst_container_name}
-    Send Dhclient Request    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_key}    ${src_container_name}
-    Run Keyword If    '${dhcp_should_pass}' == 'True'    Wait Until Keyword Succeeds    60s    5s    Check IPv4 Address on DHCP Client    True    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_key}    ${src_container_name}
+    Run Keyword If    '${dst_ip}' != '${None}'    Run Keywords
+    ...    Add Double Vlan Interface on Host    ${dst_dp_iface}    ${s_tag}    ${c_tag}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_name}    AND
+    ...    Add IP Address on Interface on Host    ${dst_dp_ip}/24    ${dst_dp_iface}.${s_tag}.${c_tag}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_name}    AND
+    ...    Start DHCP Server on Remote Host    ${dst_dp_iface}.${s_tag}.${c_tag}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_name}
+    Send Dhclient Request    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
+    Run Keyword If    '${dhcp_should_pass}' == 'True'    Wait Until Keyword Succeeds    60s    5s    Check IPv4 Address on DHCP Client    True    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
     Run Keyword If    '${dhcp_should_pass}' == 'False'    Sleep    10s
-    Run Keyword If    '${dhcp_should_pass}' == 'False'    Check IPv4 Address on DHCP Client    False    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_key}    ${src_container_name}
-    Run Keyword If    '${ping_should_pass}' == 'True'    Wait Until Keyword Succeeds    60s    5s    Check Ping    True    ${dst_dp_ip}    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_key}    ${src_container_name}
-    ...                                          ELSE    Wait Until Keyword Succeeds    60s    5s    Check Ping    False    ${dst_dp_ip}    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_key}    ${src_container_name}
+    Run Keyword If    '${dhcp_should_pass}' == 'False'    Check IPv4 Address on DHCP Client    False    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
+    Run Keyword If    '${ping_should_pass}' == 'True'    Wait Until Keyword Succeeds    60s    5s    Check Ping    True    ${dst_dp_ip}    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
+    ...                                          ELSE    Wait Until Keyword Succeeds    60s    5s    Check Ping    False    ${dst_dp_ip}    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
 
 Reinstall Voltha
     Run    ${export_kubeconfig}; helm delete --purge voltha
     Wait Until Keyword Succeeds    60s    10s    Helm Chart is Removed    voltha
     Wait Until Keyword Succeeds    120s    10s    Kubernetes PODs in Namespace are Removed    voltha
-    ${rc}    ${output}=    Run And Return Rc And Output    ${export_kubeconfig}; helm install -n voltha -f ${kubernetes_yml} --set etcd-operator.customResources.createEtcdClusterCRD=false ${helm_dir}/voltha
-    ${rc}    ${output}=    Run And Return Rc And Output    ${export_kubeconfig}; helm upgrade -f ${kubernetes_yml} --set etcd-operator.customResources.createEtcdClusterCRD=true voltha ${helm_dir}/voltha
-    Wait Until Keyword Succeeds    60s    10s    Kubernetes PODs in Namespace are Running    voltha    ${voltha_pod_num}
+    Run    ${export_kubeconfig}; cd ${HELM_CHARTS_DIR}; helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/
+    Run    ${export_kubeconfig}; cd ${HELM_CHARTS_DIR}; helm dep up voltha
+    Run    ${export_kubeconfig}; helm install -n voltha -f ${KUBERNETES_YAML} --set etcd-operator.customResources.createEtcdClusterCRD=false ${HELM_CHARTS_DIR}/voltha
+    Run    ${export_kubeconfig}; helm upgrade -f ${KUBERNETES_YAML} --set etcd-operator.customResources.createEtcdClusterCRD=true voltha ${HELM_CHARTS_DIR}/voltha
+    Wait Until Keyword Succeeds    60s    10s    Kubernetes PODs in Namespace are Running    voltha    ${VOLTHA_POD_NUM}
     Sleep    10s
diff --git a/src/test/cord-api/Tests/WorkflowValidations/data/ATTSubscriber.json b/src/test/cord-api/Tests/WorkflowValidations/data/flex-pod1-olt/ATTSubscriber.json
similarity index 100%
rename from src/test/cord-api/Tests/WorkflowValidations/data/ATTSubscriber.json
rename to src/test/cord-api/Tests/WorkflowValidations/data/flex-pod1-olt/ATTSubscriber.json
diff --git a/src/test/cord-api/Tests/WorkflowValidations/data/ATTWhiteList.json b/src/test/cord-api/Tests/WorkflowValidations/data/flex-pod1-olt/ATTWhiteList.json
similarity index 100%
rename from src/test/cord-api/Tests/WorkflowValidations/data/ATTWhiteList.json
rename to src/test/cord-api/Tests/WorkflowValidations/data/flex-pod1-olt/ATTWhiteList.json
diff --git a/src/test/cord-api/Tests/WorkflowValidations/data/flex-pod1-olt/RealOLTDevice.json b/src/test/cord-api/Tests/WorkflowValidations/data/flex-pod1-olt/RealOLTDevice.json
new file mode 100644
index 0000000..1b93373
--- /dev/null
+++ b/src/test/cord-api/Tests/WorkflowValidations/data/flex-pod1-olt/RealOLTDevice.json
@@ -0,0 +1,16 @@
+{
+    "VOLTDeviceInfo" : [
+    {
+            "device_type": "openolt",
+            "host": "10.192.4.218",
+            "port": 9191,
+            "switch_datapath_id": "of:0000cc37ab5b6da8",
+            "switch_port": "7",
+            "outer_tpid": "0x8100",
+            "name": "olt-1",
+            "uplink": "65536",
+            "volt_service_id": 2,
+            "nas_id": "NAS_ID"
+    }
+  ]
+}
diff --git a/src/test/cord-api/Tests/WorkflowValidations/data/ATTSubscriber-ONF.json b/src/test/cord-api/Tests/WorkflowValidations/data/onlab-pod1/ATTSubscriber.json
similarity index 100%
rename from src/test/cord-api/Tests/WorkflowValidations/data/ATTSubscriber-ONF.json
rename to src/test/cord-api/Tests/WorkflowValidations/data/onlab-pod1/ATTSubscriber.json
diff --git a/src/test/cord-api/Tests/WorkflowValidations/data/ATTWhiteList-ONF.json b/src/test/cord-api/Tests/WorkflowValidations/data/onlab-pod1/ATTWhiteList.json
similarity index 100%
rename from src/test/cord-api/Tests/WorkflowValidations/data/ATTWhiteList-ONF.json
rename to src/test/cord-api/Tests/WorkflowValidations/data/onlab-pod1/ATTWhiteList.json
diff --git a/src/test/cord-api/Tests/WorkflowValidations/data/RealOLTDevice-ONF.json b/src/test/cord-api/Tests/WorkflowValidations/data/onlab-pod1/RealOLTDevice.json
similarity index 100%
rename from src/test/cord-api/Tests/WorkflowValidations/data/RealOLTDevice-ONF.json
rename to src/test/cord-api/Tests/WorkflowValidations/data/onlab-pod1/RealOLTDevice.json