*** Settings ***
Documentation Openstack library. This library is useful for tests to create network, subnet, router and vm instances
Library SSHLibrary
+Resource Netvirt.robot
Resource Utils.robot
-Variables ../variables/Variables.py
+Resource ../variables/Variables.robot
*** Keywords ***
Source Password
${output}= Write Commands Until Prompt neutron -v port-delete ${port_name} 30s
Close Connection
Log ${output}
- Should Contain ${output} Deleted port: ${port_name}
+ Should Match Regexp ${output} Deleted port: ${port_name}|Deleted port\\(s\\): ${port_name}
List Ports
[Documentation] List ports and return output with neutron client.
Log ${output}
[Return] ${output}
+List Nova VMs
+ [Documentation] List VMs and return output with nova client.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt nova list 30s
+ Close Connection
+ 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
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
+ \ ${output}= Write Commands Until Prompt neutron floatingip-create ${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
+ \ @{ip} Get Regexp Matches ${output} [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}
+ \ ${ip_length} Get Length ${ip}
+ \ Run Keyword If ${ip_length}>0 Append To List ${ip_list} @{ip}[0]
+ \ ... ELSE Append To List ${ip_list} None
+ \ ${output}= Write Commands Until Prompt nova floating-ip-associate ${vm} @{ip}[0] 30s
\ Log ${output}
[Return] ${ip_list}
Log ${net_id}
[Return] ${net_id}
+Get Subnet Id
+ [Arguments] ${subnet_name} ${devstack_conn_id}
+ [Documentation] Retrieve the subnet id for the given subnet name
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron subnet-list | grep "${subnet_name}" | awk '{print $2}' 30s
+ Log ${output}
+ ${splitted_output}= Split String ${output} ${EMPTY}
+ ${subnet_id}= Get from List ${splitted_output} 0
+ Log ${subnet_id}
+ [Return] ${subnet_id}
+
Get Port Id
[Arguments] ${port_name} ${devstack_conn_id}
[Documentation] Retrieve the port id for the given port name to attach specific vm instance to a particular port
Get Router Id
[Arguments] ${router1} ${devstack_conn_id}
- [Documentation] Retrieve the net id for the given network name to create specific vm instance
+ [Documentation] Retrieve the router id for the given router name
Switch Connection ${devstack_conn_id}
${output}= Write Commands Until Prompt neutron router-list | grep "${router1}" | awk '{print $2}' 30s
Log ${output}
${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} --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}
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.
+ ... correlates to the instance receiving it's IP address via DHCP. Also retrieved is the ip of the nameserver
+ ... if available in the console-log output. The keyword will also return a list of the learned ips as it
+ ... finds them in the console log output, and will have "None" for Vms that no ip was found.
${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
- ${ip_list} Create List
+ ${ip_list} Create List @{EMPTY}
+ ${dhcp_ip} Create List @{EMPTY}
: FOR ${vm} IN @{vm_list}
- \ ${output}= Write Commands Until Prompt nova console-log ${vm} | grep -i "obtained" 30s
+ \ ${vm_ip_line}= Write Commands Until Prompt nova console-log ${vm} | grep -i "obtained" 30s
+ \ Log ${vm_ip_line}
+ \ @{vm_ip} Get Regexp Matches ${vm_ip_line} [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}
+ \ ${vm_ip_length} Get Length ${vm_ip}
+ \ Run Keyword If ${vm_ip_length}>0 Append To List ${ip_list} @{vm_ip}[0]
+ \ ... ELSE Append To List ${ip_list} None
\ ${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]
+ \ Log ${dhcp_ip_line}
+ \ @{dhcp_ip} Get Regexp Matches ${dhcp_ip_line} [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}
+ \ Log ${dhcp_ip}
+ ${dhcp_length} Get Length ${dhcp_ip}
+ Return From Keyword If ${dhcp_length}==0 ${ip_list} ${EMPTY}
+ [Return] ${ip_list} @{dhcp_ip}[0]
View Vm Console
[Arguments] ${vm_instance_names}
[Documentation] Check if the session has been able to login to the VM instance and exit the instance
${rcode}= Run Keyword And Return Status Check If Console Is VmInstance cirros
Run Keyword If ${rcode} Write Commands Until Prompt exit
- Get OvsDebugInfo
Check Ping
[Arguments] ${ip_address}
Run Keyword If ${rcode} Check Metadata Access
[Teardown] Exit From Vm Console
+Install Netcat On Controller
+ [Documentation] Installs Netcat on the controller - this probably shouldn't be here
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt sudo yum install -y nc
+ Log ${output}
+ Close Connection
+
+Test Netcat Operations From Vm Instance
+ [Arguments] ${net_name} ${vm_ip} ${dest_ip} ${additional_args}=${EMPTY} ${port}=12345 ${user}=cirros
+ ... ${password}=cubswin:)
+ [Documentation] Use Netcat to test TCP/UDP connections to the controller
+ ${client_data} Set Variable Test Client Data
+ ${server_data} Set Variable Test Server Data
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ Log ${vm_ip}
+ ${output}= Write Commands Until Prompt ( ( echo "${server_data}" | sudo timeout 60 nc -l ${additional_args} ${port} ) & )
+ Log ${output}
+ ${output}= Write Commands Until Prompt sudo netstat -nlap | grep ${port}
+ Log ${output}
+ ${nc_output}= Execute Command on VM Instance ${net_name} ${vm_ip} sudo echo "${client_data}" | nc -v -w 5 ${additional_args} ${dest_ip} ${port}
+ Log ${nc_output}
+ ${output}= Execute Command on VM Instance ${net_name} ${vm_ip} sudo route -n
+ Log ${output}
+ ${output}= Execute Command on VM Instance ${net_name} ${vm_ip} sudo arp -an
+ Log ${output}
+ Should Match Regexp ${nc_output} ${server_data}
+
Ping Other Instances
[Arguments] ${list_of_external_dst_ips}
[Documentation] Check reachability with other network's instances.
Close Connection
Should Contain ${output} Created a new router
+List Router
+ [Documentation] List Router and return output with neutron client.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron router-list 30s
+ Close Connection
+ Log ${output}
+ [Return] ${output}
+
Add Router Interface
[Arguments] ${router_name} ${interface_name}
${devstack_conn_id}= Get ControlNode Connection
Close Connection
Should Contain ${output} Added interface
+Show Router Interface
+ [Arguments] ${router_name}
+ [Documentation] List Router interface associated with given Router and return output with neutron client.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron router-port-list ${router_name} -f csv 30s
+ Close Connection
+ Log ${output}
+ [Return] ${output}
+
Add Router Gateway
[Arguments] ${router_name} ${network_name}
${devstack_conn_id}= Get ControlNode Connection
Write Commands Until Expected Prompt sudo ovs-vsctl show ]>
Write Commands Until Expected Prompt sudo ovs-vsctl list Open_vSwitch ]>
Write Commands Until Expected Prompt sudo ovs-ofctl show br-int -OOpenFlow13 ]>
+ Write Commands Until Expected Prompt sudo ovs-ofctl dump-ports-desc br-int -OOpenFlow13 ]>
Write Commands Until Expected Prompt sudo ovs-ofctl dump-flows br-int -OOpenFlow13 ]>
Write Commands Until Expected Prompt sudo ovs-ofctl dump-groups br-int -OOpenFlow13 ]>
Write Commands Until Expected Prompt sudo ovs-ofctl dump-group-stats br-int -OOpenFlow13 ]>
+Get Karaf Log Type From Test Start
+ [Arguments] ${ip} ${test_name} ${type} ${user}=${ODL_SYSTEM_USER} ${password}=${ODL_SYSTEM_PASSWORD} ${prompt}=${ODL_SYSTEM_PROMPT}
+ ... ${log_file}=${WORKSPACE}/${BUNDLEFOLDER}/data/log/karaf.log
+ ${cmd} Set Variable sed '1,/ROBOT MESSAGE: Starting test ${test_name}/d' ${log_file} | grep '${type}'
+ ${output} Run Command On Controller ${ip} ${cmd} ${user} ${password} ${prompt}
+ Log ${output}
+
+Get Karaf Log Types From Test Start
+ [Arguments] ${ip} ${test_name} ${types} ${user}=${ODL_SYSTEM_USER} ${password}=${ODL_SYSTEM_PASSWORD} ${prompt}=${ODL_SYSTEM_PROMPT}
+ ... ${log_file}=${WORKSPACE}/${BUNDLEFOLDER}/data/log/karaf.log
+ : FOR ${type} IN @{types}
+ \ Get Karaf Log Type From Test Start ${ip} ${test_name} ${type} ${user} ${password}
+ \ ... ${prompt} ${log_file}
+
+Get Karaf Log Events From Test Start
+ [Arguments] ${test_name} ${user}=${ODL_SYSTEM_USER} ${password}=${ODL_SYSTEM_PASSWORD} ${prompt}=${ODL_SYSTEM_PROMPT}
+ ${log_types} = Create List ERROR WARN Exception
+ Run Keyword If 0 < ${NUM_ODL_SYSTEM} Get Karaf Log Types From Test Start ${ODL_SYSTEM_IP} ${test_name} ${log_types}
+ Run Keyword If 1 < ${NUM_ODL_SYSTEM} Get Karaf Log Types From Test Start ${ODL_SYSTEM_2_IP} ${test_name} ${log_types}
+ Run Keyword If 2 < ${NUM_ODL_SYSTEM} Get Karaf Log Types From Test Start ${ODL_SYSTEM_3_IP} ${test_name} ${log_types}
+
Get ControlNode Connection
${control_conn_id}= SSHLibrary.Open Connection ${OS_CONTROL_NODE_IP} prompt=${DEFAULT_LINUX_PROMPT_STRICT}
Utils.Flexible SSH Login ${OS_USER} ${DEVSTACK_SYSTEM_PASSWORD}
Run Keyword If 1 < ${NUM_OS_SYSTEM} Get DumpFlows And Ovsconfig ${OS_COMPUTE_1_IP}
Run Keyword If 2 < ${NUM_OS_SYSTEM} Get DumpFlows And Ovsconfig ${OS_COMPUTE_2_IP}
+Get Test Teardown Debugs
+ [Arguments] ${test_name}=${TEST_NAME}
+ Get OvsDebugInfo
+ Get Model Dump ${HA_PROXY_IP}
+ Get Karaf Log Events From Test Start ${test_name}
+
Show Debugs
[Arguments] @{vm_indices}
[Documentation] Run these commands for debugging, it can list state of VM instances and ip information in control node
\ ${output}= Write Commands Until Prompt nova show ${index} 30s
\ Log ${output}
Close Connection
+ List Nova VMs
List Networks
List Subnets
List Ports