Remove libraries for openstack 99/109599/10
authorOleksandr Zharov <oleksandr.zharov@pantheon.tech>
Wed, 3 Jan 2024 18:56:28 +0000 (19:56 +0100)
committerSangwook Ha <sangwook.ha@verizon.com>
Thu, 21 Mar 2024 10:08:20 +0000 (10:08 +0000)
Removed librarives related to no more active openstack
project.

JIRA: INTTEST-140
Change-Id: I475a4084aea0929f46e6e4732b65e795abfe4e6f
Signed-off-by: Oleksandr Zharov <oleksandr.zharov@pantheon.tech>
Signed-off-by: Sangwook Ha <sangwook.ha@verizon.com>
15 files changed:
csit/libraries/AAA/DockerKeystone.robot [deleted file]
csit/libraries/Coe.robot
csit/libraries/DataModels.robot
csit/libraries/DevstackUtils.robot [deleted file]
csit/libraries/L2GatewayOperations.robot [deleted file]
csit/libraries/LiveMigration.robot [deleted file]
csit/libraries/OVSDB.robot
csit/libraries/OpenStackOperations.robot [deleted file]
csit/libraries/Tempest.robot [deleted file]
csit/libraries/Utils.robot
csit/libraries/VpnOperations.robot [deleted file]
csit/variables/l2gw/Variables.robot [deleted file]
csit/variables/l2gw/itm_create/location.uri [deleted file]
csit/variables/l2gw/itm_create/post_data.json [deleted file]
csit/variables/netvirt/Variables.robot [deleted file]

diff --git a/csit/libraries/AAA/DockerKeystone.robot b/csit/libraries/AAA/DockerKeystone.robot
deleted file mode 100644 (file)
index 00ed18c..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-*** Settings ***
-Documentation       DockerKeystone library. This library is useful to deal with Openstack Keystone service which provides API client authentication.
-...
-...                 It consists of three main groups of keywords:
-...
-...                 - Start/Stop keystone node in SYSTEM TOOLS VM:
-...                 - Run Docker Keystone
-...                 - Destroy Docker Keystone
-...                 - Check Keystone Log File For String
-...
-...                 - Provision keystone node:
-...                 - Create Keystone session
-...                 - Get Keystone Token
-...                 - Create Keystone Domain
-...                 - Create Keystone User in a Domain
-...                 - Set Domain To False
-...                 - Get Admin Role Id
-...                 - Grant Admin Role
-...                 - Delete Keystone Domain
-...
-...                 - Provision ODL node for secure communication with Keystone node:
-...                 - Set Keystone Certificate into ODL
-
-Library             SSHLibrary
-Library             RequestsLibrary
-
-
-*** Keywords ***
-Get Keystone Token
-    [Documentation]    Get Keystone token for a particular user and domain
-    [Arguments]    ${TOOLS_SYSTEM_NAME}    ${CREATE_TOKEN_FILE}
-    Set Suite Variable    ${CREATE_TOKEN_URI}    /v3/auth/tokens/
-    ${body}    OperatingSystem.Get File    ${CREATE_TOKEN_FILE}
-    Log    ${HEADERS}
-    ${resp}    RequestsLibrary.Post Request
-    ...    session_keystone
-    ...    ${CREATE_TOKEN_URI}
-    ...    data=${body}
-    ...    headers=${HEADERS}
-    ...    allow_redirects=${true}
-    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
-    ${token}    Get From Dictionary    ${resp.headers}    x-subject-token
-    RETURN    ${token}
-
-Create Keystone session
-    [Documentation]    Create a https session with Keystone for provisioning new domains, users, projects ...
-    [Arguments]    ${TOOLS_SYSTEM_NAME}
-    Log    ${HEADERS}
-    Create Session
-    ...    session_keystone
-    ...    https://${TOOLS_SYSTEM_NAME}:35357
-    ...    auth=${AUTH_ADMIN_SDN}
-    ...    headers=${HEADERS}
-    ...    debug=3
-
-Create Keystone Domain
-    [Documentation]    Provision a domain in Keystone
-    [Arguments]    ${HEADERS}    ${CREATE_DOMAIN_FILE}
-    Set Suite Variable    ${CREATE_DOMAIN_URI}    /v3/domains/
-    ${body}    OperatingSystem.Get File    ${CREATE_DOMAIN_FILE}
-    ${resp}    RequestsLibrary.Post Request
-    ...    session_keystone
-    ...    ${CREATE_DOMAIN_URI}
-    ...    data=${body}
-    ...    headers=${HEADERS}
-    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
-    ${domain_id}    Convert To String    ${resp.json()['domain']['id']}
-    RETURN    ${domain_id}
-
-Create Keystone User in a Domain
-    [Documentation]    Provision an user associated to a domain in \ Keystone
-    [Arguments]    ${HEADERS}    ${CREATE_USERS_FILE}
-    Set Suite Variable    ${CREATE_USERS_URI}    /v3/users/
-    ${body}    OperatingSystem.Get File    ${CREATE_USERS_FILE}
-    ${resp}    RequestsLibrary.Post Request
-    ...    session_keystone
-    ...    ${CREATE_USERS_URI}
-    ...    data=${body}
-    ...    headers=${HEADERS}
-    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
-    ${user_id}    Convert To String    ${resp.json()['user']['id']}
-    RETURN    ${user_id}
-
-Grant Admin Role
-    [Documentation]    Grant a role to an user in a domain in \ Keystone
-    [Arguments]    ${domain}    ${user}    ${roleid}    ${HEADERS}
-    Set Suite Variable    ${GRANT_ADMIN_ROLE_URI}    /v3/domains/${domain}/users/${user}/roles/${roleid}
-    ${resp}    RequestsLibrary.Put Request    session_keystone    ${GRANT_ADMIN_ROLE_URI}    headers=${HEADERS}
-    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
-
-Get Admin Role Id
-    [Documentation]    Get admin role id from Keystone
-    [Arguments]    ${HEADERS}
-    Set Suite Variable    ${GET_ADMIN_ROLE_URI}    /v3/roles?name=admin
-    ${resp}    RequestsLibrary.Get Request    session_keystone    ${GET_ADMIN_ROLE_URI}    headers=${HEADERS}
-    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
-    ${admin_role_id}    Convert To String    ${resp.json()['roles'][0]['id']}
-    Log    ${admin_role_id}
-    RETURN    ${admin_role_id}
-
-Run Docker Keystone
-    [Documentation]    Run Keystone in a docker container hosted in the SYSTEM TOOL server and define "CSC_user" and "CSC_user_no_admin" users, the former with "admin" role and the latter with "user" role
-    ${output}    SSHLibrary.Open_Connection    ${TOOLS_SYSTEM_IP}    timeout=20s
-    SSHKeywords.Flexible_Controller_Login
-    SSHLibrary.Put File    ${CURDIR}/../../suites/aaa/keystone/start_keystone.sh
-    ${output}    SSHLibrary.Execute Command    ./start_keystone.sh
-    Log    ${output}
-    ${output}    SSHLibrary.Execute Command    docker ps --all
-    Log    ${output}
-    Wait Until Keyword Succeeds    10x    15    Check Keystone Log File For String    GET
-    SSHLibrary.Execute Command
-    ...    docker exec -t keystone bash -c "source openrc;openstack user create --password cscuser CSC_user;openstack user set --project admin CSC_user;openstack role add --project admin --user CSC_user admin;openstack role add --domain default --user CSC_user admin;openstack user list"
-    SSHLibrary.Execute Command
-    ...    docker exec -t keystone bash -c "source openrc;openstack user create --password cscusernoadmin CSC_user_no_admin;openstack user set --project admin CSC_user_no_admin;openstack role add --project admin --user CSC_user_no_admin user;openstack role add --domain default --user CSC_user_no_admin user"
-    RETURN    ${output}
-
-Destroy Docker Keystone
-    [Documentation]    Destroy keystone container and remove mysql database
-    ${output}    SSHLibrary.Execute Command
-    ...    docker stop keystone;docker rm keystone
-    ...    return_stdout=True
-    ...    return_stderr=True
-    ...    return_rc=True
-    ${output}    SSHLibrary.Execute Command
-    ...    sudo rm -rf /var/lib/mysql/
-    ...    return_stdout=True
-    ...    return_stderr=True
-    ...    return_rc=True
-    RETURN    ${output}
-
-Set Domain To False
-    [Documentation]    Disable domain in keystone
-    [Arguments]    ${domain}    ${HEADERS}
-    Set Suite Variable    ${PATCH_DOMAIN_URI}    /v3/domains/${domain}
-    Set Suite Variable    ${PATCH_DOMAIN_FILE}    ${CURDIR}/../../variables/aaa/patch-domain.json
-    ${body}    OperatingSystem.Get File    ${PATCH_DOMAIN_FILE}
-    ${resp}    RequestsLibrary.Patch Request
-    ...    session_keystone
-    ...    ${PATCH_DOMAIN_URI}
-    ...    data=${body}
-    ...    headers=${HEADERS}
-    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
-
-Delete Keystone Domain
-    [Documentation]    Delete domain in \ Keystone
-    [Arguments]    ${domain}    ${HEADERS}
-    Set Suite Variable    ${DELETE_DOMAIN_URI}    /v3/domains/${domain}
-    ${resp}    RequestsLibrary.Delete Request    session_keystone    ${DELETE_DOMAIN_URI}    headers=${HEADERS}
-    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
-
-Set Keystone Certificate into ODL
-    [Documentation]    Install Keystone Certificate into ODL
-    [Arguments]    ${PUT_KEYSTONE_CERT_FILE}    ${TOOLS_SYSTEM_NAME}
-    SSHLibrary.Get File    ${USER_HOME}${/}keystone_cert.pem    ${USER_HOME}${/}key_cert.pem
-    ${keystone_certificate}    ${rc}    SSHLibrary.Execute Command
-    ...    cat keystone_cert.pem|grep -v CERTIFICATE|tr -d '\n'
-    ...    return_stdout=True
-    ...    return_stderr=False
-    ...    return_rc=True
-    Create Session    session_admin    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}    headers=${HEADERS}
-    Set Suite Variable    ${PUT_CERTIFICATE_URI}    /restconf/operations/aaa-cert-rpc:setNodeCertifcate
-    ${normalized_file}    OperatingSystem.Normalize Path    ${PUT_KEYSTONE_CERT_FILE}
-    ${output}    OperatingSystem.Run
-    ...    sed -i 's#\"node-cert\".*#\"node-cert\"\: \"${keystone_certificate}\",#g' ${PUT_KEYSTONE_CERT_FILE}
-    ${output}    OperatingSystem.Run
-    ...    sed -i 's#\"node-alias\".*#\"node-alias\"\: \"${TOOLS_SYSTEM_NAME}\"#g' ${PUT_KEYSTONE_CERT_FILE}
-    ${body_cert}    OperatingSystem.Get File    ${PUT_KEYSTONE_CERT_FILE}
-    ${resp}    RequestsLibrary.Post Request
-    ...    session_admin
-    ...    ${PUT_CERTIFICATE_URI}
-    ...    data=${body_cert}
-    ...    headers=${HEADERS}
-    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
-
-Check Keystone Log File For String
-    [Documentation]    Check provided log exists in /var/log/nginx-access.log
-    [Arguments]    ${string}
-    ${output}    SSHLibrary.Execute Command
-    ...    docker exec -t keystone bash -c "grep ${string} /var/log/nginx-access.log"
-    Log    ${output}
-    BuiltIn.Should Contain    ${output}    ${string}
index 4068063898e28a9a8d8f2b67d40fb1ca7267abf2..ff1329d9eca2fc091763744731988dddddad8a90 100644 (file)
@@ -7,7 +7,6 @@ Resource        OVSDB.robot
 Resource        SSHKeywords.robot
 Resource        Utils.robot
 Resource        ../variables/Variables.robot
-Resource        VpnOperations.robot
 Variables       ../variables/coe/Modules.py
 Resource        ToolsSystem.robot
 
index cc5a61ffc370b3c8cd5dca729a72de54b4401f62..3b8994a1c9bede0ab14758394d108c97181e5afc 100644 (file)
@@ -41,9 +41,3 @@ Verify No Ingress Dispatcher Non-Default Flow Entries
     ...    sudo ovs-ofctl -O OpenFlow13 dump-flows ${INTEGRATION_BRIDGE} table=${DISPATCHER_TABLE} | grep -v "priority=0"
     Log    ${flow_output}
     #Should Not Contain    ${flow_output}    table=${DISPATCHER_TABLE} # Skipping test verification until bug 7451 is resolved
