Log ${output}
[Return] ${output}
+Get Tenant ID From Network
+ [Arguments] ${network_uuid}
+ [Documentation] Returns tenant ID by reading it from existing network.
+ ${resp} = RequestsLibrary.Get Request session ${CONFIG_API}/neutron:neutron/networks/network/${network_uuid}/
+ Log ${resp.content}
+ ${matches} = Get Lines Containing String ${resp.content} tenant-id
+ ${matches}= Fetch From Right ${matches} :
+ ${tenant_id}= Strip String ${matches} characters=}]"
+ [Return] ${tenant_id}
+
Create Network
[Arguments] ${network_name} ${additional_args}=${EMPTY} ${verbose}=TRUE
[Documentation] Create Network with neutron request.
${output}= Write Commands Until Prompt neutron -v net-delete ${network_name} 30s
Close Connection
Log ${output}
- Should Contain ${output} Deleted network: ${network_name}
+ Should Match Regexp ${output} Deleted network: ${network_name}|Deleted network\\(s\\): ${network_name}
Create SubNet
- [Arguments] ${network_name} ${subnet} ${range_ip}
+ [Arguments] ${network_name} ${subnet} ${range_ip} ${additional_args}=${EMPTY}
[Documentation] Create SubNet for the Network with neutron request.
${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
- ${output}= Write Commands Until Prompt neutron -v subnet-create ${network_name} ${range_ip} --name ${subnet} 30s
+ ${output}= Write Commands Until Prompt neutron -v subnet-create ${network_name} ${range_ip} --name ${subnet} ${additional_args} 30s
Close Connection
Log ${output}
Should Contain ${output} Created a new subnet
Create Port
- [Arguments] ${network_name} ${port_name}
+ [Arguments] ${network_name} ${port_name} ${sg}=default
[Documentation] Create Port with neutron request.
${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
- ${output}= Write Commands Until Prompt neutron -v port-create ${network_name} --name ${port_name} 30s
+ ${output}= Write Commands Until Prompt neutron -v port-create ${network_name} --name ${port_name} --security-group ${sg} 30s
Close Connection
Log ${output}
Should Contain ${output} Created a new port
Log ${output}
[Return] ${output}
+Create And Associate Floating IPs
+ [Arguments] ${external_net} @{vm_list}
+ [Documentation] Create and associate floating IPs to VMs with nova request
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${ip_list}= Create List @{EMPTY}
+ : FOR ${vm} IN @{vm_list}
+ \ ${output}= Write Commands Until Prompt nova floating-ip-create ${external_net} | grep "${external_net}" 30s
+ \ Log ${output}
+ \ @{output_words} Split String ${output}
+ \ Append To List ${ip_list} @{output_words}[3]
+ \ ${output}= Write Commands Until Prompt nova floating-ip-associate ${vm} @{output_words}[3] 30s
+ \ Log ${output}
+ [Return] ${ip_list}
+
Verify Gateway Ips
[Documentation] Verifies the Gateway Ips with dump flow.
${output}= Write Commands Until Prompt sudo ovs-ofctl -O OpenFlow13 dump-flows br-int
${output}= Write Commands Until Prompt neutron -v subnet-delete ${subnet}
Close Connection
Log ${output}
- Should Contain ${output} Deleted subnet: ${subnet}
+ Should Match Regexp ${output} Deleted subnet: ${subnet}|Deleted subnet\\(s\\): ${subnet}
Verify No Gateway Ips
[Documentation] Verifies the Gateway Ips removed with dump flow.
: FOR ${VmElement} IN @{vm_instance_names}
\ ${output}= Write Commands Until Prompt nova boot --image ${image} --flavor ${flavor} --nic net-id=${net_id} ${VmElement} --security-groups ${sg} 30s
\ Log ${output}
- \ Wait Until Keyword Succeeds 25s 5s Verify VM Is ACTIVE ${VmElement}
Create Vm Instance With Port On Compute Node
- [Arguments] ${port_name} ${vm_instance_name} ${compute_node} ${image}=cirros-0.3.4-x86_64-uec ${flavor}=m1.nano
+ [Arguments] ${port_name} ${vm_instance_name} ${compute_node} ${image}=cirros-0.3.4-x86_64-uec ${flavor}=m1.nano ${sg}=default
[Documentation] Create One VM instance using given ${port_name} and for given ${compute_node}
${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
${port_id}= Get Port Id ${port_name} ${devstack_conn_id}
${hostname_compute_node}= Run Command On Remote System ${compute_node} hostname
- ${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
+ ${output}= Write Commands Until Prompt nova boot --image ${image} --flavor ${flavor} --nic port-id=${port_id} ${vm_instance_name} --security-groups ${sg} --availability-zone nova:${hostname_compute_node} 30s
Log ${output}
Wait Until Keyword Succeeds 25s 5s Verify VM Is ACTIVE ${vm_instance_name}
Verify VM Is ACTIVE
[Arguments] ${vm_name}
[Documentation] Run these commands to check whether the created vm instance is active or not.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
${output}= Write Commands Until Prompt nova show ${vm_name} | grep OS-EXT-STS:vm_state 30s
Log ${output}
Should Contain ${output} active
+Verify VMs Received DHCP Lease
+ [Arguments] @{vm_list}
+ [Documentation] Using nova console-log on the provided ${vm_list} to search for the string "obtained" which
+ ... correlates to the instance receiving it's IP address via DHCP. This should provide a good indication
+ ... that the instance is fully up and ready.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${ip_list} Create List
+ : FOR ${vm} IN @{vm_list}
+ \ ${output}= Write Commands Until Prompt nova console-log ${vm} | grep -i "obtained" 30s
+ \ ${dhcp_ip_line}= Write Commands Until Prompt nova console-log ${vm} | grep "^nameserver" 30s
+ \ Log ${output}
+ \ @{output_words} Split String ${output}
+ \ @{dhcp_output_words} Split String ${dhcp_ip_line}
+ \ Should Contain ${output} obtained
+ \ Append To List ${ip_list} @{output_words}[2]
+ [Return] ${ip_list} @{dhcp_output_words}[1]
+
View Vm Console
[Arguments] ${vm_instance_names}
[Documentation] View Console log of the created vm instances using nova show.
Log ${output}
Should Not Contain ${output} 64 bytes
+Ping Vm From Control Node
+ [Arguments] ${vm_floating_ip}
+ [Documentation] Ping VM floating IP from control node
+ Log ${vm_floating_ip}
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt ping -c 3 ${vm_floating_ip} 20s
+ Log ${output}
+ Close Connection
+ Should Contain ${output} 64 bytes
+
Ping From Instance
- [Arguments] ${dest_vm}
+ [Arguments] ${dest_vm_ip}
[Documentation] Ping to the expected destination ip.
- ${output}= Write Commands Until Expected Prompt ping -c 3 ${dest_vm} ${OS_SYSTEM_PROMPT}
+ ${output}= Write Commands Until Expected Prompt ping -c 3 ${dest_vm_ip} ${OS_SYSTEM_PROMPT}
Log ${output}
[Return] ${output}
${output}= Write Commands Until Expected Prompt curl -i http://169.254.169.254 ${OS_SYSTEM_PROMPT}
Should Contain ${output} 200
+Execute Command on VM Instance
+ [Arguments] ${net_name} ${vm_ip} ${cmd} ${user}=cirros ${password}=cubswin:)
+ [Documentation] Login to the vm instance using ssh in the network, executes a command inside the VM and returns the ouput.
+ ${devstack_conn_id} = Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${net_id} = Get Net Id ${net_name} ${devstack_conn_id}
+ Log ${vm_ip}
+ ${output} = Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} ssh ${user}@${vm_ip} -o ConnectTimeout=10 -o StrictHostKeyChecking=no d:
+ Log ${output}
+ ${output} = Write Commands Until Expected Prompt ${password} ${OS_SYSTEM_PROMPT}
+ Log ${output}
+ ${rcode} = Run Keyword And Return Status Check If Console Is VmInstance
+ ${output} = Run Keyword If ${rcode} Write Commands Until Expected Prompt ${cmd} ${OS_SYSTEM_PROMPT}
+ [Teardown] Exit From Vm Console
+ [Return] ${output}
+
Test Operations From Vm Instance
- [Arguments] ${net_name} ${src_ip} ${list_of_local_dst_ips} ${l2_or_l3}=l2 ${list_of_external_dst_ips}=${NONE} ${user}=cirros
- ... ${password}=cubswin:)
+ [Arguments] ${net_name} ${src_ip} ${dest_ips} ${user}=cirros ${password}=cubswin:)
[Documentation] Login to the vm instance using ssh in the network.
${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
+ Log ${src_ip}
${net_id}= Get Net Id ${net_name} ${devstack_conn_id}
- ${output}= Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} ssh ${user}@${src_ip} -o ConnectTimeout=10 -o StrictHostKeyChecking=no d:
+ ${output}= Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no ${user}@${src_ip} d:
Log ${output}
${output}= Write Commands Until Expected Prompt ${password} ${OS_SYSTEM_PROMPT}
Log ${output}
Run Keyword If ${rcode} Write Commands Until Expected Prompt ifconfig ${OS_SYSTEM_PROMPT}
Run Keyword If ${rcode} Write Commands Until Expected Prompt route ${OS_SYSTEM_PROMPT}
Run Keyword If ${rcode} Write Commands Until Expected Prompt arp -an ${OS_SYSTEM_PROMPT}
- ${dest_vm}= Get From List ${list_of_local_dst_ips} 0
- Log ${dest_vm}
- Run Keyword If ${rcode} Check Ping ${dest_vm}
- ${dest_dhcp}= Get From List ${list_of_local_dst_ips} 1
- Log ${dest_dhcp}
- Run Keyword If ${rcode} Check Ping ${dest_dhcp}
- ${dest_vm}= Get From List ${list_of_local_dst_ips} 2
- Log ${dest_vm}
- Run Keyword If ${rcode} Check Ping ${dest_vm}
+ : FOR ${dest_ip} IN @{dest_ips}
+ \ Log ${dest_ip}
+ \ ${string_empty}= Run Keyword And Return Status Should Be Empty ${dest_ip}
+ \ Run Keyword If ${string_empty} Continue For Loop
+ \ Run Keyword If ${rcode} Check Ping ${dest_ip}
Run Keyword If ${rcode} Check Metadata Access
- Run Keyword If '${l2_or_l3}' == 'l3' Ping Other Instances ${list_of_external_dst_ips}
[Teardown] Exit From Vm Console
Ping Other Instances
[Arguments] ${list_of_external_dst_ips}
[Documentation] Check reachability with other network's instances.
${rcode}= Run Keyword And Return Status Check If Console Is VmInstance
- ${dest_vm}= Get From List ${list_of_external_dst_ips} 0
- Log ${dest_vm}
- Run Keyword If ${rcode} Check Ping ${dest_vm}
- ${dest_dhcp}= Get From List ${list_of_external_dst_ips} 1
- Log ${dest_dhcp}
- Run Keyword If ${rcode} Check Ping ${dest_dhcp}
- ${dest_vm}= Get From List ${list_of_external_dst_ips} 2
- Log ${dest_vm}
- Run Keyword If ${rcode} Check Ping ${dest_vm}
+ : FOR ${dest_ip} IN @{list_of_external_dst_ips}
+ \ Log ${dest_ip}
+ \ Check Ping ${dest_ip}
Create Router
[Arguments] ${router_name}
Close Connection
Should Contain ${output} Added interface
+Add Router Gateway
+ [Arguments] ${router_name} ${network_name}
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron -v router-gateway-set ${router_name} ${network_name}
+ Close Connection
+ Should Contain ${output} Set gateway
+
Remove Interface
[Arguments] ${router_name} ${interface_name}
[Documentation] Remove Interface to the subnets.
Close Connection
Should Contain ${output} Removed interface from router
+Update Router
+ [Arguments] ${router_name} ${cmd}
+ [Documentation] Update the router with the command. Router name and command should be passed as argument.
+ ${devstack_conn_id} = Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output} = Write Commands Until Prompt neutron router-update ${router_name} ${cmd} 30s
+ Close Connection
+ Should Contain ${output} Updated
+
+Show Router
+ [Arguments] ${router_name} ${options}
+ [Documentation] Show information of a given router. Router name and optional fields should be sent as arguments.
+ ${devstack_conn_id} = Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output} = Write Commands Until Prompt neutron router-show ${router_name} ${options} 30s
+ Log ${output}
+ Close Connection
+
Delete Router
[Arguments] ${router_name}
[Documentation] Delete Router and Interface to the subnets.
Switch Connection ${devstack_conn_id}
${output}= Write Commands Until Prompt neutron -v router-delete ${router_name} 60s
Close Connection
- Should Contain ${output} Deleted router:
+ Should Match Regexp ${output} Deleted router: ${router_name}|Deleted router\\(s\\): ${router_name}
Get DumpFlows And Ovsconfig
[Arguments] ${openstack_node_ip}
Run Keyword If 2 < ${NUM_OS_SYSTEM} Get DumpFlows And Ovsconfig ${OS_COMPUTE_2_IP}
Show Debugs
- [Arguments] ${vm_indices}
+ [Arguments] @{vm_indices}
[Documentation] Run these commands for debugging, it can list state of VM instances and ip information in control node
${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}