X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=csit%2Flibraries%2FOpenStackOperations.robot;h=8005a9331a102d290c56a865bcd9ba8dfe410647;hb=c7922ef3cd9bc1b5ec052e68cdf666bf7b62a65b;hp=bad852df2dae537a9ece3c9c929c5df49f681786;hpb=ba3570eb46b8290169c90a79c451e2b77bf23e5a;p=integration%2Ftest.git diff --git a/csit/libraries/OpenStackOperations.robot b/csit/libraries/OpenStackOperations.robot index bad852df2d..8005a9331a 100644 --- a/csit/libraries/OpenStackOperations.robot +++ b/csit/libraries/OpenStackOperations.robot @@ -1,10 +1,11 @@ *** 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 @@ -37,6 +38,26 @@ Create Network 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 @@ -75,6 +96,26 @@ Create SubNet 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. @@ -85,6 +126,26 @@ Create Port 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. @@ -231,6 +292,25 @@ Create Vm Instances \ ${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} @@ -279,6 +359,26 @@ Collect VM IP Addresses 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. @@ -315,12 +415,12 @@ Ping From DHCP Should Not Succeed 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 @@ -355,9 +455,11 @@ Exit From Vm Console 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 @@ -382,7 +484,7 @@ Execute Command on VM Instance [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} @@ -395,23 +497,16 @@ Test Operations From Vm Instance ${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:) @@ -582,12 +677,12 @@ Get OvsDebugInfo 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} @@ -858,3 +953,143 @@ Create And Configure Security Group 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