Documentation Test suite to validate vpnservice functionality in an openstack integrated environment.
... The assumption of this suite is that the environment is already configured with the proper
... integration bridges and vxlan tunnels.
-Suite Setup VpnOperations.Basic Suite Setup
-Suite Teardown OpenStackOperations.OpenStack Suite Teardown
+Suite Setup Suite Setup
+Suite Teardown Suite Teardown
Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
Test Teardown OpenStackOperations.Get Test Teardown Debugs
Library OperatingSystem
${INVALID_VPN_INSTANCE_ID} AAAAAAAAAA-4848-4949-9494-666666666666
*** Test Cases ***
-Create Neutron Networks
- # TODO: Many of these steps to verify if updates occurred should be in a different suite
- # that is checking for such operations.
- OpenStackOperations.Create Network @{NETWORKS}[0]
- OpenStackOperations.Create Network @{NETWORKS}[1]
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${NETWORK_URL} ${NETWORKS}
- OpenStackOperations.Update Network @{NETWORKS}[0] additional_args=--description ${UPDATE_NETWORK}
- ${output} = OpenStackOperations.Show Network @{NETWORKS}[0]
- BuiltIn.Should Contain ${output} ${UPDATE_NETWORK}
-
-Create Neutron Subnets
- OpenStackOperations.Create SubNet @{NETWORKS}[0] @{SUBNETS}[0] @{SUBNET_CIDRS}[0]
- OpenStackOperations.Create SubNet @{NETWORKS}[1] @{SUBNETS}[1] @{SUBNET_CIDRS}[1]
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${SUBNETWORK_URL} ${SUBNETS}
- OpenStackOperations.Update SubNet @{SUBNETS}[0] additional_args=--description ${UPDATE_SUBNET}
- ${output} = OpenStackOperations.Show SubNet @{SUBNETS}[0]
- BuiltIn.Should Contain ${output} ${UPDATE_SUBNET}
-
-Add Ssh Allow All Rule
- OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}
-
-Create Neutron Ports
- ${allowed_address_pairs_args} = BuiltIn.Set Variable --allowed-address ip-address=@{EXTRA_NW_SUBNET}[0] --allowed-address ip-address=@{EXTRA_NW_SUBNET}[1]
- Create Port @{NETWORKS}[0] @{PORTS}[0] sg=${SECURITY_GROUP} additional_args=${allowed_address_pairs_args}
- Create Port @{NETWORKS}[0] @{PORTS}[1] sg=${SECURITY_GROUP} additional_args=${allowed_address_pairs_args}
- Create Port @{NETWORKS}[1] @{PORTS}[2] sg=${SECURITY_GROUP} additional_args=${allowed_address_pairs_args}
- Create Port @{NETWORKS}[1] @{PORTS}[3] sg=${SECURITY_GROUP} additional_args=${allowed_address_pairs_args}
- Wait Until Keyword Succeeds 3s 1s Check For Elements At URI ${PORT_URL} ${PORTS}
- ${PORTS_MACADDR} = Get Ports MacAddr ${PORTS}
- Set Suite Variable ${PORTS_MACADDR}
- Update Port @{PORTS}[0] additional_args=--description ${UPDATE_PORT}
- ${output} = Show Port @{PORTS}[0]
- Should Contain ${output} ${UPDATE_PORT}
-
-Create Nova VMs
- OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[0] @{NET_1_VMS}[0] ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[1] @{NET_1_VMS}[1] ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[2] @{NET_2_VMS}[0] ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[3] @{NET_2_VMS}[1] ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
- @{NET_1_VM_IPS} ${NET_1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
- @{NET_2_VM_IPS} ${NET_2_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
- BuiltIn.Set Suite Variable @{NET_1_VM_IPS}
- BuiltIn.Set Suite Variable @{NET_2_VM_IPS}
- BuiltIn.Should Not Contain ${NET_1_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_2_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_1_DHCP_IP} None
- BuiltIn.Should Not Contain ${NET_2_DHCP_IP} None
- BuiltIn.Wait Until Keyword Succeeds 30s 10s Wait For Routes To Propogate ${NETWORKS} ${SUBNET_CIDRS}
- [Teardown] BuiltIn.Run Keywords OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS}
- ... AND OpenStackOperations.Get Test Teardown Debugs
-
Check ELAN Datapath Traffic Within The Networks
[Documentation] Checks datapath within the same network with different vlans.
${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ping -c 3 @{NET_1_VM_IPS}[1]
BuiltIn.Set Suite Variable ${GWIP_ADDRS}
Check L3_Datapath Traffic Across Networks With Router
- @{tcpdump_conn_ids} = OpenStackOperations.Start Packet Capture On Nodes tcpdump_vpn ${EMPTY} ${OS_CONTROL_NODE_IP} ${OS_COMPUTE_1_IP} ${OS_COMPUTE_2_IP}
+ @{tcpdump_conn_ids} = OpenStackOperations.Start Packet Capture On Nodes tcpdump_vpn ${EMPTY} @{OS_ALL_IPS}
${vm_ips} = BuiltIn.Create List @{NET_1_VM_IPS} @{NET_2_VM_IPS}
BuiltIn.Wait Until Keyword Succeeds 30s 10s Utils.Check For Elements At URI ${FIB_ENTRY_URL} ${vm_ips}
- BuiltIn.Wait Until Keyword Succeeds 30s 10s VpnOperations.Verify Flows Are Present For L3VPN ${OS_COMPUTE_1_IP} ${vm_ips}
- BuiltIn.Wait Until Keyword Succeeds 30s 10s VpnOperations.Verify Flows Are Present For L3VPN ${OS_COMPUTE_2_IP} ${vm_ips}
+ Verify Flows Are Present For L3VPN On All Compute Nodes ${vm_ips}
BuiltIn.Wait Until Keyword Succeeds 30s 10s VpnOperations.Verify GWMAC Entry On ODL ${GWMAC_ADDRS}
- BuiltIn.Wait Until Keyword Succeeds 30s 10s VpnOperations.Verify GWMAC Flow Entry On Flow Table ${OS_COMPUTE_1_IP}
- BuiltIn.Wait Until Keyword Succeeds 30s 10s VpnOperations.Verify GWMAC Flow Entry On Flow Table ${OS_COMPUTE_2_IP}
+ Verify GWMAC Flow Entry On Flow Table On All Compute Nodes
${dst_ip_list} = BuiltIn.Create List @{NET_1_VM_IPS}[1] @{NET_2_VM_IPS}
OpenStackOperations.Test Operations From Vm Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ${dst_ip_list}
${dst_ip_list} = BuiltIn.Create List @{NET_2_VM_IPS}[1] @{NET_1_VM_IPS}
${ext_rt2} = BuiltIn.Set Variable destination=@{EXTRA_NW_SUBNET}[1],gateway=@{NET_1_VM_IPS}[0]
${cmd} = BuiltIn.Catenate ${RT_OPTIONS} ${ext_rt1} ${RT_OPTIONS} ${ext_rt2}
OpenStackOperations.Update Router ${ROUTER} ${cmd}
- OpenStackOperations.Show Router ${ROUTER} -D
+ OpenStackOperations.Show Router ${ROUTER}
${vm_ips} = BuiltIn.Create List @{EXTRA_NW_SUBNET}
BuiltIn.Wait Until Keyword Succeeds 30s 10s Utils.Check For Elements At URI ${FIB_ENTRY_URL} ${vm_ips}
${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[1] ping -c 3 @{EXTRA_NW_IP}[1]
Delete Extra Route
OpenStackOperations.Update Router ${ROUTER} ${RT_CLEAR}
- OpenStackOperations.Show Router ${ROUTER} -D
+ OpenStackOperations.Show Router ${ROUTER}
Delete And Recreate Extra Route
[Documentation] Recreate multiple extra route and check data path before L3VPN creation
${ext_rt1} = BuiltIn.Set Variable destination=@{EXTRA_NW_SUBNET}[0],gateway=@{NET_1_VM_IPS}[0]
${cmd} = BuiltIn.Catenate ${RT_OPTIONS} ${ext_rt1}
OpenStackOperations.Update Router ${ROUTER} ${cmd}
- OpenStackOperations.Show Router ${ROUTER} -D
+ OpenStackOperations.Show Router ${ROUTER}
${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[1] ping -c 3 @{EXTRA_NW_IP}[0]
BuiltIn.Should Contain ${output} 64 bytes
# clear off extra-routes before the next set of tests
[Teardown] BuiltIn.Run Keywords OpenStackOperations.Update Router ${ROUTER} ${RT_CLEAR}
- ... AND OpenStackOperations.Show Router ${ROUTER} -D
+ ... AND OpenStackOperations.Show Router ${ROUTER}
... AND OpenStackOperations.Get Test Teardown Debugs
Create L3VPN
BuiltIn.Should Contain ${resp} ${router_id}
Verify L3VPN Datapath With Router Association
- ${vm_instances} = BuiltIn.Create List @{NET_1_VM_IPS} @{NET_2_VM_IPS}
- BuiltIn.Wait Until Keyword Succeeds 30s 10s Utils.Check For Elements At URI ${VPN_IFACES_URL} ${vm_instances}
+ ${vm_ips} = BuiltIn.Create List @{NET_1_VM_IPS} @{NET_2_VM_IPS}
+ BuiltIn.Wait Until Keyword Succeeds 30s 10s Utils.Check For Elements At URI ${VPN_IFACES_URL} ${vm_ips}
${RD} = Strip String @{RDS}[0] characters="[]
- BuiltIn.Wait Until Keyword Succeeds 60s 15s Utils.Check For Elements At URI ${CONFIG_API}/odl-fib:fibEntries/vrfTables/${RD}/ ${vm_instances}
- BuiltIn.Wait Until Keyword Succeeds 60s 15s VpnOperations.Verify Flows Are Present For L3VPN ${OS_COMPUTE_1_IP} ${vm_instances}
- BuiltIn.Wait Until Keyword Succeeds 60s 15s VpnOperations.Verify Flows Are Present For L3VPN ${OS_COMPUTE_2_IP} ${vm_instances}
+ BuiltIn.Wait Until Keyword Succeeds 60s 15s Utils.Check For Elements At URI ${CONFIG_API}/odl-fib:fibEntries/vrfTables/${RD}/ ${vm_ips}
+ Verify Flows Are Present For L3VPN On All Compute Nodes ${vm_ips}
BuiltIn.Wait Until Keyword Succeeds 30s 15s VpnOperations.Verify GWMAC Entry On ODL ${GWMAC_ADDRS}
- BuiltIn.Wait Until Keyword Succeeds 30s 15s VpnOperations.Verify GWMAC Flow Entry On Flow Table ${OS_COMPUTE_1_IP}
- BuiltIn.Wait Until Keyword Succeeds 30s 15s VpnOperations.Verify GWMAC Flow Entry On Flow Table ${OS_COMPUTE_2_IP}
+ Verify GWMAC Flow Entry On Flow Table On All Compute Nodes
BuiltIn.Log Check datapath from network1 to network2
${dst_ip_list} = BuiltIn.Create List @{NET_1_VM_IPS}[1] @{NET_2_VM_IPS}
OpenStackOperations.Test Operations From Vm Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ${dst_ip_list}
BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${ROUTER_URL} ${router_list}
${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VPN_INSTANCE_IDS}[0]
BuiltIn.Should Contain ${resp} ${router_id}
- BuiltIn.Wait Until Keyword Succeeds 30s 15s VpnOperations.Verify GWMAC Flow Entry On Flow Table ${OS_COMPUTE_1_IP}
- BuiltIn.Wait Until Keyword Succeeds 30s 15s VpnOperations.Verify GWMAC Flow Entry On Flow Table ${OS_COMPUTE_2_IP}
+ Verify GWMAC Flow Entry On Flow Table On All Compute Nodes
-Remove Router Interfaces
+Verify Remove Interface From Router When Associated With L3VPN
+ OpenStackOperations.Remove Interface ${ROUTER} @{SUBNETS}[0]
+ OpenStackOperations.Test Operations From Vm Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ${NET_1_VM_IPS}
+ OpenStackOperations.Test Operations From Vm Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ${NET_2_VM_IPS} ping_should_succeed=False
+
+Verify L3VPN Datapath With Router Dissociation When Interfaces are Added To Router
+ OpenStackOperations.Add Router Interface ${ROUTER} @{SUBNETS}[0]
+ ${vm_ips} = BuiltIn.Create List @{NET_1_VM_IPS} @{NET_2_VM_IPS}
+ ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
+ VpnOperations.Dissociate VPN to Router routerid=${router_id} vpnid=@{VPN_INSTANCE_IDS}[0]
+ ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VPN_INSTANCE_IDS}[0]
+ BuiltIn.Should Not Contain ${resp} ${router_id}
+ Verify Flows Are Present For L3VPN On All Compute Nodes ${vm_ips}
+ ${dst_ip_list} = BuiltIn.Create List @{NET_1_VM_IPS}[1] @{NET_2_VM_IPS}
+ OpenStackOperations.Test Operations From Vm Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ${dst_ip_list}
+ BuiltIn.Log Check datapath from network2 to network1
+ ${dst_ip_list} = BuiltIn.Create List @{NET_2_VM_IPS}[1] @{NET_1_VM_IPS}
+ BuiltIn.Wait Until Keyword Succeeds 60s 10s OpenStackOperations.Test Operations From Vm Instance @{NETWORKS}[1] @{NET_2_VM_IPS}[0] ${dst_ip_list}
+
+Remove Router Interfaces And Check L3_Datapath Traffic Across Networks
${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
: FOR ${INTERFACE} IN @{SUBNETS}
\ OpenStackOperations.Remove Interface ${ROUTER} ${INTERFACE}
+ \ OpenStackOperations.Test Operations From Vm Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ${NET_1_VM_IPS}
+ \ OpenStackOperations.Test Operations From Vm Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ${NET_2_VM_IPS} ping_should_succeed=False
${interface_output} = OpenStackOperations.Show Router Interface ${ROUTER}
: FOR ${INTERFACE} IN @{SUBNETS}
\ ${subnet_id} = OpenStackOperations.Get Subnet Id ${INTERFACE}
\ BuiltIn.Should Not Contain ${interface_output} ${subnet_id}
-Disassociate L3VPN From Router
- ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
- VpnOperations.Dissociate VPN to Router routerid=${router_id} vpnid=@{VPN_INSTANCE_IDS}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Not Contain ${resp} ${router_id}
-
Delete Router
Delete Router ${ROUTER}
${router_output} = OpenStackOperations.List Routers
BuiltIn.Should Not Contain ${router_output} ${ROUTER}
@{router_list} = BuiltIn.Create List ${ROUTER}
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements Not At URI ${ROUTER_URL} ${router_list}
+ BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements Not At URI ${ROUTER_URL} ${router_list} check_for_null=True
${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VPN_INSTANCE_IDS}[0]
BuiltIn.Should Not Contain ${resp} ${ROUTER}
- BuiltIn.Wait Until Keyword Succeeds 30s 10s VpnOperations.Verify GWMAC Flow Entry Removed From Flow Table ${OS_COMPUTE_1_IP}
- BuiltIn.Wait Until Keyword Succeeds 30s 10s VpnOperations.Verify GWMAC Flow Entry Removed From Flow Table ${OS_COMPUTE_2_IP}
+ Verify GWMAC Flow Entry Removed From Flow Table On All Compute Nodes
Delete Router With NonExistentRouter Name
[Documentation] Delete router with nonExistentRouter name
- ${rc} ${output} = Run And Return Rc And Output neutron router-delete nonExistentRouter
- BuiltIn.Should Match Regexp ${output} Unable Not At URIto find router with name or id 'nonExistentRouter'|Unable to find router\\(s\\) with id\\(s\\) 'nonExistentRouter'
+ ${result} = Process.Run Process openstack router delete nonExistentRouter shell=True
+ BuiltIn.Log ${result.stdout}
+ BuiltIn.Log ${result.stderr}
+ BuiltIn.Should Be True '${result.rc}' == '1'
+ BuiltIn.Should Match Regexp ${result.stderr} Failed to delete router with name or ID 'nonExistentRouter': No Router found for nonExistentRouter
Associate Networks To L3VPN
[Documentation] Associates L3VPN to networks and verify
${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VPN_INSTANCE_IDS}[2]
BuiltIn.Should Contain ${resp} @{VPN_INSTANCE_IDS}[2]
-Delete Multiple L3VPN
- [Documentation] Delete three L3VPNs created using Multiple L3VPN Test
- VpnOperations.VPN Delete L3VPN vpnid=@{VPN_INSTANCE_IDS}[0]
- VpnOperations.VPN Delete L3VPN vpnid=@{VPN_INSTANCE_IDS}[1]
- VpnOperations.VPN Delete L3VPN vpnid=@{VPN_INSTANCE_IDS}[2]
+*** Keywords ***
+Suite Setup
+ VpnOperations.Basic Suite Setup
+ OpenStackOperations.Create Network @{NETWORKS}[0]
+ OpenStackOperations.Create Network @{NETWORKS}[1]
+ BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${NETWORK_URL} ${NETWORKS}
+ OpenStackOperations.Update Network @{NETWORKS}[0] additional_args=--description ${UPDATE_NETWORK}
+ ${output} = OpenStackOperations.Show Network @{NETWORKS}[0]
+ BuiltIn.Should Contain ${output} ${UPDATE_NETWORK}
+ OpenStackOperations.Create SubNet @{NETWORKS}[0] @{SUBNETS}[0] @{SUBNET_CIDRS}[0]
+ OpenStackOperations.Create SubNet @{NETWORKS}[1] @{SUBNETS}[1] @{SUBNET_CIDRS}[1]
+ BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${SUBNETWORK_URL} ${SUBNETS}
+ OpenStackOperations.Update SubNet @{SUBNETS}[0] additional_args=--description ${UPDATE_SUBNET}
+ ${output} = OpenStackOperations.Show SubNet @{SUBNETS}[0]
+ BuiltIn.Should Contain ${output} ${UPDATE_SUBNET}
+ OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}
+ ${allowed_address_pairs_args} = BuiltIn.Set Variable --allowed-address ip-address=@{EXTRA_NW_SUBNET}[0] --allowed-address ip-address=@{EXTRA_NW_SUBNET}[1]
+ Create Port @{NETWORKS}[0] @{PORTS}[0] sg=${SECURITY_GROUP} additional_args=${allowed_address_pairs_args}
+ Create Port @{NETWORKS}[0] @{PORTS}[1] sg=${SECURITY_GROUP} additional_args=${allowed_address_pairs_args}
+ Create Port @{NETWORKS}[1] @{PORTS}[2] sg=${SECURITY_GROUP} additional_args=${allowed_address_pairs_args}
+ Create Port @{NETWORKS}[1] @{PORTS}[3] sg=${SECURITY_GROUP} additional_args=${allowed_address_pairs_args}
+ Wait Until Keyword Succeeds 3s 1s Check For Elements At URI ${PORT_URL} ${PORTS}
+ ${PORTS_MACADDR} = Get Ports MacAddr ${PORTS}
+ Set Suite Variable ${PORTS_MACADDR}
+ Update Port @{PORTS}[0] additional_args=--description ${UPDATE_PORT}
+ ${output} = Show Port @{PORTS}[0]
+ Should Contain ${output} ${UPDATE_PORT}
+ OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[0] @{NET_1_VMS}[0] ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
+ OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[1] @{NET_1_VMS}[1] ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
+ OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[2] @{NET_2_VMS}[0] ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
+ OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[3] @{NET_2_VMS}[1] ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
+ @{NET_1_VM_IPS} ${NET_1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
+ @{NET_2_VM_IPS} ${NET_2_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
+ BuiltIn.Set Suite Variable @{NET_1_VM_IPS}
+ BuiltIn.Set Suite Variable @{NET_2_VM_IPS}
+ BuiltIn.Should Not Contain ${NET_1_VM_IPS} None
+ BuiltIn.Should Not Contain ${NET_2_VM_IPS} None
+ BuiltIn.Should Not Contain ${NET_1_DHCP_IP} None
+ BuiltIn.Should Not Contain ${NET_2_DHCP_IP} None
+ BuiltIn.Wait Until Keyword Succeeds 30s 10s Wait For Routes To Propogate ${NETWORKS} ${SUBNET_CIDRS}
+ OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS}
+ OpenStackOperations.Get Suite Debugs
+
+Suite Teardown
+ [Documentation] Delete the setup
+ BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=@{VPN_INSTANCE_IDS}[0]
+ BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=@{VPN_INSTANCE_IDS}[1]
+ BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=@{VPN_INSTANCE_IDS}[2]
+ OpenStackOperations.OpenStack Suite Teardown