*** Keywords ***
Source Password
- [Arguments] ${force}=no
+ [Arguments] ${force}=no ${source_pwd}=yes
[Documentation] Sourcing the Openstack PAsswords for neutron configurations
Run Keyword If '${source_pwd}' == 'yes' or '${force}' == 'yes' Write Commands Until Prompt cd ${DEVSTACK_DEPLOY_PATH}; source openrc admin admin
+Get Tenant ID From Security Group
+ [Documentation] Returns tenant ID by reading it from existing default security-group.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron security-group-show default | grep "| tenant_id" | awk '{print $4}'
+ Log ${output}
+ [Return] ${output}
+
Create Network
- [Arguments] ${network_name}
+ [Arguments] ${network_name} ${additional_args}=${EMPTY} ${verbose}=TRUE
[Documentation] Create Network with neutron request.
- ${devstack_conn_id}= Get ControlNode Connection
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${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}'
+ ${output}= Write Commands Until Prompt ${command} 30s
+ Log ${output}
+ [Return] ${output}
+
+List Networks
+ [Documentation] List networks and return output with neutron client.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron net-list 30s
+ Close Connection
+ Log ${output}
+ [Return] ${output}
+
+List Subnets
+ [Documentation] List subnets and return output with neutron client.
+ ${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
- ${output}= Write Commands Until Prompt neutron -v net-create ${network_name} 30s
+ ${output}= Write Commands Until Prompt neutron subnet-list 30s
Close Connection
Log ${output}
- Should Contain ${output} Created a new network
+ [Return] ${output}
Delete Network
[Arguments] ${network_name}
[Documentation] Delete Network with neutron request.
- ${devstack_conn_id}= Get ControlNode Connection
+ ${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
- ${output}= Write Commands Until Prompt neutron -v net-delete ${network_name} 30s
+ ${output}= Write Commands Until Prompt neutron -v net-delete ${network_name} 30s
Close Connection
Log ${output}
Should Contain ${output} Deleted network: ${network_name}
Create SubNet
[Arguments] ${network_name} ${subnet} ${range_ip}
[Documentation] Create SubNet for the Network with neutron request.
- ${devstack_conn_id}= Get ControlNode Connection
+ ${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
Close Connection
Log ${output}
Should Contain ${output} Created a new subnet
+Create Port
+ [Arguments] ${network_name} ${port_name}
+ [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
+ Close Connection
+ Log ${output}
+ Should Contain ${output} Created a new port
+
+Delete Port
+ [Arguments] ${port_name}
+ [Documentation] Delete Port with neutron request.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron -v port-delete ${port_name} 30s
+ Close Connection
+ Log ${output}
+ Should Contain ${output} Deleted port: ${port_name}
+
+List Ports
+ [Documentation] List ports and return output with neutron client.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron port-list 30s
+ Close Connection
+ Log ${output}
+ [Return] ${output}
+
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
[Arguments] ${subnet}
[Documentation] Delete SubNet for the Network with neutron request.
Log ${subnet}
- ${devstack_conn_id}= Get ControlNode Connection
+ ${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
${output}= Write Commands Until Prompt neutron -v subnet-delete ${subnet}
Close Connection
Delete Vm Instance
[Arguments] ${vm_name}
[Documentation] Delete Vm instances using instance names.
- ${devstack_conn_id}= Get ControlNode Connection
+ ${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
- ${output}= Write Commands Until Prompt nova force-delete ${vm_name} 40s
+ ${output}= Write Commands Until Prompt nova force-delete ${vm_name} 40s
Close Connection
Get Net Id
- [Arguments] ${network_name} ${connection_id}
+ [Arguments] ${network_name} ${devstack_conn_id}
[Documentation] Retrieve the net id for the given network name to create specific vm instance
- Switch Connection ${connection_id}
- ${output}= Write Commands Until Prompt neutron net-list | grep "${network_name}" | get_field 1
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron net-list | grep "${network_name}" | awk '{print $2}' 30s
Log ${output}
${splitted_output}= Split String ${output} ${EMPTY}
${net_id}= Get from List ${splitted_output} 0
Log ${net_id}
[Return] ${net_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
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron port-list | grep "${port_name}" | awk '{print $2}' 30s
+ Log ${output}
+ ${splitted_output}= Split String ${output} ${EMPTY}
+ ${port_id}= Get from List ${splitted_output} 0
+ Log ${port_id}
+ [Return] ${port_id}
+
+Get Router Id
+ [Arguments] ${router1} ${devstack_conn_id}
+ [Documentation] Retrieve the net id for the given network name to create specific vm instance
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron router-list | grep "${router1}" | awk '{print $2}' 30s
+ Log ${output}
+ ${splitted_output}= Split String ${output} ${EMPTY}
+ ${router_id}= Get from List ${splitted_output} 0
+ Log ${router_id}
+ [Return] ${router_id}
+
Create Vm Instances
- [Arguments] ${net_name} ${vm_instance_names} ${image}=cirros-0.3.4-x86_64-uec ${flavor}=m1.nano
+ [Arguments] ${net_name} ${vm_instance_names} ${image}=cirros-0.3.4-x86_64-uec ${flavor}=m1.nano ${sg}=default
[Documentation] Create X Vm Instance with the net id of the Netowrk.
- ${devstack_conn_id}= Get ControlNode Connection
+ ${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
${net_id}= Get Net Id ${net_name} ${devstack_conn_id}
: FOR ${VmElement} IN @{vm_instance_names}
- \ ${output}= Write Commands Until Prompt nova boot --image ${image} --flavor ${flavor} --nic net-id=${net_id} ${VmElement}
+ \ ${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
+ [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
+ 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.
- ${output}= Write Commands Until Prompt nova show ${vm_name} | grep OS-EXT-STS:vm_state
+ ${output}= Write Commands Until Prompt nova show ${vm_name} | grep OS-EXT-STS:vm_state 30s
Log ${output}
Should Contain ${output} active
[Arguments] ${net_name} ${vm_ip}
[Documentation] Reach all Vm Instance with the net id of the Netowrk.
Log ${vm_ip}
- ${devstack_conn_id}= Get ControlNode Connection
+ ${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
- ${net_id}= Get Net Id ${net_name} ${devstack_conn_id}
+ ${net_id}= Get Net Id ${net_name} ${devstack_conn_id}
Log ${net_id}
${output}= Write Commands Until Prompt sudo ip netns exec qdhcp-${net_id} ping -c 3 ${vm_ip} 20s
Log ${output}
[Arguments] ${net_name} ${vm_ip}
[Documentation] Should Not Reach Vm Instance with the net id of the Netowrk.
Log ${vm_ip}
- ${devstack_conn_id}= Get ControlNode Connection
+ ${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
- ${net_id}= Get Net Id ${net_name} ${devstack_conn_id}
+ ${net_id}= Get Net Id ${net_name} ${devstack_conn_id}
Log ${net_id}
${output}= Write Commands Until Prompt sudo ip netns exec qdhcp-${net_id} ping -c 3 ${vm_ip} 20s
Close Connection
[Arguments] ${net_name} ${src_ip} ${list_of_local_dst_ips} ${l2_or_l3}=l2 ${list_of_external_dst_ips}=${NONE} ${user}=cirros
... ${password}=cubswin:)
[Documentation] Login to the vm instance using ssh in the network.
- ${devstack_conn_id}= Get ControlNode Connection
+ ${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
- ${net_id}= Get Net Id ${net_name} ${devstack_conn_id}
+ ${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:
Log ${output}
${output}= Write Commands Until Expected Prompt ${password} ${OS_SYSTEM_PROMPT}
${rcode}= Run Keyword And Return Status Check If Console Is VmInstance
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}
Create Router
[Arguments] ${router_name}
[Documentation] Create Router and Add Interface to the subnets.
- ${devstack_conn_id}= Get ControlNode Connection
+ ${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
${output}= Write Commands Until Prompt neutron -v router-create ${router_name} 30s
Close Connection
Add Router Interface
[Arguments] ${router_name} ${interface_name}
- ${devstack_conn_id}= Get ControlNode Connection
+ ${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
${output}= Write Commands Until Prompt neutron -v router-interface-add ${router_name} ${interface_name}
Close Connection
Remove Interface
[Arguments] ${router_name} ${interface_name}
[Documentation] Remove Interface to the subnets.
- ${devstack_conn_id}= Get ControlNode Connection
+ ${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
${output}= Write Commands Until Prompt neutron -v router-interface-delete ${router_name} ${interface_name}
Close Connection
Delete Router
[Arguments] ${router_name}
[Documentation] Delete Router and Interface to the subnets.
- ${devstack_conn_id}= Get ControlNode Connection
+ ${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
- ${output}= Write Commands Until Prompt neutron -v router-delete ${router_name}
+ ${output}= Write Commands Until Prompt neutron -v router-delete ${router_name} 60s
Close Connection
Should Contain ${output} Deleted router:
SSHLibrary.Open Connection ${openstack_node_ip} prompt=${DEFAULT_LINUX_PROMPT}
Utils.Flexible SSH Login ${OS_USER} ${DEVSTACK_SYSTEM_PASSWORD}
SSHLibrary.Set Client Configuration timeout=${default_devstack_prompt_timeout}
+ Write Commands Until Expected Prompt ip -o link ]>
+ Write Commands Until Expected Prompt ip -o addr ]>
+ Write Commands Until Expected Prompt ip route ]>
+ Write Commands Until Expected Prompt arp -an ]>
+ ${nslist}= Write Commands Until Expected Prompt ip netns list | awk '{print $1}' ]>
+ @{lines} Split To Lines ${nslist}
+ : FOR ${line} IN @{lines}
+ \ Write Commands Until Expected Prompt sudo ip netns exec ${line} ip -o link ]>
+ \ Write Commands Until Expected Prompt sudo ip netns exec ${line} ip -o addr ]>
+ \ Write Commands Until Expected Prompt sudo ip netns exec ${line} ip route ]>
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-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 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}
SSHLibrary.Set Client Configuration timeout=30s
- Source Password force=yes
+ Source Password force=yes
[Return] ${control_conn_id}
Get OvsDebugInfo
Show Debugs
[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}
${output}= Write Commands Until Prompt sudo ip netns list
Log ${output}
: FOR ${index} IN @{vm_indices}
- \ ${output}= Write Commands Until Prompt nova show ${index}
+ \ ${output}= Write Commands Until Prompt nova show ${index} 30s
\ Log ${output}
Close Connection
+ List Networks
+ List Subnets
+ List Ports
+
+Create Security Group
+ [Arguments] ${sg_name} ${desc}
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt nova secgroup-create ${sg_name} ${desc} 40s
+ Close Connection
+
+Create Security Rule
+ [Arguments] ${direction} ${protocol} ${min_port} ${max_port} ${remote_ip} ${sg_name}
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${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}
+ Close Connection