*** Settings ***
Documentation Openstack library. This library is useful for tests to create network, subnet, router and vm instances
Library SSHLibrary
-Resource Netvirt.robot
+Resource DataModels.robot
Resource Utils.robot
Resource L2GatewayOperations.robot
Resource ../variables/Variables.robot
+Variables ../variables/netvirt/Modules.py
*** Keywords ***
Source Password
Log ${output}
[Return] ${output}
+Update Network
+ [Arguments] ${network_name} ${additional_args}=${EMPTY}
+ [Documentation] Update Network with neutron request.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron -v net-update ${network_name} ${additional_args} 30s
+ Log ${output}
+ Close Connection
+ [Return] ${output}
+
+Show Network
+ [Arguments] ${network_name}
+ [Documentation] Show Network with neutron request.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron -v net-show ${network_name} 30s
+ Log ${output}
+ Close Connection
+ [Return] ${output}
+
List Networks
[Documentation] List networks and return output with neutron client.
${devstack_conn_id}= Get ControlNode Connection
Log ${output}
Should Contain ${output} Created a new subnet
+Update SubNet
+ [Arguments] ${subnet_name} ${additional_args}=${EMPTY}
+ [Documentation] Update subnet with neutron request.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron -v subnet-update ${subnet_name} ${additional_args} 30s
+ Log ${output}
+ Close Connection
+ [Return] ${output}
+
+Show SubNet
+ [Arguments] ${subnet_name}
+ [Documentation] Show subnet with neutron request.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron -v subnet-show ${subnet_name} 30s
+ Log ${output}
+ Close Connection
+ [Return] ${output}
+
Create Port
[Arguments] ${network_name} ${port_name} ${sg}=default ${additional_args}=${EMPTY}
[Documentation] Create Port with neutron request.
Log ${output}
Should Contain ${output} Created a new port
+Update Port
+ [Arguments] ${port_name} ${additional_args}=${EMPTY}
+ [Documentation] Update port with neutron request.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron -v port-update ${port_name} ${additional_args} 30s
+ Log ${output}
+ Close Connection
+ [Return] ${output}
+
+Show Port
+ [Arguments] ${port_name}
+ [Documentation] Show port with neutron request.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron -v port-show ${port_name} 30s
+ Log ${output}
+ Close Connection
+ [Return] ${output}
+
Delete Port
[Arguments] ${port_name}
[Documentation] Delete Port with neutron request.
\ ${output}= Write Commands Until Prompt nova boot --image ${image} --flavor ${flavor} --nic net-id=${net_id} ${VmElement} --security-groups ${sg} 30s
\ Log ${output}
+Create Vm Instance With Port
+ [Arguments] ${port_name} ${vm_instance_name} ${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}
+ ${output}= Write Commands Until Prompt nova boot --image ${image} --flavor ${flavor} --nic port-id=${port_id} ${vm_instance_name} --security-groups ${sg} 30s
+ Log ${output}
+
+Create Vm Instance With Ports
+ [Arguments] ${port_name} ${port2_name} ${vm_instance_name} ${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}
+ ${port2_id}= Get Port Id ${port2_name} ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt nova boot --image ${image} --flavor ${flavor} --nic port-id=${port_id} --nic port-id=${port2_id} ${vm_instance_name} --security-groups ${sg} 30s
+ Log ${output}
+
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 ${sg}=default
[Documentation] Create One VM instance using given ${port_name} and for given ${compute_node}
Return From Keyword If ${dhcp_length}==0 ${ip_list} ${EMPTY}
[Return] ${ip_list} ${dhcp_ip}
+Collect VM IPv6 SLAAC Addresses
+ [Arguments] ${fail_on_none} ${prefix} @{vm_list}
+ [Documentation] Using nova console-log on the provided ${vm_list} to search for the string "inet6" which
+ ... correlates to the instance generated IPv6 address, based on the ${prefix} received from ODL (SLAAC mode).
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${ip_list} Create List @{EMPTY}
+ : FOR ${vm} IN @{vm_list}
+ \ Log ${vm}
+ \ ${vm_ip_line}= Write Commands Until Prompt nova console-log ${vm} | grep -i "inet6" 30s
+ \ Log ${vm_ip_line}
+ \ @{vm_ip_list} Get Regexp Matches ${vm_ip_line} ${prefix}
+ \ ${vm_ip_length} Get Length ${vm_ip_list}
+ \ Run Keyword If ${vm_ip_length}>0 Append To List ${ip_list} @{vm_ip_list}[0]
+ \ ... ELSE Append To List ${ip_list} None
+ \ Log ${ip_list}
+ Run Keyword If '${fail_on_none}' == 'true' Should Not Contain ${ip_list} None
+ Log ${ip_list}
+ [Return] ${ip_list}
+
View Vm Console
[Arguments] ${vm_instance_names}
[Documentation] View Console log of the created vm instances using nova show.
Should Not Contain ${output} 64 bytes
Ping Vm From Control Node
- [Arguments] ${vm_floating_ip}
+ [Arguments] ${vm_floating_ip} ${additional_args}=${EMPTY}
[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
+ ${output}= Write Commands Until Prompt ping ${additional_args} -c 3 ${vm_floating_ip} 20s
Log ${output}
Close Connection
Should Contain ${output} 64 bytes
Run Keyword If ${rcode} Write Commands Until Prompt exit
Check Ping
- [Arguments] ${ip_address}
+ [Arguments] ${ip_address} ${ttl}=64
[Documentation] Run Ping command on the IP available as argument
- ${output}= Write Commands Until Expected Prompt ping -c 3 ${ip_address} ${OS_SYSTEM_PROMPT}
+ ${ethertype}= Get Regexp Matches ${ip_address} ${IP_REGEX}
+ ${output}= Run Keyword If ${ethertype} Write Commands Until Expected Prompt ping -t ${ttl} -c 3 ${ip_address} ${OS_SYSTEM_PROMPT}
+ ... ELSE Write Commands Until Expected Prompt ping6 -t ${ttl} -c 3 ${ip_address} ${OS_SYSTEM_PROMPT}
Should Contain ${output} 64 bytes
Check Metadata Access
[Return] ${output}
Test Operations From Vm Instance
- [Arguments] ${net_name} ${src_ip} ${dest_ips} ${user}=cirros ${password}=cubswin:)
+ [Arguments] ${net_name} ${src_ip} ${dest_ips} ${user}=cirros ${password}=cubswin:) ${ttl}=64
[Documentation] Login to the vm instance using ssh in the network.
${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
${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 route -A inet6 ${OS_SYSTEM_PROMPT}
Run Keyword If ${rcode} Write Commands Until Expected Prompt arp -an ${OS_SYSTEM_PROMPT}
: 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 Ping ${dest_ip} ttl=${ttl}
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:)
Get Test Teardown Debugs
[Arguments] ${test_name}=${TEST_NAME}
Get OvsDebugInfo
- Run Keyword And Ignore Error Get Model Dump ${HA_PROXY_IP}
+ Run Keyword And Ignore Error Get Model Dump ${HA_PROXY_IP} ${netvirt_data_models}
Get Karaf Log Events From Test Start ${test_name}
Get Suite Teardown Debugs
Get OvsDebugInfo
- Get Model Dump ${HA_PROXY_IP}
+ Get Model Dump ${HA_PROXY_IP} ${netvirt_data_models}
Show Debugs
[Arguments] @{vm_indices}
Neutron Security Group Rule Create ${sg-name} direction=egress protocol=icmp remote_ip_prefix=0.0.0.0/0
Neutron Security Group Rule Create ${sg-name} direction=ingress port_range_max=65535 port_range_min=1 protocol=udp remote_ip_prefix=0.0.0.0/0
Neutron Security Group Rule Create ${sg-name} direction=egress port_range_max=65535 port_range_min=1 protocol=udp remote_ip_prefix=0.0.0.0/0
+
+Create SFC Flow Classifier
+ [Arguments] ${name} ${src_ip} ${dest_ip} ${protocol} ${dest_port} ${neutron_src_port}
+ [Documentation] Create a flow classifier for SFC
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${cmd}= Set Variable neutron flow-classifier-create --ethertype IPv4 --source-ip-prefix ${src_ip}/32 --destination-ip-prefix ${dest_ip}/32 --protocol ${protocol} --destination-port ${dest_port}:${dest_port} --logical-source-port ${neutron_src_port} ${name}
+ Log ${cmd}
+ ${output}= Write Commands Until Prompt ${cmd} 30s
+ Log ${output}
+ Close Connection
+ Should Contain ${output} Created a new flow_classifier
+ [Return] ${output}
+
+Delete SFC Flow Classifier
+ [Arguments] ${name}
+ [Documentation] Delete a SFC flow classifier
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${cmd}= Set Variable neutron flow-classifier-delete ${name}
+ Log ${cmd}
+ ${output}= Write Commands Until Prompt ${cmd} 30s
+ Log ${output}
+ Close Connection
+ Should Contain ${output} Deleted flow_classifier
+ [Return] ${output}
+
+Create SFC Port Pair
+ [Arguments] ${name} ${port_in} ${port_out}
+ [Documentation] Creates a neutron port pair for SFC
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${cmd}= Set Variable neutron port-pair-create --ingress=${port_in} --egress=${port_out} ${name}
+ Log ${cmd}
+ ${output}= Write Commands Until Prompt ${cmd} 30s
+ Log ${output}
+ Close Connection
+ Should Contain ${output} Created a new port_pair
+ [Return] ${output}
+
+Delete SFC Port Pair
+ [Arguments] ${name}
+ [Documentation] Delete a SFC port pair
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${cmd}= Set Variable neutron port-pair-delete ${name}
+ Log ${cmd}
+ ${output}= Write Commands Until Prompt ${cmd} 30s
+ Log ${output}
+ Close Connection
+ Should Contain ${output} Deleted port_pair
+ [Return] ${output}
+
+Create SFC Port Pair Group
+ [Arguments] ${name} ${port_pair}
+ [Documentation] Creates a port pair group with a single port pair for SFC
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${cmd}= Set Variable neutron port-pair-group-create --port-pair ${port_pair} ${name}
+ Log ${cmd}
+ ${output}= Write Commands Until Prompt ${cmd} 30s
+ Log ${output}
+ Close Connection
+ Should Contain ${output} Created a new port_pair_group
+ [Return] ${output}
+
+Create SFC Port Pair Group With Two Pairs
+ [Arguments] ${name} ${port_pair1} ${port_pair2}
+ [Documentation] Creates a port pair group with two port pairs for SFC
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${cmd}= Set Variable neutron port-pair-group-create --port-pair ${port_pair1} --port-pair ${port_pair2} ${name}
+ Log ${cmd}
+ ${output}= Write Commands Until Prompt ${cmd} 30s
+ Log ${output}
+ Close Connection
+ Should Contain ${output} Created a new port_pair_group
+ [Return] ${output}
+
+Delete SFC Port Pair Group
+ [Arguments] ${name}
+ [Documentation] Delete a SFC port pair group
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${cmd}= Set Variable neutron port-pair-group-delete ${name}
+ Log ${cmd}
+ ${output}= Write Commands Until Prompt ${cmd} 30s
+ Log ${output}
+ Close Connection
+ Should Contain ${output} Deleted port_pair_group
+ [Return] ${output}
+
+Create SFC Port Chain
+ [Arguments] ${name} ${pg1} ${pg2} ${fc}
+ [Documentation] Creates a port pair chain with two port groups and a singel classifier.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${cmd}= Set Variable neutron port-chain-create --port-pair-group ${pg1} --port-pair-group ${pg2} --flow-classifier ${fc} ${name}
+ Log ${cmd}
+ ${output}= Write Commands Until Prompt ${cmd} 30s
+ Log ${output}
+ Close Connection
+ Should Contain ${output} Created a new port_chain
+ [Return] ${output}
+
+Delete SFC Port Chain
+ [Arguments] ${name}
+ [Documentation] Delete a SFC port chain
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${cmd}= Set Variable neutron port-chain-delete ${name}
+ Log ${cmd}
+ ${output}= Write Commands Until Prompt ${cmd} 30s
+ Log ${output}
+ Close Connection
+ Should Contain ${output} Deleted port_chain
+ [Return] ${output}
+
+Reboot Nova VM
+ [Arguments] ${vm_name}
+ [Documentation] Reboot NOVA VM
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt nova reboot --poll ${vm_name} 30s
+ Log ${output}
+ Wait Until Keyword Succeeds 35s 10s Verify VM Is ACTIVE ${vm_name}
+ Close Connection
+
+Remove RSA Key From KnowHosts
+ [Arguments] ${vm_ip}
+ [Documentation] Remove RSA
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt sudo cat /root/.ssh/known_hosts 30s
+ Log ${output}
+ ${output}= Write Commands Until Prompt sudo ssh-keygen -f "/root/.ssh/known_hosts" -R ${vm_ip} 30s
+ Log ${output}
+ ${output}= Write Commands Until Prompt sudo cat "/root/.ssh/known_hosts" 30s
+ Log ${output}
+ Close Connection