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
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
14 [Arguments] ${network_name}
15 [Documentation] Create Network with neutron request.
16 Switch Connection ${devstack_conn_id}
17 Source Password force=yes
18 ${output}= Write Commands Until Prompt neutron -v net-create ${network_name} 30s
20 Should Contain ${output} Created a new network
23 [Arguments] ${network_name}
24 [Documentation] Delete Network with neutron request.
25 Switch Connection ${devstack_conn_id}
27 ${output}= Write Commands Until Prompt neutron -v net-delete ${network_name}
29 Should Contain ${output} Deleted network: ${network_name}
32 [Arguments] ${network_name} ${subnet} ${range_ip}
33 [Documentation] Create SubNet for the Network with neutron request.
34 Switch Connection ${devstack_conn_id}
36 ${output}= Write Commands Until Prompt neutron -v subnet-create ${network_name} ${range_ip} --name ${subnet} 30s
38 Should Contain ${output} Created a new subnet
41 [Documentation] Verifies the Gateway Ips with dump flow.
42 ${output}= Write Commands Until Prompt sudo ovs-ofctl -O OpenFlow13 dump-flows br-int
44 : FOR ${GatewayIpElement} IN @{GATEWAY_IPS}
45 \ Should Contain ${output} ${GatewayIpElement}
48 [Documentation] Verifies the Dhcp Ips with dump flow.
49 ${output}= Write Commands Until Prompt sudo ovs-ofctl -O OpenFlow13 dump-flows br-int
51 : FOR ${DhcpIpElement} IN @{DHCP_IPS}
52 \ Should Contain ${output} ${DhcpIpElement}
55 [Documentation] Verifies the Dhcp Ips with dump flow.
56 ${output}= Write Commands Until Prompt sudo ovs-ofctl -O OpenFlow13 dump-flows br-int
58 : FOR ${DhcpIpElement} IN @{DHCP_IPS}
59 \ Should Not Contain ${output} ${DhcpIpElement}
63 [Documentation] Delete SubNet for the Network with neutron request.
65 Switch Connection ${devstack_conn_id}
67 ${output}= Write Commands Until Prompt neutron -v subnet-delete ${subnet}
69 Should Contain ${output} Deleted subnet: ${subnet}
72 [Documentation] Verifies the Gateway Ips removed with dump flow.
73 ${output}= Write Commands Until Prompt sudo ovs-ofctl -O OpenFlow13 dump-flows br-int
75 : FOR ${GatewayIpElement} IN @{GATEWAY_IPS}
76 \ Should Not Contain ${output} ${GatewayIpElement}
79 [Arguments] ${vm_name}
80 [Documentation] Delete Vm instances using instance names.
81 Switch Connection ${devstack_conn_id}
83 ${output}= Write Commands Until Prompt nova delete ${vm_name}
84 Should Contain ${output} ${vm_name}
87 [Arguments] ${network_name}
88 [Documentation] Retrieve the net id for the given network name to create specific vm instance
89 Switch Connection ${devstack_conn_id}
90 Source Password force=yes
91 ${output}= Write Commands Until Prompt neutron net-list | grep "${network_name}" | get_field 1
93 ${splitted_output}= Split String ${output} ${EMPTY}
94 ${net_id}= Get from List ${splitted_output} 0
99 [Arguments] ${net_name} ${vm_instance_names} ${image}=cirros-0.3.4-x86_64-uec ${flavor}=m1.tiny
100 [Documentation] Create X Vm Instance with the net id of the Netowrk.
101 Switch Connection ${devstack_conn_id}
103 ${net_id}= Get Net Id ${net_name}
104 : FOR ${VmElement} IN @{vm_instance_names}
105 \ ${output}= Write Commands Until Prompt nova boot --image ${image} --flavor ${flavor} --nic net-id=${net_id} ${VmElement}
107 \ Wait Until Keyword Succeeds 25s 5s Verify VM Is ACTIVE ${VmElement}
110 [Arguments] ${vm_name}
111 [Documentation] Run these commands to check whether the created vm instance is active or not.
112 ${output}= Write Commands Until Prompt nova show ${vm_name} | grep OS-EXT-STS:vm_state
114 Should Contain ${output} active
117 [Arguments] ${vm_instance_names}
118 [Documentation] View Console log of the created vm instances using nova show.
119 : FOR ${VmElement} IN @{vm_instance_names}
120 \ ${output}= Write Commands Until Prompt nova show ${VmElement}
122 \ ${output}= Write Commands Until Prompt nova console-log ${VmElement}
125 Ping Vm From DHCP Namespace
126 [Arguments] ${net_name} ${vm_ip}
127 [Documentation] Reach all Vm Instance with the net id of the Netowrk.
129 Switch Connection ${devstack_conn_id}
130 ${net_id}= Get Net Id ${net_name}
132 ${output}= Write Commands Until Prompt sudo ip netns exec qdhcp-${net_id} ping -c 3 ${vm_ip} 20s
134 Should Contain ${output} 64 bytes
137 [Arguments] ${dest_vm}
138 [Documentation] Ping to the expected destination ip.
139 ${output}= Write Commands Until Expected Prompt ping -c 3 ${dest_vm} ${OS_SYSTEM_PROMPT}
144 [Documentation] Ping to the expected destination ip.
145 ${output}= Write Commands Until Expected Prompt curl -i http://169.254.169.254 ${OS_SYSTEM_PROMPT}
146 Write Commands Until Prompt exit
147 Should Contain ${output} 200
150 [Documentation] Exit the vm instance.
151 ${output}= Write Commands Until Prompt exit
154 Check If Console Is VmInstance
155 [Arguments] ${console}=cirros
156 [Documentation] Check if the session has been able to login to the VM instance
157 ${output}= Write Commands Until Expected Prompt id ${OS_SYSTEM_PROMPT}
158 Should Contain ${output} ${console}
161 [Documentation] Check if the session has been able to login to the VM instance and exit the instance
162 ${rcode}= Run Keyword And Return Status Check If Console Is VmInstance cirros
163 Run Keyword If ${rcode} Write Commands Until Prompt exit
167 [Arguments] ${ip_address}
168 [Documentation] Run Ping command on the IP available as argument
169 ${output}= Write Commands Until Expected Prompt ping -c 3 ${ip_address} ${OS_SYSTEM_PROMPT}
170 Should Contain ${output} 64 bytes
172 Check Metadata Access
173 [Documentation] Try curl on the Metadataurl and check if it is okay
174 ${output}= Write Commands Until Expected Prompt curl -i http://169.254.169.254 ${OS_SYSTEM_PROMPT}
175 Should Contain ${output} 200
177 Test Operations From Vm Instance
178 [Arguments] ${net_name} ${src_ip} ${list_of_local_dst_ips} ${l2_or_l3}=l2 ${list_of_external_dst_ips}=${NONE} ${user}=cirros ${password}=cubswin:)
179 [Documentation] Login to the vm instance using ssh in the network.
180 Switch Connection ${devstack_conn_id}
182 ${net_id}= Get Net Id ${net_name}
183 ${output}= Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} ssh ${user}@${src_ip} -o ConnectTimeout=10 -o StrictHostKeyChecking=no d:
185 ${output}= Write Commands Until Expected Prompt ${password} ${OS_SYSTEM_PROMPT}
187 ${rcode}= Run Keyword And Return Status Check If Console Is VmInstance
188 Run Keyword If ${rcode} Write Commands Until Expected Prompt ifconfig ${OS_SYSTEM_PROMPT}
189 Run Keyword If ${rcode} Write Commands Until Expected Prompt route ${OS_SYSTEM_PROMPT}
190 ${dest_vm}= Get From List ${list_of_local_dst_ips} 0
192 Run Keyword If ${rcode} Check Ping ${dest_vm}
193 ${dest_dhcp}= Get From List ${list_of_local_dst_ips} 1
195 Run Keyword If ${rcode} Check Ping ${dest_dhcp}
196 ${dest_vm}= Get From List ${list_of_local_dst_ips} 2
198 Run Keyword If ${rcode} Check Ping ${dest_vm}
199 Run Keyword If ${rcode} Check Metadata Access
200 Run Keyword If '${l2_or_l3}' == 'l3' Ping Other Instances ${list_of_external_dst_ips}
201 [Teardown] Exit From Vm Console
204 [Arguments] ${list_of_external_dst_ips}
205 [Documentation] Check reachability with other network's instances.
206 ${rcode}= Run Keyword And Return Status Check If Console Is VmInstance
207 ${dest_vm}= Get From List ${list_of_external_dst_ips} 0
209 Run Keyword If ${rcode} Check Ping ${dest_vm}
210 ${dest_dhcp}= Get From List ${list_of_external_dst_ips} 1
212 Run Keyword If ${rcode} Check Ping ${dest_dhcp}
213 ${dest_vm}= Get From List ${list_of_external_dst_ips} 2
215 Run Keyword If ${rcode} Check Ping ${dest_vm}
218 [Arguments] ${router_name}
219 [Documentation] Create Router and Add Interface to the subnets.
220 Switch Connection ${devstack_conn_id}
222 ${output}= Write Commands Until Prompt neutron -v router-create ${router_name}
223 Should Contain ${output} Created a new router
226 [Arguments] ${router_name} ${interface_name}
227 Switch Connection ${devstack_conn_id}
229 ${output}= Write Commands Until Prompt neutron -v router-interface-add ${router_name} ${interface_name}
230 Should Contain ${output} Added interface
233 [Arguments] ${router_name} ${interface_name}
234 [Documentation] Remove Interface to the subnets.
235 Switch Connection ${devstack_conn_id}
237 ${output}= Write Commands Until Prompt neutron -v router-interface-delete ${router_name} ${interface_name}
238 Should Contain ${output} Removed interface from router
241 [Arguments] ${router_name}
242 [Documentation] Delete Router and Interface to the subnets.
243 Switch Connection ${devstack_conn_id}
245 ${output}= Write Commands Until Prompt neutron -v router-delete ${router_name}
246 Should Contain ${output} Deleted router:
248 Get DumpFlows And Ovsconfig
249 [Arguments] ${openstack_node_ip}
250 [Documentation] Get the OvsConfig and Flow entries from OVS from the Openstack Node
251 Log ${openstack_node_ip}
252 SSHLibrary.Open Connection ${openstack_node_ip} prompt=${DEFAULT_LINUX_PROMPT}
253 Utils.Flexible SSH Login ${OS_USER} ${DEVSTACK_SYSTEM_PASSWORD}
254 SSHLibrary.Set Client Configuration timeout=${default_devstack_prompt_timeout}
255 Write Commands Until Expected Prompt sudo ovs-vsctl show ]>
256 Write Commands Until Expected Prompt sudo ovs-ofctl dump-flows br-int -OOpenFlow13 ]>
259 [Documentation] Get the OvsConfig and Flow entries from all Openstack nodes
260 Run Keyword If 0 < ${NUM_OS_SYSTEM} Get DumpFlows And Ovsconfig ${OS_CONTROL_NODE_IP}
261 Run Keyword If 1 < ${NUM_OS_SYSTEM} Get DumpFlows And Ovsconfig ${OS_COMPUTE_1_IP}
262 Run Keyword If 2 < ${NUM_OS_SYSTEM} Get DumpFlows And Ovsconfig ${OS_COMPUTE_2_IP}
265 [Arguments] ${vm_indices}
266 [Documentation] Run these commands for debugging, it can list state of VM instances and ip information in control node
267 ${output}= Write Commands Until Prompt sudo ip netns list
269 : FOR ${index} IN @{vm_indices}
270 \ ${output}= Write Commands Until Prompt nova show ${index}