-
-Verify Flows Are Cleaned Up On All OpenStack Nodes
-    [Documentation]    Verify flows are cleaned up from all OpenStack nodes
-    FOR    ${ip}    IN    @{OS_ALL_IPS}
-        Run Keyword And Continue On Failure    Verify No Ingress Dispatcher Non-Default Flow Entries    ${ip}
-    END
diff --git a/csit/libraries/DevstackUtils.robot b/csit/libraries/DevstackUtils.robot
deleted file mode 100644 (file)
index a8bb601..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-*** Settings ***
-Documentation       General Utils library. This library has broad scope, it can be used by any robot system tests.
-
-Library             RequestsLibrary
-Library             SSHLibrary
-Resource            OpenStackOperations.robot
-Resource            ../variables/Variables.robot
-
-
-*** Variables ***
-${DEFAULT_DEVSTACK_PROMPT_TIMEOUT}      10s
-${DEVSTACK_SYSTEM_PASSWORD}             \    # set to empty, but provide for others to override if desired
-${OS_CNTL_CONN_ID}                      None
-${OS_CMP1_CONN_ID}                      None
-${OS_CMP2_CONN_ID}                      None
-${OS_CNTL_IP}                           ${EMPTY}
-${OS_CMP1_IP}                           ${EMPTY}
-${OS_CMP2_IP}                           ${EMPTY}
-@{OS_ALL_IPS}                           @{EMPTY}
-@{OS_CMP_IPS}                           @{EMPTY}
-${OS_NODE_CNT}                          ${1}
-
-
-*** Keywords ***
-Open Connection
-    [Arguments]    ${name}    ${ip}
-    ${conn_id} =    SSHLibrary.Open Connection    ${ip}    prompt=${DEFAULT_LINUX_PROMPT}
-    SSHKeywords.Flexible SSH Login    ${OS_USER}    ${DEVSTACK_SYSTEM_PASSWORD}
-    BuiltIn.Set Suite Variable    \${${name}}    ${conn_id}
-    RETURN    ${conn_id}
-
-Devstack Suite Setup
-    [Documentation]    Open connections to the nodes
-    [Arguments]    ${odl_ip}=${ODL_SYSTEM_IP}
-    SSHLibrary.Set Default Configuration    timeout=${DEFAULT_DEVSTACK_PROMPT_TIMEOUT}
-    DevstackUtils.Get DevStack Nodes Data
-    RequestsLibrary.Create Session    session    http://${odl_ip}:${RESTCONFPORT}    auth=${AUTH}    headers=${HEADERS}
-
-Write Commands Until Prompt
-    [Documentation]    quick wrapper for Write and Read Until Prompt Keywords to make test cases more readable
-    [Arguments]    ${cmd}    ${timeout}=${DEFAULT_DEVSTACK_PROMPT_TIMEOUT}
-    SSHLibrary.Set Client Configuration    timeout=${timeout}
-    SSHLibrary.Read
-    SSHLibrary.Write    ${cmd};echo Command Returns $?
-    ${output} =    SSHLibrary.Read Until Prompt
-    RETURN    ${output}
-
-Write Commands Until Prompt And Log
-    [Documentation]    quick wrapper for Write and Read Until Prompt Keywords to make test cases more readable
-    [Arguments]    ${cmd}    ${timeout}=${DEFAULT_DEVSTACK_PROMPT_TIMEOUT}
-    ${output} =    DevstackUtils.Write Commands Until Prompt    ${cmd}    ${timeout}
-    BuiltIn.Log    ${output}
-    RETURN    ${output}
-
-Log Devstack Nodes Data
-    ${output} =    BuiltIn.Catenate
-    ...    SEPARATOR=\n
-    ...    OS_CNTL_HOSTNAME: ${OS_CNTL_HOSTNAME} - OS_CNTL_IP: ${OS_CNTL_IP} - OS_CONTROL_NODE_IP: ${OS_CONTROL_NODE_IP}
-    ...    OS_CMP1_HOSTNAME: ${OS_CMP1_HOSTNAME} - OS_CMP1_IP: ${OS_CMP1_IP} - OS_COMPUTE_1_IP: ${OS_COMPUTE_1_IP}
-    ...    OS_CMP2_HOSTNAME: ${OS_CMP2_HOSTNAME} - OS_CMP2_IP: ${OS_CMP2_IP} - OS_COMPUTE_2_IP: ${OS_COMPUTE_2_IP}
-    ...    OS_ALL_IPS: @{OS_ALL_IPS}
-    ...    OS_CMP_IPS: @{OS_CMP_IPS}
-    ...    OS_NODE_CNT: ${OS_NODE_CNT}
-    ...    OS_ALL_CONN_IDS: @{OS_ALL_CONN_IDS}
-    ...    OS_CMP_CONN_IDS: @{OS_CMP_CONN_IDS}
-    BuiltIn.Log    DevStack Nodes Data:\n${output}
-
-Get DevStack Hostnames
-    [Documentation]    Assign hostname global variables for DevStack nodes
-    ${OS_CNTL_HOSTNAME} =    OpenStackOperations.Get Hypervisor Hostname From IP    ${OS_CNTL_IP}
-    ${OS_CMP1_HOSTNAME} =    OpenStackOperations.Get Hypervisor Hostname From IP    ${OS_CMP1_IP}
-    ${OS_CMP2_HOSTNAME} =    OpenStackOperations.Get Hypervisor Hostname From IP    ${OS_CMP2_IP}
-    BuiltIn.Set Suite Variable    ${OS_CNTL_HOSTNAME}
-    BuiltIn.Set Suite Variable    ${OS_CMP1_HOSTNAME}
-    BuiltIn.Set Suite Variable    ${OS_CMP2_HOSTNAME}
-
-Set Node Data For AllinOne Setup
-    [Documentation]    Assign global variables for DevStack nodes where the Control Node enables Compute service also.
-    BuiltIn.Set Suite Variable    ${OS_CMP1_IP}    ${OS_CNTL_IP}
-    BuiltIn.Set Suite Variable    ${OS_CMP2_IP}    ${OS_CNTL_IP}
-    BuiltIn.Set Suite Variable    @{OS_ALL_IPS}    ${OS_CNTL_IP}
-    BuiltIn.Set Suite Variable    @{OS_CMP_IPS}    ${OS_CNTL_IP}
-    BuiltIn.Set Suite Variable    ${OS_CMP1_CONN_ID}    ${OS_CNTL_CONN_ID}
-    BuiltIn.Set Suite Variable    ${OS_CMP2_CONN_ID}    ${OS_CNTL_CONN_ID}
-    BuiltIn.Set Suite Variable    @{OS_ALL_CONN_IDS}    ${OS_CNTL_CONN_ID}
-    BuiltIn.Set Suite Variable    @{OS_CMP_CONN_IDS}    ${OS_CNTL_CONN_ID}
-
-Set Node Data For Control And Compute Node Setup
-    [Documentation]    Assign global variables for DevStack nodes where the control node is also the compute
-    BuiltIn.Set Suite Variable    ${OS_CMP1_IP}    ${OS_CNTL_IP}
-    BuiltIn.Set Suite Variable    ${OS_CMP2_IP}    ${OS_COMPUTE_1_IP}
-    BuiltIn.Set Suite Variable    @{OS_ALL_IPS}    ${OS_CNTL_IP}    ${OS_CMP2_IP}
-    BuiltIn.Set Suite Variable    @{OS_CMP_IPS}    ${OS_CMP1_IP}    ${OS_CMP2_IP}
-    BuiltIn.Set Suite Variable    ${OS_CMP1_CONN_ID}    ${OS_CNTL_CONN_ID}
-    DevstackUtils.Open Connection    OS_CMP2_CONN_ID    ${OS_COMPUTE_1_IP}
-    BuiltIn.Set Suite Variable    @{OS_ALL_CONN_IDS}    ${OS_CNTL_CONN_ID}    ${OS_CMP2_CONN_ID}
-    BuiltIn.Set Suite Variable    @{OS_CMP_CONN_IDS}    ${OS_CNTL_CONN_ID}    ${OS_CMP2_CONN_ID}
-
-Set Node Data For Control And Two Compute Node Setup
-    [Documentation]    Assign global variables for DevStack nodes where the control node is different than the compute
-    BuiltIn.Set Suite Variable    ${OS_CMP1_IP}    ${OS_COMPUTE_1_IP}
-    BuiltIn.Set Suite Variable    ${OS_CMP2_IP}    ${OS_COMPUTE_2_IP}
-    BuiltIn.Set Suite Variable    @{OS_ALL_IPS}    ${OS_CNTL_IP}    ${OS_CMP1_IP}    ${OS_CMP2_IP}
-    BuiltIn.Set Suite Variable    @{OS_CMP_IPS}    ${OS_CMP1_IP}    ${OS_CMP2_IP}
-    DevstackUtils.Open Connection    OS_CMP1_CONN_ID    ${OS_COMPUTE_1_IP}
-    DevstackUtils.Open Connection    OS_CMP2_CONN_ID    ${OS_COMPUTE_2_IP}
-    BuiltIn.Set Suite Variable    @{OS_ALL_CONN_IDS}    ${OS_CNTL_CONN_ID}    ${OS_CMP1_CONN_ID}    ${OS_CMP2_CONN_ID}
-    BuiltIn.Set Suite Variable    @{OS_CMP_CONN_IDS}    ${OS_CMP1_CONN_ID}    ${OS_CMP2_CONN_ID}
-
-Get DevStack Nodes Data
-    [Documentation]    Assign global variables for DevStack nodes
-    BuiltIn.Set Suite Variable    ${OS_CNTL_IP}    ${OS_CONTROL_NODE_IP}
-    DevstackUtils.Open Connection    OS_CNTL_CONN_ID    ${OS_CNTL_IP}
-    IF    "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp"
-        DevstackUtils.Set Node Data For AllinOne Setup
-    ELSE IF    "${OPENSTACK_TOPO}" == "1cmb-0ctl-1cmp"
-        DevstackUtils.Set Node Data For Control And Compute Node Setup
-    ELSE IF    "${OPENSTACK_TOPO}" == "0cmb-1ctl-2cmp"
-        DevstackUtils.Set Node Data For Control And Two Compute Node Setup
-    END
-    ${OS_NODE_CNT} =    BuiltIn.Get Length    ${OS_ALL_IPS}
-    BuiltIn.Set Suite Variable    ${OS_NODE_CNT}
-    DevstackUtils.Get DevStack Hostnames
-    DevstackUtils.Log Devstack Nodes Data
diff --git a/csit/libraries/L2GatewayOperations.robot b/csit/libraries/L2GatewayOperations.robot
deleted file mode 100644 (file)
index 6afd2c6..0000000
+++ /dev/null
@@ -1,361 +0,0 @@
-*** Settings ***
-Documentation       L2Gateway Operations Library. This library has useful keywords for various actions on Hwvtep and Ovs connectivity. Most of the keywords expects that ovs_conn_id,ovs2_conn_id, hwvtep_conn_id, hwvtep2_conn_id and OS_CNTL_CONN_ID are available.
-
-Library             SSHLibrary
-Library             Collections
-Library             RequestsLibrary
-Resource            OVSDB.robot
-Resource            Utils.robot
-Resource            MininetKeywords.robot
-Resource            VpnOperations.robot
-Resource            OpenStackOperations.robot
-Resource            DevstackUtils.robot
-Resource            ../variables/l2gw/Variables.robot
-
-
-*** Variables ***
-${L2GW_VAR_BASE}        ${CURDIR}/../variables/l2gw
-${INTEGRATION_BRIDGE}   br-int
-
-
-*** Keywords ***
-Add Ovs Bridge Manager Controller And Verify
-    [Documentation]    Keyword to set OVS manager and controller to ${ODL_IP} for the OVS IP connected in ${conn_id} and verify the entries in OVSDB NETWORK TOPOLOGY and NETSTAT results.
-    [Arguments]    ${conn_id}=${OS_CMP1_CONN_ID}    ${hwvtep_bridge}=${HWVTEP_BRIDGE}
-    ${output}=    Exec Command    ${conn_id}    ${OVS_RESTART}
-    ${output}=    Exec Command    ${conn_id}    ${OVS_DEL_MGR}
-    ${output}=    Exec Command    ${conn_id}    ${OVS_DEL_CTRLR} ${INTEGRATION_BRIDGE}
-    ${output}=    Exec Command    ${conn_id}    ${DEL_OVS_BRIDGE} ${INTEGRATION_BRIDGE}
-    ${output}=    Exec Command    ${conn_id}    ${OVS_SHOW}
-    Should Not Contain    ${output}    Manager
-    Should Not Contain    ${output}    Controller
-    ${output}=    Exec Command    ${conn_id}    ${CREATE_OVS_BRIDGE} ${INTEGRATION_BRIDGE}
-    ${output}=    Exec Command    ${conn_id}    ${SET_FAIL_MODE} ${INTEGRATION_BRIDGE} secure
-    ${output}=    Exec Command    ${conn_id}    ${OVS_SET_MGR}:${ODL_IP}:${OVSDBPORT}
-    ${output}=    Exec Command    ${conn_id}    ${OVS_SET_CTRLR} ${INTEGRATION_BRIDGE} tcp:${ODL_IP}:${ODL_OF_PORT}
-    Wait Until Keyword Succeeds
-    ...    60s
-    ...    2s
-    ...    Verify Strings In Command Output
-    ...    ${conn_id}
-    ...    ${OVS_SHOW}
-    ...    Manager "tcp:${ODL_IP}:${OVSDBPORT}"
-    ...    Controller "tcp:${ODL_IP}:${ODL_OF_PORT}"
-    ${output}=    Exec Command    ${conn_id}    ${NETSTAT}
-    Wait Until Keyword Succeeds    30s    2s    Validate Regexp In String    ${output}    ${NETSTAT_OVSDB_REGEX}
-    Wait Until Keyword Succeeds    30s    2s    Validate Regexp In String    ${output}    ${NETSTAT_OF_REGEX}
-    @{list_to_check}=    Create List    bridge/${INTEGRATION_BRIDGE}    bridge/${hwvtep_bridge}
-    Wait Until Keyword Succeeds
-    ...    30s
-    ...    2s
-    ...    Check For Elements At URI
-    ...    ${OVSDB_NETWORK_TOPOLOGY}
-    ...    ${list_to_check}
-    ...    session
-
-Create Itm Tunnel Between Hwvtep and Ovs
-    [Documentation]    Keyword to create ITM Tunnel Between HWVTEP and OVS connection in ${ovs_id}.
-    [Arguments]    ${ovs_id}    ${ovs_ip}
-    ${dpn_id}=    Get Dpnid Decimal    ${ovs_id}
-    ${first_two_octets}    ${third_octet}    ${last_octet}=    Split String From Right    ${ovs_ip}    .    2
-    ${prefix}=    Set Variable    ${first_two_octets}.0.0/24
-    TemplatedRequests.Post_As_Json_Templated
-    ...    folder=${L2GW_VAR_BASE}/itm_create
-    ...    mapping={"dpnid":"${dpn_id}","ip":"${ovs_ip}","prefix":"${prefix}"}
-    ...    session=session
-    ${output}=    ITM Get Tunnels
-    Log    ${output}
-
-Add Vtep Manager And Verify
-    [Documentation]    Keyword to add vtep manager for HWVTEP connected in ${conn_id} as ${odl_ip} received in argument and verify the entries in NETSTAT and HWVTEP NETWORK TOPOLOGY.
-    [Arguments]    ${odl_ip}    ${conn_id}=${hwvtep_conn_id}
-    ${set_manager_command}=    Set Variable    ${VTEP_ADD_MGR}:${odl_ip}:${OVSDBPORT}
-    ${output}=    Exec Command    ${conn_id}    ${set_manager_command}
-    Log    ${output}
-    @{list_to_verify}=    Create List    ${odl_ip}    state=ACTIVE
-    Wait Until Keyword Succeeds    60s    2s    Verify Vtep List    ${conn_id}    ${MANAGER_TABLE}    @{list_to_verify}
-    ${output}=    Exec Command    ${conn_id}    ${NETSTAT}
-    Should Contain    ${output}    ${OVSDBPORT}
-    @{list_to_check}=    Create List    ${odl_ip}
-    Wait Until Keyword Succeeds
-    ...    30s
-    ...    2s
-    ...    Utils.Check For Elements At URI
-    ...    ${HWVTEP_NETWORK_TOPOLOGY}
-    ...    ${list_to_check}
-    ...    session
-
-Create Verify L2Gateway
-    [Documentation]    Keyword to create an L2 Gateway ${gw_name} for bridge ${bridge_name} connected to interface ${intf_name} (Using Neutron CLI).
-    [Arguments]    ${bridge_name}    ${intf_name}    ${gw_name}
-    ${l2gw_output}=    OpenStackOperations.Create L2Gateway    ${bridge_name}    ${intf_name}    ${gw_name}
-    Log    ${l2gw_output}
-    ${output}=    OpenStackOperations.Get All L2Gateway
-    Log    ${output}
-    Should Contain    ${output}    ${gw_name}
-    @{list_to_check}=    Create List    ${gw_name}
-    Utils.Check For Elements At URI    ${L2GW_LIST_REST_URL}    ${list_to_check}    session
-    RETURN    ${l2gw_output}
-
-Update And Verify L2Gateway
-    [Documentation]    Keyword to add interface {intf_name_2} to an existing L2 Gateway ${gw_name} for bridge ${bridge_name} (Using Neutron CLI).
-    [Arguments]    ${bridge_name}    ${gw_name}    ${intf_name_1}    ${intf_name_2}
-    ${l2gw_output}=    OpenStackOperations.Update L2Gateway
-    ...    ${bridge_name}
-    ...    ${gw_name}
-    ...    ${intf_name_1}
-    ...    ${intf_name_2}
-    ${output}=    OpenStackOperations.Get All L2Gateway
-    Log    ${output}
-    Should Contain    ${output}    ${gw_name}
-    Should Contain    ${output}    ${intf_name_1}
-    Should Contain    ${output}    ${intf_name_2}
-    @{list_to_check}=    Create List    ${gw_name}
-    Utils.Check For Elements At URI    ${L2GW_LIST_REST_URL}    ${list_to_check}    session
-    RETURN    ${l2gw_output}
-
-Delete L2Gateway
-    [Documentation]    Keyword to delete the L2 Gateway ${gw_name} received in argument.
-    ...    If ${check_for_null} is True return of 404 is treated as empty list. From Neon onwards,
-    ...    an empty list is always returned as null, giving 404 on rest call.
-    [Arguments]    ${gw_name}    ${check_for_null}=False
-    ${output}=    Exec Command    ${OS_CNTL_CONN_ID}    ${L2GW_DELETE} ${gw_name}
-    Log    ${output}
-    @{list_to_check}=    Create List    ${gw_name}
-    BuiltIn.Wait Until Keyword Succeeds
-    ...    5s
-    ...    1s
-    ...    Utils.Check For Elements Not At URI
-    ...    ${L2GW_LIST_REST_URL}
-    ...    ${list_to_check}
-    ...    session
-    ...    check_for_null=${check_for_null}
-
-Create Verify L2Gateway Connection
-    [Documentation]    Keyword to create a new L2 Gateway Connection for ${gw_name} to ${net_name} (Using Neutron CLI).
-    [Arguments]    ${gw_name}    ${net_name}
-    ${l2gw_output}=    OpenStackOperations.Create L2Gateway Connection    ${gw_name}    ${net_name}
-    Log    ${l2gw_output}
-    ${l2gw_id}=    OpenStackOperations.Get L2gw Id    ${gw_name}
-    ${output}=    OpenStackOperations.Get All L2Gateway Connection
-    Log    ${output}
-    Should Contain    ${output}    ${l2gw_id}
-    @{list_to_check}=    Create List    ${l2gw_id}
-    Utils.Check For Elements At URI    ${L2GW_CONN_LIST_REST_URL}    ${list_to_check}    session
-    RETURN    ${l2gw_output}
-
-Verify L2Gateway Connection
-    [Documentation]    Keyword to verify existing L2 Gateway Connection for ${gw_name} to ${net_name} $(Using Neutron CLI).
-    [Arguments]    ${gw_name}    ${net_name}
-    ${l2gw_id}=    OpenStackOperations.Get L2gw Id    ${gw_name}
-    ${output}=    OpenStackOperations.Get All L2Gateway Connection
-    Log    ${output}
-    Should Contain    ${output}    ${l2gw_id}
-    @{list_to_check}=    Create List    ${l2gw_id}
-    Utils.Check For Elements At URI    ${L2GW_CONN_LIST_REST_URL}    ${list_to_check}    session
-
-Delete L2Gateway Connection
-    [Documentation]    Delete the L2 Gateway connection existing for Gateway ${gw_name} received in argument (Using Neutron CLI).
-    ...    If ${check_for_null} is True return of 404 is treated as empty list. From Neon onwards, an empty list is always
-    ...    returned as null, giving 404 on rest call.
-    [Arguments]    ${gw_name}    ${check_for_null}=False
-    ${l2gw_conn_id}=    OpenStackOperations.Get L2gw Connection Id    ${gw_name}
-    ${output}=    Exec Command    ${OS_CNTL_CONN_ID}    ${L2GW_CONN_DELETE} ${l2gw_conn_id}
-    Log    ${output}
-    @{list_to_check}=    Create List    ${l2gw_conn_id}
-    BuiltIn.Wait Until Keyword Succeeds
-    ...    5s
-    ...    1s
-    ...    Utils.Check For Elements Not At URI
-    ...    ${L2GW_CONN_LIST_REST_URL}
-    ...    ${list_to_check}
-    ...    session
-    ...    check_for_null=${check_for_null}
-
-Update Port For Hwvtep
-    [Documentation]    Keyword to update the Neutron Ports for specific configuration required to connect to HWVTEP (Using REST).
-    [Arguments]    ${port_name}
-    ${port_id}=    Get Port Id    ${port_name}
-    Log    ${port_id}
-    ${json_data}=    Get Neutron Port Rest    ${port_id}
-    Should Contain    ${json_data}    ${STR_VIF_TYPE}
-    Should Contain    ${json_data}    ${STR_VNIC_TYPE}
-    ${json_data}=    Replace String    ${json_data}    ${STR_VIF_TYPE}    ${STR_VIF_REPLACE}
-    ${json_data}=    Replace String    ${json_data}    ${STR_VNIC_TYPE}    ${STR_VNIC_REPLACE}
-    ${return}=    OpenStackOperations.Update Port Rest    ${port_id}    ${json_data}
-    ${output}=    OpenStackOperations.Get Neutron Port Rest    ${port_id}
-    Log    ${output}
-    Should Contain    ${output}    ${STR_VIF_REPLACE}
-    Should Contain    ${output}    ${STR_VNIC_REPLACE}
-    Should Not Contain    ${output}    ${STR_VIF_TYPE}
-    Should Not Contain    ${output}    ${STR_VNIC_TYPE}
-    RETURN    ${return}
-
-Attach Port To Hwvtep Namespace
-    [Documentation]    Keyword to assign the ${port_mac} to the tap port ${tap_name} in namespace ${ns_name}
-    [Arguments]    ${port_mac}    ${ns_name}    ${tap_name}    ${conn_id}=${hwvtep_conn_id}
-    Exec Command    ${conn_id}    ${NETNS_EXEC} ${ns_name} ${IFCONF} ${tap_name} ${HW_ETHER} ${port_mac}
-    ${output}=    Exec Command    ${conn_id}    ${NETNS_EXEC} ${ns_name} ${IFCONF}
-    Should Contain    ${output}    ${port_mac}
-
-Namespace Dhclient Verify
-    [Documentation]    Keyword to run dhclient for the tap port ${ns_tap} and verify if it has got assigned with ${ns_port_ip}.
-    [Arguments]    ${ns_name}    ${ns_tap}    ${ns_port_ip}    ${conn_id}=${hwvtep_conn_id}    ${hwvtep_ip}=${HWVTEP_IP}
-    Start Command In Hwvtep    ${NETNS_EXEC} ${ns_name} dhclient ${ns_tap}    ${hwvtep_ip}
-    Wait Until Keyword Succeeds
-    ...    60s
-    ...    2s
-    ...    Verify Strings In Command Output
-    ...    ${conn_id}
-    ...    ${NETNS_EXEC} ${ns_name} ${IFCONF}
-    ...    ${ns_port_ip}
-
-Verify Strings In Command Output
-    [Documentation]    Keyword to run the ${command} in ${conn_id} and verify if the output contains the list @{string_list}.
-    [Arguments]    ${conn_id}    ${command}    @{string_list}
-    ${output}=    Exec Command    ${conn_id}    ${command}
-    FOR    ${item}    IN    @{string_list}
-        Should Contain    ${output}    ${item}
-    END
-
-Verify Ping In Namespace Extra Timeout
-    [Documentation]    Keyword to ping the IP ${vm_ip} from ${ns_name} and verify MCAS Local Table contains ${ns_port_mac}.
-    [Arguments]    ${ns_name}    ${ns_port_mac}    ${vm_ip}    ${conn_id}=${hwvtep_conn_id}    ${hwvtep_ip}=${HWVTEP_IP}
-    ${output}=    Exec Command    ${conn_id}    ${NETNS_EXEC} ${ns_name} ${IFCONF}
-    Log    ${output}
-    ${output}=    Exec Command    ${conn_id}    ${NETNS_EXEC} ${ns_name} ping -c3 ${vm_ip}    30s
-    Log    ${output}
-    Should Not Contain    ${output}    ${PACKET_LOSS}
-    Wait Until Keyword Succeeds    30s    2s    Verify Macs Local Table While Ping    ${ns_port_mac}    ${conn_id}
-
-Verify Ping Fails In Namespace
-    [Documentation]    Keyword to ping the IP ${vm_ip} from ${ns_name} and should verify that it fails
-    [Arguments]    ${ns_name}    ${ns_port_mac}    ${vm_ip}    ${conn_id}=${hwvtep_conn_id}    ${hwvtep_ip}=${HWVTEP_IP}
-    ${output}=    Exec Command    ${conn_id}    ${NETNS_EXEC} ${ns_name} ping -c3 ${vm_ip}    30s
-    Log    ${output}
-    Should Contain    ${output}    ${PACKET_LOSS}
-
-Verify Macs Local Table While Ping
-    [Documentation]    Keyword to check if ${mac} is available under UCAST_MACS_LOCALE_TABLE of HWVTEP dump table.
-    [Arguments]    ${mac}    ${conn_id}
-    Verify Vtep List    ${conn_id}    ${UCAST_MACS_LOCALE_TABLE}    ${mac}
-
-Verify Nova VM IP
-    [Documentation]    Keyword to verify if the VM has received IP, and to verify it is not null.
-    [Arguments]    ${vm_name}
-    @{vm_ip}    ${dhcp_ip}=    Get VM IPs    ${vm_name}
-    Should Not Contain    ${vm_ip}    None
-    Should Not Contain    ${dhcp_ip}    None
-    RETURN    ${vm_ip}[0]
-
-Get L2gw Debug Info
-    [Documentation]    Keyword to collect the general debug information required for HWVTEP Test Suite.
-    Exec Command    ${hwvtep_conn_id}    ${OVSDB_CLIENT_DUMP}
-    OpenStackOperations.Get Test Teardown Debugs
-    ${resp}=    RequestsLibrary.Get Request    session    ${CONFIG_API}/itm-state:external-tunnel-list/
-    Log    ${resp.text}
-    ${resp}=    RequestsLibrary.Get Request
-    ...    session
-    ...    ${CONFIG_API}/network-topology:network-topology/topology/hwvtep:1
-    Log    ${resp.text}
-    ${resp}=    RequestsLibrary.Get Request
-    ...    session
-    ...    ${OPERATIONAL_API}/network-topology:network-topology/topology/hwvtep:1
-    Log    ${resp.text}
-    Exec Command    ${OS_CNTL_CONN_ID}    cat /etc/neutron/neutron.conf
-    Exec Command    ${OS_CNTL_CONN_ID}    cat /etc/neutron/l2gw_plugin.ini
-    Exec Command    ${OS_CNTL_CONN_ID}    ps -ef | grep neutron-server
-
-Start Command In Hwvtep
-    [Documentation]    Keyword to execute Start Command in HWVTEP IP.
-    [Arguments]    ${command}    ${hwvtep_ip}
-    ${conn_id}=    SSHLibrary.Open Connection    ${hwvtep_ip}    prompt=${DEFAULT_LINUX_PROMPT}    timeout=30s
-    Log    ${conn_id}
-    Flexible SSH Login    ${DEFAULT_USER}    ${DEFAULT_PASSWORD}
-    Start Command    ${command}
-    ${output}=    Exec Command    ${conn_id}    sudo ovs-ofctl dump-flows ${INTEGRATION_BRIDGE} -O Openflow13
-    Log    ${output}
-    close connection
-
-Verify Vtep List
-    [Documentation]    Keyword to run vtep-ctl list for the table ${table_name} and verify the list @{list} contents exists in output.
-    [Arguments]    ${conn_id}    ${table_name}    @{list}
-    ${output}=    Exec Command    ${conn_id}    ${VTEP LIST} ${table_name}
-    FOR    ${item}    IN    @{list}
-        Should Contain    ${output}    ${item}
-    END
-
-Get Vtep List
-    [Documentation]    Keyword to return the contents of vtep-ctl list for table ${table_name}.
-    [Arguments]    ${table_name}    ${conn_id}=${hwvtep_conn_id}
-    ${output}=    Exec Command    ${conn_id}    ${VTEP LIST} ${table_name}
-    RETURN    ${output}
-
-Get Dpnid Decimal
-    [Documentation]    Keyword to return DPN ID in decimal for the br-int in IP connected via ${conn_id}.
-    [Arguments]    ${conn_id}
-    ${output}=    Exec Command    ${conn_id}    ${GET_DPNID}
-    Log    ${output}
-    ${splitted_output}=    Split String    ${output}    ${EMPTY}
-    ${dpn_id}=    Get from List    ${splitted_output}    0
-    Log    ${dpn_id}
-    RETURN    ${dpn_id}
-
-Verify Ovs Tunnel
-    [Documentation]    Keyword to verify that the OVS tunnel entries are configured for OVS and HWVTEP.
-    [Arguments]    ${hwvtep_ip}    ${ovs_ip}    ${seg_id}=${NET_1_SEGID}    ${conn_id}=${hwvtep_conn_id}
-    ${output}=    Exec Command    ${conn_id}    ${OVS_SHOW}
-    Log    ${output}
-    Should Contain    ${output}    key="${seg_id}", remote_ip="${ovs_ip}"
-    ${output}=    Exec Command    ${OS_CMP1_CONN_ID}    ${OVS_SHOW}
-    Log    ${output}
-    Should Contain    ${output}    key=flow, local_ip="${ovs_ip}", remote_ip="${hwvtep_ip}"
-
-Get Vtep Field Values From Table
-    [Documentation]    Keyword to return specific field value received in ${column_name} from the vtep-ctl list for ${table_name}.
-    [Arguments]    ${table_name}    ${column_name}    ${conn_id}=${hwvtep_conn_id}
-    ${output}=    Exec Command    ${conn_id}    ${VTEP_LIST_COLUMN}${column_name} list ${table_name} | awk '{print $3}'
-    Log    ${output}
-    @{keys}=    Split String    ${output}
-    Log    ${keys}
-    RETURN    ${keys}
-
-Validate Regexp In String
-    [Arguments]    ${string}    ${regexp}    ${verify_count}=1
-    @{occr}=    Get Regexp Matches    ${string}    ${regexp}
-    ${count}=    Get Length    ${occr}
-    Should Be Equal As Integers    ${count}    ${verify_count}
-
-Exec Command
-    [Arguments]    ${conn_id}    ${command}    ${timeout}=10s
-    Switch Connection    ${conn_id}
-    ${output}=    DevstackUtils.Write Commands Until Prompt    ${command}    ${timeout}
-    Log    ${output}
-    RETURN    ${output}
-
-Verify Elan Flow Entries
-    [Documentation]    Verify Flows Are Present For ELAN service
-    [Arguments]    ${ip}    ${srcMacAddrs}    ${destMacAddrs}
-    ${flow_output}=    Run Command On Remote System
-    ...    ${ip}
-    ...    sudo ovs-ofctl -O OpenFlow13 dump-flows ${INTEGRATION_BRIDGE}
-    Log    ${flow_output}
-    Should Contain    ${flow_output}    table=50
-    ${sMac_output}=    Get Lines Containing String    ${flow_output}    table=50
-    Log    ${sMac_output}
-    FOR    ${sMacAddr}    IN    @{srcMacAddrs}
-        ${resp}=    Should Contain    ${sMac_output}    dl_src=${sMacAddr}
-    END
-    Should Contain    ${flow_output}    table=51
-    ${dMac_output}=    Get Lines Containing String    ${flow_output}    table=51
-    Log    ${dMac_output}
-    FOR    ${dMacAddr}    IN    @{destMacAddrs}
-        ${resp}=    Should Contain    ${dMac_output}    dl_dst=${dMacAddr}
-    END
-    Should Contain    ${flow_output}    table=52
-    ${sMac_output}=    Get Lines Containing String    ${flow_output}    table=52
-    Log    ${sMac_output}
-
-Cleanup L2GW Optional Resources
-    [Documentation]    Cleanup resources that are only allocated on certain combos...
-    OpenStackOperations.Delete Port    ${HWVTEP_PORT_3}
diff --git a/csit/libraries/LiveMigration.robot b/csit/libraries/LiveMigration.robot
deleted file mode 100644 (file)
index 3bfefd1..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-*** Settings ***
-Documentation       Live Migration Library, This can be used by Live Migration tests.
-
-Library             SSHLibrary
-Resource            DevstackUtils.robot
-Resource            OpenStackOperations.robot
-Resource            SSHKeywords.robot
-Resource            ../variables/Variables.robot
-
-
-*** Variables ***
-${NOVA_CPU_CONF}                    /etc/nova/nova-cpu.conf
-${NOVA_COMPUTE_SERVICE}             n-cpu
-${CMP_INSTANCES_DEFAULT_PATH}       /opt/stack/data/nova/instances
-
-
-*** Keywords ***
-Live Migration Suite Setup
-    [Documentation]    Suite Setup For Live Migration Tests
-    OpenStackOperations.OpenStack Suite Setup
-    LiveMigration.Setup Live Migration In Compute Nodes
-
-Live Migration Suite Teardown
-    [Documentation]    Suite Teardown for Live Migration Tests
-    LiveMigration.UnSet Live Migration In Compute Nodes
-    OpenStackOperations.OpenStack Suite Teardown
-
-Setup Live Migration In Compute Nodes
-    [Documentation]    Set instances to be created in the shared directory.
-    FOR    ${conn_id}    IN    @{OS_CMP_CONN_IDS}
-        OpenStackOperations.Modify OpenStack Configuration File
-        ...    ${conn_id}
-        ...    ${NOVA_CPU_CONF}
-        ...    DEFAULT
-        ...    instances_path
-        ...    ${CMP_INSTANCES_SHARED_PATH}
-        OpenStackOperations.Restart DevStack Service    ${conn_id}    ${NOVA_COMPUTE_SERVICE}
-    END
-
-UnSet Live Migration In Compute Nodes
-    [Documentation]    Clear settings done for Live Migration
-    FOR    ${conn_id}    IN    @{OS_CMP_CONN_IDS}
-        OpenStackOperations.Modify OpenStack Configuration File
-        ...    ${conn_id}
-        ...    ${NOVA_CPU_CONF}
-        ...    DEFAULT
-        ...    instances_path
-        ...    ${CMP_INSTANCES_DEFAULT_PATH}
-        OpenStackOperations.Restart DevStack Service    ${conn_id}    ${NOVA_COMPUTE_SERVICE}
-    END
index 7393ab6ee1d06c47c0a92062c9c2a30a8ec934da..0f53041bd99387cd15be3c65c0139a4d0a1b347b 100644 (file)
@@ -533,56 +533,6 @@ Verify Dump Flows For Specific Table
         END
     END
 
-Verify Vni Segmentation Id and Tunnel Id
-    [Documentation]    Get tunnel id and packet count from specified table id and destination port mac address
-    [Arguments]    ${port1}    ${port2}    ${net1}    ${net2}    ${vm1_ip}    ${vm2_ip}
-    ...    ${ip}=""
-    ${port_mac1} =    OpenStackOperations.Get Port Mac    ${port1}
-    ${port_mac2} =    OpenStackOperations.Get Port Mac    ${port2}
-    ${segmentation_id1} =    OpenStackOperations.Get Network Segmentation Id    ${net1}
-    ${segmentation_id2} =    OpenStackOperations.Get Network Segmentation Id    ${net2}
-    ${egress_tun_id}    ${before_count_egress_port1} =    OVSDB.Get Tunnel Id And Packet Count
-    ...    ${OS_CMP1_CONN_ID}
-    ...    ${L3_TABLE}
-    ...    tun_id=${segmentation_id2}
-    ...    mac=${port_mac2}
-    BuiltIn.Should Be Equal As Numbers    ${segmentation_id2}    ${egress_tun_id}
-    ${egress_tun_id}    ${before_count_egress_port2} =    OVSDB.Get Tunnel Id And Packet Count
-    ...    ${OS_CMP2_CONN_ID}
-    ...    ${L3_TABLE}
-    ...    tun_id=${segmentation_id1}
-    ...    mac=${port_mac1}
-    BuiltIn.Should Be Equal As Numbers    ${segmentation_id1}    ${egress_tun_id}
-    ${ingress_tun_id}    ${before_count_ingress_port1} =    OVSDB.Get Tunnel Id And Packet Count
-    ...    ${OS_CMP1_CONN_ID}
-    ...    ${INTERNAL_TUNNEL_TABLE}
-    ...    tun_id=${segmentation_id1}
-    BuiltIn.Should Be Equal As Numbers    ${segmentation_id1}    ${ingress_tun_id}
-    ${ingress_tun_id}    ${before_count_ingress_port2} =    OVSDB.Get Tunnel Id And Packet Count
-    ...    ${OS_CMP2_CONN_ID}
-    ...    ${INTERNAL_TUNNEL_TABLE}
-    ...    tun_id=${segmentation_id2}
-    BuiltIn.Should Be Equal As Numbers    ${segmentation_id2}    ${ingress_tun_id}
-    IF    '${ip}'=='ipv4'
-        ${ping_cmd} =    BuiltIn.Set Variable    ping -c ${DEFAULT_PING_COUNT} ${vm2_ip}
-    ELSE
-        ${ping_cmd} =    BuiltIn.Set Variable    ping6 -c ${DEFAULT_PING_COUNT} ${vm2_ip}
-    END
-    ${output} =    OpenStackOperations.Execute Command on VM Instance    ${net1}    ${vm1_ip}    ${ping_cmd}
-    BuiltIn.Should Contain    ${output}    64 bytes
-    BuiltIn.Wait Until Keyword Succeeds
-    ...    60s
-    ...    5s
-    ...    OVSDB.Verify Vni Packet Count After Traffic
-    ...    ${before_count_egress_port1}
-    ...    ${before_count_egress_port2}
-    ...    ${before_count_ingress_port1}
-    ...    ${before_count_ingress_port2}
-    ...    ${segmentation_id1}
-    ...    ${segmentation_id2}
-    ...    ${port_mac1}
-    ...    ${port_mac2}
-
 Verify Vni Packet Count After Traffic
     [Documentation]    Verify the packet count after the traffic sent
     [Arguments]    ${before_count_egress_port1}    ${before_count_egress_port2}    ${before_count_ingress_port1}    ${before_count_ingress_port2}    ${segmentation_id1}    ${segmentation_id2}
