Update Robot Framework format - step 11
[integration/test.git] / csit / suites / netvirt / vpnservice / vpn_basic_ipv6.robot
1 *** Settings ***
2 Documentation       Test suite to validate IPv6 vpnservice functionality in an Openstack integrated environment.
3 ...                 The assumption of this suite is that the environment is already configured with the proper
4 ...                 integration bridges and vxlan tunnels.
5
6 Library             OperatingSystem
7 Library             RequestsLibrary
8 Resource            ../../../libraries/CompareStream.robot
9 Resource            ../../../libraries/Utils.robot
10 Resource            ../../../libraries/OpenStackOperations.robot
11 Resource            ../../../libraries/DevstackUtils.robot
12 Resource            ../../../libraries/VpnOperations.robot
13 Resource            ../../../libraries/OVSDB.robot
14 Resource            ../../../libraries/SetupUtils.robot
15 Resource            ../../../libraries/Tcpdump.robot
16 Resource            ../../../variables/Variables.robot
17 Resource            ../../../variables/netvirt/Variables.robot
18
19 Suite Setup         Suite Setup
20 Suite Teardown      Suite Teardown
21 Test Setup          SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
22 Test Teardown       OpenStackOperations.Get Test Teardown Debugs
23
24
25 *** Variables ***
26 ${SECURITY_GROUP}       vpn6_sg
27 @{NETWORKS}             vpn6_net_1    vpn6_net_2
28 @{SUBNETS}              vpn6_sub_1    vpn6_sub_2
29 @{SUBNET_CIDRS}         2001:db8:0:2::/64    2001:db8:0:3::/64
30 @{PORTS}                vpn6_net_1_port_1    vpn6_net_1_port_2    vpn6_net_2_port_1    vpn6_net_2_port_2
31 @{NET_1_VMS}            vpn6_net_1_vm_1    vpn6_net_1_vm_2
32 @{NET_2_VMS}            vpn6_net_2_vm_1    vpn6_net_2_vm_2
33 ${ROUTER}               vpn6_router
34 @{EXTRA_NW_IP}          2001:db9:cafe:d::10    2001:db9:abcd:d::20
35 @{EXTRA_NW_SUBNET}      2001:db9:cafe:d::/64    2001:db9:abcd:d::/64
36 ${UPDATE_NETWORK}       UpdateNetworkV6
37 ${UPDATE_SUBNET}        UpdateSubnetV6
38 ${UPDATE_PORT}          UpdatePortV6
39 @{VPN_INSTANCE_IDS}
40 ...                     4ae8cd92-48ca-49b5-94e1-b2921a261661
41 ...                     4ae8cd92-48ca-49b5-94e1-b2921a261662
42 ...                     4ae8cd92-48ca-49b5-94e1-b2921a261663
43 @{VPN_NAMES}            vpn6_1    vpn6_2    vpn6_3
44 @{RDS}                  ["2206:2"]    ["2306:2"]    ["2406:2"]
45
46
47 *** Test Cases ***
48 Check ELAN Datapath Traffic Within The Networks
49     ${output} =    OpenStackOperations.Execute Command on VM Instance
50     ...    ${NETWORKS}[0]
51     ...    ${VM_IP_NET10}[0]
52     ...    ping6 -c 3 ${VM_IP_NET10}[1]
53     BuiltIn.Should Contain    ${output}    64 bytes
54     ${output} =    OpenStackOperations.Execute Command on VM Instance
55     ...    ${NETWORKS}[1]
56     ...    ${VM_IP_NET20}[0]
57     ...    ping6 -c 3 ${VM_IP_NET20}[1]
58     BuiltIn.Should Contain    ${output}    64 bytes
59
60 Check L3_Datapath Traffic Across Networks With Router
61     BuiltIn.Log    Verification of FIB Entries and Flow
62     @{tcpdump_conn_ids} =    OpenStackOperations.Start Packet Capture On Nodes
63     ...    tcpdump_vpn6
64     ...    ${EMPTY}
65     ...    @{OS_ALL_IPS}
66     ${vm_ips} =    BuiltIn.Create List    @{VM_IP_NET10}    @{VM_IP_NET20}
67     BuiltIn.Wait Until Keyword Succeeds
68     ...    30s
69     ...    10s
70     ...    Utils.Check For Elements At URI
71     ...    ${FIB_ENTRY_URL}
72     ...    ${vm_ips}
73     BuiltIn.Wait Until Keyword Succeeds
74     ...    30s
75     ...    10s
76     ...    VpnOperations.Verify Flows Are Present For L3VPN
77     ...    ${OS_CMP1_IP}
78     ...    ${VM_IP_NET10}
79     BuiltIn.Wait Until Keyword Succeeds
80     ...    30s
81     ...    10s
82     ...    VpnOperations.Verify Flows Are Present For L3VPN
83     ...    ${OS_CMP1_IP}
84     ...    ${VM_IP_NET20}
85     BuiltIn.Wait Until Keyword Succeeds    30s    10s    VpnOperations.Verify GWMAC Entry On ODL    ${GWMAC_ADDRS}
86     Verify GWMAC Flow Entry On Flow Table On All Compute Nodes    ipv6
87     ${dst_ip_list} =    BuiltIn.Create List    ${VM_IP_NET10}[1]    @{VM_IP_NET20}
88     OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[0]    ${VM_IP_NET10}[0]    ${dst_ip_list}
89     ${dst_ip_list} =    BuiltIn.Create List    ${VM_IP_NET20}[1]    @{VM_IP_NET10}
90     OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[1]    ${VM_IP_NET20}[0]    ${dst_ip_list}
91     [Teardown]    VpnOperations.Test Teardown With Tcpdump Stop    ${tcpdump_conn_ids}
92
93 Add Multiple Extra Routes And Check Datapath Before L3VPN Creation
94     ${CONFIG_EXTRA_ROUTE_IP1} =    BuiltIn.Catenate    sudo ip -6 addr add ${EXTRA_NW_IP}[0]/64 dev eth0
95     ${output} =    OpenStackOperations.Execute Command on VM Instance
96     ...    ${NETWORKS}[0]
97     ...    ${VM_IP_NET10}[0]
98     ...    ${CONFIG_EXTRA_ROUTE_IP1}
99     ${output} =    OpenStackOperations.Execute Command on VM Instance    ${NETWORKS}[0]    ${VM_IP_NET10}[0]    ip -6 a
100     ${CONFIG_EXTRA_ROUTE_IP2} =    BuiltIn.Catenate    sudo ip -6 addr add ${EXTRA_NW_IP}[1]/64 dev eth0
101     ${output} =    OpenStackOperations.Execute Command on VM Instance
102     ...    ${NETWORKS}[0]
103     ...    ${VM_IP_NET10}[0]
104     ...    ${CONFIG_EXTRA_ROUTE_IP2}
105     ${output} =    OpenStackOperations.Execute Command on VM Instance    ${NETWORKS}[0]    ${VM_IP_NET10}[0]    ip -6 a
106     ${EXT_RT1} =    Set Variable    destination=${EXTRA_NW_SUBNET}[0],gateway=${VM_IP_NET10}[0]
107     ${EXT_RT2} =    Set Variable    destination=${EXTRA_NW_SUBNET}[1],gateway=${VM_IP_NET10}[0]
108     ${cmd} =    BuiltIn.Catenate    ${RT_OPTIONS}    ${EXT_RT1}    ${RT_OPTIONS}    ${EXT_RT2}
109     OpenStackOperations.Update Router    ${ROUTER}    ${cmd}
110     OpenStackOperations.Show Router    ${ROUTER}
111     ${vm_ips} =    BuiltIn.Create List    @{EXTRA_NW_SUBNET}
112     BuiltIn.Wait Until Keyword Succeeds
113     ...    30s
114     ...    10s
115     ...    Utils.Check For Elements At URI
116     ...    ${FIB_ENTRY_URL}
117     ...    ${vm_ips}
118     ${output} =    OpenStackOperations.Execute Command on VM Instance
119     ...    ${NETWORKS}[0]
120     ...    ${VM_IP_NET10}[1]
121     ...    ping6 -c 3 ${EXTRA_NW_IP}[1]
122     BuiltIn.Should Contain    ${output}    64 bytes
123     ${output} =    OpenStackOperations.Execute Command on VM Instance
124     ...    ${NETWORKS}[1]
125     ...    ${VM_IP_NET20}[1]
126     ...    ping6 -c 3 ${EXTRA_NW_IP}[1]
127     BuiltIn.Should Contain    ${output}    64 bytes
128     ${output} =    OpenStackOperations.Execute Command on VM Instance
129     ...    ${NETWORKS}[0]
130     ...    ${VM_IP_NET10}[1]
131     ...    ping6 -c 3 ${EXTRA_NW_IP}[0]
132     BuiltIn.Should Contain    ${output}    64 bytes
133
134 Delete Extra Route
135     OpenStackOperations.Update Router    ${ROUTER}    ${RT_CLEAR}
136     OpenStackOperations.Show Router    ${ROUTER}
137
138 Delete And Recreate Extra Route
139     [Documentation]    Recreate multiple extra route and check data path before L3VPN creation
140     ${CONFIG_EXTRA_ROUTE_IP1} =    BuiltIn.Catenate    sudo ip -6 addr add ${EXTRA_NW_IP}[1]/64 dev eth0
141     ${output} =    OpenStackOperations.Execute Command on VM Instance
142     ...    ${NETWORKS}[0]
143     ...    ${VM_IP_NET10}[0]
144     ...    ${CONFIG_EXTRA_ROUTE_IP1}
145     ${EXT_RT1} =    Set Variable    destination=${EXTRA_NW_SUBNET}[0],gateway=${VM_IP_NET10}[0]
146     ${cmd} =    BuiltIn.Catenate    ${RT_OPTIONS}    ${EXT_RT1}
147     OpenStackOperations.Update Router    ${ROUTER}    ${cmd}
148     OpenStackOperations.Show Router    ${ROUTER}
149     ${output} =    OpenStackOperations.Execute Command on VM Instance
150     ...    ${NETWORKS}[0]
151     ...    ${VM_IP_NET10}[1]
152     ...    ping6 -c 3 ${EXTRA_NW_IP}[0]
153     BuiltIn.Should Contain    ${output}    64 bytes
154     # clear off extra-routes before the next set of tests
155     [Teardown]    BuiltIn.Run Keywords    OpenStackOperations.Update Router    ${ROUTER}    ${RT_CLEAR}
156     ...    AND    OpenStackOperations.Show Router    ${ROUTER}
157     ...    AND    OpenStackOperations.Get Test Teardown Debugs
158
159 Create L3VPN
160     ${net_id} =    OpenStackOperations.Get Net Id    ${NETWORKS}[0]
161     ${tenant_id} =    OpenStackOperations.Get Tenant ID From Network    ${net_id}
162     VpnOperations.VPN Create L3VPN
163     ...    vpnid=${VPN_INSTANCE_IDS}[0]
164     ...    name=${VPN_NAMES}[0]
165     ...    rd=${RDS}[0]
166     ...    exportrt=${RDS}[0]
167     ...    importrt=${RDS}[0]
168     ...    tenantid=${tenant_id}
169     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=${VPN_INSTANCE_IDS}[0]
170     BuiltIn.Should Contain    ${resp}    ${VPN_INSTANCE_IDS}[0]
171
172 Associate L3VPN To Routers
173     ${router_id} =    OpenStackOperations.Get Router Id    ${ROUTER}
174     VpnOperations.Associate VPN to Router    routerid=${router_id}    vpnid=${VPN_INSTANCE_IDS}[0]
175     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=${VPN_INSTANCE_IDS}[0]
176     BuiltIn.Should Contain    ${resp}    ${router_id}
177
178 Verify L3VPN Datapath With Router Association
179     BuiltIn.Log    Verify VPN interfaces, FIB entries and Flow table
180     ${vm_ips} =    BuiltIn.Create List    @{VM_IP_NET10}    @{VM_IP_NET20}
181     CompareStream.Run_Keyword_If_Less_Than_Magnesium
182     ...    BuiltIn.Wait Until Keyword Succeeds
183     ...    30s
184     ...    10s
185     ...    Utils.Check For Elements At URI
186     ...    ${VPN_IFACES_URL}
187     ...    ${vm_ips}
188     CompareStream.Run_Keyword_If_At_Least_Magnesium
189     ...    BuiltIn.Wait Until Keyword Succeeds
190     ...    30s
191     ...    10s
192     ...    Utils.Check For Elements At URI
193     ...    ${VPN_INST_IFACES_URL}
194     ...    ${vm_ips}
195     ${RD} =    Strip String    ${RDS}[0]    characters="[]
196     BuiltIn.Wait Until Keyword Succeeds
197     ...    60s
198     ...    15s
199     ...    Utils.Check For Elements At URI
200     ...    ${CONFIG_API}/odl-fib:fibEntries/vrfTables/${RD}/
201     ...    ${vm_ips}
202     Verify Flows Are Present For L3VPN On All Compute Nodes    ${vm_ips}
203     BuiltIn.Wait Until Keyword Succeeds    30s    10s    VpnOperations.Verify GWMAC Entry On ODL    ${GWMAC_ADDRS}
204     Verify GWMAC Flow Entry On Flow Table On All Compute Nodes    ipv6
205     BuiltIn.Log    Check datapath from network1 to network2
206     ${dst_ip_list} =    BuiltIn.Create List    ${VM_IP_NET10}[1]    @{VM_IP_NET20}
207     OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[0]    ${VM_IP_NET10}[0]    ${dst_ip_list}
208     BuiltIn.Log    Check datapath from network2 to network1
209     ${dst_ip_list} =    BuiltIn.Create List    ${VM_IP_NET20}[1]    @{VM_IP_NET10}
210     OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[1]    ${VM_IP_NET20}[0]    ${dst_ip_list}
211
212 Dissociate L3VPN From Routers
213     ${router_id} =    OpenStackOperations.Get Router Id    ${ROUTER}
214     VpnOperations.Dissociate VPN to Router    routerid=${router_id}    vpnid=${VPN_INSTANCE_IDS}[0]
215     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=${VPN_INSTANCE_IDS}[0]
216     BuiltIn.Should Not Contain    ${resp}    ${router_id}
217
218 Delete Router And Router Interfaces With L3VPN
219     ${router_id} =    OpenStackOperations.Get Router Id    ${ROUTER}
220     VpnOperations.Associate VPN to Router    routerid=${router_id}    vpnid=${VPN_INSTANCE_IDS}[0]
221     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=${VPN_INSTANCE_IDS}[0]
222     BuiltIn.Should Contain    ${resp}    ${router_id}
223     FOR    ${INTERFACE}    IN    @{SUBNETS}
224         OpenStackOperations.Remove Interface    ${ROUTER}    ${INTERFACE}
225     END
226     ${interface_output} =    OpenStackOperations.Show Router Interface    ${ROUTER}
227     FOR    ${INTERFACE}    IN    @{SUBNETS}
228         ${subnet_id} =    OpenStackOperations.Get Subnet Id    ${INTERFACE}
229         BuiltIn.Should Not Contain    ${interface_output}    ${subnet_id}
230     END
231     OpenStackOperations.Delete Router    ${ROUTER}
232     ${router_output} =    OpenStackOperations.List Routers
233     BuiltIn.Should Not Contain    ${router_output}    ${ROUTER}
234     @{router_list} =    BuiltIn.Create List    ${ROUTER}
235     BuiltIn.Wait Until Keyword Succeeds
236     ...    3s
237     ...    1s
238     ...    Utils.Check For Elements Not At URI
239     ...    ${ROUTER_URL}
240     ...    ${router_list}
241     ...    check_for_null=True
242     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=${VPN_INSTANCE_IDS}[0]
243     BuiltIn.Should Not Contain    ${resp}    ${router_id}
244     Verify GWMAC Flow Entry Removed From Flow Table On All Compute Nodes
245
246 Delete Router With NonExistentRouter Name
247     ${result} =    Process.Run Process    openstack router delete nonExistentRouter    shell=True
248     BuiltIn.Log    ${result.stdout}
249     BuiltIn.Log    ${result.stderr}
250     BuiltIn.Should Be True    '${result.rc}' == '1'
251     BuiltIn.Should Match Regexp
252     ...    ${result.stderr}
253     ...    Failed to delete router with name or ID 'nonExistentRouter': No Router found for nonExistentRouter
254
255 Delete L3VPN
256     VpnOperations.VPN Delete L3VPN    vpnid=${VPN_INSTANCE_IDS}[0]
257
258 Create Multiple L3VPN
259     ${net_id} =    Get Net Id    ${NETWORKS}[0]
260     ${tenant_id} =    Get Tenant ID From Network    ${net_id}
261     VpnOperations.VPN Create L3VPN
262     ...    vpnid=${VPN_INSTANCE_IDS}[0]
263     ...    name=${VPN_NAMES}[0]
264     ...    rd=${RDS}[0]
265     ...    exportrt=${RDS}[0]
266     ...    importrt=${RDS}[0]
267     ...    tenantid=${tenant_id}
268     VpnOperations.VPN Create L3VPN
269     ...    vpnid=${VPN_INSTANCE_IDS}[1]
270     ...    name=${VPN_NAMES}[1]
271     ...    rd=${RDS}[1]
272     ...    exportrt=${RDS}[1]
273     ...    importrt=${RDS}[1]
274     ...    tenantid=${tenant_id}
275     VpnOperations.VPN Create L3VPN
276     ...    vpnid=${VPN_INSTANCE_IDS}[2]
277     ...    name=${VPN_NAMES}[2]
278     ...    rd=${RDS}[2]
279     ...    exportrt=${RDS}[2]
280     ...    importrt=${RDS}[2]
281     ...    tenantid=${tenant_id}
282     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=${VPN_INSTANCE_IDS}[0]
283     BuiltIn.Should Contain    ${resp}    ${VPN_INSTANCE_IDS}[0]
284     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=${VPN_INSTANCE_IDS}[1]
285     BuiltIn.Should Contain    ${resp}    ${VPN_INSTANCE_IDS}[1]
286     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=${VPN_INSTANCE_IDS}[2]
287     BuiltIn.Should Contain    ${resp}    ${VPN_INSTANCE_IDS}[2]
288
289
290 *** Keywords ***
291 Suite Setup
292     VpnOperations.Basic Suite Setup
293     OpenStackOperations.Create Network    ${NETWORKS}[0]
294     OpenStackOperations.Create Network    ${NETWORKS}[1]
295     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Utils.Check For Elements At URI    ${NETWORK_URL}    ${NETWORKS}
296     OpenStackOperations.Update Network    ${NETWORKS}[0]    additional_args=--description ${UPDATE_NETWORK}
297     ${output} =    OpenStackOperations.Show Network    ${NETWORKS}[0]
298     BuiltIn.Should Contain    ${output}    ${UPDATE_NETWORK}
299     ${net1_additional_args} =    BuiltIn.Catenate
300     ...    --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac ${NET1_IPV6_ADDR_POOL}
301     ${net2_additional_args} =    BuiltIn.Catenate
302     ...    --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac ${NET2_IPV6_ADDR_POOL}
303     OpenStackOperations.Create SubNet
304     ...    ${NETWORKS}[0]
305     ...    ${SUBNETS}[0]
306     ...    ${SUBNET_CIDRS}[0]
307     ...    ${net1_additional_args}
308     OpenStackOperations.Create SubNet
309     ...    ${NETWORKS}[1]
310     ...    ${SUBNETS}[1]
311     ...    ${SUBNET_CIDRS}[1]
312     ...    ${net2_additional_args}
313     BuiltIn.Wait Until Keyword Succeeds
314     ...    3s
315     ...    1s
316     ...    Utils.Check For Elements At URI
317     ...    ${SUBNETWORK_URL}
318     ...    ${SUBNETS}
319     OpenStackOperations.Update SubNet    ${SUBNETS}[0]    additional_args=--description ${UPDATE_SUBNET}
320     ${output} =    OpenStackOperations.Show SubNet    ${SUBNETS}[0]
321     BuiltIn.Should Contain    ${output}    ${UPDATE_SUBNET}
322     OpenStackOperations.Create Router    ${ROUTER}
323     ${router_list} =    BuiltIn.Create List    ${ROUTER}
324     BuiltIn.Wait Until Keyword Succeeds
325     ...    3s
326     ...    1s
327     ...    Utils.Check For Elements At URI
328     ...    ${ROUTER_URL}
329     ...    ${router_list}
330     FOR    ${interface}    IN    @{SUBNETS}
331         OpenStackOperations.Add Router Interface    ${ROUTER}    ${interface}
332     END
333     ${interface_output} =    OpenStackOperations.Show Router Interface    ${ROUTER}
334     FOR    ${interface}    IN    @{SUBNETS}
335         ${subnet_id} =    OpenStackOperations.Get Subnet Id    ${interface}
336         BuiltIn.Should Contain    ${interface_output}    ${subnet_id}
337     END
338     ${GWMAC_ADDRS}    ${GWIP_ADDRS} =    VpnOperations.Get Gateway MAC And IP Address    ${ROUTER}    ${IP6_REGEX}
339     BuiltIn.Set Suite Variable    ${GWMAC_ADDRS}
340     BuiltIn.Set Suite Variable    ${GWIP_ADDRS}
341     OpenStackOperations.Create Allow All SecurityGroup    ${SECURITY_GROUP}    IPv6
342     ${allowed_address_pairs_args} =    BuiltIn.Set Variable
343     ...    --allowed-address ip-address=${EXTRA_NW_SUBNET}[0] --allowed-address ip-address=${EXTRA_NW_SUBNET}[1]
344     Create Port
345     ...    ${NETWORKS}[0]
346     ...    ${PORTS}[0]
347     ...    sg=${SECURITY_GROUP}
348     ...    additional_args=${allowed_address_pairs_args}
349     Create Port
350     ...    ${NETWORKS}[0]
351     ...    ${PORTS}[1]
352     ...    sg=${SECURITY_GROUP}
353     ...    additional_args=${allowed_address_pairs_args}
354     Create Port
355     ...    ${NETWORKS}[1]
356     ...    ${PORTS}[2]
357     ...    sg=${SECURITY_GROUP}
358     ...    additional_args=${allowed_address_pairs_args}
359     Create Port
360     ...    ${NETWORKS}[1]
361     ...    ${PORTS}[3]
362     ...    sg=${SECURITY_GROUP}
363     ...    additional_args=${allowed_address_pairs_args}
364     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Check For Elements At URI    ${PORT_URL}    ${PORTS}
365     OpenStackOperations.Update Port    ${PORTS}[0]    additional_args=--name ${UPDATE_PORT}
366     ${output} =    Show Port    ${UPDATE_PORT}
367     BuiltIn.Should Contain    ${output}    ${UPDATE_PORT}
368     OpenStackOperations.Update Port    ${UPDATE_PORT}    additional_args=--name ${PORTS}[0]
369     OpenStackOperations.Create Vm Instance With Port On Compute Node
370     ...    ${PORTS}[0]
371     ...    ${NET_1_VMS}[0]
372     ...    ${OS_CMP1_HOSTNAME}
373     ...    sg=${SECURITY_GROUP}
374     OpenStackOperations.Create Vm Instance With Port On Compute Node
375     ...    ${PORTS}[1]
376     ...    ${NET_1_VMS}[1]
377     ...    ${OS_CMP2_HOSTNAME}
378     ...    sg=${SECURITY_GROUP}
379     OpenStackOperations.Create Vm Instance With Port On Compute Node
380     ...    ${PORTS}[2]
381     ...    ${NET_2_VMS}[0]
382     ...    ${OS_CMP1_HOSTNAME}
383     ...    sg=${SECURITY_GROUP}
384     OpenStackOperations.Create Vm Instance With Port On Compute Node
385     ...    ${PORTS}[3]
386     ...    ${NET_2_VMS}[1]
387     ...    ${OS_CMP2_HOSTNAME}
388     ...    sg=${SECURITY_GROUP}
389     ${vms} =    BuiltIn.Create List    @{NET_1_VMS}    @{NET_2_VMS}
390     FOR    ${vm}    IN    @{vms}
391         OpenStackOperations.Poll VM Is ACTIVE    ${vm}
392     END
393     BuiltIn.Wait Until Keyword Succeeds    30s    10s    Wait For Routes To Propogate    ${NETWORKS}    ${SUBNET_CIDRS}
394     ${prefix_net10} =    Replace String    ${SUBNET_CIDRS}[0]    ::/64    (:[a-f0-9]{,4}){,4}
395     ${status}    ${message} =    Run Keyword And Ignore Error
396     ...    BuiltIn.Wait Until Keyword Succeeds
397     ...    3x
398     ...    60s
399     ...    OpenStackOperations.Collect VM IPv6 SLAAC Addresses
400     ...    fail_on_none=true
401     ...    vm_list=${NET_1_VMS}
402     ...    network=${NETWORKS}[0]
403     ...    subnet=${prefix_net10}
404     ${prefix_net20} =    Replace String    ${SUBNET_CIDRS}[1]    ::/64    (:[a-f0-9]{,4}){,4}
405     ${status}    ${message} =    Run Keyword And Ignore Error
406     ...    BuiltIn.Wait Until Keyword Succeeds
407     ...    3x
408     ...    60s
409     ...    OpenStackOperations.Collect VM IPv6 SLAAC Addresses
410     ...    fail_on_none=true
411     ...    vm_list=${NET_2_VMS}
412     ...    network=${NETWORKS}[1]
413     ...    subnet=${prefix_net20}
414     ${VM_IP_NET10} =    OpenStackOperations.Collect VM IPv6 SLAAC Addresses
415     ...    fail_on_none=false
416     ...    vm_list=${NET_1_VMS}
417     ...    network=${NETWORKS}[0]
418     ...    subnet=${prefix_net10}
419     ${VM_IP_NET20} =    OpenStackOperations.Collect VM IPv6 SLAAC Addresses
420     ...    fail_on_none=false
421     ...    vm_list=${NET_2_VMS}
422     ...    network=${NETWORKS}[1]
423     ...    subnet=${prefix_net20}
424     ${VM_INSTANCES} =    Collections.Combine Lists    ${NET_1_VMS}    ${NET_2_VMS}
425     ${VM_IPS} =    Collections.Combine Lists    ${VM_IP_NET10}    ${VM_IP_NET20}
426     ${LOOP_COUNT} =    BuiltIn.Get Length    ${NET_1_VMS}
427     FOR    ${index}    IN RANGE    0    ${LOOP_COUNT}
428         ${status}    ${message} =    Run Keyword And Ignore Error
429         ...    BuiltIn.Should Not Contain
430         ...    ${VM_IPS}[${index}]
431         ...    None
432         IF    '${status}' == 'FAIL'
433             OpenStack CLI    openstack console log show ${VM_INSTANCES}[${index}]    30s
434         END
435     END
436     OpenStackOperations.Copy DHCP Files From Control Node
437     BuiltIn.Set Suite Variable    ${VM_IP_NET10}
438     BuiltIn.Set Suite Variable    ${VM_IP_NET20}
439     BuiltIn.Should Not Contain    ${VM_IP_NET10}    None
440     BuiltIn.Should Not Contain    ${VM_IP_NET20}    None
441     OpenStackOperations.Show Debugs    @{NET_1_VMS}    @{NET_2_VMS}
442     OpenStackOperations.Get Suite Debugs
443
444 Suite Teardown
445     [Documentation]    Delete the setup
446     BuiltIn.Run Keyword And Ignore Error    VpnOperations.VPN Delete L3VPN    vpnid=${VPN_INSTANCE_IDS}[0]
447     BuiltIn.Run Keyword And Ignore Error    VpnOperations.VPN Delete L3VPN    vpnid=${VPN_INSTANCE_IDS}[1]
448     BuiltIn.Run Keyword And Ignore Error    VpnOperations.VPN Delete L3VPN    vpnid=${VPN_INSTANCE_IDS}[2]
449     OpenStackOperations.OpenStack Suite Teardown