X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=csit%2Flibraries%2FOpenStackOperations.robot;h=ae6393a9c2f61e0c447c21c814b30177e8b38be3;hb=c6740c77a4706a11379d2b074fc5d380a610d9af;hp=6f050e5838cf6c2006f3ba1551a24cdc6476c5d6;hpb=e6d452636b85c2ac4b81df1ac2210d015eac2c5c;p=integration%2Ftest.git diff --git a/csit/libraries/OpenStackOperations.robot b/csit/libraries/OpenStackOperations.robot index 6f050e5838..ae6393a9c2 100644 --- a/csit/libraries/OpenStackOperations.robot +++ b/csit/libraries/OpenStackOperations.robot @@ -20,6 +20,10 @@ Resource ../variables/Variables.robot Resource ../variables/netvirt/Variables.robot Variables ../variables/netvirt/Modules.py +*** Variables *** +@{VALIDATION_KEYWORDS} Verify Services Verify Expected Default Tunnels Verify Expected Default Tables On Nodes +${VALIDATION_FILE} /tmp/validations.txt + *** Keywords *** Get Tenant ID From Security Group [Documentation] Returns tenant ID by reading it from existing default security-group. @@ -199,10 +203,39 @@ Get Router Id ${router_id} = Collections.Get from List ${splitted_output} 0 [Return] ${router_id} +Add New Image From Url + [Arguments] ${image_url} ${image_name} + [Documentation] To add new qcow2 images for testing. + ${rc} ${output} = OperatingSystem.Run And Return Rc And Output wget ${image_url} -O /tmp/new_image.qcow2 + BuiltIn.Log ${output} + BuiltIn.Should Be True '${rc}' == '0' + ${output} = OpenStack CLI openstack image create ${image_name} --file /tmp/new_image.qcow2 --disk-format qcow2 --container-format bare --public + +Create Flavor + [Arguments] ${flavor_name} ${ram_in_mb} ${disk_in_gb} ${ncpu}=1 + [Documentation] To create new flavors for instance deployment and testing + ${output} = OpenStack CLI openstack flavor create ${flavor_name} --ram ${ram_in_mb} --disk ${disk_in_gb} --vcpus ${ncpu} + +Create Keypair + [Arguments] ${keyname} ${public_key_file} + [Documentation] To add keypairs to Openstack that can be used when ssh to instances using publickey authentication + ${output} = OpenStack CLI openstack keypair create ${keyname} --public-key ${public_key_file} + +Generate And Add Keypair + [Arguments] ${keyname} ${keyfilename} + [Documentation] To generate keypair using ssh-keygen and add them to Openstack + ${result} = Process.Run Process ssh-keygen -b 2048 -t rsa -f ${JENKINS_WORKSPACE}/${keyfilename} -q -N "" shell=True + BuiltIn.Log ${result.stdout} + BuiltIn.Log ${result.stderr} + BuiltIn.Should Be True '${result.rc}' == '0' + OpenStackOperations.Create Keypair ${keyname} ${JENKINS_WORKSPACE}/${keyfilename}.pub + OpenStackOperations.Get ControlNode Connection + SSHLibrary.Put_File ${JENKINS_WORKSPACE}/${keyfilename} /tmp + Create Vm Instances [Arguments] ${net_name} ${vm_instance_names} ${image}=${EMPTY} ${flavor}=m1.nano ${sg}=default ${min}=1 - ... ${max}=1 [Documentation] Create X Vm Instance with the net id of the Netowrk. + .. ${max}=1 ${image} BuiltIn.Set Variable If "${image}"=="${EMPTY}" ${CIRROS_${OPENSTACK_BRANCH}} ${image} ${net_id} = OpenStackOperations.Get Net Id ${net_name} : FOR ${vm} IN @{vm_instance_names} @@ -219,28 +252,30 @@ Create Vm Instance With Port [Arguments] ${port_name} ${vm_instance_name} ${image}=${EMPTY} ${flavor}=m1.nano ${sg}=default [Documentation] Create One VM instance using given ${port_name} and for given ${compute_node} ${image} = BuiltIn.Set Variable If "${image}"=="${EMPTY}" ${CIRROS_${OPENSTACK_BRANCH}} ${image} - ${port_id} = OpenStackOperations.Get Port Id ${port_name} - ${output} = OpenStack CLI openstack server create --image ${image} --flavor ${flavor} --nic port-id=${port_id} ${vm_instance_name} --security-group ${sg} + ${output} = OpenStack CLI openstack server create --image ${image} --flavor ${flavor} --port ${port_name} --security-group ${sg} ${vm_instance_name} -Create Vm Instance With Ports - [Arguments] ${port_name} ${port2_name} ${vm_instance_name} ${image}=${EMPTY} ${flavor}=m1.nano ${sg}=default - [Documentation] Create One VM instance using given ${port_name} and for given ${compute_node} +Create Vm Instance With Ports And Key On Compute Node + [Arguments] ${port1_name} ${port2_name} ${vm_instance_name} ${node_hostname} ${image}=${EMPTY} ${flavor}=m1.nano + ... ${sg}=default ${keyname}=${EMPTY} + [Documentation] Create One VM instance using given ${port1_name} and ${port2_name} with keyname for ssh and also on a specific compute node ${image} BuiltIn.Set Variable If "${image}"=="${EMPTY}" ${CIRROS_${OPENSTACK_BRANCH}} ${image} - ${port_id} = OpenStackOperations.Get Port Id ${port_name} - ${port2_id} = OpenStackOperations.Get Port Id ${port2_name} - ${output} = OpenStack CLI openstack server create --image ${image} --flavor ${flavor} --nic port-id=${port_id} --nic port-id=${port2_id} ${vm_instance_name} --security-group ${sg} + ${output} = OpenStack CLI openstack server create --image ${image} --flavor ${flavor} --port ${port1_name} --port ${port2_name} ${vm_instance_name} --security-group ${sg} --availability-zone nova:${node_hostname} --key-name ${keyname} Create Vm Instance With Port On Compute Node [Arguments] ${port_name} ${vm_instance_name} ${node_hostname} ${image}=${EMPTY} ${flavor}=m1.nano ${sg}=default [Documentation] Create One VM instance using given ${port_name} and for given ${node_hostname} ${image} = BuiltIn.Set Variable If "${image}"=="${EMPTY}" ${CIRROS_${OPENSTACK_BRANCH}} ${image} - ${port_id} = OpenStackOperations.Get Port Id ${port_name} - ${output} = OpenStack CLI openstack server create --image ${image} --flavor ${flavor} --nic port-id=${port_id} --security-group ${sg} --availability-zone nova:${node_hostname} ${vm_instance_name} + ${output} = OpenStack CLI openstack server create --image ${image} --flavor ${flavor} --port ${port_name} --security-group ${sg} --availability-zone nova:${node_hostname} ${vm_instance_name} + +Remove Security Group From Vm Instance + [Arguments] ${vm_instance_name} ${security_group} + [Documentation] Delete the Security Group from the VM Instance. + ${output} = OpenStack CLI openstack server remove security group ${vm_instance_name} ${security_group} Create Vm Instance With Ports On Compute Node [Arguments] ${port1_name} ${port2_name} ${vm_instance_name} ${node_hostname} ${image}=${EMPTY} ${flavor}=m1.nano ... ${sg}=default - [Documentation] Create One VM instance using given ${port1_name}, ${port2_name} and for given ${node_hostname} + [Documentation] Create One VM instance using given ${port1_name}, ${port2_name} and for given ${node_hostname} with no keys (cirros like) ${image} = BuiltIn.Set Variable If "${image}"=="${EMPTY}" ${CIRROS_${OPENSTACK_BRANCH}} ${image} ${port1_id} = OpenStackOperations.Get Port Id ${port1_name} ${port2_id} = OpenStackOperations.Get Port Id ${port2_name} @@ -293,6 +328,29 @@ Get VM IP BuiltIn.Run Keyword If '${fail_on_none}' == 'true' BuiltIn.Should Not Contain ${dhcp_ip} None [Return] ${vm_ip} ${dhcp_ip} ${vm_console_output} +Verify If Instance Is Arpingable From DHCP Namespace + [Arguments] ${net_name} ${mac} ${ip} + [Documentation] Get the Port IP and check the arp -a from DHCP NS to ensure that the VM's have been assigned IP's + OpenStackOperations.Get ControlNode Connection + ${net_id} = OpenStackOperations.Get Net Id ${net_name} + ${output} = Utils.Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} arping ${ip} -c3 ${DEFAULT_LINUX_PROMPT_STRICT} timeout=60s + ${mac_uppercase} = String.Convert To Upper Case ${mac} + BuiltIn.Should Contain ${output} [${mac_uppercase}] + +Check If Instance Is Ready For Ssh Login Using PublicKey + [Arguments] ${net_name} ${vm_ip} ${user}=centos ${idfile}=/tmp/odlkey ${console}=cirros + [Documentation] Ensure the VM is reachable from ssh as tests would require. This keyword will use publickey authentication + ${output} = Execute Command on VM Instance with PublicKey Auth ${net_name} ${vm_ip} ifconfig user=${user} idfile=${idfile} + ... console=${console} + BuiltIn.Should Contain ${output} ${vm_ip} + +Check If Instance Is Ready For Ssh Login Using Password + [Arguments] ${net_name} ${vm_ip} ${user}=cirros ${password}=cubswin:) ${console}=cirros + [Documentation] Ensure the VM is reachable from ssh as tests would require. This keyword will use password authentication + ${output} = Execute Command on VM Instance ${net_name} ${vm_ip} ifconfig ${user} ${password} + ... console=${console} + BuiltIn.Should Contain ${output} ${vm_ip} + Get VM IPs [Arguments] @{vms} [Documentation] Get the instance IP addresses and nameserver address for the list of given vms. @@ -396,16 +454,19 @@ Check If Console Is VmInstance BuiltIn.Should Contain ${output} ${console} Exit From Vm Console + [Arguments] ${console}=cirros [Documentation] Check if the session has been able to login to the VM instance and exit the instance - ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance cirros + ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance ${console} BuiltIn.Run Keyword If ${rcode} DevstackUtils.Write Commands Until Prompt exit Check Ping - [Arguments] ${ip_address} ${ttl}=64 + [Arguments] ${ip_address} ${ttl}=64 ${ping_tries}=3 [Documentation] Run Ping command on the IP available as argument ${ethertype} = String.Get Regexp Matches ${ip_address} ${IP_REGEX} - ${output} = BuiltIn.Run Keyword If ${ethertype} Utils.Write Commands Until Expected Prompt ping -t ${ttl} -c 3 ${ip_address} ${OS_SYSTEM_PROMPT} - ... ELSE Utils.Write Commands Until Expected Prompt ping6 -t ${ttl} -c 3 ${ip_address} ${OS_SYSTEM_PROMPT} + ${ping} = BuiltIn.Set Variable If ${ethertype} ping ping6 + ${cmd} = BuiltIn.Set Variable rc=0; for count in `seq 1 ${ping_tries}`; do ${ping} -W1 -t${ttl} -c1 ${ip_address}; rc=$?; if [ $rc -eq 0 ]; then break; fi; done; echo ping_rc=$rc + ${output} = Utils.Write Commands Until Expected Regexp ${cmd} ping_rc=\\d+ 120 + BuiltIn.Log output: ${output} BuiltIn.Should Contain ${output} 64 bytes Check No Ping @@ -420,26 +481,46 @@ Check Metadata Access BuiltIn.Should Contain ${output} 200 Execute Command on VM Instance - [Arguments] ${net_name} ${vm_ip} ${cmd} ${user}=cirros ${password}=cubswin:) + [Arguments] ${net_name} ${vm_ip} ${cmd} ${user}=cirros ${password}=cubswin:) ${cmd_timeout}=30s + ... ${console}=cirros [Documentation] Login to the vm instance using ssh in the network, executes a command inside the VM and returns the ouput. OpenStackOperations.Get ControlNode Connection ${net_id} = OpenStackOperations.Get Net Id ${net_name} - ${output} = Utils.Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} ssh ${user}@${vm_ip} -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null password: + ${output} = Utils.Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} ssh ${user}@${vm_ip} -o MACs=hmac-sha1 -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PreferredAuthentications=password password: ${output} = Utils.Write Commands Until Expected Prompt ${password} ${OS_SYSTEM_PROMPT} - ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance + ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance ${console} + ${output} = BuiltIn.Run Keyword If ${rcode} Utils.Write Commands Until Expected Prompt ${cmd} ${OS_SYSTEM_PROMPT} timeout=${cmd_timeout} + [Teardown] Exit From Vm Console ${console} + [Return] ${output} + +Execute Command on VM Instance With PublicKey Auth + [Arguments] ${net_name} ${vm_ip} ${cmd} ${user}=centos ${idfile}=/tmp/odlkey ${console}=cirros + [Documentation] Login to the vm instance using ssh publickey in the network, executes a command inside the VM and returns the ouput. + OpenStackOperations.Get ControlNode Connection + ${net_id} = OpenStackOperations.Get Net Id ${net_name} + ${output} = Utils.Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} ssh -i ${idfile} ${user}@${vm_ip} -o MACs=hmac-sha1 -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PreferredAuthentications=publickey prompt=${OS_SYSTEM_PROMPT} timeout=60s + ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance ${console} ${output} = BuiltIn.Run Keyword If ${rcode} Utils.Write Commands Until Expected Prompt ${cmd} ${OS_SYSTEM_PROMPT} - [Teardown] Exit From Vm Console + [Teardown] Exit From Vm Console ${console} [Return] ${output} +Copy File To VM Instance With PublicKey Auth + [Arguments] ${net_name} ${vm_ip} ${file_to_copy} ${user}=centos ${idfile}=/tmp/odlkey + [Documentation] Login to the vm instance using ssh publickey in the network, executes a command inside the VM and returns the ouput. + OpenStackOperations.Get ControlNode Connection + ${net_id} = OpenStackOperations.Get Net Id ${net_name} + ${rc} = SSHLibrary.Execute Command sudo ip netns exec qdhcp-${net_id} scp -i ${idfile} -o MACs=hmac-sha1 -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PreferredAuthentications=publickey ${file_to_copy} ${user}@${vm_ip}:/tmp/ return_stdout=False return_rc=True + BuiltIn.Should Be True '${rc}' == '0' + Test Operations From Vm Instance [Arguments] ${net_name} ${src_ip} ${dest_ips} ${user}=cirros ${password}=cubswin:) ${ttl}=64 - ... ${ping_should_succeed}=True ${check_metadata}=True + ... ${ping_should_succeed}=True ${check_metadata}=True ${console}=cirros ${ping_tries}=3 [Documentation] Login to the vm instance using ssh in the network. OpenStackOperations.Get ControlNode Connection ${net_id} = OpenStackOperations.Get Net Id ${net_name} - ${output} = Utils.Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no ${user}@${src_ip} -o UserKnownHostsFile=/dev/null password: + ${output} = Utils.Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} ssh -o MACs=hmac-sha1 -o ConnectTimeout=5 -o StrictHostKeyChecking=no ${user}@${src_ip} -o UserKnownHostsFile=/dev/null password: 10s ${output} = Utils.Write Commands Until Expected Prompt ${password} ${OS_SYSTEM_PROMPT} - ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance + ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance ${console} BuiltIn.Run Keyword If ${rcode} Utils.Write Commands Until Expected Prompt ifconfig ${OS_SYSTEM_PROMPT} BuiltIn.Run Keyword If ${rcode} Utils.Write Commands Until Expected Prompt route -n ${OS_SYSTEM_PROMPT} BuiltIn.Run Keyword If ${rcode} Utils.Write Commands Until Expected Prompt route -A inet6 ${OS_SYSTEM_PROMPT} @@ -448,11 +529,11 @@ Test Operations From Vm Instance : FOR ${dest_ip} IN @{dest_ips} \ ${string_empty} = BuiltIn.Run Keyword And Return Status Should Be Empty ${dest_ip} \ BuiltIn.Run Keyword If ${string_empty} Continue For Loop - \ BuiltIn.Run Keyword If ${rcode} and "${ping_should_succeed}" == "True" OpenStackOperations.Check Ping ${dest_ip} ttl=${ttl} + \ BuiltIn.Run Keyword If ${rcode} and "${ping_should_succeed}" == "True" OpenStackOperations.Check Ping ${dest_ip} ttl=${ttl} ping_tries=${ping_tries} \ ... ELSE OpenStackOperations.Check No Ping ${dest_ip} ttl=${ttl} ${ethertype} = String.Get Regexp Matches ${src_ip} ${IP_REGEX} BuiltIn.Run Keyword If ${rcode} and "${check_metadata}" and ${ethertype} == "True" OpenStackOperations.Check Metadata Access - [Teardown] Exit From Vm Console + [Teardown] Exit From Vm Console ${console} Test Netcat Operations From Vm Instance [Arguments] ${net_name} ${vm_ip} ${dest_ip} ${additional_args}=${EMPTY} ${port}=12345 ${user}=cirros @@ -472,9 +553,9 @@ Test Netcat Operations From Vm Instance BuiltIn.Should Match Regexp ${nc_output} ${server_data} Ping Other Instances - [Arguments] ${list_of_external_dst_ips} + [Arguments] ${list_of_external_dst_ips} ${console}=cirros [Documentation] Check reachability with other network's instances. - ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance + ${rcode} = BuiltIn.Run Keyword And Return Status OpenStackOperations.Check If Console Is VmInstance ${console} : FOR ${dest_ip} IN @{list_of_external_dst_ips} \ OpenStackOperations.Check Ping ${dest_ip} @@ -564,6 +645,8 @@ Get Test Teardown Debugs OpenStackOperations.Get OvsDebugInfo BuiltIn.Run Keyword And Ignore Error DataModels.Get Model Dump ${HA_PROXY_IP} ${netvirt_data_models} KarafKeywords.Fail If Exceptions Found During Test ${test_name} fail=${fail} + : FOR ${i} IN RANGE ${NUM_ODL_SYSTEM} + \ BuiltIn.Run Keyword And Ignore Error Issue_Command_On_Karaf_Console trace:transactions ${ODL_SYSTEM_${i+1}_IP} Get Suite Debugs Get Test Teardown Debugs test_name=${SUITE_NAME} fail=False @@ -672,7 +755,7 @@ Delete All Security Group Rules \ ${output} = OpenStack CLI openstack security group rule delete ${rule} Create Allow All SecurityGroup - [Arguments] ${sg_name} ${ether_type}=IPv4 + [Arguments] ${sg_name} ${ether_type}=IPv4 ${dual}=False [Documentation] Allow all TCP/UDP/ICMP packets for this suite OpenStackOperations.Neutron Security Group Create ${sg_name} OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=ingress ethertype=${ether_type} port_range_max=65535 port_range_min=1 protocol=tcp @@ -681,6 +764,16 @@ Create Allow All SecurityGroup OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=egress ethertype=${ether_type} protocol=icmp OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=ingress ethertype=${ether_type} port_range_max=65535 port_range_min=1 protocol=udp OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=egress ethertype=${ether_type} port_range_max=65535 port_range_min=1 protocol=udp + BuiltIn.Run Keyword If "${dual}"=="True" Run Keywords OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=ingress ethertype=IPv6 + ... port_range_max=65535 port_range_min=1 protocol=tcp + ... AND OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=egress ethertype=IPv6 port_range_max=65535 + ... port_range_min=1 protocol=tcp + ... AND OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=ingress ethertype=IPv6 protocol=icmp + ... AND OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=egress ethertype=IPv6 protocol=icmp + ... AND OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=ingress ethertype=IPv6 port_range_max=65535 + ... port_range_min=1 protocol=udp + ... AND OpenStackOperations.Neutron Security Group Rule Create ${sg_name} direction=egress ethertype=IPv6 port_range_max=65535 + ... port_range_min=1 protocol=udp Create Neutron Port With Additional Params [Arguments] ${network_name} ${port_name} ${additional_args}=${EMPTY} @@ -842,23 +935,21 @@ Remove Security Group From VM ${output} = OpenStack CLI openstack server remove security group ${vm} ${sg} Create SFC Flow Classifier - [Arguments] ${name} ${src_ip} ${dest_ip} ${protocol} ${dest_port} ${neutron_src_port} + [Arguments] ${name} ${src_ip} ${dest_ip} ${protocol} ${neutron_src_port} ${args}=${EMPTY} [Documentation] Create a flow classifier for SFC - ${output} = OpenStack CLI openstack sfc 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} + ${output} = OpenStack CLI openstack sfc flow classifier create --ethertype IPv4 --source-ip-prefix ${src_ip}/32 --destination-ip-prefix ${dest_ip}/32 --protocol ${protocol} --logical-source-port ${neutron_src_port} ${args} ${name} BuiltIn.Should Contain ${output} ${name} [Return] ${output} Delete SFC Flow Classifier [Arguments] ${name} [Documentation] Delete a SFC flow classifier - OpenStackOperations.Get ControlNode Connection ${output} = OpenStack CLI openstack sfc flow classifier delete ${name} [Return] ${output} Create SFC Port Pair [Arguments] ${name} ${port_in} ${port_out} [Documentation] Creates a neutron port pair for SFC - OpenStackOperations.Get ControlNode Connection ${output} = OpenStack CLI openstack sfc port pair create --ingress=${port_in} --egress=${port_out} ${name} BuiltIn.Should Contain ${output} ${name} [Return] ${output} @@ -891,12 +982,24 @@ Delete SFC Port Pair Group [Return] ${output} Create SFC Port Chain - [Arguments] ${name} ${pg1} ${pg2} ${fc} + [Arguments] ${name} ${args}=${EMPTY} [Documentation] Creates a port pair chain with two port groups and a singel classifier. - ${output} = OpenStack CLI openstack sfc port chain create --port-pair-group ${pg1} --port-pair-group ${pg2} --flow-classifier ${fc} ${name} + ${output} = OpenStack CLI openstack sfc port chain create ${name} ${args} BuiltIn.Should Contain ${output} ${name} [Return] ${output} +Update SFC Port Chain With A New Flow Classifier + [Arguments] ${name} ${fc} + [Documentation] Adds a Flow Classifier to a Port Chain + ${output} = OpenStack CLI openstack sfc port chain set ${name} --flow-classifier ${fc} + [Return] ${output} + +Update SFC Port Chain Removing A Flow Classifier + [Arguments] ${name} ${fc} + [Documentation] Adds a Flow Classifier to a Port Chain + ${output} = OpenStack CLI openstack sfc port chain unset ${name} --flow-classifier ${fc} + [Return] ${output} + Delete SFC Port Chain [Arguments] ${name} [Documentation] Delete a SFC port chain @@ -982,6 +1085,7 @@ OpenStack Cleanup All \ BuiltIn.Run Keyword And Ignore Error Delete Floating IP ${fip['ID']} @{vms} = OpenStack CLI Get List openstack server list -f json : FOR ${vm} IN @{vms} + \ OpenStack CLI openstack server show ${vm['ID']} \ BuiltIn.Run Keyword And Ignore Error Delete Vm Instance ${vm['ID']} @{routers} = OpenStack CLI Get List openstack router list -f json : FOR ${router} IN @{routers} @@ -1018,8 +1122,7 @@ OpenStack Suite Setup BuiltIn.Set Suite Variable @{tcpdump_port_6653_conn_ids} BuiltIn.Run Keyword If "${PRE_CLEAN_OPENSTACK_ALL}"=="True" OpenStack Cleanup All OpenStackOperations.Add OVS Logging On All OpenStack Nodes - Run_Keyword_If_At_Least_Oxygen Wait Until Keyword Succeeds 60 2 ClusterManagement.Check Status Of Services Is OPERATIONAL @{NETVIRT_DIAG_SERVICES} - Verify Expected Default Tables On Nodes + Validate Deployment OpenStack Suite Teardown [Documentation] Wrapper teardown keyword that can be used in any suite running in an openstack environement @@ -1035,6 +1138,23 @@ OpenStack Suite Teardown : FOR ${i} IN RANGE ${NUM_ODL_SYSTEM} \ KarafKeywords.Issue Command On Karaf Console threads --list | wc -l ${ODL_SYSTEM_${i+1}_IP} +Validate Deployment + [Documentation] Validate the deployment. Examples to validate are verifying default table + ... flows are installed and that the tunnel mesh has been built correctly. + Write To Validate File ----------------------------------------\n${SUITE_NAME}\n + : FOR ${keyword} IN @{VALIDATION_KEYWORDS} + \ ${status} = Builtin.Run Keyword And Return Status ${keyword} + \ BuiltIn.Run Keyword If "${status}" == "FAIL" or "${status}" == "False" BuiltIn.Run Keywords Write To Validate File Failed: ${keyword} + \ ... AND BuiltIn.Fail + \ ... ELSE Write To Validate File Passed: ${keyword} + +Write To Validate File + [Arguments] ${msg} + [Documentation] Write the given ${msg} to ${VALIDATION_FILE}. Create the file if not present. + ${status} = BuiltIn.Run Keyword And Return Status OperatingSystem.File Should Exist ${VALIDATION_FILE} + BuiltIn.Run Keyword If "${status}" == "False" OperatingSystem.Create File ${VALIDATION_FILE} + OperatingSystem.Append To File ${VALIDATION_FILE} ${msg}\n + Copy DHCP Files From Control Node [Documentation] Copy the current DHCP files to the robot vm. The keyword must be called ... after the subnet(s) are created and before the subnet(s) are deleted. @@ -1117,6 +1237,22 @@ Get Network Segmentation Id @{list} = String.Split String ${output} [Return] @{list}[0] +Verify Services + [Documentation] Verify if the services are operational + Wait Until Keyword Succeeds 60 2 ClusterManagement.Check Status Of Services Is OPERATIONAL @{NETVIRT_DIAG_SERVICES} + +Verify Expected Default Tunnels + [Documentation] Verify if the default tunnels are created. + ... SFC jobs currently fail this validation because it uses of-tunnels. + ... This validation will be blocked for NEtvirt SFC jobs until support for of-tunnels + ... added to odltools. + ${check_feature_list} = BuiltIn.Create List odl-netvirt-sfc + ${is_sfc_enabled} = OpenStackOperations.Is Feature Installed features=${check_feature_list} + BuiltIn.Return From Keyword If ${is_sfc_enabled} == ${True} ${True} + BuiltIn.Return From Keyword If ${OS_NODE_CNT} == ${1} ${True} + ${output} = ODLTools.Analyze Tunnels test_name=${SUITE_NAME}.Suite Setup + BuiltIn.Should Contain ${output} All tunnels are up + Verify Expected Default Tables On Nodes [Arguments] ${node_ips}=@{OS_ALL_IPS} [Documentation] Verify if Default Table Entries are programmed on all Nodes