diff --git a/csit/libraries/OpenStackOperations.robot b/csit/libraries/OpenStackOperations.robot
deleted file mode 100644 (file)
index 35bf4fb..0000000
+++ /dev/null
@@ -1,1753 +0,0 @@
-*** Settings ***
-Documentation       Openstack library. This library is useful for tests to create network, subnet, router and vm instances
-
-Library             Collections
-Library             Process
-Library             OperatingSystem
-Library             RequestsLibrary
-Library             SSHLibrary
-Library             String
-Resource            DataModels.robot
-Resource            DevstackUtils.robot
-Resource            KarafKeywords.robot
-Resource            L2GatewayOperations.robot
-Resource            ODLTools.robot
-Resource            OVSDB.robot
-Resource            SetupUtils.robot
-Resource            SSHKeywords.robot
-Resource            Tcpdump.robot
-Resource            Utils.robot
-Resource            ../variables/Variables.robot
-Resource            ../variables/openflowplugin/Variables.robot
-
-
-*** Variables ***
-@{VALIDATION_KEYWORDS}
-...                         Verify Services
-...                         Verify Expected Default Tunnels
-...                         Verify Expected Default Tables On Nodes
-${VALIDATION_FILE}          /tmp/validations.txt
-@{DIAG_SERVICES}    OPENFLOW    IFM    ITM    DATASTORE    ELAN    OVSDB
-
-
-*** Keywords ***
-Get Tenant ID From Security Group
-    [Documentation]    Returns tenant ID by reading it from existing default security-group.
-    ${output} =    OpenStack CLI    openstack security group show default | grep "| tenant_id" | awk '{print $4}'
-    RETURN    ${output}
-
-Get Tenant ID From Network
-    [Documentation]    Returns tenant ID by reading it from existing network.
-    [Arguments]    ${network_uuid}
-    ${resp} =    TemplatedRequests.Get_From_Uri
-    ...    uri=${CONFIG_API}/neutron:neutron/networks/network/${network_uuid}/
-    ...    accept=${ACCEPT_EMPTY}
-    ...    session=session
-    ${temp_vars} =    BuiltIn.Set Variable    ['network'][0]['tenant-id']
-    ${tenant_id} =    Utils.Extract Value From Content    ${resp}    ${temp_vars}
-    RETURN    ${tenant_id}
-
-Create Network
-    [Documentation]    Create Network with openstack request.
-    [Arguments]    ${network_name}    ${additional_args}=${EMPTY}    ${verbose}=TRUE
-    ${output} =    OpenStack CLI    openstack network create ${network_name} ${additional_args}
-    RETURN    ${output}
-
-Create Multiple Networks
-    [Documentation]    Create required number of networks and return a list of the resulting network ids
-    [Arguments]    @{name_of_networks}
-    ${net_list_ids} =    BuiltIn.Create List    @{EMPTY}
-    FOR    ${net}    IN    @{name_of_networks}
-        ${output} =    OpenStackOperations.Create Network    ${net}
-        ${net_id} =    Get Regexp Matches    ${output}    ${REGEX_UUID}
-        Collections.Append To List    ${net_list_ids}    ${net_id}
-    END
-    RETURN    @{net_list_ids}
-
-Update Network
-    [Documentation]    Update Network with neutron request.
-    [Arguments]    ${network_name}    ${additional_args}=${EMPTY}
-    ${output} =    OpenStack CLI    openstack network set ${network_name} ${additional_args}
-    RETURN    ${output}
-
-Show Network
-    [Documentation]    Show Network with neutron request.
-    [Arguments]    ${network_name}
-    ${output} =    OpenStack CLI    openstack network show ${network_name}
-    RETURN    ${output}
-
-List Networks
-    [Documentation]    List networks and return output with neutron client.
-    ${output} =    OpenStack CLI    openstack network list
-    RETURN    ${output}
-
-List Subnets
-    [Documentation]    List subnets and return output with neutron client.
-    ${output} =    OpenStack CLI    openstack subnet list
-    RETURN    ${output}
-
-Delete Network
-    [Documentation]    Delete Network with neutron request.
-    [Arguments]    ${network_name}
-    ${output} =    OpenStack CLI    openstack network delete ${network_name}
-
-Create SubNet
-    [Documentation]    Create SubNet for the Network with neutron request.
-    [Arguments]    ${network_name}    ${subnet_name}    ${range_ip}    ${additional_args}=${EMPTY}
-    ${output} =    OpenStack CLI
-    ...    openstack subnet create --network ${network_name} --subnet-range ${range_ip} ${subnet_name} ${additional_args}
-
-Create Multiple Subnets
-    [Documentation]    Create required number of subnets for previously created networks and return subnet id
-    [Arguments]    ${network_names}    ${subnet_names}    ${subnet_cidr}
-    ${number_of_networks} =    BuiltIn.Get Length    ${network_names}
-    @{subnet_id_list} =    BuiltIn.Create List    @{EMPTY}
-    FOR    ${index}    IN RANGE    ${number_of_networks}
-        OpenStackOperations.Create SubNet
-        ...    ${network_names[${index}]}
-        ...    ${subnet_names[${index}]}
-        ...    ${subnet_cidr[${index}]}
-    END
-    ${sub_list} =    OpenStackOperations.List Subnets
-    FOR    ${index}    IN RANGE    ${number_of_networks}
-        BuiltIn.Should Contain    ${sub_list}    ${subnet_names[${index}]}
-        ${subnet_id} =    OpenStackOperations.Get Subnet Id    ${subnet_names[${index}]}
-        Collections.Append To List    ${subnet_id_list}    ${subnet_id}
-    END
-    RETURN    @{subnet_id_list}
-
-Update SubNet
-    [Documentation]    Update subnet with openstack subnet set request.
-    [Arguments]    ${subnet_name}    ${additional_args}=${EMPTY}
-    ${output} =    OpenStack CLI    openstack subnet set ${subnet_name} ${additional_args}
-    RETURN    ${output}
-
-Unset SubNet
-    [Documentation]    Update subnet with openstack subnet unset request
-    [Arguments]    ${subnet_name}    ${additional_args}=${EMPTY}
-    ${output} =    OpenStack CLI    openstack subnet unset ${subnet_name} ${additional_args}
-    RETURN    ${output}
-
-Show SubNet
-    [Documentation]    Show subnet with neutron request.
-    [Arguments]    ${subnet_name}
-    ${output} =    OpenStack CLI    openstack subnet show ${subnet_name}
-    RETURN    ${output}
-
-Create Port
-    [Documentation]    Create Port with neutron request.
-    [Arguments]    ${network_name}    ${port_name}    ${sg}=default    ${additional_args}=${EMPTY}    ${allowed_address_pairs}=${EMPTY}
-    # if allowed_address_pairs is not empty we need to create the arguments to pass to the port create command. They are
-    # in a different format with the neutron vs openstack cli.
-    ${address_pair_length} =    BuiltIn.Get Length    ${allowed_address_pairs}
-    ${allowed_pairs_argv} =    BuiltIn.Set Variable    ${EMPTY}
-    ${allowed_pairs_argv} =    BuiltIn.Set Variable If
-    ...    '${address_pair_length}'=='2'
-    ...    --allowed-address ip-address=${allowed_address_pairs}[0] --allowed-address ip-address=${allowed_address_pairs}[1]
-    ...    ${allowed_pairs_argv}
-    ${output} =    OpenStack CLI
-    ...    openstack port create --network ${network_name} ${port_name} --security-group ${sg} ${additional_args} ${allowed_pairs_argv}
-
-Update Port
-    [Documentation]    Update port with neutron request.
-    [Arguments]    ${port_name}    ${additional_args}=${EMPTY}
-    ${output} =    OpenStack CLI    openstack port set ${port_name} ${additional_args}
-    RETURN    ${output}
-
-Show Port
-    [Documentation]    Show port with neutron request.
-    [Arguments]    ${port_name}
-    ${output} =    OpenStack CLI    openstack port show ${port_name}
-    RETURN    ${output}
-
-Delete Port
-    [Documentation]    Delete Port with neutron request.
-    [Arguments]    ${port_name}
-    ${output} =    OpenStack CLI    openstack port delete ${port_name}
-
-List Ports
-    [Documentation]    List ports and return output with neutron client.
-    ${output} =    OpenStack CLI    openstack port list
-    RETURN    ${output}
-
-List Nova VMs
-    [Documentation]    List VMs and return output with nova client.
-    ${output} =    OpenStack CLI    openstack server list --all-projects
-    RETURN    ${output}
-
-Create And Associate Floating IPs
-    [Documentation]    Create and associate floating IPs to VMs with nova request
-    [Arguments]    ${external_net}    @{vm_list}
-    ${ip_list} =    BuiltIn.Create List    @{EMPTY}
-    FOR    ${vm}    IN    @{vm_list}
-        ${output} =    OpenStack CLI    openstack floating ip create ${external_net}
-        @{ip} =    String.Get Regexp Matches    ${output}    [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}
-        ${ip_length} =    BuiltIn.Get Length    ${ip}
-        IF    ${ip_length}>0
-            Collections.Append To List    ${ip_list}    ${ip}[0]
-        ELSE
-            Collections.Append To List    ${ip_list}    None
-        END
-        ${vm_ip} =    OpenStack CLI
-        ...    openstack server show ${vm} | grep "addresses" | awk '{print $4}' | cut -d"=" -f 2
-        ${port_id} =    OpenStack CLI
-        ...    openstack port list | grep "ip_address='${vm_ip}'" | awk '{print $2}' | cut -d"=" -f 2
-        IF    '${OPENSTACK_BRANCH}' == 'stable/rocky'
-            ${output} =    OpenStack CLI    openstack floating ip set --port ${port_id} ${ip}[0]
-        ELSE
-            ${output} =    OpenStack CLI    openstack server add floating ip ${vm} ${ip}[0]
-        END
-    END
-    RETURN    ${ip_list}
-
-Remove Floating Ip From Vm
-    [Documentation]    Remove the Floating IP From VM Instance
-    [Arguments]    ${vm_name}    ${fip}
-    ${vm_ip} =    OpenStack CLI
-    ...    openstack server show ${vm_name} | grep "addresses" | awk '{print $4}' | cut -d"=" -f 2
-    ${port_id} =    OpenStack CLI
-    ...    openstack port list | grep "ip_address='${vm_ip}'" | awk '{print $2}' | cut -d"=" -f 2
-    IF    '${OPENSTACK_BRANCH}' == 'stable/rocky'
-        ${output} =    OpenStack CLI    openstack floating ip unset --port ${port_id} ${fip}
-    ELSE
-        ${output} =    OpenStack CLI    openstack server remove floating ip ${vm_name} ${fip}
-    END
-
-Delete Floating IP
-    [Documentation]    Delete floating ip with neutron request.
-    [Arguments]    ${fip}
-    ${output} =    OpenStack CLI    openstack floating ip delete ${fip}
-
-Delete SubNet
-    [Documentation]    Delete SubNet for the Network with neutron request.
-    [Arguments]    ${subnet}
-    ${output} =    OpenStack CLI    openstack subnet delete ${subnet}
-
-Delete Vm Instance
-    [Documentation]    Delete Vm instances using instance names.
-    [Arguments]    ${vm_name}
-    ${output} =    OpenStack CLI    openstack server delete ${vm_name}
-
-Get Net Id
-    [Documentation]    Retrieve the net id for the given network name to create specific vm instance
-    [Arguments]    ${network_name}
-    ${output} =    OpenStack CLI    openstack network list | grep "${network_name}" | awk '{print $2}'
-    ${splitted_output} =    String.Split String    ${output}    ${EMPTY}
-    ${net_id} =    Collections.Get from List    ${splitted_output}    0
-    RETURN    ${net_id}
-
-Get Subnet Id
-    [Documentation]    Retrieve the subnet id for the given subnet name
-    [Arguments]    ${subnet_name}
-    ${output} =    OpenStack CLI    openstack subnet show "${subnet_name}" | grep " id " | awk '{print $4}'
-    ${splitted_output} =    String.Split String    ${output}    ${EMPTY}
-    ${subnet_id} =    Collections.Get from List    ${splitted_output}    0
-    RETURN    ${subnet_id}
-
-Get Port Id
-    [Documentation]    Retrieve the port id for the given port name to attach specific vm instance to a particular port
-    [Arguments]    ${port_name}
-    ${output} =    OpenStack CLI    openstack port list | grep "${port_name}" | awk '{print $2}'
-    ${splitted_output} =    String.Split String    ${output}    ${EMPTY}
-    ${port_id} =    Collections.Get from List    ${splitted_output}    0
-    RETURN    ${port_id}
-
-Get Sub Port Id
-    [Documentation]    Retrieve the first 10 chars of the UUID for the given port name
-    [Arguments]    ${portname}
-    ${port_id} =    OpenStackOperations.Get Port Id    ${portname}
-    ${output} =    String.Get Regexp Matches    ${port_id}    \\w{8}-\\w{2}
-    ${subport_id} =    Collections.Get from List    ${output}    0
-    RETURN    ${subport_id}
-
-Get Router Id
-    [Documentation]    Retrieve the router id for the given router name
-    [Arguments]    ${router1}
-    ${output} =    OpenStack CLI    openstack router show "${router1}" |awk '/ id / {print $4}'
-    ${splitted_output} =    String.Split String    ${output}    ${EMPTY}
-    ${router_id} =    Collections.Get from List    ${splitted_output}    0
-    RETURN    ${router_id}
-
-Get VMs OVS Port Number
-    [Documentation]    Get the port number for given portname
-    [Arguments]    ${ip_address}    ${portname}
-    ${subportid} =    OpenStackOperations.Get Sub Port Id    ${portname}
-    ${vm_port_number} =    OVSDB.Get Port Number    ${subportid}    ${ip_address}
-    RETURN    ${vm_port_number}
-
-Add New Image From Url
-    [Documentation]    To add new qcow2 images for testing.
-    [Arguments]    ${image_url}    ${image_name}
-    ${rc}    ${output} =    OperatingSystem.Run And Return Rc And Output    wget ${image_url} -O /tmp/new_image.qcow2
-    BuiltIn.Log    ${output}
-    BuiltIn.Should Be True    '${rc}' == '0'
-    ${output} =    OpenStack CLI
-    ...    openstack image create ${image_name} --file /tmp/new_image.qcow2 --disk-format qcow2 --container-format bare --public
-
-Create Flavor
-    [Documentation]    To create new flavors for instance deployment and testing
-    [Arguments]    ${flavor_name}    ${ram_in_mb}    ${disk_in_gb}    ${ncpu}=1
-    ${output} =    OpenStack CLI
-    ...    openstack flavor create ${flavor_name} --ram ${ram_in_mb} --disk ${disk_in_gb} --vcpus ${ncpu}
-
-Create Keypair
-    [Documentation]    To add keypairs to Openstack that can be used when ssh to instances using publickey authentication
-    [Arguments]    ${keyname}    ${public_key_file}
-    ${output} =    OpenStack CLI    openstack keypair create ${keyname} --public-key ${public_key_file}
-
-Generate And Add Keypair
-    [Documentation]    To generate keypair using ssh-keygen and add them to Openstack
-    [Arguments]    ${keyname}    ${keyfilename}
-    ${result} =    Process.Run Process
-    ...    ssh-keygen -b 2048 -t rsa -f ${JENKINS_WORKSPACE}/${keyfilename} -q -N ""
-    ...    shell=True
-    BuiltIn.Log    ${result.stdout}
-    BuiltIn.Log    ${result.stderr}
-    BuiltIn.Should Be True    '${result.rc}' == '0'
-    OpenStackOperations.Create Keypair    ${keyname}    ${JENKINS_WORKSPACE}/${keyfilename}.pub
-    OpenStackOperations.Get ControlNode Connection
-    SSHLibrary.Put_File    ${JENKINS_WORKSPACE}/${keyfilename}    /tmp
-
-Create Vm Instances
-    [Documentation]    Create X Vm Instance with the net id of the Netowrk.
-    [Arguments]    ${net_name}    ${vm_instance_names}    ${image}=${EMPTY}    ${flavor}=m1.nano    ${sg}=default    ${min}=1
-    ..    ${max}=1
-    ${image} =    BuiltIn.Set Variable If    "${image}"=="${EMPTY}"    ${CIRROS_${OPENSTACK_BRANCH}}    ${image}
-    ${net_id} =    OpenStackOperations.Get Net Id    ${net_name}
-    FOR    ${vm}    IN    @{vm_instance_names}
-        ${output} =    OpenStack CLI
-        ...    openstack server create --image ${image} --flavor ${flavor} --nic net-id=${net_id} ${vm} --security-group ${sg} --min ${min} --max ${max}
-    END
-
-Create Vm Instance On Compute Node
-    [Documentation]    Create a VM instance on a specific compute node.
-    [Arguments]    ${net_name}    ${vm_name}    ${node_hostname}    ${image}=${EMPTY}    ${flavor}=m1.nano    ${sg}=default
-    ${image} =    BuiltIn.Set Variable If    "${image}"=="${EMPTY}"    ${CIRROS_${OPENSTACK_BRANCH}}    ${image}
-    ${net_id} =    OpenStackOperations.Get Net Id    ${net_name}
-    ${output} =    OpenStack CLI
-    ...    openstack server create ${vm_name} --image ${image} --flavor ${flavor} --nic net-id=${net_id} --security-group ${sg} --availability-zone nova:${node_hostname}
-
-Create Vm Instance With Port
-    [Documentation]    Create One VM instance using given ${port_name} and for given ${compute_node}
-    [Arguments]    ${port_name}    ${vm_instance_name}    ${image}=${EMPTY}    ${flavor}=m1.nano    ${sg}=default
-    ${image} =    BuiltIn.Set Variable If    "${image}"=="${EMPTY}"    ${CIRROS_${OPENSTACK_BRANCH}}    ${image}
-    ${output} =    OpenStack CLI
-    ...    openstack server create --image ${image} --flavor ${flavor} --port ${port_name} --security-group ${sg} ${vm_instance_name}
-
-Create Vm Instance With Ports And Key On Compute Node
-    [Documentation]    Create One VM instance using given ${port1_name} and ${port2_name} with keyname for ssh and also on a specific compute node
-    [Arguments]    ${port1_name}    ${port2_name}    ${vm_instance_name}    ${node_hostname}    ${image}=${EMPTY}    ${flavor}=m1.nano
-    ...    ${sg}=default    ${keyname}=${EMPTY}
-    ${image} =    BuiltIn.Set Variable If    "${image}"=="${EMPTY}"    ${CIRROS_${OPENSTACK_BRANCH}}    ${image}
-    ${output} =    OpenStack CLI
-    ...    openstack server create --image ${image} --flavor ${flavor} --port ${port1_name} --port ${port2_name} ${vm_instance_name} --security-group ${sg} --availability-zone nova:${node_hostname} --key-name ${keyname}
-
-Create Vm Instance With Port On Compute Node
-    [Documentation]    Create One VM instance using given ${port_name} and for given ${node_hostname}
-    [Arguments]    ${port_name}    ${vm_instance_name}    ${node_hostname}    ${image}=${EMPTY}    ${flavor}=m1.nano    ${sg}=default
-    ${image} =    BuiltIn.Set Variable If    "${image}"=="${EMPTY}"    ${CIRROS_${OPENSTACK_BRANCH}}    ${image}
-    ${output} =    OpenStack CLI
-    ...    openstack server create --image ${image} --flavor ${flavor} --port ${port_name} --security-group ${sg} --availability-zone nova:${node_hostname} ${vm_instance_name}
-
-Remove Security Group From Vm Instance
-    [Documentation]    Delete the Security Group from the VM Instance.
-    [Arguments]    ${vm_instance_name}    ${security_group}
-    ${output} =    OpenStack CLI    openstack server remove security group ${vm_instance_name} ${security_group}
-
-Create Vm Instance With Ports On Compute Node
-    [Documentation]    Create One VM instance using given ${port1_name}, ${port2_name} and for given ${node_hostname} with no keys (cirros like)
-    [Arguments]    ${port1_name}    ${port2_name}    ${vm_instance_name}    ${node_hostname}    ${image}=${EMPTY}    ${flavor}=m1.nano
-    ...    ${sg}=default
-    ${image} =    BuiltIn.Set Variable If    "${image}"=="${EMPTY}"    ${CIRROS_${OPENSTACK_BRANCH}}    ${image}
-    ${port1_id} =    OpenStackOperations.Get Port Id    ${port1_name}
-    ${port2_id} =    OpenStackOperations.Get Port Id    ${port2_name}
-    ${output} =    OpenStack CLI
-    ...    openstack server create --image ${image} --flavor ${flavor} --nic port-id=${port1_id} --nic port-id=${port2_id} --security-group ${sg} --availability-zone nova:${node_hostname} ${vm_instance_name}
-
-Get Hypervisor Hostname From IP
-    [Documentation]    Returns the hostname found for the given IP address if it's listed in hypervisor list. For debuggability
-    ...    the full listing is logged first, then followed by a grep | cut to focus on the actual hostname to return
-    [Arguments]    ${hypervisor_ip}
-    ${output} =    OpenStack CLI    openstack hypervisor list
-    ${hostname} =    OpenStack CLI    openstack hypervisor list -f value | grep "${hypervisor_ip} " | cut -d" " -f 2
-    RETURN    ${hostname}
-
-Create Nano Flavor
-    [Documentation]    Create a nano flavor
-    ${output} =    OpenStack CLI    openstack flavor create m1.nano --id auto --ram 64 --disk 0 --vcpus 1
-
-Verify VM Is ACTIVE
-    [Documentation]    Run these commands to check whether the created vm instance is active or not.
-    [Arguments]    ${vm_name}
-    OpenStack CLI    openstack server show ${vm_name}
-    ${output} =    OpenStack CLI    openstack server show ${vm_name} | grep OS-EXT-STS:vm_state
-    BuiltIn.Should Contain    ${output}    active
-
-Poll VM Is ACTIVE
-    [Documentation]    Run these commands to check whether the created vm instance is active or not.
-    [Arguments]    ${vm_name}    ${retry}=600s    ${retry_interval}=30s
-    BuiltIn.Wait Until Keyword Succeeds
-    ...    ${retry}
-    ...    ${retry_interval}
-    ...    OpenStackOperations.Verify VM Is ACTIVE
-    ...    ${vm_name}
-
-Get Match
-    [Documentation]    Wrapper around String.Get Regexp Matches to return None if not found or the first match if found.
-    [Arguments]    ${text}    ${regexp}    ${index}=0
-    @{matches} =    String.Get Regexp Matches    ${text}    ${regexp}
-    ${matches_length} =    BuiltIn.Get Length    ${matches}
-    BuiltIn.Set Suite Variable    ${OS_MATCH}    None
-    IF    ${matches_length} > ${index}
-        BuiltIn.Set Suite Variable    ${OS_MATCH}    ${matches}[${index}]
-    END
-    RETURN    ${OS_MATCH}
-
-Get VM IP
-    [Documentation]    Get the vm ip address and nameserver by scraping the vm's console log.
-    ...    Get VM IP returns three values: [0] the vm IP, [1] the DHCP IP and [2] the vm console log.
-    [Arguments]    ${fail_on_none}    ${vm}
-    ${vm_console_output} =    OpenStack CLI With No Log    openstack console log show ${vm}
-    ${vm_ip} =    BuiltIn.Set Variable    None
-    ${dhcp_ip} =    BuiltIn.Set Variable    None
-    ${match} =    OpenStackOperations.Get Match    ${vm_console_output}    ${REGEX_OBTAINED}
-    ${vm_ip} =    OpenStackOperations.Get Match    ${match}    ${REGEX_IPV4}    0
-    ${match} =    OpenStackOperations.Get Match    ${vm_console_output}    ${REGEX_IPROUTE}
-    ${dhcp_ip} =    OpenStackOperations.Get Match    ${match}    ${REGEX_IPV4}    1
-    IF    '${fail_on_none}' == 'true'
-        BuiltIn.Should Not Contain    ${vm_ip}    None
-    END
-    IF    '${fail_on_none}' == 'true'
-        BuiltIn.Should Not Contain    ${dhcp_ip}    None
-    END
-    RETURN    ${vm_ip}    ${dhcp_ip}    ${vm_console_output}
-
-Verify If Instance Is Arpingable From DHCP Namespace
-    [Documentation]    Get the Port IP and check the arp -a from DHCP NS to ensure that the VM's have been assigned IP's
-    [Arguments]    ${net_name}    ${mac}    ${ip}
-    OpenStackOperations.Get ControlNode Connection
-    ${net_id} =    OpenStackOperations.Get Net Id    ${net_name}
-    ${output} =    Utils.Write Commands Until Expected Prompt
-    ...    sudo ip netns exec qdhcp-${net_id} arping ${ip} -c3
-    ...    ${DEFAULT_LINUX_PROMPT_STRICT}
-    ...    timeout=60s
-    ${mac_uppercase} =    String.Convert To Upper Case    ${mac}
-    BuiltIn.Should Contain    ${output}    [${mac_uppercase}]
-
-Check If Instance Is Ready For Ssh Login Using PublicKey
-    [Documentation]    Ensure the VM is reachable from ssh as tests would require. This keyword will use publickey authentication
-    [Arguments]    ${net_name}    ${vm_ip}    ${user}=centos    ${idfile}=/tmp/odlkey    ${console}=cirros
-    ${output} =    Execute Command on VM Instance with PublicKey Auth
-    ...    ${net_name}
-    ...    ${vm_ip}
-    ...    ifconfig
-    ...    user=${user}
-    ...    idfile=${idfile}
-    ...    console=${console}
-    BuiltIn.Should Contain    ${output}    ${vm_ip}
-
-Check If Instance Is Ready For Ssh Login Using Password
-    [Documentation]    Ensure the VM is reachable from ssh as tests would require. This keyword will use password authentication
-    [Arguments]    ${net_name}    ${vm_ip}    ${user}=cirros    ${password}=${EMPTY}    ${console}=cirros
-    ${password} =    BuiltIn.Set Variable If    "${password}"=="${EMPTY}"    ${PASSWORD_CIRROS_${OPENSTACK_BRANCH}}
-    ${output} =    Execute Command on VM Instance    ${net_name}    ${vm_ip}    ifconfig    ${user}    ${password}
-    ...    console=${console}
-    BuiltIn.Should Contain    ${output}    ${vm_ip}
-
-Get VM IPs
-    [Documentation]    Get the instance IP addresses and nameserver address for the list of given vms.
-    ...    First poll for the vm instance to be in the active state, then poll for the vm ip address and nameserver.
-    ...    Get VM IPs returns two things: [0] a list of the ips for the vms passed to this keyword (may contain values
-    ...    of None) and [1] the dhcp ip address found in the last vm checked.
-    ...    TODO: there is a potential issue for a caller that passes in VMs belonging to different networks that
-    ...    may have different dhcp server addresses. Not sure what TODO about that, but noting it here for reference.
-    [Arguments]    @{vms}
-    @{vm_ips} =    BuiltIn.Create List    @{EMPTY}
-    FOR    ${vm}    IN    @{vms}
-        OpenStackOperations.Poll VM Is ACTIVE    ${vm}
-        ${status}    ${ips_and_console_log} =    BuiltIn.Run Keyword And Ignore Error
-        ...    BuiltIn.Wait Until Keyword Succeeds
-        ...    180s
-        ...    15s
-        ...    OpenStackOperations.Get VM IP
-        ...    true
-        ...    ${vm}
-        # If there is trouble with Get VM IP, the status will be FAIL and the return value will be a string of what went
-        # wrong. We need to handle both the PASS and FAIL cases. In the FAIL case we know we wont have access to the
-        # console log, as it would not be returned; so we need to grab it again to log it. We also can append 'None' to
-        # the vm ip list if status is FAIL.
-        IF    "${status}" == "PASS"    BuiltIn.Log    ${ips_and_console_log[2]}
-        IF    "${status}" == "PASS"
-            Collections.Append To List    ${vm_ips}    ${ips_and_console_log[0]}
-        END
-        IF    "${status}" == "FAIL"
-            Collections.Append To List    ${vm_ips}    None
-        END
-        IF    "${status}" == "FAIL"
-            ${vm_console_output} =    OpenStack CLI    openstack console log show ${vm}
-        ELSE
-            ${vm_console_output} =    Set Variable    ${None}
-        END
-        IF    "${status}" == "FAIL"    BuiltIn.Log    ${vm_console_output}
-    END
-    OpenStackOperations.Copy DHCP Files From Control Node
-    RETURN    @{vm_ips}    ${ips_and_console_log[1]}
-
-Get All VM IP Addresses
-    [Documentation]    Show information of a given two port VM and grep for two ip address. VM name should be sent as arguments.
-    [Arguments]    ${conn_id}    ${vm_name}
-    SSHLibrary.Switch Connection    ${conn_id}
-    ${cmd} =    BuiltIn.Set Variable    openstack server show ${vm_name}
-    ${output} =    OpenStackOperations.OpenStack CLI    ${cmd}
-    BuiltIn.Log    ${output}
-    ${address_output} =    OpenStackOperations.OpenStack CLI    ${cmd} | grep "addresses" | awk '{print $4$5}'
-    @{vm_ips} =    String.Get Regexp Matches    ${address_output}    ${REGEX_IPV4}
-    RETURN    @{vm_ips}
-
-Get Subnet Gateway Ip
-    [Documentation]    Show information of a subnet and grep for subnet gateway ip address
-    [Arguments]    ${subnet_name}
-    ${output} =    OpenStackOperations.OpenStack CLI
-    ...    openstack subnet show ${subnet_name} | grep gateway_ip | awk '{print $4}'
-    ${splitted_output} =    String.Split String    ${output}    ${EMPTY}
-    ${matches} =    Collections.Get Matches    ${splitted_output}    regexp=(\\d\.)+
-    ${subnet_gateway_ip} =    String.Strip String    ${matches[0]}    characters=','
-    RETURN    ${subnet_gateway_ip}
-
-Collect VM IPv6 SLAAC Addresses
-    [Documentation]    For each VM parse output of "openstack server show" to get its IPv6 address from Neutron DB.
-    ...    Then try to connect to each VM by SSH and execute there "ip -6 a" command. This double-check allows to
-    ...    obtain and compare IP info (Neutron DB vs dnsmasque/ODL DHCP) and to test L2 connectivity as well.
-    ...    Returns an empty list if no IPv6 addresses found or if SSH connection fails.
-    ...    Otherwise, returns a list of IPv6 addresses.
-    [Arguments]    ${fail_on_none}    ${vm_list}    ${network}    ${subnet}
-    ${ipv6_list} =    BuiltIn.Create List    @{EMPTY}
-    FOR    ${vm}    IN    @{vm_list}
-        ${output} =    OpenStack CLI    openstack server show ${vm} -f shell
-        ${pattern} =    String.Replace String    ${subnet}    ::/64    (:[a-f0-9]{,4}){,4}
-        @{vm_ipv6} =    String.Get Regexp Matches    ${output}    ${pattern}
-        ${vm_ip_length} =    BuiltIn.Get Length    ${vm_ipv6}[0]
-        IF    ${vm_ip_length}>0
-            ${ipv6_data_from_vm} =    OpenStackOperations.Execute Command on VM Instance
-            ...    ${network}
-            ...    ${vm_ipv6[0]}
-            ...    ip -6 a
-        ELSE
-            ${ipv6_data_from_vm} =    Set Variable    ${None}
-        END
-        @{ipv6} =    String.Get Regexp Matches    ${ipv6_data_from_vm}    ${pattern}
-        ${ipv6_addr_list_length} =    BuiltIn.Get Length    @{ipv6}
-        IF    ${ipv6_addr_list_length}>0
-            Collections.Append To List    ${ipv6_list}    ${ipv6[0]}
-        ELSE
-            Collections.Append To List    ${ipv6_list}    None
-        END
-    END
-    RETURN    ${ipv6_list}
-
-View Vm Console
-    [Documentation]    View Console log of the created vm instances using nova show.
-    [Arguments]    ${vm_instance_names}
-    FOR    ${vm}    IN    @{vm_instance_names}
-        ${output} =    OpenStack CLI    openstack server show ${vm}
-        ${output} =    OpenStack CLI    openstack console log show ${vm}
-    END
-
-Ping Vm From DHCP Namespace
-    [Documentation]    Reach all Vm Instance with the net id of the Netowrk.
-    [Arguments]    ${net_name}    ${vm_ip}
-    OpenStackOperations.Get ControlNode Connection
-    ${net_id} =    OpenStackOperations.Get Net Id    ${net_name}
-    ${output} =    DevstackUtils.Write Commands Until Prompt And Log
-    ...    sudo ip netns exec qdhcp-${net_id} ping -c 3 ${vm_ip}
-    ...    20s
-    BuiltIn.Should Contain    ${output}    64 bytes
-
-Ping From DHCP Should Not Succeed
-    [Documentation]    Should Not Reach Vm Instance with the net id of the Netowrk.
-    [Arguments]    ${net_name}    ${vm_ip}
-    IF    "skip_if_${SECURITY_GROUP_MODE}" in @{TEST_TAGS}    RETURN
-    OpenStackOperations.Get ControlNode Connection
-    ${net_id} =    OpenStackOperations.Get Net Id    ${net_name}
-    ${output} =    DevstackUtils.Write Commands Until Prompt And Log
-    ...    sudo ip netns exec qdhcp-${net_id} ping -c 3 ${vm_ip}
-    ...    20s
-    BuiltIn.Should Not Contain    ${output}    64 bytes
-
-Ping Vm From Control Node
-    [Documentation]    Ping VM floating IP from control node
-    [Arguments]    ${vm_floating_ip}    ${additional_args}=${EMPTY}
-    OpenStackOperations.Get ControlNode Connection
-    ${output} =    DevstackUtils.Write Commands Until Prompt And Log
-    ...    ping ${additional_args} -c 3 ${vm_floating_ip}
-    ...    20s
-    BuiltIn.Should Contain    ${output}    64 bytes
-
-Curl Metadata Server
-    [Documentation]    Ping to the expected destination ip.
-    ${output} =    Utils.Write Commands Until Expected Prompt    curl -i http://169.254.169.254    ${OS_SYSTEM_PROMPT}
-    DevstackUtils.Write Commands Until Prompt    exit
-    BuiltIn.Should Contain    ${output}    200
-
-Close Vm Instance
-    [Documentation]    Exit the vm instance.
-    ${output} =    DevstackUtils.Write Commands Until Prompt And Log    exit
-
-Check If Console Is VmInstance
-    [Documentation]    Check if the session has been able to login to the VM instance
-    [Arguments]    ${console}=cirros
-    ${output} =    Utils.Write Commands Until Expected Prompt    id    ${OS_SYSTEM_PROMPT}
-    BuiltIn.Should Contain    ${output}    ${console}
-
-Exit From Vm Console
-    [Documentation]    Check if the session has been able to login to the VM instance and exit the instance
-    [Arguments]    ${console}=cirros
-    ${rcode} =    BuiltIn.Run Keyword And Return Status
-    ...    OpenStackOperations.Check If Console Is VmInstance
-    ...    ${console}
-    IF    ${rcode}    DevstackUtils.Write Commands Until Prompt    exit
-
-Check Ping
-    [Documentation]    Run Ping command on the IP available as argument
-    [Arguments]    ${ip_address}    ${ttl}=64    ${ping_tries}=3
-    ${ethertype} =    String.Get Regexp Matches    ${ip_address}    ${IP_REGEX}
-    ${ping} =    BuiltIn.Set Variable If    ${ethertype}    ping    ping6
-    ${cmd} =    BuiltIn.Set Variable
-    ...    rc=0; for count in `seq 1 ${ping_tries}`; do ${ping} -W1 -t${ttl} -c5 ${ip_address}; rc=$?; if [ $rc -eq 0 ]; then break; fi; done; echo ping_rc=$rc
-    ${output} =    Utils.Write Commands Until Expected Regexp    ${cmd}    ping_rc=\\d+    120
-    BuiltIn.Log    output: ${output}
-    BuiltIn.Should Contain    ${output}    64 bytes
-
-Check No Ping
-    [Documentation]    Run Ping command to the IP given as argument, executing 3 times and expecting NOT to see "64 bytes"
-    [Arguments]    ${ip_address}    ${ttl}=64
-    ${output} =    Utils.Write Commands Until Expected Prompt
-    ...    ping -t ${ttl} -c 3 ${ip_address}
-    ...    ${OS_SYSTEM_PROMPT}
-    BuiltIn.Should Not Contain    ${output}    64 bytes
-
-Check Metadata Access
-    [Documentation]    Try curl on the Metadataurl and check if it is okay
-    ${output} =    Utils.Write Commands Until Expected Prompt    curl -i http://169.254.169.254    ${OS_SYSTEM_PROMPT}
-    BuiltIn.Should Contain    ${output}    200
-
-Execute Command on VM Instance
-    [Documentation]    Login to the vm instance using ssh in the network, executes a command inside the VM and returns the ouput.
-    [Arguments]    ${net_name}    ${vm_ip}    ${cmd}    ${user}=cirros    ${password}=${EMPTY}    ${cmd_timeout}=30s
-    ...    ${console}=cirros
-    ${password} =    BuiltIn.Set Variable If    "${password}"=="${EMPTY}"    ${PASSWORD_CIRROS_${OPENSTACK_BRANCH}}
-    OpenStackOperations.Get ControlNode Connection
-    ${net_id} =    OpenStackOperations.Get Net Id    ${net_name}
-    ${output} =    Utils.Write Commands Until Expected Prompt
-    ...    sudo ip netns exec qdhcp-${net_id} ssh ${user}@${vm_ip} -o MACs=hmac-sha1 -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PreferredAuthentications=password
-    ...    password:
-    ${output} =    Utils.Write Commands Until Expected Prompt    ${password}    ${OS_SYSTEM_PROMPT}
-    ${rcode} =    BuiltIn.Run Keyword And Return Status
-    ...    OpenStackOperations.Check If Console Is VmInstance
-    ...    ${console}
-    IF    ${rcode}
-        ${output} =    Utils.Write Commands Until Expected Prompt
-        ...    ${cmd}
-        ...    ${OS_SYSTEM_PROMPT}
-        ...    timeout=${cmd_timeout}
-    ELSE
-        ${output} =    Set Variable    ${None}
-    END
-    RETURN    ${output}
-    [Teardown]    Exit From Vm Console    ${console}
-
-Execute Command on VM Instance With PublicKey Auth
-    [Documentation]    Login to the vm instance using ssh publickey in the network, executes a command inside the VM and returns the ouput.
-    [Arguments]    ${net_name}    ${vm_ip}    ${cmd}    ${user}=centos    ${idfile}=/tmp/odlkey    ${console}=cirros
-    OpenStackOperations.Get ControlNode Connection
-    ${net_id} =    OpenStackOperations.Get Net Id    ${net_name}
-    ${output} =    Utils.Write Commands Until Expected Prompt
-    ...    sudo ip netns exec qdhcp-${net_id} ssh -i ${idfile} ${user}@${vm_ip} -o MACs=hmac-sha1 -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PreferredAuthentications=publickey
-    ...    prompt=${OS_SYSTEM_PROMPT}
-    ...    timeout=60s
-    ${rcode} =    BuiltIn.Run Keyword And Return Status
-    ...    OpenStackOperations.Check If Console Is VmInstance
-    ...    ${console}
-    IF    ${rcode}
-        ${output} =    Utils.Write Commands Until Expected Prompt    ${cmd}    ${OS_SYSTEM_PROMPT}
-    ELSE
-        ${output} =    Set Variable    ${None}
-    END
-    RETURN    ${output}
-    [Teardown]    Exit From Vm Console    ${console}
-
-Copy File To VM Instance With PublicKey Auth
-    [Documentation]    Login to the vm instance using ssh publickey in the network, executes a command inside the VM and returns the ouput.
-    [Arguments]    ${net_name}    ${vm_ip}    ${file_to_copy}    ${user}=centos    ${idfile}=/tmp/odlkey
-    OpenStackOperations.Get ControlNode Connection
-    ${net_id} =    OpenStackOperations.Get Net Id    ${net_name}
-    ${rc} =    SSHLibrary.Execute Command
-    ...    sudo ip netns exec qdhcp-${net_id} scp -i ${idfile} -o MACs=hmac-sha1 -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PreferredAuthentications=publickey ${file_to_copy} ${user}@${vm_ip}:/tmp/
-    ...    return_stdout=False
-    ...    return_rc=True
-    BuiltIn.Should Be True    '${rc}' == '0'
-
-Test Operations From Vm Instance
-    [Documentation]    Login to the vm instance using ssh in the network.
-    [Arguments]    ${net_name}    ${src_ip}    ${dest_ips}    ${user}=cirros    ${password}=${EMPTY}    ${ttl}=64
-    ...    ${ping_should_succeed}=True    ${check_metadata}=True    ${console}=cirros    ${ping_tries}=3
-    ${password} =    BuiltIn.Set Variable If    "${password}"=="${EMPTY}"    ${PASSWORD_CIRROS_${OPENSTACK_BRANCH}}
-    OpenStackOperations.Get ControlNode Connection
-    ${net_id} =    OpenStackOperations.Get Net Id    ${net_name}
-    ${output} =    Utils.Write Commands Until Expected Prompt
-    ...    sudo ip netns exec qdhcp-${net_id} ssh -o MACs=hmac-sha1 -o ConnectTimeout=5 -o StrictHostKeyChecking=no ${user}@${src_ip} -o UserKnownHostsFile=/dev/null
-    ...    password:
-    ...    10s
-    ${output} =    Utils.Write Commands Until Expected Prompt    ${password}    ${OS_SYSTEM_PROMPT}
-    ${rcode} =    BuiltIn.Run Keyword And Return Status
-    ...    OpenStackOperations.Check If Console Is VmInstance
-    ...    ${console}
-    IF    ${rcode}
-        Utils.Write Commands Until Expected Prompt    ifconfig    ${OS_SYSTEM_PROMPT}
-    END
-    IF    ${rcode}
-        Utils.Write Commands Until Expected Prompt    route -n    ${OS_SYSTEM_PROMPT}
-    END
-    IF    ${rcode}
-        Utils.Write Commands Until Expected Prompt    route -A inet6    ${OS_SYSTEM_PROMPT}
-    END
-    IF    ${rcode}
-        Utils.Write Commands Until Expected Prompt    arp -an    ${OS_SYSTEM_PROMPT}
-    END
-    IF    ${rcode}
-        Utils.Write Commands Until Expected Prompt    ip -f inet6 neigh show    ${OS_SYSTEM_PROMPT}
-    END
-    FOR    ${dest_ip}    IN    @{dest_ips}
-        ${string_empty} =    BuiltIn.Run Keyword And Return Status    Should Be Empty    ${dest_ip}
-        IF    ${string_empty}            CONTINUE
-        IF    ${rcode} and "${ping_should_succeed}" == "True"
-            OpenStackOperations.Check Ping    ${dest_ip}    ttl=${ttl}    ping_tries=${ping_tries}
-        ELSE
-            OpenStackOperations.Check No Ping    ${dest_ip}    ttl=${ttl}
-        END
-    END
-    ${ethertype} =    String.Get Regexp Matches    ${src_ip}    ${IP_REGEX}
-    IF    ${rcode} and "${check_metadata}" and ${ethertype} == "True"
-        OpenStackOperations.Check Metadata Access
-    END
-    [Teardown]    Exit From Vm Console    ${console}
-
-Test Netcat Operations From Vm Instance
-    [Documentation]    Use Netcat to test TCP/UDP connections to the controller
-    [Arguments]    ${net_name}    ${vm_ip}    ${dest_ip}    ${additional_args}=${EMPTY}    ${port}=12345    ${user}=cirros
-    ...    ${password}=${EMPTY}
-    ${password} =    BuiltIn.Set Variable If    "${password}"=="${EMPTY}"    ${PASSWORD_CIRROS_${OPENSTACK_BRANCH}}
-    ${client_data} =    BuiltIn.Set Variable    Test Client Data
-    ${server_data} =    BuiltIn.Set Variable    Test Server Data
-    OpenStackOperations.Get ControlNode Connection
-    ${output} =    DevstackUtils.Write Commands Until Prompt And Log
-    ...    ( ( echo "${server_data}" | sudo timeout 60 nc -l ${additional_args} ${port} ) & )
-    ${output} =    DevstackUtils.Write Commands Until Prompt And Log    sudo netstat -nlap | grep ${port}
-    ${nc_output} =    OpenStackOperations.Execute Command on VM Instance
-    ...    ${net_name}
-    ...    ${vm_ip}
-    ...    sudo echo "${client_data}" | nc -v -w 5 ${additional_args} ${dest_ip} ${port}
-    BuiltIn.Log    ${output}
-    ${output} =    OpenStackOperations.Execute Command on VM Instance    ${net_name}    ${vm_ip}    sudo route -n
-    BuiltIn.Log    ${output}
-    ${output} =    OpenStackOperations.Execute Command on VM Instance    ${net_name}    ${vm_ip}    sudo arp -an
-    BuiltIn.Log    ${output}
-    BuiltIn.Should Match Regexp    ${nc_output}    ${server_data}
-
-Ping Other Instances
-    [Documentation]    Check reachability with other network's instances.
-    [Arguments]    ${list_of_external_dst_ips}    ${console}=cirros
-    ${rcode} =    BuiltIn.Run Keyword And Return Status
-    ...    OpenStackOperations.Check If Console Is VmInstance
-    ...    ${console}
-    FOR    ${dest_ip}    IN    @{list_of_external_dst_ips}
-        OpenStackOperations.Check Ping    ${dest_ip}
-    END
-
-Create Router
-    [Documentation]    Create Router and Add Interface to the subnets.
-    [Arguments]    ${router_name}
-    ${output} =    OpenStack CLI    openstack router create ${router_name}
-
-List Routers
-    [Documentation]    List Routers and return output with neutron client.
-    ${output} =    OpenStack CLI    openstack router list -f value
-    RETURN    ${output}
-
-Add Router Interface
-    [Arguments]    ${router_name}    ${interface_name}
-    ${output} =    OpenStack CLI    openstack router add subnet ${router_name} ${interface_name}
-
-Show Router Interface
-    [Documentation]    List Routers interface associated with given Router and return output with neutron client.
-    [Arguments]    ${router_name}
-    ${output} =    OpenStack CLI    openstack port list --router ${router_name} -f value
-    RETURN    ${output}
-
-Add Router Gateway
-    [Arguments]    ${router_name}    ${external_network_name}    ${additional_args}=${EMPTY}
-    ${output} =    OpenStack CLI
-    ...    openstack router set ${router_name} --external-gateway ${external_network_name} ${additional_args}
-
-Remove Interface
-    [Documentation]    Remove Interface to the subnets.
-    [Arguments]    ${router_name}    ${interface_name}
-    ${output} =    OpenStack CLI    openstack router remove subnet ${router_name} ${interface_name}
-
-Remove Gateway
-    [Documentation]    Remove external gateway from the router.
-    [Arguments]    ${router_name}
-    ${output} =    OpenStack CLI    openstack router unset ${router_name} --external-gateway
-
-Update Router
-    [Documentation]    Update the router with the command. Router name and command should be passed as argument.
-    [Arguments]    ${router_name}    ${cmd}
-    ${output} =    OpenStack CLI    openstack router set ${router_name} ${cmd}
-
-Show Router
-    [Documentation]    Show information of a given router. Router name and optional fields should be sent as arguments.
-    [Arguments]    ${router_name}    ${additional_args}=${EMPTY}
-    ${output} =    OpenStack CLI    openstack router show ${router_name} ${additional_args}
-    RETURN    ${output}
-
-Delete Router
-    [Documentation]    Delete Router and Interface to the subnets.
-    [Arguments]    ${router_name}
-    ${output} =    OpenStack CLI    openstack router delete ${router_name}
-
-Get DumpFlows And Ovsconfig
-    [Documentation]    Get the OvsConfig and Flow entries from OVS from the Openstack Node
-    [Arguments]    ${conn_id}
-    SSHLibrary.Switch Connection    ${conn_id}
-    Utils.Write Commands Until Expected Prompt    ip -o link    ${DEFAULT_LINUX_PROMPT_STRICT}
-    Utils.Write Commands Until Expected Prompt    ip -o addr    ${DEFAULT_LINUX_PROMPT_STRICT}
-    Utils.Write Commands Until Expected Prompt    ip route    ${DEFAULT_LINUX_PROMPT_STRICT}
-    Utils.Write Commands Until Expected Prompt    arp -an    ${DEFAULT_LINUX_PROMPT_STRICT}
-    ${nslist} =    Utils.Write Commands Until Expected Prompt
-    ...    ip netns list | awk '{print $1}'
-    ...    ${DEFAULT_LINUX_PROMPT_STRICT}
-    @{lines} =    Split To Lines    ${nslist}    end=-1
-    FOR    ${line}    IN    @{lines}
-        Utils.Write Commands Until Expected Prompt
-        ...    sudo ip netns exec ${line} ip -o link
-        ...    ${DEFAULT_LINUX_PROMPT_STRICT}
-        Utils.Write Commands Until Expected Prompt
-        ...    sudo ip netns exec ${line} ip -o addr
-        ...    ${DEFAULT_LINUX_PROMPT_STRICT}
-        Utils.Write Commands Until Expected Prompt
-        ...    sudo ip netns exec ${line} ip route
-        ...    ${DEFAULT_LINUX_PROMPT_STRICT}
-    END
-    Utils.Write Commands Until Expected Prompt    sudo ovs-vsctl show    ${DEFAULT_LINUX_PROMPT_STRICT}
-    Utils.Write Commands Until Expected Prompt    sudo ovs-vsctl list Open_vSwitch    ${DEFAULT_LINUX_PROMPT_STRICT}
-    Utils.Write Commands Until Expected Prompt
-    ...    sudo ovs-ofctl show ${INTEGRATION_BRIDGE} -OOpenFlow13
-    ...    ${DEFAULT_LINUX_PROMPT_STRICT}
-    Utils.Write Commands Until Expected Prompt
-    ...    sudo ovs-ofctl dump-flows ${INTEGRATION_BRIDGE} -OOpenFlow13
-    ...    ${DEFAULT_LINUX_PROMPT_STRICT}
-    Utils.Write Commands Until Expected Prompt
-    ...    sudo ovs-ofctl dump-groups ${INTEGRATION_BRIDGE} -OOpenFlow13
-    ...    ${DEFAULT_LINUX_PROMPT_STRICT}
-    Utils.Write Commands Until Expected Prompt
-    ...    sudo ovs-ofctl dump-group-stats ${INTEGRATION_BRIDGE} -OOpenFlow13
-    ...    ${DEFAULT_LINUX_PROMPT_STRICT}
-
-Get ControlNode Connection
-    SSHLibrary.Switch Connection    ${OS_CNTL_CONN_ID}
-    RETURN    ${OS_CNTL_CONN_ID}
-
-Get OvsDebugInfo
-    [Documentation]    Get the OvsConfig and Flow entries from all Openstack nodes
-    FOR    ${conn_id}    IN    @{OS_ALL_CONN_IDS}
-        OpenStackOperations.Get DumpFlows And Ovsconfig    ${conn_id}
-    END
-
-Show Debugs
-    [Documentation]    Run these commands for debugging, it can list state of VM instances and ip information in control node
-    [Arguments]    @{vm_indices}
-    OpenStackOperations.Get ControlNode Connection
-    ${output} =    DevstackUtils.Write Commands Until Prompt And Log    sudo ip netns list
-    FOR    ${index}    IN    @{vm_indices}
-        ${rc}    ${output} =    OperatingSystem.Run And Return Rc And Output    nova show ${index}
-        BuiltIn.Log    ${output}
-    END
-    OpenStackOperations.List Nova VMs
-    OpenStackOperations.List Routers
-    OpenStackOperations.List Networks
-    OpenStackOperations.List Subnets
-    OpenStackOperations.List Ports
-    OpenStackOperations.List Security Groups
-
-List Security Groups
-    [Documentation]    Logging keyword to display all security groups using the openstack cli. Assumes openstack
-    ...    credentials are already sourced
-    ${output} =    OpenStack CLI    openstack security group list
-    RETURN    ${output}
-
-Neutron Security Group Show
-    [Documentation]    Displays the neutron security group configurations that belongs to a given neutron security group name
-    [Arguments]    ${SecurityGroupRuleName}
-    ${output} =    OpenStack CLI    openstack security group show ${SecurityGroupRuleName}
-    RETURN    ${output}
-
-Neutron Port Show
-    [Documentation]    Display the port configuration that belong to a given neutron port
-    [Arguments]    ${PortName}
-    ${output} =    OpenStack CLI    openstack port show ${PortName}
-    RETURN    ${output}
-
-Neutron Security Group Create
-    [Documentation]    Create a security group with specified name ,description & protocol value according to security group template
-    [Arguments]    ${SecurityGroupName}    ${additional_args}=${EMPTY}
-    OpenStackOperations.Get ControlNode Connection
-    ${output} =    OpenStack CLI    openstack security group create ${SecurityGroupName} ${additional_args}
-    ${sgp_id} =    BuiltIn.Should Match Regexp    ${output}    ${REGEX_UUID}
-    RETURN    ${output}    ${sgp_id}
-
-Neutron Security Group Update
-    [Documentation]    Updating security groups
-    [Arguments]    ${SecurityGroupName}    ${additional_args}=${EMPTY}
-    ${output} =    OpenStack CLI    openstack security group set ${SecurityGroupName} ${additional_args}
-    RETURN    ${output}
-
-Delete SecurityGroup
-    [Documentation]    Delete Security group
-    [Arguments]    ${sg_name}
-    ${output} =    OpenStack CLI    openstack security group delete ${sg_name}
-
-Neutron Security Group Rule Create
-    [Documentation]    Creates neutron security rule with Openstack CLI with or without optional params, here security group name is mandatory args, rule with optional params can be created by passing the optional args values ex: direction=${INGRESS_EGRESS}, Then these optional params are BuiltIn.Catenated with mandatory args, example of usage: "OpenStack Neutron Security Group Rule Create ${SGP_SSH} direction=${RULE_PARAMS[0]} ethertype=${RULE_PARAMS[1]} ..."
-    [Arguments]    ${Security_group_name}    &{Kwargs}
-    IF    ${Kwargs}    BuiltIn.Log    ${Kwargs}
-    IF    ${Kwargs}
-        ${description} =    Collections.Pop From Dictionary    ${Kwargs}    description    default=${None}
-    ELSE
-        ${description} =    Set Variable    ${None}
-    END
-    IF    ${Kwargs}
-        ${direction} =    Collections.Pop From Dictionary    ${Kwargs}    direction    default=${None}
-    ELSE
-        ${direction} =    Set Variable    ${None}
-    END
-    IF    ${Kwargs}
-        ${ethertype} =    Collections.Pop From Dictionary    ${Kwargs}    ethertype    default=${None}
-    ELSE
-        ${ethertype} =    Set Variable    ${None}
-    END
-    IF    ${Kwargs}
-        ${port_range_max} =    Collections.Pop From Dictionary    ${Kwargs}    port_range_max    default=${None}
-    ELSE
-        ${port_range_max} =    Set Variable    ${None}
-    END
-    IF    ${Kwargs}
-        ${port_range_min} =    Collections.Pop From Dictionary    ${Kwargs}    port_range_min    default=${None}
-    ELSE
-        ${port_range_min} =    Set Variable    ${None}
-    END
-    IF    ${Kwargs}
-        ${protocol} =    Collections.Pop From Dictionary    ${Kwargs}    protocol    default=${None}
-    ELSE
-        ${protocol} =    Set Variable    ${None}
-    END
-    IF    ${Kwargs}
-        ${remote_group_id} =    Collections.Pop From Dictionary    ${Kwargs}    remote_group_id    default=${None}
-    ELSE
-        ${remote_group_id} =    Set Variable    ${None}
-    END
-    IF    ${Kwargs}
-        ${remote_ip_prefix} =    Collections.Pop From Dictionary    ${Kwargs}    remote_ip_prefix    default=${None}
-    ELSE
-        ${remote_ip_prefix} =    Set Variable    ${None}
-    END
-    IF    ${Kwargs}
-        ${remote_ip} =    Collections.Pop From Dictionary    ${Kwargs}    remote_ip    default=${None}
-    ELSE
-        ${remote_ip} =    Set Variable    ${None}
-    END
-    ${cmd} =    BuiltIn.Set Variable    openstack security group rule create ${Security_group_name}
-    IF    '${description}'!='None'
-        ${cmd} =    BuiltIn.Catenate    ${cmd}    --description ${description}
-    ELSE
-        ${cmd} =    BuiltIn.Catenate    ${cmd}
-    END
-    IF    '${direction}'!='None'
-        ${cmd} =    BuiltIn.Catenate    ${cmd}    --${direction}
-    ELSE
-        ${cmd} =    BuiltIn.Catenate    ${cmd}
-    END
-    IF    '${ethertype}'!='None'
-        ${cmd} =    BuiltIn.Catenate    ${cmd}    --ethertype ${ethertype}
-    ELSE
-        ${cmd} =    BuiltIn.Catenate    ${cmd}
-    END
-    IF    '${port_range_min}'!='None' and '${port_range_max}'!='None'
-        ${cmd} =    BuiltIn.Catenate    ${cmd}    --dst-port ${port_range_min}:${port_range_max}
-    ELSE IF    '${port_range_max}'!='None'
-        ${cmd} =    BuiltIn.Catenate    ${cmd}    --dst-port ${port_range_max}
-    ELSE IF    '${port_range_min}'!='None'
-        ${cmd} =    BuiltIn.Catenate    ${cmd}    --dst-port ${port_range_min}
-    ELSE
-        ${cmd} =    BuiltIn.Catenate    ${cmd}
-    END
-    IF    '${protocol}'!='None'
-        ${cmd} =    BuiltIn.Catenate    ${cmd}    --protocol ${protocol}
-    ELSE
-        ${cmd} =    BuiltIn.Catenate    ${cmd}
-    END
-    IF    '${remote_group_id}'!='None'
-        ${cmd} =    BuiltIn.Catenate    ${cmd}    --remote-group ${remote_group_id}
-    ELSE
-        ${cmd} =    BuiltIn.Catenate    ${cmd}
-    END
-    IF    '${remote_ip_prefix}'!='None'
-        ${cmd} =    BuiltIn.Catenate    ${cmd}    --src-ip ${remote_ip_prefix}
-    ELSE
-        ${cmd} =    BuiltIn.Catenate    ${cmd}
-    END
-    IF    '${remote_ip}'!='None'
-        ${cmd} =    BuiltIn.Catenate    ${cmd}    --remote-ip ${remote_ip}
-    ELSE
-        ${cmd} =    BuiltIn.Catenate    ${cmd}
-    END
-    ${output} =    OpenStack CLI    ${cmd}
-    ${rule_id} =    BuiltIn.Should Match Regexp    ${output}    ${REGEX_UUID}
-    RETURN    ${output}    ${rule_id}
-
-Security Group Create Without Default Security Rules
-    [Documentation]    Create Neutron Security Group with no default rules, using specified name and optional arguments.
-    [Arguments]    ${sg_name}    ${additional_args}=${EMPTY}
-    OpenStackOperations.Neutron Security Group Create    ${sg_name}    ${additional_args}
-    Delete All Security Group Rules    ${sg_name}
-
-Delete All Security Group Rules
-    [Documentation]    Delete all security rules from a specified security group
-    [Arguments]    ${sg_name}
-    ${sg_rules_output} =    OpenStack CLI    openstack security group rule list ${sg_name} -cID -fvalue
-    @{sg_rules} =    String.Split String    ${sg_rules_output}    \n
-    FOR    ${rule}    IN    @{sg_rules}
-        ${output} =    OpenStack CLI    openstack security group rule delete ${rule}
-    END
-
-Create Allow All SecurityGroup
-    [Documentation]    Allow all TCP/UDP/ICMP packets for this suite
-    [Arguments]    ${sg_name}    ${ether_type}=IPv4    ${dual}=False
-    OpenStackOperations.Neutron Security Group Create    ${sg_name}
-    OpenStackOperations.Neutron Security Group Rule Create
-    ...    ${sg_name}
-    ...    direction=ingress
-    ...    ethertype=${ether_type}
-    ...    port_range_max=65535
-    ...    port_range_min=1
-    ...    protocol=tcp
-    OpenStackOperations.Neutron Security Group Rule Create
-    ...    ${sg_name}
-    ...    direction=egress
-    ...    ethertype=${ether_type}
-    ...    port_range_max=65535
-    ...    port_range_min=1
-    ...    protocol=tcp
-    OpenStackOperations.Neutron Security Group Rule Create
-    ...    ${sg_name}
-    ...    direction=ingress
-    ...    ethertype=${ether_type}
-    ...    protocol=icmp
-    OpenStackOperations.Neutron Security Group Rule Create
-    ...    ${sg_name}
-    ...    direction=egress
-    ...    ethertype=${ether_type}
-    ...    protocol=icmp
-    OpenStackOperations.Neutron Security Group Rule Create
-    ...    ${sg_name}
-    ...    direction=ingress
-    ...    ethertype=${ether_type}
-    ...    port_range_max=65535
-    ...    port_range_min=1
-    ...    protocol=udp
-    OpenStackOperations.Neutron Security Group Rule Create
-    ...    ${sg_name}
-    ...    direction=egress
-    ...    ethertype=${ether_type}
-    ...    port_range_max=65535
-    ...    port_range_min=1
-    ...    protocol=udp
-    IF    "${dual}"=="True"
-        OpenStackOperations.Neutron Security Group Rule Create
-        ...    ${sg_name}
-        ...    direction=ingress
-        ...    ethertype=IPv6
-        ...    port_range_max=65535
-        ...    port_range_min=1
-        ...    protocol=tcp
-        OpenStackOperations.Neutron Security Group Rule Create
-        ...    ${sg_name}
-        ...    direction=egress
-        ...    ethertype=IPv6
-        ...    port_range_max=65535
-        ...    port_range_min=1
-        ...    protocol=tcp
-        OpenStackOperations.Neutron Security Group Rule Create
-        ...    ${sg_name}
-        ...    direction=ingress
-        ...    ethertype=IPv6
-        ...    protocol=icmp
-        OpenStackOperations.Neutron Security Group Rule Create
-        ...    ${sg_name}
-        ...    direction=egress
-        ...    ethertype=IPv6
-        ...    protocol=icmp
-        OpenStackOperations.Neutron Security Group Rule Create
-        ...    ${sg_name}
-        ...    direction=ingress
-        ...    ethertype=IPv6
-        ...    port_range_max=65535
-        ...    port_range_min=1
-        ...    protocol=udp
-        OpenStackOperations.Neutron Security Group Rule Create
-        ...    ${sg_name}
-        ...    direction=egress
-        ...    ethertype=IPv6
-        ...    port_range_max=65535
-        ...    port_range_min=1
-        ...    protocol=udp
-    END
-
-Create Neutron Port With Additional Params
-    [Documentation]    Create Port With given additional parameters
-    [Arguments]    ${network_name}    ${port_name}    ${additional_args}=${EMPTY}
-    ${rc}    ${output} =    OperatingSystem.Run And Return Rc And Output
-    ...    neutron -v port-create ${network_name} --name ${port_name} ${additional_args}
-    BuiltIn.Log    ${output}
-    BuiltIn.Should Be True    '${rc}' == '0'
-    ${port_id} =    BuiltIn.Should Match Regexp    ${OUTPUT}    ${REGEX_UUID}
-    RETURN    ${OUTPUT}    ${port_id}
-
-Get Ports MacAddr
-    [Documentation]    Retrieve the port MacAddr for the given list of port name and return the MAC address list.
-    [Arguments]    ${ports}
-    ${macs} =    BuiltIn.Create List
-    FOR    ${port}    IN    @{ports}
-        ${mac} =    OpenStackOperations.Get Port Mac    ${port}
-        Collections.Append To List    ${macs}    ${mac}
-    END
-    RETURN    ${macs}
-
-Get Port Ip
-    [Documentation]    Keyword would return the IP of the ${port_name} received.
-    [Arguments]    ${port_name}
-    ${output} =    OpenStack CLI    openstack port list | grep "${port_name}" | awk -F\\' '{print $2}'
-    ${splitted_output} =    String.Split String    ${output}    ${EMPTY}
-    ${port_ip} =    Collections.Get from List    ${splitted_output}    0
-    RETURN    ${port_ip}
-
-Get Port Mac
-    [Documentation]    Keyword would return the MAC ID of the ${port_name} received.
-    [Arguments]    ${port_name}
-    ${output} =    OpenStack CLI    openstack port show ${port_name} | grep mac_address | awk '{print $4}'
-    ${splitted_output} =    String.Split String    ${output}    ${EMPTY}
-    ${port_mac} =    Collections.Get from List    ${splitted_output}    0
-    RETURN    ${port_mac}
-
-Get Port Mac Address From Ip
-    [Documentation]    Retrieve the mac address for a port that matches any given ip.
-    [Arguments]    ${ip}
-    ${output} =    OpenStack CLI    openstack port list | grep -w ${ip} | awk '{print $5}'
-    ${splitted_output} =    String.Split String    ${output}    ${EMPTY}
-    ${mac_addr} =    Collections.Get from List    ${splitted_output}    0
-    RETURN    ${mac_addr}
-
-Create L2Gateway
-    [Documentation]    Keyword to create an L2 Gateway ${gw_name} for bridge ${bridge_name} connected to interface ${intf_name} (Using Neutron CLI).
-    [Arguments]    ${bridge_name}    ${intf_name}    ${gw_name}
-    ${rc}    ${l2gw_output} =    OperatingSystem.Run And Return Rc And Output
-    ...    ${L2GW_CREATE} name=${bridge_name},interface_names=${intf_name} ${gw_name}
-    BuiltIn.Log    ${l2gw_output}
-    RETURN    ${l2gw_output}
-
-Update L2Gateway
-    [Documentation]    Keyword to add {intf_name_list} to an existing L2 Gateway ${gw_name} (Using Neutron CLI).
-    [Arguments]    ${bridge_name}    ${gw_name}    ${intf_name_1}    ${intf_name_2}
-    ${rc}    ${l2gw_output} =    Run And Return Rc And Output
-    ...    ${L2GW_UPDATE} name=${bridge_name},interface_names="${intf_name_1};${intf_name_2}" ${gw_name}
-    Log    ${l2gw_output}
-    RETURN    ${l2gw_output}
-
-Create L2Gateway Connection
-    [Documentation]    Keyword would create a new L2 Gateway Connection for ${gw_name} to ${net_name} (Using Neutron CLI).
-    [Arguments]    ${gw_name}    ${net_name}
-    ${rc}    ${l2gw_output} =    OperatingSystem.Run And Return Rc And Output
-    ...    ${L2GW_CONN_CREATE} ${gw_name} ${net_name}
-    BuiltIn.Log    ${l2gw_output}
-    BuiltIn.Should Be True    '${rc}' == '0'
-    RETURN    ${l2gw_output}
-
-Get All L2Gateway
-    [Documentation]    Keyword to return all the L2 Gateways available (Using Neutron CLI).
-    ${rc}    ${output} =    OperatingSystem.Run And Return Rc And Output    ${L2GW_GET_YAML}
-    BuiltIn.Should Be True    '${rc}' == '0'
-    RETURN    ${output}
-
-Get All L2Gateway Connection
-    [Documentation]    Keyword to return all the L2 Gateway connections available (Using Neutron CLI).
-    ${rc}    ${output} =    OperatingSystem.Run And Return Rc And Output    ${L2GW_GET_CONN_YAML}
-    BuiltIn.Should Be True    '${rc}' == '0'
-    RETURN    ${output}
-
-Get L2Gateway
-    [Documentation]    Keyword to check if the ${gw_id} is available in the L2 Gateway list (Using Neutron CLI).
-    [Arguments]    ${gw_id}
-    ${rc}    ${output} =    OperatingSystem.Run And Return Rc And Output    ${L2GW_SHOW} ${gw_id}
-    BuiltIn.Log    ${output}
-    BuiltIn.Should Be True    '${rc}' == '0'
-    RETURN    ${output}
-
-Get L2gw Id
-    [Documentation]    Keyword to retrieve the L2 Gateway ID for the ${l2gw_name} (Using Neutron CLI).
-    [Arguments]    ${l2gw_name}
-    ${rc}    ${output} =    OperatingSystem.Run And Return Rc And Output
-    ...    ${L2GW_GET} | grep "${l2gw_name}" | awk '{print $2}'
-    BuiltIn.Log    ${output}
-    BuiltIn.Should Be True    '${rc}' == '0'
-    ${splitted_output} =    String.Split String    ${output}    ${EMPTY}
-    ${l2gw_id} =    Collections.Get from List    ${splitted_output}    0
-    RETURN    ${l2gw_id}
-
-Get L2gw Connection Id
-    [Documentation]    Keyword to retrieve the L2 Gateway Connection ID for the ${l2gw_name} (Using Neutron CLI).
-    [Arguments]    ${l2gw_name}
-    ${l2gw_id} =    OpenStackOperations.Get L2gw Id    ${l2gw_name}
-    ${rc}    ${output} =    OperatingSystem.Run And Return Rc And Output
-    ...    ${L2GW_GET_CONN} | grep "${l2gw_id}" | awk '{print $2}'
-    BuiltIn.Should Be True    '${rc}' == '0'
-    ${splitted_output} =    String.Split String    ${output}    ${EMPTY}
-    ${splitted_output} =    String.Split String    ${output}    ${EMPTY}
-    ${l2gw_conn_id} =    Collections.Get from List    ${splitted_output}    0
-    RETURN    ${l2gw_conn_id}
-
-Neutron Port List Rest
-    [Documentation]    Keyword to get all ports details in Neutron (Using REST).
-    ${resp} =    RequestsLibrary.Get Request    session    ${PORT_URL}
-    BuiltIn.Log    ${resp.text}
-    BuiltIn.Should Be Equal As Strings    ${resp.status_code}    200
-    RETURN    ${resp.text}
-
-Get Neutron Port Rest
-    [Documentation]    Keyword to get the specific port details in Neutron (Using REST).
-    [Arguments]    ${port_id}
-    ${resp} =    RequestsLibrary.Get Request    session    ${CONFIG_API}/${GET_PORT_URL}/${port_id}
-    BuiltIn.Log    ${resp.text}
-    BuiltIn.Should Be Equal As Strings    ${resp.status_code}    200
-    RETURN    ${resp.text}
-
-Update Port Rest
-    [Documentation]    Keyword to update ${port_id} with json data received in ${json_data} (Using REST).
-    [Arguments]    ${port_id}    ${json_data}
-    BuiltIn.Log    ${json_data}
-    ${resp} =    RequestsLibrary.Put Request    session    ${CONFIG_API}/${GET_PORT_URL}/${port_id}    ${json_data}
-    BuiltIn.Log    ${resp.text}
-    BuiltIn.Should Be Equal As Strings    ${resp.status_code}    200
-    RETURN    ${resp.text}
-
-Get Neutron Network Rest
-    [Documentation]    Keyword to get the specific network details in Neutron (Using REST).
-    [Arguments]    ${net_id}
-    ${resp} =    RequestsLibrary.Get Request    session    ${NETWORK_URL}/network/${net_id}
-    BuiltIn.Log    ${resp.text}
-    BuiltIn.Should Be Equal As Strings    ${resp.status_code}    200
-    RETURN    ${resp.text}
-
-Create And Configure Security Group
-    [Documentation]    Create Security Group with given name, and default allow rules for TCP/UDP/ICMP protocols.
-    [Arguments]    ${sg-name}
-    OpenStackOperations.Neutron Security Group Create    ${sg-name}
-    OpenStackOperations.Neutron Security Group Rule Create
-    ...    ${sg-name}
-    ...    direction=ingress
-    ...    port_range_max=65535
-    ...    port_range_min=1
-    ...    protocol=tcp
-    ...    remote_ip_prefix=0.0.0.0/0
-    OpenStackOperations.Neutron Security Group Rule Create
-    ...    ${sg-name}
-    ...    direction=egress
-    ...    port_range_max=65535
-    ...    port_range_min=1
-    ...    protocol=tcp
-    ...    remote_ip_prefix=0.0.0.0/0
-    OpenStackOperations.Neutron Security Group Rule Create
-    ...    ${sg-name}
-    ...    direction=ingress
-    ...    protocol=icmp
-    ...    remote_ip_prefix=0.0.0.0/0
-    OpenStackOperations.Neutron Security Group Rule Create
-    ...    ${sg-name}
-    ...    direction=egress
-    ...    protocol=icmp
-    ...    remote_ip_prefix=0.0.0.0/0
-    OpenStackOperations.Neutron Security Group Rule Create
-    ...    ${sg-name}
-    ...    direction=ingress
-    ...    port_range_max=65535
-    ...    port_range_min=1
-    ...    protocol=udp
-    ...    remote_ip_prefix=0.0.0.0/0
-    OpenStackOperations.Neutron Security Group Rule Create
-    ...    ${sg-name}
-    ...    direction=egress
-    ...    port_range_max=65535
-    ...    port_range_min=1
-    ...    protocol=udp
-    ...    remote_ip_prefix=0.0.0.0/0
-
-Add Security Group To VM
-    [Documentation]    Add the security group provided to the given VM.
-    [Arguments]    ${vm}    ${sg}
-    ${output} =    OpenStack CLI    openstack server add security group ${vm} ${sg}
-
-Remove Security Group From VM
-    [Documentation]    Remove the security group provided to the given VM.
-    [Arguments]    ${vm}    ${sg}
-    OpenStackOperations.Get ControlNode Connection
-    ${output} =    OpenStack CLI    openstack server remove security group ${vm} ${sg}
-
-Create SFC Flow Classifier
-    [Documentation]    Create a flow classifier for SFC
-    [Arguments]    ${name}    ${src_ip}    ${dest_ip}    ${protocol}    ${neutron_src_port}    ${args}=${EMPTY}
-    ${output} =    OpenStack CLI
-    ...    openstack sfc flow classifier create --ethertype IPv4 --source-ip-prefix ${src_ip}/32 --destination-ip-prefix ${dest_ip}/32 --protocol ${protocol} --logical-source-port ${neutron_src_port} ${args} ${name}
-    BuiltIn.Should Contain    ${output}    ${name}
-    RETURN    ${output}
-
-Delete SFC Flow Classifier
-    [Documentation]    Delete a SFC flow classifier
-    [Arguments]    ${name}
-    ${output} =    OpenStack CLI    openstack sfc flow classifier delete ${name}
-    RETURN    ${output}
-
-Create SFC Port Pair
-    [Documentation]    Creates a neutron port pair for SFC
-    [Arguments]    ${name}    ${port_in}    ${port_out}
-    ${output} =    OpenStack CLI    openstack sfc port pair create --ingress=${port_in} --egress=${port_out} ${name}
-    BuiltIn.Should Contain    ${output}    ${name}
-    RETURN    ${output}
-
-Delete SFC Port Pair
-    [Documentation]    Delete a SFC port pair
-    [Arguments]    ${name}
-    ${output} =    OpenStack CLI    openstack sfc port pair delete ${name}
-    RETURN    ${output}
-
-Create SFC Port Pair Group
-    [Documentation]    Creates a port pair group with a single port pair for SFC
-    [Arguments]    ${name}    ${port_pair}
-    ${output} =    OpenStack CLI    openstack sfc port pair group create --port-pair ${port_pair} ${name}
-    BuiltIn.Should Contain    ${output}    ${name}
-    RETURN    ${output}
-
-Create SFC Port Pair Group With Two Pairs
-    [Documentation]    Creates a port pair group with two port pairs for SFC
-    [Arguments]    ${name}    ${port_pair1}    ${port_pair2}
-    ${output} =    OpenStack CLI
-    ...    openstack sfc port pair group create --port-pair ${port_pair1} --port-pair ${port_pair2} ${name}
-    BuiltIn.Should Contain    ${output}    ${name}
-    RETURN    ${output}
-
-Delete SFC Port Pair Group
-    [Documentation]    Delete a SFC port pair group
-    [Arguments]    ${name}
-    OpenStackOperations.Get ControlNode Connection
-    ${output} =    OpenStack CLI    openstack sfc port pair group delete ${name}
-    RETURN    ${output}
-
-Create SFC Port Chain
-    [Documentation]    Creates a port pair chain with two port groups and a singel classifier.
-    [Arguments]    ${name}    ${args}=${EMPTY}
-    ${output} =    OpenStack CLI    openstack sfc port chain create ${name} ${args}
-    BuiltIn.Should Contain    ${output}    ${name}
-    RETURN    ${output}
-
-Update SFC Port Chain With A New Flow Classifier
-    [Documentation]    Adds a Flow Classifier to a Port Chain
-    [Arguments]    ${name}    ${fc}
-    ${output} =    OpenStack CLI    openstack sfc port chain set ${name} --flow-classifier ${fc}
-    RETURN    ${output}
-
-Update SFC Port Chain Removing A Flow Classifier
-    [Documentation]    Adds a Flow Classifier to a Port Chain
-    [Arguments]    ${name}    ${fc}
-    ${output} =    OpenStack CLI    openstack sfc port chain unset ${name} --flow-classifier ${fc}
-    RETURN    ${output}
-
-Delete SFC Port Chain
-    [Documentation]    Delete a SFC port chain
-    [Arguments]    ${name}
-    ${output} =    OpenStack CLI    openstack sfc port chain delete ${name}
-    RETURN    ${output}
-
-Reboot Nova VM
-    [Documentation]    Reboot NOVA VM
-    [Arguments]    ${vm_name}
-    ${output} =    OpenStack CLI    openstack server reboot --wait ${vm_name}
-    BuiltIn.Wait Until Keyword Succeeds    35s    10s    OpenStackOperations.Verify VM Is ACTIVE    ${vm_name}
-
-Remove RSA Key From KnownHosts
-    [Documentation]    Remove RSA
-    [Arguments]    ${vm_ip}
-    OpenStackOperations.Get ControlNode Connection
-    ${output} =    DevstackUtils.Write Commands Until Prompt And Log    sudo cat /root/.ssh/known_hosts    30s
-    ${output} =    DevstackUtils.Write Commands Until Prompt And Log
-    ...    sudo ssh-keygen -f "/root/.ssh/known_hosts" -R ${vm_ip}
-    ...    30s
-    ${output} =    DevstackUtils.Write Commands Until Prompt    sudo cat "/root/.ssh/known_hosts"    30s
-
-Wait For Routes To Propogate
-    [Documentation]    Check propagated routes
-    [Arguments]    ${networks}    ${subnets}
-    OpenStackOperations.Get ControlNode Connection
-    FOR    ${INDEX}    IN RANGE    0    1
-        ${net_id} =    OpenStackOperations.Get Net Id    ${networks}[${INDEX}]
-        ${is_ipv6} =    String.Get Regexp Matches    ${subnets}[${INDEX}]    ${IP6_REGEX}
-        ${length} =    BuiltIn.Get Length    ${is_ipv6}
-        ${cmd} =    BuiltIn.Set Variable If    ${length} == 0    ip route    ip -6 route
-        ${output} =    Utils.Write Commands Until Expected Prompt
-        ...    sudo ip netns exec qdhcp-${net_id} ${cmd}
-        ...    ${DEFAULT_LINUX_PROMPT_STRICT}
-        BuiltIn.Should Contain    ${output}    ${subnets}[${INDEX}]
-    END
-
-Neutron Cleanup
-    [Arguments]    ${vms}=@{EMPTY}    ${networks}=@{EMPTY}    ${subnets}=@{EMPTY}    ${ports}=@{EMPTY}    ${sgs}=@{EMPTY}
-    FOR    ${vm}    IN    @{vms}
-        BuiltIn.Run Keyword And Ignore Error    Delete Vm Instance    ${vm}
-    END
-    FOR    ${port}    IN    @{ports}
-        BuiltIn.Run Keyword And Ignore Error    Delete Port    ${port}
-    END
-    FOR    ${subnet}    IN    @{subnets}
-        BuiltIn.Run Keyword And Ignore Error    Delete SubNet    ${subnet}
-    END
-    FOR    ${network}    IN    @{networks}
-        BuiltIn.Run Keyword And Ignore Error    Delete Network    ${network}
-    END
-    FOR    ${sg}    IN    @{sgs}
-        BuiltIn.Run Keyword And Ignore Error    Delete SecurityGroup    ${sg}
-    END
-
-OpenStack List All
-    [Documentation]    Get a list of different OpenStack resources that might be in use.
-    @{modules} =    BuiltIn.Create List    server    port    network    subnet    security group
-    ...    security group rule    floating ip    router
-    FOR    ${module}    IN    @{modules}
-        ${output} =    OpenStack CLI    openstack ${module} list
-    END
-
-OpenStack CLI Get List
-    [Documentation]    Return a json list from the output of an OpenStack command.
-    [Arguments]    ${cmd}
-    @{list} =    BuiltIn.Create List
-    ${json} =    OpenStack CLI    ${cmd}
-    @{list} =    RequestsLibrary.To Json    ${json}
-    BuiltIn.Log    ${list}
-    RETURN    @{list}
-
-OpenStack CLI
-    [Documentation]    Run the given OpenStack ${cmd} and log the output.
-    [Arguments]    ${cmd}
-    ${result} =    Process.Run Process    ${cmd}    shell=True
-    BuiltIn.Log    ${result.stdout}
-    BuiltIn.Log    ${result.stderr}
-    BuiltIn.Should Be True    '${result.rc}' == '0'
-    RETURN    ${result.stdout}
-
-OpenStack CLI With No Log
-    [Documentation]    Run the given OpenStack ${cmd} and do not log the output.
-    [Arguments]    ${cmd}
-    ${result} =    Process.Run Process    ${cmd}    shell=True
-    BuiltIn.Should Be True    '${result.rc}' == '0'
-    RETURN    ${result.stdout}
-
-OpenStack Cleanup All
-    [Documentation]    Cleanup all Openstack resources with best effort. The keyword will query for all resources
-    ...    in use and then attempt to delete them. Errors are ignored to allow the cleanup to continue.
-    @{fips} =    OpenStack CLI Get List    openstack floating ip list -f json
-    FOR    ${fip}    IN    @{fips}
-        BuiltIn.Run Keyword And Ignore Error    Delete Floating IP    ${fip['ID']}
-    END
-    @{vms} =    OpenStack CLI Get List    openstack server list -f json
-    FOR    ${vm}    IN    @{vms}
-        OpenStack CLI    openstack server show ${vm['ID']}
-        BuiltIn.Run Keyword And Ignore Error    Delete Vm Instance    ${vm['ID']}
-    END
-    @{routers} =    OpenStack CLI Get List    openstack router list -f json
-    FOR    ${router}    IN    @{routers}
-        BuiltIn.Run Keyword And Ignore Error    Cleanup Router    ${router['ID']}
-    END
-    @{ports} =    OpenStack CLI Get List    openstack port list -f json
-    FOR    ${port}    IN    @{ports}
-        BuiltIn.Run Keyword And Ignore Error    Delete Port    ${port['ID']}
-    END
-    @{networks} =    OpenStack CLI Get List    openstack network list -f json
-    FOR    ${network}    IN    @{networks}
-        BuiltIn.Run Keyword And Ignore Error    Delete Subnet    ${network['Subnets']}
-        BuiltIn.Run Keyword And Ignore Error    Delete Network    ${network['ID']}
-    END
-    @{security_groups} =    OpenStack CLI Get List    openstack security group list -f json
-    FOR    ${security_group}    IN    @{security_groups}
-        IF    "${security_group['Name']}" != "default"
-            BuiltIn.Run Keyword And Ignore Error    Delete SecurityGroup    ${security_group['ID']}
-        END
-    END
-    OpenStack List All
-
-Cleanup Router
-    [Documentation]    Delete a router, but first remove any interfaces or gateways so that the delete will be successful.
-    [Arguments]    ${id}
-    @{ports} =    OpenStack CLI Get List    openstack port list --router ${id} -f json --long
-    FOR    ${port}    IN    @{ports}
-        ${subnet_id} =    OpenStackOperations.Get Match    ${port['Fixed IP Addresses']}    ${REGEX_UUID}    0
-        IF    "${port['Device Owner']}" == "network:router_gateway"
-            BuiltIn.Run Keyword And Ignore Error    Remove Gateway    ${id}
-        END
-        IF    "${port['Device Owner']}" == "network:router_interface"
-            BuiltIn.Run Keyword And Ignore Error    Remove Interface    ${id}    ${subnet_id}
-        END
-    END
-    BuiltIn.Run Keyword And Ignore Error    Delete Router    ${id}
-
-OpenStack Suite Setup
-    [Documentation]    Wrapper teardown keyword that can be used in any suite running in an openstack environement
-    SetupUtils.Setup_Utils_For_Setup_And_Teardown
-    @{loggers} =    BuiltIn.Create List
-    ...    org.apache.karaf.shell.support.ShellUtil
-    ...    org.apache.sshd.server.session.ServerSessionImpl
-    Setuputils.Setup_Logging_For_Debug_Purposes_On_List_Or_All    OFF    ${loggers}
-    DevstackUtils.Devstack Suite Setup
-    @{tcpdump_port_6653_conn_ids} =    OpenStackOperations.Start Packet Capture On Nodes
-    ...    tcpdump_port_6653
-    ...    port 6653
-    ...    @{OS_ALL_IPS}
-    BuiltIn.Set Suite Variable    @{tcpdump_port_6653_conn_ids}
-    IF    "${PRE_CLEAN_OPENSTACK_ALL}"=="True"    OpenStack Cleanup All
-    OpenStackOperations.Add OVS Logging On All OpenStack Nodes
-    Validate Deployment
-
-OpenStack Suite Teardown
-    [Documentation]    Wrapper teardown keyword that can be used in any suite running in an openstack environement
-    ...    to clean up all openstack resources. For example, all instances, networks, ports, etc will be listed and
-    ...    and deleted. As other global cleanup tasks are needed, they can be added here and the suites will all
-    ...    benefit automatically.
-    # TODO: followup patch will add the list of vms to pass to Show Debugs
-    # OpenStackOperations.Show Debugs    @{NET_1_VMS}    @{NET_2_VMS}
-    OpenStackOperations.Get Suite Debugs
-    OpenStack Cleanup All
-    OpenStackOperations.Stop Packet Capture On Nodes    ${tcpdump_port_6653_conn_ids}
-    SSHLibrary.Close All Connections
-    FOR    ${i}    IN RANGE    ${NUM_ODL_SYSTEM}
-        KarafKeywords.Issue Command On Karaf Console    threads --list | wc -l    ${ODL_SYSTEM_${i+1}_IP}
-    END
-
-Validate Deployment
-    [Documentation]    Validate the deployment. Examples to validate are verifying default table
-    ...    flows are installed and that the tunnel mesh has been built correctly.
-    Write To Validate File    ----------------------------------------\n${SUITE_NAME}\n
-    FOR    ${keyword}    IN    @{VALIDATION_KEYWORDS}
-        ${status} =    Builtin.Run Keyword And Return Status    ${keyword}
-        IF    "${status}" == "FAIL" or "${status}" == "False"
-            BuiltIn.Run Keywords    Write To Validate File    Failed: ${keyword}    AND    BuiltIn.Fail
-        ELSE
-            Write To Validate File    Passed: ${keyword}
-        END
-    END
-
-Write To Validate File
-    [Documentation]    Write the given ${msg} to ${VALIDATION_FILE}. Create the file if not present.
-    [Arguments]    ${msg}
-    ${status} =    BuiltIn.Run Keyword And Return Status    OperatingSystem.File Should Exist    ${VALIDATION_FILE}
-    IF    "${status}" == "False"
-        OperatingSystem.Create File    ${VALIDATION_FILE}
-    END
-    OperatingSystem.Append To File    ${VALIDATION_FILE}    ${msg}\n
-
-Copy DHCP Files From Control Node
-    [Documentation]    Copy the current DHCP files to the robot vm. The keyword must be called
-    ...    after the subnet(s) are created and before the subnet(s) are deleted.
-    ${suite_} =    BuiltIn.Evaluate    """${SUITE_NAME}""".replace(" ","_").replace("/","_").replace(".","_")
-    ${dstdir} =    BuiltIn.Set Variable    /tmp/qdhcp/${suite_}
-    OperatingSystem.Create Directory    ${dstdir}
-    OpenStackOperations.Get ControlNode Connection
-    BuiltIn.Run Keyword And Ignore Error
-    ...    SSHLibrary.Get Directory
-    ...    /opt/stack/data/neutron/dhcp
-    ...    ${dstdir}
-    ...    recursive=True
-
-Is Feature Installed
-    [Arguments]    ${features}=none
-    FOR    ${feature}    IN    @{features}
-        ${status}    ${output} =    BuiltIn.Run Keyword And Ignore Error
-        ...    BuiltIn.Should Contain
-        ...    ${CONTROLLERFEATURES}
-        ...    ${feature}
-        IF    "${status}" == "PASS"    RETURN    True
-    END
-    RETURN    False
-
-Add OVS Logging On All OpenStack Nodes
-    [Documentation]    Add higher levels of OVS logging to all the OpenStack nodes
-    FOR    ${conn_id}    IN    @{OS_ALL_CONN_IDS}
-        OVSDB.Add OVS Logging    ${conn_id}
-    END
-
-Reset OVS Logging On All OpenStack Nodes
-    [Documentation]    Reset the OVS logging to all the OpenStack nodes
-    FOR    ${conn_id}    IN    @{OS_ALL_CONN_IDS}
-        OVSDB.Reset OVS Logging    ${conn_id}
-    END
-
-Start Packet Capture On Nodes
-    [Documentation]    Wrapper keyword around the TcpDump packet capture that is catered to the Openstack setup.
-    ...    The caller must pass the three arguments with a variable number of ips at the end,
-    ...    but ${EMPTY} can be used for the tag and filter.
-    [Arguments]    ${tag}    ${filter}    @{ips}
-    ${suite_} =    BuiltIn.Evaluate    """${SUITE_NAME}""".replace(" ","_").replace("/","_").replace(".","_")
-    ${tag_} =    BuiltIn.Catenate    SEPARATOR=__    ${tag}    ${suite_}
-    @{conn_ids} =    Tcpdump.Start Packet Capture on Nodes    tag=${tag_}    filter=${filter}    ips=${ips}
-    RETURN    @{conn_ids}
-
-Stop Packet Capture On Nodes
-    [Arguments]    ${conn_ids}=@{EMPTY}
-    Tcpdump.Stop Packet Capture on Nodes    ${conn_ids}
-
-Server Live Migrate
-    [Documentation]    Keyword for live migration of VM instance
-    ...    additional_agrs is to select particular migration(live/shared-migration/block-migration)
-    ...    if the additional_agrs is not given default migration(shared-migration) will happen
-    [Arguments]    ${vm_instance_name}
-    ${output} =    OpenStackOperations.OpenStack CLI    nova live-migration ${vm_instance_name}
-
-Get Hypervisor Host Of Vm
-    [Documentation]    Show server with neutron request.
-    [Arguments]    ${vm_name}
-    ${output} =    OpenStackOperations.OpenStack CLI
-    ...    openstack server show -f value -c OS-EXT-SRV-ATTR:host ${vm_name}
-    RETURN    ${output}
-
-Check If Migration Is Complete
-    [Documentation]    Show server and verify if task_state is not migrating
-    [Arguments]    ${vm_name}
-    ${output} =    OpenStackOperations.OpenStack CLI    openstack server show ${vm_name} | grep "OS-EXT-STS:task_state"
-    BuiltIn.Should Not Contain    ${output}    migrating
-
-Modify OpenStack Configuration File
-    [Documentation]    Use crudini to modify any parameter in any Openstack configuration File
-    [Arguments]    ${conn_id}    ${file_name}    ${section}    ${key}    ${value}
-    SSHLibrary.Switch Connection    ${conn_id}
-    ${output}    ${rc} =    SSHLibrary.Execute Command
-    ...    sudo crudini --verbose --set --inplace ${file_name} ${section} ${key} ${value}
-    ...    return_rc=True
-    ...    return_stdout=True
-    BuiltIn.Log    ${output}
-    BuiltIn.Should Be True    '${rc}' == '0'
-
-Restart DevStack Service
-    [Documentation]    Restart the Openstack Service
-    [Arguments]    ${conn_id}    ${service_name}
-    SSHLibrary.Switch Connection    ${conn_id}
-    ${output}    ${rc} =    SSHLibrary.Execute Command
-    ...    sudo systemctl restart devstack@${service_name}.service
-    ...    return_rc=True
-    ...    return_stdout=True
-    BuiltIn.Log    ${output}
-    BuiltIn.Should Be True    '${rc}' == '0'
-
-Get Network Segmentation Id
-    [Documentation]    Returns network segmentation id for the given network name.
-    [Arguments]    ${network_name}
-    ${output} =    OpenStack CLI    openstack network show ${network_name} | grep segmentation_id | awk '{print $4}'
-    @{list} =    String.Split String    ${output}
-    RETURN    ${list}[0]
-
-Verify Services
-    [Documentation]    Verify if the services are operational
-    Wait Until Keyword Succeeds
-    ...    60
-    ...    2
-    ...    ClusterManagement.Check Status Of Services Is OPERATIONAL
-    ...    @{DIAG_SERVICES}
-
-Verify Expected Default Tables On Nodes
-    [Documentation]    Verify if Default Table Entries are programmed on all Nodes
-    [Arguments]    ${node_ips}=@{OS_ALL_IPS}
-    ${resp} =    RequestsLibrary.Get Request    session    ${RFC8040_CONFIG_NODES_API}
-    Utils.Log Content    ${resp.text}
-    ${failed_node_list} =    BuiltIn.Create List
-    FOR    ${node_ip}    IN    @{node_ips}
-        ${failed_table_list} =    Verify Expected Default Tables    ${node_ip}
-        ${failed_table_list_size} =    BuiltIn.Get Length    ${failed_table_list}
-        IF    ${failed_table_list_size} > 0
-            Collections.Append To List    ${failed_node_list}    ${node_ip}
-        END
-    END
-    Builtin.Should Be Empty    ${failed_node_list}
-
-Verify Expected Default Tables
-    [Documentation]    Verify if Default Table Entries are programmed on specific Node
-    [Arguments]    ${ovs_ip}
-    ${flow_dump} =    Utils.Run Command On Remote System
-    ...    ${ovs_ip}
-    ...    sudo ovs-ofctl dump-flows ${INTEGRATION_BRIDGE} -OOpenFlow13
-    BuiltIn.Log    ${flow_dump}
-    ${failed_table_list} =    BuiltIn.Create List
-    FOR    ${table}    IN    @{DEFAULT_FLOW_TABLES}
-        ${rc} =    Builtin.Run Keyword And Return Status
-        ...    Builtin.Should Not Match Regexp
-        ...    ${flow_dump}
-        ...    .*table=${table}.*priority=0
-        IF    ${rc}
-            Collections.Append To List    ${failed_table_list}    ${table}
-        END
-    END
-    RETURN    ${failed_table_list}
-
-Get Project Id
-    [Documentation]    Returns project ID for the given project name.
-    [Arguments]    ${project_name}
-    ${project_id} =    OpenStack CLI    openstack project show ${project_name} -f value -c id
-    RETURN    ${project_id}
-
-Set Instance Quota For Project
-    [Documentation]    Set quota for the created instances using the specific project id.
-    [Arguments]    ${num_instances}    ${project_id}
-    ${output} =    OpenStack CLI    openstack quota set --instances ${num_instances} ${project_id}
-    RETURN    ${output}
-
-Create Bgpvpn
-    [Documentation]    Create Bgpvpn with neutron request.
-    [Arguments]    ${vpnname}    ${additional_args}=${EMPTY}
-    ${output} =    OpenStack CLI    openstack bgpvpn create --name ${vpnname} ${additional_args}
-
-Get BgpVpn Id
-    [Documentation]    Retrieve the bgpvpn id for the given bgpvpn name
-    [Arguments]    ${vpnName}
-    ${output} =    OpenStack CLI    openstack bgpvpn show ${vpnName} | grep " ID" | awk '{print $4}'
-    ${splitted_output} =    String.Split String    ${output}    ${EMPTY}
-    ${vpn_id} =    Collections.Get from List    ${splitted_output}    0
-    RETURN    ${vpn_id}
-
-Configure_IP_On_Sub_Interface
-    [Documentation]    Keyword for configuring specified IP on specified interface and the corresponding specified sub interface
-    [Arguments]    ${network_name}    ${ip}    ${vm_ip}    ${mask}    ${sub_interface_state}=${EMPTY}    ${interface}=eth0
-    ...    ${sub_interface_number}=1
-    OpenStackOperations.Execute Command on VM Instance
-    ...    ${network_name}
-    ...    ${vm_ip}
-    ...    sudo ifconfig ${interface}:${sub_interface_number} ${ip} netmask ${mask} ${sub_interface_state}
-
-Verify_IP_Configured_On_Sub_Interface
-    [Documentation]    Keyword for verifying specified IP on specified interface and the corresponding specified sub interface
-    [Arguments]    ${network_name}    ${ip}    ${vm_ip}    ${interface}=eth0    ${sub_interface_number}=1
-    ${resp} =    OpenStackOperations.Execute Command on VM Instance
-    ...    ${network_name}
-    ...    ${vm_ip}
-    ...    sudo ifconfig ${interface}:${sub_interface_number}
-    BuiltIn.Should Contain    ${resp}    ${ip}
diff --git a/csit/libraries/Tempest.robot b/csit/libraries/Tempest.robot
deleted file mode 100644 (file)
index 4992c42..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-*** Settings ***
-Documentation       General Utils library. This library has broad scope, it can be used by any robot system tests.
-
-Library             SSHLibrary
-Resource            DevstackUtils.robot
-Resource            OpenStackOperations.robot
-Resource            SSHKeywords.robot
-Resource            ../variables/Variables.robot
-
-
-*** Variables ***
-@{stable/queens_EXCLUSION_REGEXES}      ${EMPTY}
-@{stable/rocky_EXCLUSION_REGEXES}       ${EMPTY}
-@{stable/stein_EXCLUSION_REGEXES}       ${EMPTY}
-@{master_EXCLUSION_REGEXES}             ${EMPTY}
-${BLACKLIST_FILE}                       /tmp/blacklist.txt
-${TEMPEST_DIR}                          /opt/stack/tempest
-${TEMPEST_CONFIG_FILE}                  ${TEMPEST_DIR}/etc/tempest.conf
-# Parameter values below are based on releng/builder - changing them requires updates in releng/builder as well
-${TEMPEST_TIMEOUT}                      420s
-
-
-*** Keywords ***
-Suite Setup
-    OpenStackOperations.OpenStack Suite Setup
-    Tempest.Log In To Tempest Executor And Setup Test Environment
-
-Run Tempest Tests
-    [Arguments]    ${tempest_regex}    ${timeout}=${TEMPEST_TIMEOUT}    ${debug}=False
-    IF    "${debug}" == "False"
-        Tempest.Run Tempest Tests Without Debug    ${tempest_regex}    timeout=${timeout}
-    END
-    IF    "${debug}" == "True"
-        Tempest.Run Tempest Tests With Debug    ${tempest_regex}    timeout=${timeout}
-    END
-    IF    "${debug}" != "True" and "${debug}" != "False"
-        Fail    debug argument must be True or False
-    END
-
-Run Tempest Tests Without Debug
-    [Documentation]    Using ostestr will allow us to (by default) run tests in paralllel.
-    ...    Because of the parallel fashion, we must ensure there is no pause on teardown so that flag in tempest.conf is
-    ...    explicitly set to False.
-    [Arguments]    ${tempest_regex}    ${TEMPEST_DIRectory}=${TEMPEST_DIR}    ${timeout}=${TEMPEST_TIMEOUT}
-    IF    "skip_if_${OPENSTACK_BRANCH}" in @{TEST_TAGS}    RETURN
-    IF    "skip_if_${SECURITY_GROUP_MODE}" in @{TEST_TAGS}    RETURN
-    IF    "skip_if_${ODL_SNAT_MODE}" in @{TEST_TAGS}    RETURN
-    ${tempest_conn_id} =    SSHLibrary.Open Connection    ${OS_CNTL_IP}    prompt=${DEFAULT_LINUX_PROMPT_STRICT}
-    SSHKeywords.Flexible SSH Login    ${OS_USER}    ${DEVSTACK_SYSTEM_PASSWORD}
-    DevstackUtils.Write Commands Until Prompt    source ${DEVSTACK_DEPLOY_PATH}/openrc admin admin
-    DevstackUtils.Write Commands Until Prompt    cd ${TEMPEST_DIRectory}
-    SSHLibrary.Read
-    Tempest.Tempest Conf Modify Pause On Test Teardown    False
-    SSHLibrary.Set Client Configuration    timeout=${timeout}
-    # There are tons of deprecation error messages when we use ostestr in our CSIT environment (openstack via devstack)
-    # The robot log files are very large and one culprit is all these deprecation warnings. If we redirect stderr to
-    # /dev/null we should be able to ignore them. We will miss any other errors, however.
-    ${output} =    DevstackUtils.Write Commands Until Prompt And Log
-    ...    ostestr --regex ${tempest_regex}
-    ...    timeout=${timeout}
-    SSHLibrary.Close Connection
-    BuiltIn.Should Contain    ${output}    Failed: 0
-
-Run Tempest Tests With Debug
-    [Documentation]    After setting pause_teardown=True in tempest.conf, use the python -m testtools.run module to execute
-    ...    a single tempest test case. We need to run only one tempest test case at a time as there will
-    ...    be potentional for an unkown number of debug pdb() prompts to catch and continue if we are running multiple
-    ...    test cases with a single command. Essentially, this keyword only handles one breakpoint at a single teardown.
-    [Arguments]    ${tempest_regex}    ${TEMPEST_DIRectory}=${TEMPEST_DIR}    ${timeout}=${TEMPEST_TIMEOUT}
-    IF    "skip_if_${OPENSTACK_BRANCH}" in @{TEST_TAGS}    RETURN
-    IF    "skip_if_${SECURITY_GROUP_MODE}" in @{TEST_TAGS}    RETURN
-    IF    "skip_if_${ODL_SNAT_MODE}" in @{TEST_TAGS}    RETURN
-    ${tempest_conn_id} =    SSHLibrary.Open Connection    ${OS_CNTL_IP}    prompt=${DEFAULT_LINUX_PROMPT_STRICT}
-    SSHKeywords.Flexible SSH Login    ${OS_USER}    ${DEVSTACK_SYSTEM_PASSWORD}
-    DevstackUtils.Write Commands Until Prompt    source ${DEVSTACK_DEPLOY_PATH}/openrc admin admin
-    DevstackUtils.Write Commands Until Prompt    cd ${TEMPEST_DIRectory}
-    SSHLibrary.Read
-    Tempest Conf Modify Pause On Test Teardown    True
-    SSHLibrary.Set Client Configuration    timeout=${timeout}
-    SSHLibrary.Write    python -m testtools.run ${tempest_regex}
-    ${output} =    SSHLibrary.Read Until Regexp    ${DEFAULT_LINUX_PROMPT_STRICT}|pdb.set_trace()
-    BuiltIn.Log    ${output}
-    OpenStackOperations.Show Debugs
-    OpenStackOperations.Get Test Teardown Debugs
-    SSHLibrary.Switch Connection    ${tempest_conn_id}
-    SSHLibrary.Write    continue
-    ${output} =    SSHLibrary.Read Until Regexp    ${DEFAULT_LINUX_PROMPT_STRICT}|pdb.set_trace()
-    BuiltIn.Log    ${output}
-    SSHLibrary.Write    continue
-    ${output} =    SSHLibrary.Read Until Prompt
-    BuiltIn.Log    ${output}
-    SSHLibrary.Close Connection
-    BuiltIn.Should Contain    ${output}    OK
-    BuiltIn.Should Not Contain    ${output}    FAILED
-
-Log In To Tempest Executor And Setup Test Environment
-    [Documentation]    Initialize SetupUtils, open SSH connection to a devstack system and source the openstack
-    ...    credentials needed to run the tempest tests. The (sometimes empty) tempest blacklist file will be created
-    ...    and pushed to the tempest executor.
-    Tempest.Create Blacklist File
-    # Tempest tests need an existing external network in order to create routers.
-    OpenStackOperations.Create Network
-    ...    ${EXTERNAL_NET_NAME}
-    ...    --external --default --provider-network-type flat --provider-physical-network ${PUBLIC_PHYSICAL_NETWORK}
-    OpenStackOperations.Create Subnet
-    ...    ${EXTERNAL_NET_NAME}
-    ...    ${EXTERNAL_SUBNET_NAME}
-    ...    ${EXTERNAL_SUBNET}
-    ...    --gateway ${EXTERNAL_GATEWAY} --allocation-pool ${EXTERNAL_SUBNET_ALLOCATION_POOL}
-    OpenStackOperations.List Networks
-    ${control_node_conn_id} =    SSHLibrary.Open Connection    ${OS_CNTL_IP}    prompt=${DEFAULT_LINUX_PROMPT_STRICT}
-    SSHKeywords.Flexible SSH Login    ${OS_USER}
-    DevstackUtils.Write Commands Until Prompt And Log    sudo pip install -U --verbose pip    timeout=120s
-    DevstackUtils.Write Commands Until Prompt And Log    sudo pip install -U --verbose os-testr>=1.0.0    timeout=120s
-    DevstackUtils.Write Commands Until Prompt And Log    ostestr --version
-    DevstackUtils.Write Commands Until Prompt And Log    testr init
-    DevstackUtils.Write Commands Until Prompt    source ${DEVSTACK_DEPLOY_PATH}/openrc admin admin
-    DevstackUtils.Write Commands Until Prompt    sudo rm -rf /opt/stack/tempest/.testrepository
-    ${net_id} =    OpenStackOperations.Get Net Id    ${EXTERNAL_NET_NAME}
-    Tempest.Tempest Conf Add External Network And Floating Network Name    ${net_id}
-
-Tempest Conf Add External Network And Floating Network Name
-    [Documentation]    Tempest will be run with a config file - this function will add the
-    ...    given external network ID to the configuration file.
-    [Arguments]    ${external_network_id}
-    Tempest.Modify Config In File On Existing SSH Connection
-    ...    ${TEMPEST_CONFIG_FILE}
-    ...    set
-    ...    network
-    ...    public_network_id
-    ...    ${external_network_id}
-    Tempest.Modify Config In File On Existing SSH Connection
-    ...    ${TEMPEST_CONFIG_FILE}
-    ...    set
-    ...    DEFAULT
-    ...    debug
-    ...    False
-    Tempest.Modify Config In File On Existing SSH Connection
-    ...    ${TEMPEST_CONFIG_FILE}
-    ...    set
-    ...    DEFAULT
-    ...    log_level
-    ...    INFO
-    Tempest.Modify Config In File On Existing SSH Connection
-    ...    ${TEMPEST_CONFIG_FILE}
-    ...    set
-    ...    network
-    ...    floating_network_name
-    ...    ${EXTERNAL_NET_NAME}
-    DevstackUtils.Write Commands Until Prompt    sudo cat ${TEMPEST_CONFIG_FILE}
-    DevstackUtils.Write Commands Until Prompt    sudo chmod 777 ${TEMPEST_CONFIG_FILE}
-
-Tempest Conf Modify Pause On Test Teardown
-    [Documentation]    Sets the DEFAULT section flag for pausing the test teardown. If True the tempest test case
-    ...    being executed will break to a pdb() debug shell when it hits it's teardown() function.
-    [Arguments]    ${pause_flag}
-    Tempest.Modify Config In File On Existing SSH Connection
-    ...    ${TEMPEST_CONFIG_FILE}
-    ...    set
-    ...    DEFAULT
-    ...    pause_teardown
-    ...    ${pause_flag}
-
-Modify Config In File On Existing SSH Connection
-    [Documentation]    uses crudini to populate oslo cofg file.
-    [Arguments]    ${config_file}    ${modifier}    ${config_section}    ${config_key}    ${config_value}=${EMPTY}
-    # this keyword is only one line so seems like extra overhead, but this may be a good candidate to move
-    # to a library at some point, when/if other suites need to use it, so wanted to make it generic.
-    DevstackUtils.Write Commands Until Prompt
-    ...    sudo -E crudini --${modifier} ${config_file} ${config_section} ${config_key} ${config_value}
-
-Create Blacklist File
-    [Documentation]    For each exclusion regex in the required @{${OPENSTACK_BRANCH}_EXCLUSION_REGEXES} list a new
-    ...    line will be created in the required ${BLACKLIST_FILE} location. This file is pushed to the OS_CONTROL_NODE
-    ...    which is assumed to be the tempest executor.
-    OperatingSystem.Create File    ${BLACKLIST_FILE}
-    FOR    ${exclusion}    IN    @{${OPENSTACK_BRANCH}_EXCLUSION_REGEXES}
-        OperatingSystem.Append To File    ${BLACKLIST_FILE}    ${exclusion}\n
-    END
-    OperatingSystem.Log File    ${BLACKLIST_FILE}
-    SSHKeywords.Copy File To Remote System    ${OS_CNTL_IP}    ${BLACKLIST_FILE}    ${BLACKLIST_FILE}
index 8da7c254d0ebbd13a96568f78afa4a08cbaccfc3..449b9a1d39abaff4d0d12070f8b080bdd5df727e 100644 (file)
@@ -664,11 +664,3 @@ Check Diagstatus
         BuiltIn.Should Be Equal As Strings    ${resp.status_code}    ${expected_status}
     END
     RETURN    ${resp}
