2 Documentation Openstack library. This library is useful for tests to create network, subnet, router and vm instances
5 Variables ../variables/Variables.py
9 [Arguments] ${force}=no ${source_pwd}=yes
10 [Documentation] Sourcing the Openstack PAsswords for neutron configurations
11 Run Keyword If '${source_pwd}' == 'yes' or '${force}' == 'yes' Write Commands Until Prompt cd ${DEVSTACK_DEPLOY_PATH}; source openrc admin admin
13 Get Tenant ID From Security Group
14 [Documentation] Returns tenant ID by reading it from existing default security-group.
15 ${devstack_conn_id}= Get ControlNode Connection
16 Switch Connection ${devstack_conn_id}
17 ${output}= Write Commands Until Prompt neutron security-group-show default | grep "| tenant_id" | awk '{print $4}'
22 [Arguments] ${network_name} ${additional_args}=${EMPTY} ${verbose}=TRUE
23 [Documentation] Create Network with neutron request.
24 ${devstack_conn_id}= Get ControlNode Connection
25 Switch Connection ${devstack_conn_id}
26 ${command} Set Variable If "${verbose}" == "TRUE" neutron -v net-create ${network_name} ${additional_args} neutron net-create ${network_name} ${additional_args} | grep -w id | awk '{print $4}'
27 ${output}= Write Commands Until Prompt ${command} 30s
32 [Documentation] List networks and return output with neutron client.
33 ${devstack_conn_id}= Get ControlNode Connection
34 Switch Connection ${devstack_conn_id}
35 ${output}= Write Commands Until Prompt neutron net-list 30s
41 [Documentation] List subnets and return output with neutron client.
42 ${devstack_conn_id}= Get ControlNode Connection
43 Switch Connection ${devstack_conn_id}
44 ${output}= Write Commands Until Prompt neutron subnet-list 30s
50 [Arguments] ${network_name}
51 [Documentation] Delete Network with neutron request.
52 ${devstack_conn_id}= Get ControlNode Connection
53 Switch Connection ${devstack_conn_id}
54 ${output}= Write Commands Until Prompt neutron -v net-delete ${network_name} 30s
57 Should Contain ${output} Deleted network: ${network_name}
60 [Arguments] ${network_name} ${subnet} ${range_ip}
61 [Documentation] Create SubNet for the Network with neutron request.
62 ${devstack_conn_id}= Get ControlNode Connection
63 Switch Connection ${devstack_conn_id}
64 ${output}= Write Commands Until Prompt neutron -v subnet-create ${network_name} ${range_ip} --name ${subnet} 30s
67 Should Contain ${output} Created a new subnet
70 [Arguments] ${network_name} ${port_name}
71 [Documentation] Create Port with neutron request.
72 ${devstack_conn_id}= Get ControlNode Connection
73 Switch Connection ${devstack_conn_id}
74 ${output}= Write Commands Until Prompt neutron -v port-create ${network_name} --name ${port_name} 30s
77 Should Contain ${output} Created a new port
80 [Arguments] ${port_name}
81 [Documentation] Delete Port with neutron request.
82 ${devstack_conn_id}= Get ControlNode Connection
83 Switch Connection ${devstack_conn_id}
84 ${output}= Write Commands Until Prompt neutron -v port-delete ${port_name} 30s
87 Should Contain ${output} Deleted port: ${port_name}
90 [Documentation] List ports and return output with neutron client.
91 ${devstack_conn_id}= Get ControlNode Connection
92 Switch Connection ${devstack_conn_id}
93 ${output}= Write Commands Until Prompt neutron port-list 30s
99 [Documentation] Verifies the Gateway Ips with dump flow.
100 ${output}= Write Commands Until Prompt sudo ovs-ofctl -O OpenFlow13 dump-flows br-int
102 : FOR ${GatewayIpElement} IN @{GATEWAY_IPS}
103 \ Should Contain ${output} ${GatewayIpElement}
106 [Documentation] Verifies the Dhcp Ips with dump flow.
107 ${output}= Write Commands Until Prompt sudo ovs-ofctl -O OpenFlow13 dump-flows br-int
109 : FOR ${DhcpIpElement} IN @{DHCP_IPS}
110 \ Should Contain ${output} ${DhcpIpElement}
113 [Documentation] Verifies the Dhcp Ips with dump flow.
114 ${output}= Write Commands Until Prompt sudo ovs-ofctl -O OpenFlow13 dump-flows br-int
116 : FOR ${DhcpIpElement} IN @{DHCP_IPS}
117 \ Should Not Contain ${output} ${DhcpIpElement}
120 [Arguments] ${subnet}
121 [Documentation] Delete SubNet for the Network with neutron request.
123 ${devstack_conn_id}= Get ControlNode Connection
124 Switch Connection ${devstack_conn_id}
125 ${output}= Write Commands Until Prompt neutron -v subnet-delete ${subnet}
128 Should Contain ${output} Deleted subnet: ${subnet}
130 Verify No Gateway Ips
131 [Documentation] Verifies the Gateway Ips removed with dump flow.
132 ${output}= Write Commands Until Prompt sudo ovs-ofctl -O OpenFlow13 dump-flows br-int
134 : FOR ${GatewayIpElement} IN @{GATEWAY_IPS}
135 \ Should Not Contain ${output} ${GatewayIpElement}
138 [Arguments] ${vm_name}
139 [Documentation] Delete Vm instances using instance names.
140 ${devstack_conn_id}= Get ControlNode Connection
141 Switch Connection ${devstack_conn_id}
142 ${output}= Write Commands Until Prompt nova force-delete ${vm_name} 40s
146 [Arguments] ${network_name} ${devstack_conn_id}
147 [Documentation] Retrieve the net id for the given network name to create specific vm instance
148 Switch Connection ${devstack_conn_id}
149 ${output}= Write Commands Until Prompt neutron net-list | grep "${network_name}" | awk '{print $2}' 30s
151 ${splitted_output}= Split String ${output} ${EMPTY}
152 ${net_id}= Get from List ${splitted_output} 0
157 [Arguments] ${port_name} ${devstack_conn_id}
158 [Documentation] Retrieve the port id for the given port name to attach specific vm instance to a particular port
159 Switch Connection ${devstack_conn_id}
160 ${output}= Write Commands Until Prompt neutron port-list | grep "${port_name}" | awk '{print $2}' 30s
162 ${splitted_output}= Split String ${output} ${EMPTY}
163 ${port_id}= Get from List ${splitted_output} 0
168 [Arguments] ${router1} ${devstack_conn_id}
169 [Documentation] Retrieve the net id for the given network name to create specific vm instance
170 Switch Connection ${devstack_conn_id}
171 ${output}= Write Commands Until Prompt neutron router-list | grep "${router1}" | awk '{print $2}' 30s
173 ${splitted_output}= Split String ${output} ${EMPTY}
174 ${router_id}= Get from List ${splitted_output} 0
176 [Return] ${router_id}
179 [Arguments] ${net_name} ${vm_instance_names} ${image}=cirros-0.3.4-x86_64-uec ${flavor}=m1.nano ${sg}=default
180 [Documentation] Create X Vm Instance with the net id of the Netowrk.
181 ${devstack_conn_id}= Get ControlNode Connection
182 Switch Connection ${devstack_conn_id}
183 ${net_id}= Get Net Id ${net_name} ${devstack_conn_id}
184 : FOR ${VmElement} IN @{vm_instance_names}
185 \ ${output}= Write Commands Until Prompt nova boot --image ${image} --flavor ${flavor} --nic net-id=${net_id} ${VmElement} --security-groups ${sg} 30s
187 \ Wait Until Keyword Succeeds 25s 5s Verify VM Is ACTIVE ${VmElement}
189 Create Vm Instance With Port On Compute Node
190 [Arguments] ${port_name} ${vm_instance_name} ${compute_node} ${image}=cirros-0.3.4-x86_64-uec ${flavor}=m1.nano
191 [Documentation] Create One VM instance using given ${port_name} and for given ${compute_node}
192 ${devstack_conn_id}= Get ControlNode Connection
193 Switch Connection ${devstack_conn_id}
194 ${port_id}= Get Port Id ${port_name} ${devstack_conn_id}
195 ${hostname_compute_node}= Run Command On Remote System ${compute_node} hostname
196 ${output}= Write Commands Until Prompt nova boot --image ${image} --flavor ${flavor} --nic port-id=${port_id} ${vm_instance_name} --availability-zone nova:${hostname_compute_node} 30s
198 Wait Until Keyword Succeeds 25s 5s Verify VM Is ACTIVE ${vm_instance_name}
201 [Arguments] ${vm_name}
202 [Documentation] Run these commands to check whether the created vm instance is active or not.
203 ${output}= Write Commands Until Prompt nova show ${vm_name} | grep OS-EXT-STS:vm_state 30s
205 Should Contain ${output} active
208 [Arguments] ${vm_instance_names}
209 [Documentation] View Console log of the created vm instances using nova show.
210 : FOR ${VmElement} IN @{vm_instance_names}
211 \ ${output}= Write Commands Until Prompt nova show ${VmElement}
213 \ ${output}= Write Commands Until Prompt nova console-log ${VmElement}
216 Ping Vm From DHCP Namespace
217 [Arguments] ${net_name} ${vm_ip}
218 [Documentation] Reach all Vm Instance with the net id of the Netowrk.
220 ${devstack_conn_id}= Get ControlNode Connection
221 Switch Connection ${devstack_conn_id}
222 ${net_id}= Get Net Id ${net_name} ${devstack_conn_id}
224 ${output}= Write Commands Until Prompt sudo ip netns exec qdhcp-${net_id} ping -c 3 ${vm_ip} 20s
227 Should Contain ${output} 64 bytes
229 Ping From DHCP Should Not Succeed
230 [Arguments] ${net_name} ${vm_ip}
231 [Documentation] Should Not Reach Vm Instance with the net id of the Netowrk.
233 ${devstack_conn_id}= Get ControlNode Connection
234 Switch Connection ${devstack_conn_id}
235 ${net_id}= Get Net Id ${net_name} ${devstack_conn_id}
237 ${output}= Write Commands Until Prompt sudo ip netns exec qdhcp-${net_id} ping -c 3 ${vm_ip} 20s
240 Should Not Contain ${output} 64 bytes
243 [Arguments] ${dest_vm}
244 [Documentation] Ping to the expected destination ip.
245 ${output}= Write Commands Until Expected Prompt ping -c 3 ${dest_vm} ${OS_SYSTEM_PROMPT}
250 [Documentation] Ping to the expected destination ip.
251 ${output}= Write Commands Until Expected Prompt curl -i http://169.254.169.254 ${OS_SYSTEM_PROMPT}
252 Write Commands Until Prompt exit
253 Should Contain ${output} 200
256 [Documentation] Exit the vm instance.
257 ${output}= Write Commands Until Prompt exit
260 Check If Console Is VmInstance
261 [Arguments] ${console}=cirros
262 [Documentation] Check if the session has been able to login to the VM instance
263 ${output}= Write Commands Until Expected Prompt id ${OS_SYSTEM_PROMPT}
264 Should Contain ${output} ${console}
267 [Documentation] Check if the session has been able to login to the VM instance and exit the instance
268 ${rcode}= Run Keyword And Return Status Check If Console Is VmInstance cirros
269 Run Keyword If ${rcode} Write Commands Until Prompt exit
273 [Arguments] ${ip_address}
274 [Documentation] Run Ping command on the IP available as argument
275 ${output}= Write Commands Until Expected Prompt ping -c 3 ${ip_address} ${OS_SYSTEM_PROMPT}
276 Should Contain ${output} 64 bytes
278 Check Metadata Access
279 [Documentation] Try curl on the Metadataurl and check if it is okay
280 ${output}= Write Commands Until Expected Prompt curl -i http://169.254.169.254 ${OS_SYSTEM_PROMPT}
281 Should Contain ${output} 200
283 Test Operations From Vm Instance
284 [Arguments] ${net_name} ${src_ip} ${list_of_local_dst_ips} ${l2_or_l3}=l2 ${list_of_external_dst_ips}=${NONE} ${user}=cirros
285 ... ${password}=cubswin:)
286 [Documentation] Login to the vm instance using ssh in the network.
287 ${devstack_conn_id}= Get ControlNode Connection
288 Switch Connection ${devstack_conn_id}
289 ${net_id}= Get Net Id ${net_name} ${devstack_conn_id}
290 ${output}= Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} ssh ${user}@${src_ip} -o ConnectTimeout=10 -o StrictHostKeyChecking=no d:
292 ${output}= Write Commands Until Expected Prompt ${password} ${OS_SYSTEM_PROMPT}
294 ${rcode}= Run Keyword And Return Status Check If Console Is VmInstance
295 Run Keyword If ${rcode} Write Commands Until Expected Prompt ifconfig ${OS_SYSTEM_PROMPT}
296 Run Keyword If ${rcode} Write Commands Until Expected Prompt route ${OS_SYSTEM_PROMPT}
297 Run Keyword If ${rcode} Write Commands Until Expected Prompt arp -an ${OS_SYSTEM_PROMPT}
298 ${dest_vm}= Get From List ${list_of_local_dst_ips} 0
300 Run Keyword If ${rcode} Check Ping ${dest_vm}
301 ${dest_dhcp}= Get From List ${list_of_local_dst_ips} 1
303 Run Keyword If ${rcode} Check Ping ${dest_dhcp}
304 ${dest_vm}= Get From List ${list_of_local_dst_ips} 2
306 Run Keyword If ${rcode} Check Ping ${dest_vm}
307 Run Keyword If ${rcode} Check Metadata Access
308 Run Keyword If '${l2_or_l3}' == 'l3' Ping Other Instances ${list_of_external_dst_ips}
309 [Teardown] Exit From Vm Console
312 [Arguments] ${list_of_external_dst_ips}
313 [Documentation] Check reachability with other network's instances.
314 ${rcode}= Run Keyword And Return Status Check If Console Is VmInstance
315 ${dest_vm}= Get From List ${list_of_external_dst_ips} 0
317 Run Keyword If ${rcode} Check Ping ${dest_vm}
318 ${dest_dhcp}= Get From List ${list_of_external_dst_ips} 1
320 Run Keyword If ${rcode} Check Ping ${dest_dhcp}
321 ${dest_vm}= Get From List ${list_of_external_dst_ips} 2
323 Run Keyword If ${rcode} Check Ping ${dest_vm}
326 [Arguments] ${router_name}
327 [Documentation] Create Router and Add Interface to the subnets.
328 ${devstack_conn_id}= Get ControlNode Connection
329 Switch Connection ${devstack_conn_id}
330 ${output}= Write Commands Until Prompt neutron -v router-create ${router_name} 30s
332 Should Contain ${output} Created a new router
335 [Arguments] ${router_name} ${interface_name}
336 ${devstack_conn_id}= Get ControlNode Connection
337 Switch Connection ${devstack_conn_id}
338 ${output}= Write Commands Until Prompt neutron -v router-interface-add ${router_name} ${interface_name}
340 Should Contain ${output} Added interface
343 [Arguments] ${router_name} ${interface_name}
344 [Documentation] Remove Interface to the subnets.
345 ${devstack_conn_id}= Get ControlNode Connection
346 Switch Connection ${devstack_conn_id}
347 ${output}= Write Commands Until Prompt neutron -v router-interface-delete ${router_name} ${interface_name}
349 Should Contain ${output} Removed interface from router
352 [Arguments] ${router_name}
353 [Documentation] Delete Router and Interface to the subnets.
354 ${devstack_conn_id}= Get ControlNode Connection
355 Switch Connection ${devstack_conn_id}
356 ${output}= Write Commands Until Prompt neutron -v router-delete ${router_name} 60s
358 Should Contain ${output} Deleted router:
360 Get DumpFlows And Ovsconfig
361 [Arguments] ${openstack_node_ip}
362 [Documentation] Get the OvsConfig and Flow entries from OVS from the Openstack Node
363 Log ${openstack_node_ip}
364 SSHLibrary.Open Connection ${openstack_node_ip} prompt=${DEFAULT_LINUX_PROMPT}
365 Utils.Flexible SSH Login ${OS_USER} ${DEVSTACK_SYSTEM_PASSWORD}
366 SSHLibrary.Set Client Configuration timeout=${default_devstack_prompt_timeout}
367 Write Commands Until Expected Prompt ip -o link ]>
368 Write Commands Until Expected Prompt ip -o addr ]>
369 Write Commands Until Expected Prompt ip route ]>
370 Write Commands Until Expected Prompt arp -an ]>
371 ${nslist}= Write Commands Until Expected Prompt ip netns list | awk '{print $1}' ]>
372 @{lines} Split To Lines ${nslist}
373 : FOR ${line} IN @{lines}
374 \ Write Commands Until Expected Prompt sudo ip netns exec ${line} ip -o link ]>
375 \ Write Commands Until Expected Prompt sudo ip netns exec ${line} ip -o addr ]>
376 \ Write Commands Until Expected Prompt sudo ip netns exec ${line} ip route ]>
377 Write Commands Until Expected Prompt sudo ovs-vsctl show ]>
378 Write Commands Until Expected Prompt sudo ovs-vsctl list Open_vSwitch ]>
379 Write Commands Until Expected Prompt sudo ovs-ofctl show br-int -OOpenFlow13 ]>
380 Write Commands Until Expected Prompt sudo ovs-ofctl dump-flows br-int -OOpenFlow13 ]>
381 Write Commands Until Expected Prompt sudo ovs-ofctl dump-groups br-int -OOpenFlow13 ]>
382 Write Commands Until Expected Prompt sudo ovs-ofctl dump-group-stats br-int -OOpenFlow13 ]>
384 Get ControlNode Connection
385 ${control_conn_id}= SSHLibrary.Open Connection ${OS_CONTROL_NODE_IP} prompt=${DEFAULT_LINUX_PROMPT_STRICT}
386 Utils.Flexible SSH Login ${OS_USER} ${DEVSTACK_SYSTEM_PASSWORD}
387 SSHLibrary.Set Client Configuration timeout=30s
388 Source Password force=yes
389 [Return] ${control_conn_id}
392 [Documentation] Get the OvsConfig and Flow entries from all Openstack nodes
393 Run Keyword If 0 < ${NUM_OS_SYSTEM} Get DumpFlows And Ovsconfig ${OS_CONTROL_NODE_IP}
394 Run Keyword If 1 < ${NUM_OS_SYSTEM} Get DumpFlows And Ovsconfig ${OS_COMPUTE_1_IP}
395 Run Keyword If 2 < ${NUM_OS_SYSTEM} Get DumpFlows And Ovsconfig ${OS_COMPUTE_2_IP}
398 [Arguments] ${vm_indices}
399 [Documentation] Run these commands for debugging, it can list state of VM instances and ip information in control node
400 ${devstack_conn_id}= Get ControlNode Connection
401 Switch Connection ${devstack_conn_id}
402 ${output}= Write Commands Until Prompt sudo ip netns list
404 : FOR ${index} IN @{vm_indices}
405 \ ${output}= Write Commands Until Prompt nova show ${index} 30s
412 Create Security Group
413 [Arguments] ${sg_name} ${desc}
414 ${devstack_conn_id}= Get ControlNode Connection
415 Switch Connection ${devstack_conn_id}
416 ${output}= Write Commands Until Prompt nova secgroup-create ${sg_name} ${desc} 40s
420 [Arguments] ${direction} ${protocol} ${min_port} ${max_port} ${remote_ip} ${sg_name}
421 ${devstack_conn_id}= Get ControlNode Connection
422 Switch Connection ${devstack_conn_id}
423 ${output}= Write Commands Until Prompt neutron security-group-rule-create --direction ${direction} --protocol ${protocol} --port-range-min ${min_port} --port-range-max ${max_port} --remote-ip-prefix ${remote_ip} ${sg_name}