-
-Download File On Openstack Node
-    [Documentation]    Download a file from web to the node. the input will be a session ID with established SSH connection.
-    [Arguments]    ${conn_id}    ${save_file_name}    ${url}
-    SSHLibrary.Switch Connection    ${conn_id}
-    Utils.Write Commands Until Expected Prompt
-    ...    wget -O /tmp/${save_file_name} ${url}
-    ...    ${DEFAULT_LINUX_PROMPT_STRICT}
diff --git a/csit/libraries/VpnOperations.robot b/csit/libraries/VpnOperations.robot
deleted file mode 100644 (file)
index ce84c76..0000000
+++ /dev/null
@@ -1,403 +0,0 @@
-*** Settings ***
-Documentation       Openstack library. This library is useful for tests to create network, subnet, router and vm instances
-
-Library             SSHLibrary
-Resource            Utils.robot
-Resource            TemplatedRequests.robot
-Resource            KarafKeywords.robot
-Resource            ../variables/Variables.robot
-Library             Collections
-Library             String
-Library             OperatingSystem
-
-
-*** Variables ***
-&{ITM_CREATE_DEFAULT}
-...                                     tunneltype=vxlan
-...                                     vlanid=0
-...                                     prefix=1.1.1.1/24
-...                                     gateway=0.0.0.0
-...                                     dpnid1=1
-...                                     portname1=BR1-eth1
-...                                     ipaddress1=2.2.2.2
-...                                     dpnid2=2
-...                                     portname2= BR2-eth1
-...                                     ipaddress2=3.3.3.3
-&{L3VPN_CREATE_DEFAULT}
-...                                     vpnid=4ae8cd92-48ca-49b5-94e1-b2921a261111
-...                                     name=vpn1
-...                                     rd=["2200:1"]
-...                                     exportrt=["2200:1","8800:1"]
-...                                     importrt=["2200:1","8800:1"]
-...                                     tenantid=6c53df3a-3456-11e5-a151-feff819cdc9f
-${VAR_BASE}                             ${CURDIR}/../variables/vpnservice/
-${ODL_FLOWTABLE_L3VPN}                  21
-${STATE_UP}                             UP
-${STATE_DOWN}                           DOWN
-${STATE_UNKNOWN}                        UNKNOWN
-${STATE_ENABLE}                         ENABLED
-${STATE_DISABLE}                        DISABLE
-${SESSION_TIMEOUT}                      10
-${INTEGRATION_BRIDGE}                   br-int
-${GWMAC_TABLE}                          19
-${IPV6_TABLE}                           45
-${ARP_RESPONSE_TABLE}                   81
-${ARP_REQUEST_GROUP_REGEX_FLUORINE}     actions=resubmit\\(,${ARP_RESPONSE_TABLE}\\)
-${TEP_SHOW_STATE}                       tep:show-state
-${IP_REGEX}
-...                                     (([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])
-${MAC_REGEX}                            ([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})
-${ARP_RESPONSE_REGEX_FLUORINE}
-...                                     arp,arp_op=2 actions=resubmit\\(,${ARP_PUNT_TABLE}\\),resubmit\\(,${ARP_LEARN_TABLE}\\),resubmit\\(,${ELAN_BASETABLE}\\)
-${ARP_PUNT_RESPONSE_REGEX}              arp actions=CONTROLLER:65535,learn
-${ARP_REQUEST_REGEX}                    arp,arp_op=1 actions=group:\\d+
-
-
-*** Keywords ***
-Basic Suite Setup
-    OpenStackOperations.OpenStack Suite Setup
-    TemplatedRequests.Create Default Session    timeout=${SESSION_TIMEOUT}
-
-Basic Vpnservice Suite Cleanup
-    [Arguments]    ${vpn_instance_ids}=@{EMPTY}    ${vms}=@{EMPTY}    ${networks}=@{EMPTY}    ${subnets}=@{EMPTY}    ${ports}=@{EMPTY}    ${sgs}=@{EMPTY}
-    FOR    ${vpn_instance_id}    IN    @{vpn_instance_ids}
-        BuiltIn.Run Keyword And Ignore Error    VPN Delete L3VPN    vpnid=${vpn_instance_id}
-    END
-    OpenStackOperations.Neutron Cleanup    ${vms}    ${networks}    ${subnets}    ${ports}    ${sgs}
-
-VPN Create L3VPN
-    [Documentation]    Create an L3VPN using the Json using the list of optional arguments received.
-    [Arguments]    &{Kwargs}
-    IF    "routerid" in ${Kwargs}
-        Collections.Set_To_Dictionary    ${Kwargs}    router=, "router-id":"${Kwargs['routerid']}"
-    ELSE
-        Collections.Set_To_Dictionary    ${Kwargs}    router=${empty}
-    END
-    &{L3vpn_create_actual_val} =    Collections.Copy_Dictionary    ${L3VPN_CREATE_DEFAULT}
-    Collections.Set_To_Dictionary    ${L3vpn_create_actual_val}    &{Kwargs}
-    TemplatedRequests.Post_As_Json_Templated
-    ...    folder=${VAR_BASE}/l3vpn_create
-    ...    mapping=${L3vpn_create_actual_val}
-    ...    session=default
-    ...    http_timeout=${SESSION_TIMEOUT}
-
-VPN Get L3VPN
-    [Documentation]    Will return detailed list of the L3VPN_ID received
-    [Arguments]    &{Kwargs}
-    ${resp} =    TemplatedRequests.Post_As_Json_Templated
-    ...    folder=${VAR_BASE}/get_l3vpn
-    ...    mapping=${Kwargs}
-    ...    session=default
-    ...    http_timeout=${SESSION_TIMEOUT}
-    Log    ${resp}
-    RETURN    ${resp}
-
-VPN Get L3VPN ID
-    [Documentation]    Check that sub interface ip has been learnt after ARP request
-    [Arguments]    ${vrf_id}
-    ${resp} =    RequestsLibrary.Get Request    session    ${VPN_REST}
-    BuiltIn.Log    ${resp.text}
-    @{list_any_matches} =    String.Get_Regexp_Matches
-    ...    ${resp.text}
-    ...    \"vpn-instance-name\":\"${VPN_INSTANCE_ID}\",.*"vrf-id":"${vrf_id}",\"vpn-id\":(\\d+)
-    ...    1
-    ${result} =    Evaluate    ${list_any_matches[0]} * 2
-    ${vpn_id_hex} =    BuiltIn.Convert To Hex    ${result}
-    RETURN    ${vpn_id_hex.lower()}
-
-Verify L3VPN On ODL
-    [Documentation]    To verify L3VPN on ODL for given vpn ids
-    [Arguments]    @{vpns}
-    FOR    ${vpn}    IN    @{vpns}
-        ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=${vpn}
-        BuiltIn.Should Contain    ${resp}    ${vpn}
-    END
-
-Associate L3VPN To Network
-    [Documentation]    Associate the created L3VPN to a network-id received as dictionary argument
-    [Arguments]    &{Kwargs}
-    TemplatedRequests.Post_As_Json_Templated
-    ...    folder=${VAR_BASE}/assoc_l3vpn
-    ...    mapping=${Kwargs}
-    ...    session=default
-    ...    http_timeout=${SESSION_TIMEOUT}
-
-Associate L3VPNs To Networks
-    [Documentation]    Associates multiple networks to L3VPN and verify the same
-    [Arguments]    ${vpnid_list}    ${network_list}
-    FOR    ${network}    ${vpnid}    IN ZIP    ${network_list}    ${vpnid_list}
-        ${network_id} =    OpenStackOperations.Get Net Id    ${network}
-        VpnOperations.Associate L3VPN To Network    networkid=${network_id}    vpnid=${vpnid}
-        ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=${vpnid}
-        BuiltIn.Should Contain    ${resp}    ${network_id}
-    END
-
-Dissociate L3VPN From Networks
-    [Documentation]    Disssociate the already associated networks from L3VPN
-    [Arguments]    &{Kwargs}
-    TemplatedRequests.Post_As_Json_Templated
-    ...    folder=${VAR_BASE}/dissoc_l3vpn
-    ...    mapping=${Kwargs}
-    ...    session=default
-    ...    http_timeout=${SESSION_TIMEOUT}
-
-Associate VPN to Router
-    [Documentation]    Associate the created L3VPN to a router-id received as argument
-    [Arguments]    &{Kwargs}
-    TemplatedRequests.Post_As_Json_Templated
-    ...    folder=${VAR_BASE}/assoc_two_router_l3vpn
-    ...    mapping=${Kwargs}
-    ...    session=default
-    ...    http_timeout=${SESSION_TIMEOUT}
-
-Dissociate VPN to Router
-    [Documentation]    Dissociate the already associated routers from L3VPN
-    [Arguments]    &{Kwargs}
-    TemplatedRequests.Post_As_Json_Templated
-    ...    folder=${VAR_BASE}/dissoc_two_router_l3vpn
-    ...    mapping=${Kwargs}
-    ...    session=default
-    ...    http_timeout=${SESSION_TIMEOUT}
-
-VPN Delete L3VPN
-    [Documentation]    Delete the created L3VPN
-    [Arguments]    &{Kwargs}
-    TemplatedRequests.Post_As_Json_Templated
-    ...    folder=${VAR_BASE}/l3vpn_delete
-    ...    mapping=${Kwargs}
-    ...    session=default
-    ...    http_timeout=${SESSION_TIMEOUT}
-
-ITM Create Tunnel
-    [Documentation]    Creates Tunnel between the two DPNs received in the dictionary argument
-    [Arguments]    &{Kwargs}
-    &{Itm_actual_val} =    Collections.Copy_Dictionary    ${ITM_CREATE_DEFAULT}
-    Collections.Set_To_Dictionary    ${Itm_actual_val}    &{Kwargs}
-    TemplatedRequests.Post_As_Json_Templated
-    ...    folder=${VAR_BASE}/itm_create
-    ...    mapping=${Itm_actual_val}
-    ...    session=default
-    ...    http_timeout=${SESSION_TIMEOUT}
-
-ITM Get Tunnels
-    [Documentation]    Get all Tunnels and return the contents
-    ${resp} =    RequestsLibrary.Get Request    session    ${CONFIG_API}/itm:transport-zones/
-    Log    ${resp.text}
-    Should Be Equal As Strings    ${resp.status_code}    200
-    RETURN    ${resp.text}
-
-ITM Delete Tunnel
-    [Documentation]    Delete Tunnels created under the transport-zone
-    [Arguments]    ${zone-name}
-    ${resp} =    RequestsLibrary.Delete Request
-    ...    session
-    ...    ${CONFIG_API}/itm:transport-zones/transport-zone/${zone-name}/
-    Log    ${resp.text}
-    Should Be Equal As Strings    ${resp.status_code}    200
-    RETURN    ${resp.text}
-
-Verify Flows Are Present For L3VPN
-    [Documentation]    Verify Flows Are Present For L3VPN
-    [Arguments]    ${ip}    ${vm_ips}
-    ${flow_output} =    Run Command On Remote System And Log
-    ...    ${ip}
-    ...    sudo ovs-ofctl -O OpenFlow13 dump-flows ${INTEGRATION_BRIDGE}
-    Should Contain    ${flow_output}    table=${ODL_FLOWTABLE_L3VPN}
-    ${l3vpn_table} =    Get Lines Containing String    ${flow_output}    table=${ODL_FLOWTABLE_L3VPN},
-    Log    ${l3vpn_table}
-    FOR    ${i}    IN    @{vm_ips}
-        ${resp} =    Should Contain    ${l3vpn_table}    ${i}
-    END
-
-Verify Flows Are Present For L3VPN On All Compute Nodes
-    [Documentation]    Verify Flows Are Present For L3VPN On All Compute Nodes
-    [Arguments]    ${vm_ips}
-    FOR    ${ip}    IN    @{OS_CMP_IPS}
-        BuiltIn.Wait Until Keyword Succeeds
-        ...    30s
-        ...    10s
-        ...    VpnOperations.Verify Flows Are Present For L3VPN
-        ...    ${ip}
-        ...    ${vm_ips}
-    END
-
-Verify GWMAC Entry On ODL
-    [Documentation]    get ODL GWMAC table entry
-    [Arguments]    ${GWMAC_ADDRS}
-    ${resp} =    RequestsLibrary.Get Request    session    ${VPN_PORT_DATA_URL}
-    Log    ${resp.text}
-    Should Be Equal As Strings    ${resp.status_code}    200
-    FOR    ${macAdd}    IN    @{GWMAC_ADDRS}
-        Should Contain    ${resp.text}    ${macAdd}
-    END
-
-Verify GWMAC Flow Entry Removed From Flow Table
-    [Documentation]    Verify the GWMAC Table, ARP Response table and Dispatcher table.
-    [Arguments]    ${cnIp}
-    ${flow_output} =    Run Command On Remote System And Log
-    ...    ${cnIp}
-    ...    sudo ovs-ofctl -O OpenFlow13 dump-flows ${INTEGRATION_BRIDGE}
-    Should Contain    ${flow_output}    table=${GWMAC_TABLE}
-    ${gwmac_table} =    Get Lines Containing String    ${flow_output}    table=${GWMAC_TABLE}
-    Log    ${gwmac_table}
-    #Verify GWMAC address present in table 19
-    FOR    ${macAdd}    IN    @{GWMAC_ADDRS}
-        Should Not Contain    ${gwmac_table}    dl_dst=${macAdd} actions=goto_table:${L3_TABLE}
-    END
-
-Verify GWMAC Flow Entry Removed From Flow Table On All Compute Nodes
-    [Documentation]    Verify the GWMAC Table, ARP Response table and Dispatcher table.
-    FOR    ${ip}    IN    @{OS_CMP_IPS}
-        BuiltIn.Wait Until Keyword Succeeds    30s    10s    Verify GWMAC Flow Entry Removed From Flow Table    ${ip}
-    END
-
-Verify ARP REQUEST in groupTable
-    [Documentation]    get flow dump for group ID
-    [Arguments]    ${group_output}    ${Group-ID}
-    Should Contain    ${group_output}    group_id=${Group-ID}
-    ${arp_group} =    Get Lines Containing String    ${group_output}    group_id=${Group-ID}
-    Log    ${arp_group}
-    BuiltIn.Should Match Regexp
-    ...    ${arp_group}
-    ...    ${ARP_REQUEST_GROUP_REGEX_FLUORINE}
-
-Verify Tunnel Status as UP
-    [Documentation]    Verify that the tunnels are UP
-    IF    ${OS_NODE_CNT} == ${1}    RETURN    ${True}
-    ${output} =    Issue Command On Karaf Console    ${TEP_SHOW_STATE}
-    Log    ${output}
-    Should Contain    ${output}    ${STATE_UP}
-    Should Not Contain    ${output}    ${STATE_DOWN}
-    Should Not Contain    ${output}    ${STATE_UNKNOWN}
-
-Verify Tunnel Status as DOWN
-    [Documentation]    Verify that the tunnels are DOWN
-    ${output} =    Issue Command On Karaf Console    ${TEP_SHOW_STATE}
-    Log    ${output}
-    Should Contain    ${output}    ${STATE_DOWN}
-    Should Not Contain    ${output}    ${STATE_UP}
-    Should Not Contain    ${output}    ${STATE_UNKNOWN}
-
-Verify Tunnel Status as UNKNOWN
-    [Documentation]    Verify that the tunnels are in Unknown state
-    ${output} =    Issue Command On Karaf Console    ${TEP_SHOW_STATE}
-    Log    ${output}
-    Should Not Contain    ${output}    ${STATE_UP}
-    Should Not Contain    ${output}    ${STATE_DOWN}
-    Should Contain    ${output}    ${STATE_UNKNOWN}
-
-Verify VXLAN interface
-    [Documentation]    Verify that the VXLAN interfaces are Enabled
-    ${output} =    Issue Command On Karaf Console    ${VXLAN_SHOW}
-    Log    ${output}
-    Should Contain    ${output}    ${STATE_UP}
-    Should Contain    ${output}    ${STATE_ENABLE}
-    Should Not Contain    ${output}    ${STATE_DISABLE}
-
-Get Fib Entries
-    [Documentation]    Get Fib table entries from ODL session
-    [Arguments]    ${session}
-    ${resp} =    RequestsLibrary.Get Request    ${session}    ${FIB_ENTRIES_URL}
-    Log    ${resp.text}
-    RETURN    ${resp.text}
-
-Get Gateway MAC And IP Address
-    [Documentation]    Get Gateway mac and IP Address
-    [Arguments]    ${router_Name}    ${ip_regex}=${IP_REGEX}
-    ${output} =    OpenStack CLI    openstack port list --router ${router_Name}
-    @{MacAddr-list} =    Get Regexp Matches    ${output}    ${MAC_REGEX}
-    @{IpAddr-list} =    Get Regexp Matches    ${output}    ${ip_regex}
-    RETURN    ${MacAddr-list}    ${IpAddr-list}
-
-Test Teardown With Tcpdump Stop
-    [Arguments]    ${conn_ids}=@{EMPTY}
-    OpenStackOperations.Stop Packet Capture On Nodes    ${conn_ids}
-    Get Test Teardown Debugs
-
-Verify IPv4 GWMAC Flow Entry On Flow Table
-    [Arguments]    ${group_output}    ${group_id}    ${flow_output}
-    Verify ARP REQUEST in groupTable    ${group_output}    ${groupID[1]}
-    #Verify ARP_RESPONSE_TABLE - 81
-    Should Contain    ${flow_output}    table=${ARP_RESPONSE_TABLE}
-    ${arpResponder_table} =    Get Lines Containing String    ${flow_output}    table=${ARP_RESPONSE_TABLE}
-    Should Contain    ${arpResponder_table}    priority=0 actions=drop
-    FOR    ${macAdd}    ${ipAdd}    IN ZIP    ${GWMAC_ADDRS}    ${GWIP_ADDRS}
-        ${ARP_RESPONSE_IP_MAC_REGEX} =    Set Variable
-        ...    arp_tpa=${ipAdd},arp_op=1 actions=.*,set_field:${macAdd}->eth_src
-        Should Match Regexp    ${arpResponder_table}    ${ARP_RESPONSE_IP_MAC_REGEX}
-    END
-
-Verify IPv6 GWMAC Flow Entry On Flow Table
-    [Arguments]    ${flow_output}
-    Should Contain    ${flow_output}    table=${IPV6_TABLE}
-    ${icmp_ipv6_flows} =    Get Lines Containing String    ${flow_output}    icmp_type=135
-    FOR    ${ip_addr}    IN    @{GWIP_ADDRS}
-        ${rule} =    Set Variable    icmp_type=135,icmp_code=0,nd_target=${ip_addr} actions=CONTROLLER:65535
-        Should Match Regexp    ${icmp_ipv6_flows}    ${rule}
-    END
-
-Verify GWMAC Flow Entry On Flow Table
-    [Documentation]    Verify the GWMAC Table, ARP Response table and Dispatcher table.
-    [Arguments]    ${cnIp}    ${ipv}=ipv4
-    ${flow_output} =    Run Command On Remote System
-    ...    ${cnIp}
-    ...    sudo ovs-ofctl -O OpenFlow13 dump-flows ${INTEGRATION_BRIDGE}
-    ${group_output} =    Run Command On Remote System
-    ...    ${cnIp}
-    ...    sudo ovs-ofctl -O OpenFlow13 dump-groups ${INTEGRATION_BRIDGE}
-    Should Contain    ${flow_output}    table=${DISPATCHER_TABLE}
-    ${dispatcher_table} =    Get Lines Containing String    ${flow_output}    table=${DISPATCHER_TABLE}
-    Should Contain    ${dispatcher_table}    goto_table:${GWMAC_TABLE}
-    Should Not Contain    ${dispatcher_table}    goto_table:${ARP_RESPONSE_TABLE}
-    Should Contain    ${flow_output}    table=${GWMAC_TABLE}
-    ${gwmac_table} =    Get Lines Containing String    ${flow_output}    table=${GWMAC_TABLE}
-    #Verify GWMAC address present in table 19
-    FOR    ${macAdd}    IN    @{GWMAC_ADDRS}
-        Should Contain    ${gwmac_table}    dl_dst=${macAdd} actions=goto_table:${L3_TABLE}
-        #verify Miss entry
-    END
-    Should Contain    ${gwmac_table}    actions=resubmit(,17)
-    #Verify ARP_CHECK_TABLE - 43
-    #arp request and response
-    ${arpchk_table} =    Get Lines Containing String    ${flow_output}    table=${ARP_CHECK_TABLE}
-    BuiltIn.Should Match Regexp
-    ...    ${arpchk_table}
-    ...    ${ARP_RESPONSE_REGEX_FLUORINE}
-    ${arppunt_table} =    String.Get Lines Containing String    ${flow_output}    table=${ARP_PUNT_TABLE}
-    BuiltIn.Should Match Regexp
-    ...    ${arppunt_table}
-    ...    ${ARP_PUNT_RESPONSE_REGEX}
-    ${match} =    Should Match Regexp    ${arpchk_table}    ${ARP_REQUEST_REGEX}
-    ${groupID} =    Split String    ${match}    separator=:
-    IF    '${ipv}' == 'ipv4'
-        Verify IPv4 GWMAC Flow Entry On Flow Table    ${group_output}    ${group_id}    ${flow_output}
-    ELSE
-        Verify IPv6 GWMAC Flow Entry On Flow Table    ${flow_output}
-    END
-
-Verify GWMAC Flow Entry On Flow Table On All Compute Nodes
-    [Documentation]    Verify the GWMAC Table, ARP Response table and Dispatcher table.
-    [Arguments]    ${ipv}=ipv4
-    FOR    ${ip}    IN    @{OS_CMP_IPS}
-        BuiltIn.Wait Until Keyword Succeeds
-        ...    30s
-        ...    10s
-        ...    VpnOperations.Verify GWMAC Flow Entry On Flow Table
-        ...    ${ip}
-        ...    ${ipv}
-    END
-
-Delete Multiple L3VPNs
-    [Documentation]    Delete three L3VPNs created using Multiple L3VPN Test
-    [Arguments]    @{vpns}
-    FOR    ${vpn}    IN    @{vpns}
-        VPN Delete L3VPN    vpnid=${vpn}
-    END
-
-VNI Test Setup
-    IF    "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp"    RETURN
-    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-
-VNI Test Teardown
-    IF    "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp"    RETURN
-    OpenStackOperations.Get Test Teardown Debugs
diff --git a/csit/variables/l2gw/Variables.robot b/csit/variables/l2gw/Variables.robot
deleted file mode 100644 (file)
index 527595d..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-*** Settings ***
-Resource    ../../variables/netvirt/Variables.robot
-
-
-*** Variables ***
-#Configurable Variables
-${OS_IP}                                ${OS_CONTROL_NODE_IP}
-${OVS_IP}                               ${OS_COMPUTE_1_IP}
-${OVS2_IP}                              ${OS_COMPUTE_2_IP}
-${HWVTEP_IP}                            ${TOOLS_SYSTEM_1_IP}
-${HWVTEP2_IP}                           ${TOOLS_SYSTEM_2_IP}
-${ODL_IP}                               ${ODL_SYSTEM_1_IP}
-${OS_PASSWORD}                          ${EMPTY}
-${HWVTEP_BRIDGE}                        br-hwvtep-blue
-${HWVTEP2_BRIDGE}                       br-hwvtep-red
-${DEVSTACK_DEPLOY_PATH}                 /home/stack/devstack
-${HWVTEP_NS1}                           NS1
-${HWVTEP_NS2}                           NS2
-${HWVTEP2_NS1}                          NS3
-${HWVTEP2_NS2}                          NS4
-${HWVTEP_PORT_1}                        HWVPORT1
-${HWVTEP_PORT_2}                        HWVPORT2
-${HWVTEP_PORT_3}                        HWVPORT3
-${HWVTEP2_PORT_1}                       HWVPORT4
-${HWVTEP2_PORT_2}                       HWVPORT5
-${L2GW_NAME1}                           GW1
-${L2GW_NAME2}                           GW2
-${L2GW_NAME3}                           GW3
-${L2GW_NAME4}                           GW4
-${NET_1_SEGID}                          1063
-${NET_1}                                NETHWV1
-${NET_2_SEGID}                          1064
-${NET_2}                                NETHWV2
-${NS_PORT1}                             PORT1
-${NS_PORT2}                             PORT2
-${NS_PORT3}                             PORT3
-${NS2_PORT1}                            PORT4
-${NS2_PORT2}                            PORT5
-${NS_TAP1}                              TAP1
-${NS_TAP2}                              TAP2
-${NS_TAP3}                              TAP3
-${NS2_TAP1}                             TAP4
-${NS3_TAP1}                             TAP5
-${NS4_TAP1}                             TAP6
-${OVS_PORT_1}                           OVSPORT1
-${OVS_PORT_2}                           OVSPORT2
-${OVS2_PORT_1}                          OVSPORT3
-${OVS2_PORT_2}                          OVSPORT4
-${OVS_VM1_NAME}                         VM1
-${OVS_VM2_NAME}                         VM2
-${OVS2_VM1_NAME}                        VM3
-${OVS_VM2_NAME}                         VM4
-${SECURITY_GROUP_L2GW}                  sg-l2gateway
-${SECURITY_GROUP_L2GW_NONE}             --no-security-groups
-${SUBNET_1}                             HWV-SUB1
-${SUBNET_2}                             HWV-SUB2
-${SUBNET_RANGE1}                        13.0.0.0/24
-${SUBNET_RANGE2}                        14.0.0.0/24
-#Dont Change The Below Entries
-${GREP_OVSDB_DUMP_PHYSICAL_SWITCH}      sudo ovsdb-client dump hardware_vtep -f csv | grep -A2 "Physical_Switch table"
-${ADD_VTEP_PS}                          sudo vtep-ctl add-ps
-${CREATE VTEP}                          sudo ovsdb-tool create /etc/openvswitch/vtep.db ${OVS_HOME}/vtep.ovsschema
-${CREATE_OVS_BRIDGE}                    sudo ovs-vsctl add-br
-${CREATE_OVS_PORT}                      sudo ovs-vsctl add-port
-${CREATE_OVSDB}                         sudo ovsdb-tool create /etc/openvswitch/ovs.db ${OVS_HOME}/vswitch.ovsschema
-${DEL_OVS_BRIDGE}                       sudo ovs-vsctl del-br
-${DETACH_VSWITCHD}                      sudo ovs-vswitchd --pidfile --detach
-${GET_DPNID}
-...                                     printf "%d\\n" 0x`sudo ovs-ofctl show -O Openflow13 ${INTEGRATION_BRIDGE} | head -1 | awk -F "dpid:" '{print $2}'`
-${GET_PORT_URL}                         neutron:neutron/ports/port
-${GREP_OVS}                             ps -ef | grep ovs
-${GREP_OVSDB_DUMP_MANAGER_TABLE}        sudo ovsdb-client dump hardware_vtep -f csv | grep -A2 "Manager table"
-${HW_ETHER}                             hw ether
-${HWVTEP_NETWORK_TOPOLOGY}              /restconf/operational/network-topology:network-topology/topology/hwvtep:1/
-${IFCONF}                               ifconfig
-${INIT_VSCTL}                           sudo ovs-vsctl --no-wait init
-${IP_LINK_ADD}                          ${IP_LINK} add
-${IP_LINK_DEL}                          ${IP_LINK} del
-${IP_LINK_SET}                          ${IP_LINK} set
-${IP_LINK}                              sudo ip link
-${IPLINK_SET}                           ip link set dev
-${KILL_OVSDB_PROC}                      sudo killall -9 ovsdb-server
-${KILL_VSWITCHD_PROC}                   sudo killall -9 ovs-vswitchd
-${KILL_VTEP_PROC}                       sudo killall -9 python
-${L2GW_CONN_CREATE}                     neutron l2-gateway-connection-create --default-segmentation-id 0
-${L2GW_CONN_DELETE}                     neutron l2-gateway-connection-delete
-${L2GW_LIST_REST_URL}                   /restconf/config/neutron:neutron/l2gateways/
-${L2GW_CONN_LIST_REST_URL}              /restconf/config/neutron:neutron/l2gatewayConnections/
-${L2GW_CREATE}                          neutron l2-gateway-create --device
-${L2GW_UPDATE}                          neutron l2-gateway-update --device
-${L2GW_DELETE}                          neutron l2-gateway-delete
-${L2GW_GET_CONN_YAML}                   neutron l2-gateway-connection-list -f yaml
-${L2GW_GET_CONN}                        neutron l2-gateway-connection-list
-${L2GW_GET_YAML}                        neutron l2-gateway-list -f yaml
-${L2GW_GET}                             neutron l2-gateway-list
-${L2GW_SHOW}                            neutron l2-gateway-show
-${NET_ADDT_ARG}                         --provider-network-type vxlan --provider-segment
-${NETNS_ADD}                            ${NETNS} add
-${NETNS_DEL}                            ${NETNS} del
-${NETNS_EXEC}                           ${NETNS} exec
-${NETNS}                                sudo ip netns
-${NETSTAT}                              sudo netstat -nap
-${PACKET_LOSS}                          , 100% packet loss
-${ODL_STREAM}                           dummy
-${OVS_DEL_CTRLR}                        sudo ovs-vsctl del-controller
-${OVS_DEL_MGR}                          sudo ovs-vsctl del-manager
-${OVS_HOME}                             /usr/share/openvswitch/
-${OVS_RESTART}                          sudo service openvswitch-switch restart
-${OVS_SET_CTRLR}                        sudo ovs-vsctl set-controller
-${OVS_SET_MGR}                          sudo ovs-vsctl set-manager tcp
-${OVS_SHOW}                             sudo ovs-vsctl show
-${OVSDB_CLIENT_DUMP}                    sudo ovsdb-client dump hardware_vtep
-${OVSDB_NETWORK_TOPOLOGY}               /restconf/operational/network-topology:network-topology/topology/ovsdb:1/
-${REM_OVSDB}                            sudo rm /etc/openvswitch/ovs.db
-${REM_VTEPDB}                           sudo rm /etc/openvswitch/vtep.db
-${SET_FAIL_MODE}                        sudo ovs-vsctl set-fail-mode
-${SET_VTEP_PS}                          sudo vtep-ctl set ${PHYSICAL_SWITCH_TABLE}
-${SLEEP1S}                              sleep 1
-${START_OVSDB_SERVER}
-...                                     sudo ovsdb-server --pidfile --detach --log-file --remote punix:/var/run/openvswitch/db.sock --remote=db:hardware_vtep,Global,managers /etc/openvswitch/ovs.db /etc/openvswitch/vtep.db
-${START_OVSVTEP}
-...                                     sudo /usr/share/openvswitch/scripts/ovs-vtep --log-file=/var/log/openvswitch/ovs-vtep.log --pidfile=/var/run/openvswitch/ovs-vtep.pid --detach
-${STR_VIF_REPLACE}                      "neutron-binding:vif-type":"ovs"
-${STR_VIF_TYPE}                         "neutron-binding:vif-type":"unbound"
-${STR_VNIC_REPLACE}                     "neutron-binding:vnic-type":"direct"
-${STR_VNIC_TYPE}                        "neutron-binding:vnic-type":"normal"
-${SUBNET_ADDT_ARG}                      --dhcp
-${UUID_COL_NAME}                        _uuid
-${VTEP LIST}                            sudo vtep-ctl list
-${VTEP_ADD_MGR}                         sudo vtep-ctl set-manager tcp
-${VTEP_DEL_MGR}                         sudo vtep-ctl del-manager
-${VTEP_LIST_COLUMN}                     sudo vtep-ctl --columns=
-#HWVTEP Table Names
-${LOGICAL_SWITCH_TABLE}                 Logical_Switch
-${GLOBAL_TABLE}                         Global
-${MANAGER_TABLE}                        Manager
-${MCAST_MACS_LOCAL_TABLE}               Mcast_Macs_Local
-${MCAST_MACS_REMOTE_TABLE}              Mcast_Macs_Remote
-${PHYSICAL_LOCATOR_TABLE}               Physical_Locator
-${PHYSICAL_PORT_TABLE}                  Physical_Port
-${PHYSICAL_SWITCH_TABLE}                Physical_Switch
-${TUNNEL_TABLE}                         Tunnel
-${UCAST_MACS_LOCALE_TABLE}              Ucast_Macs_Local
-${UCAST_MACS_REMOTE_TABLE}              Ucast_Macs_Remote
-#Regular Expressions
-${VLAN_BINDING_REGEX}                   vlan_bindings+\\s+:\\s+[{]0[=]
-${NETSTAT_OVSDB_REGEX}                  ${ODL_SYSTEM_IP}:${OVSDBPORT}\\s+ESTABLISHED\\s
-${NETSTAT_OF_REGEX}                     ${ODL_SYSTEM_IP}:${ODL_OF_PORT}\\s+ESTABLISHED\\s
diff --git a/csit/variables/l2gw/itm_create/location.uri b/csit/variables/l2gw/itm_create/location.uri
deleted file mode 100644 (file)
index 8a95992..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/restconf/config/itm:transport-zones/
diff --git a/csit/variables/l2gw/itm_create/post_data.json b/csit/variables/l2gw/itm_create/post_data.json
deleted file mode 100644 (file)
index 65f5472..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  "transport-zone": [
-    {
-      "zone-name": "TZA",
-      "tunnel-type": "odl-interface:tunnel-type-vxlan",
-      "subnets": [
-        {
-          "vlan-id": "0",
-          "prefix": "$prefix",
-          "vteps": [
-            {
-              "ip-address": "$ip",
-              "dpn-id": $dpnid,
-              "portname": "phy0"
-            }
-          ]
-        }
-      ]
-    }
-  ]
-}
diff --git a/csit/variables/netvirt/Variables.robot b/csit/variables/netvirt/Variables.robot
deleted file mode 100644 (file)
index c1e8b6b..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-*** Settings ***
-Documentation       Variables for Netvirt Test Suites
-
-
-*** Variables ***
-# Exceptions for which we will not create a failure
-@{NETVIRT_DIAG_SERVICES}                OPENFLOW    IFM    ITM    DATASTORE    ELAN    OVSDB
-${CIRROS_stable/queens}                 cirros-0.3.5-x86_64-disk
-${CIRROS_stable/rocky}                  cirros-0.3.5-x86_64-disk
-${CIRROS_stable/stein}                  cirros-0.4.0-x86_64-disk
-${PASSWORD_CIRROS_stable/stein}         gocubsgo
-${PASSWORD_CIRROS_stable/rocky}         cubswin:)
-${PASSWORD_CIRROS_stable/queens}        cubswin:)
-${CIRROS_master}                        cirros-0.4.0-x86_64-disk
-${DEFAULT_PING_COUNT}                   3
-${PRE_CLEAN_OPENSTACK_ALL}              False
-${EXTERNAL_NET_NAME}                    external-net
-${EXTERNAL_SUBNET_NAME}                 external-subnet
-${INTEGRATION_BRIDGE}                   br-int
-${EXTERNAL_GATEWAY}                     10.10.10.250
-${EXTERNAL_SUBNET}                      10.10.10.0/24
-${EXTERNAL_SUBNET_ALLOCATION_POOL}      start=10.10.10.2,end=10.10.10.249
-${NET1_IPV6_ADDR_POOL}                  --allocation-pool start=2001:db8:0:2::2,end=2001:db8:0:2:ffff:ffff:ffff:fffe
-${NET2_IPV6_ADDR_POOL}                  --allocation-pool start=2001:db8:0:3::2,end=2001:db8:0:3:ffff:ffff:ffff:fffe
-${RESP_CODE}                            200
-${RESP_ERROR_CODE}                      400
-${MAC_REGEX}                            ([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})
-${IP_REGEX}
-...                                     (([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])
-${IP6_REGEX}                            (2001:([0-9A-Fa-f]{0,4}:){1,6}([0-9A-Fa-f]{1,4}))
-${IP6_SUBNET_CIDR_SUFFIX}               ::/64
-${IP6_ADDR_SUFFIX}                      (:[a-f0-9]{,4}){,4}
-${PING_REGEXP}                          , 0% packet loss
-${NO_PING_REGEXP}                       , 100% packet loss
-# Values passed for extra routes
-${RT_OPTIONS}                           --route
-${RT_CLEAR}                             --no-route
-${ARP_RESPONSE_REGEX}                   arp,arp_op=2 actions=CONTROLLER:65535,resubmit\\(,${ELAN_BASETABLE}\\)
-${ARP_RESPONSE_REGEX_FLUORINE}
-...                                     arp,arp_op=2 actions=resubmit\\(,${ARP_PUNT_TABLE}\\),resubmit\\(,${ARP_LEARN_TABLE}\\),resubmit\\(,${ELAN_BASETABLE}\\)
-${ARP_PUNT_RESPONSE_REGEX}              arp actions=CONTROLLER:65535,learn
-${ARP_REQUEST_REGEX}                    arp,arp_op=1 actions=group:\\d+
-${ARP_REQUEST_GROUP_REGEX}
-...                                     actions=CONTROLLER:65535,bucket=actions=resubmit\\(,${ELAN_BASETABLE}\\),bucket=actions=resubmit\\(,${ARP_RESPONSE_TABLE}\\)
-${ARP_REQUEST_GROUP_REGEX_FLUORINE}     actions=resubmit\\(,${ARP_RESPONSE_TABLE}\\)
-${ARP_CHECK_TABLE}                      43
-${ARP_PUNT_TABLE}                       195
-${ARP_LEARN_TABLE}                      196
-${ARP_RESPONSE_TABLE}                   81
-# Values passed for BFD Tunnel monitoring
-${TUNNEL_MONITOR_ON}                    Tunnel Monitoring (for VXLAN tunnels): On
-${TUNNEL_MONITOR_OFF}                   Tunnel Monitoring (for VXLAN tunnels): Off
-${MONITORING_INTERVAL}                  Tunnel Monitoring Interval (for VXLAN tunnels)
-${INTERVAL_1000}                        1000
-${TMI_1000}                             :1000
-${TMI_2000}                             :2000
-${TMI_20000}                            :20000
-${TMI_30000}                            :30000
-${TMI_31000}                            :31000
-${TMI_50}                               :50
-${TMI_0}                                :0
-${TMI_NEG}                              :-100
-${BFD}                                  bfd
-${LLDP}                                 lldp
-${TEP_SHOW}                             tep:show
-${TEP_SHOW_STATE}                       tep:show-state
-${VXLAN_SHOW}                           vxlan:show
-${RUN_CONFIG}                           show running-config
-${MONITOR_INTERVAL_NEW}                 ${CONFIG_API}/itm-config:tunnel-monitor-interval/
-${INTERVAL_50}                          {"tunnel-monitor-interval":{"interval":50}}
-${INTERVAL_0}                           {"tunnel-monitor-interval":{"interval":0}}
-${INTERVAL_NEG}                         {"tunnel-monitor-interval":{"interval":-100}}
-${INTERVAL_31000}                       {"tunnel-monitor-interval":{"interval":31000}}
-#ODL Rest URLs
-${NETWORK_URL}                          ${CONFIG_API}/neutron:neutron/networks
-${SUBNETWORK_URL}                       ${CONFIG_API}/neutron:neutron/subnets/
-${PORT_URL}                             ${CONFIG_API}/neutron:neutron/ports/
-${ROUTER_URL}                           ${CONFIG_API}/neutron:neutron/routers/
-${FIB_ENTRY_URL}                        ${CONFIG_API}/odl-fib:fibEntries/
-${VPN_IFACES_URL}                       ${CONFIG_API}/l3vpn:vpn-interfaces/
-${VPN_INST_IFACES_URL}                  ${CONFIG_API}/l3vpn-instances-interfaces:vpn-interfaces/
-${VPN_PORT_DATA_URL}                    ${CONFIG_API}/neutronvpn:neutron-vpn-portip-port-data/
-${TUNNEL_MONITOR_URL}                   ${OPERATIONAL_API}/itm-config:tunnel-monitor-params/
-${MONITOR_INTERVAL_URL}                 ${OPERATIONAL_API}/itm-config:tunnel-monitor-interval/
-${TUNNEL_TRANSPORTZONE}                 ${CONFIG_API}/itm:transport-zones
-${TUNNEL_INTERFACES}                    ${CONFIG_API}/ietf-interfaces:interfaces/
-${LEARNT_VIP}                           ${OPERATIONAL_API}/odl-l3vpn:learnt-vpn-vip-to-port-data/
-${DISPATCHER_TABLE}                     17
-${GWMAC_TABLE}                          19
-${L3_TABLE}                             21
-${L3_PUNT_TABLE}                        22
-${PDNAT_TABLE}                          25
-${PSNAT_TABLE}                          26
-${DNAT_TABLE}                           27
-${SNAT_TABLE}                           28
-${INTERNAL_TUNNEL_TABLE}                36
-${IPV6_TABLE}                           45
-${SNAT_PUNT_TABLE}                      46
-${ELAN_BASETABLE}                       48
-${ELAN_SMACTABLE}                       50
-${ELAN_DMACTABLE}                       51
-${ELAN_UNKNOWNMACTABLE}                 52
-${INGRESS_ACL_REMOTE_ACL_TABLE}         211
-${EGRESS_ACL_TABLE}                     240
-${VLAN_INTERFACE_INGRESS_TABLE}         0
-${EGRESS_LPORT_DISPATCHER_TABLE}        220
-${EGRESS_LEARN_ACL_FILTER_TABLE}        244
-@{DEFAULT_FLOW_TABLES}                  18    19    20    22    23    24    43
-...                                     45    48    50    51    60    80    81
-...                                     90    210    211    212    213    214    215
-...                                     216    217    239    240    241    242    243
-...                                     244    245    246    247
-${TRANSPORT_ZONE_ENDPOINT_URL}          ${CONFIG_API}/itm:transport-zones/transport-zone
-${TEP_NOT_HOSTED_ZONE_URL}              ${OPERATIONAL_API}/itm:not-hosted-transport-zones