netvirt-csit: Show neutron debugs only once
[integration/test.git] / csit / libraries / OpenStackOperations.robot
index f018dba6b73faa880c041b40e24110476160768e..62185dd0c2b5b42fa244b6955fd228610c9ad69b 100644 (file)
@@ -18,6 +18,16 @@ Get Tenant ID From Security Group
     Log    ${output}
     [Return]    ${output}
 
+Get Tenant ID From Network
+    [Arguments]    ${network_uuid}
+    [Documentation]    Returns tenant ID by reading it from existing network.
+    ${resp} =    RequestsLibrary.Get Request    session    ${CONFIG_API}/neutron:neutron/networks/network/${network_uuid}/
+    Log    ${resp.content}
+    ${matches} =    Get Lines Containing String    ${resp.content}    tenant-id
+    ${matches}=    Fetch From Right    ${matches}    :
+    ${tenant_id}=    Strip String    ${matches}    characters=}]"
+    [Return]    ${tenant_id}
+
 Create Network
     [Arguments]    ${network_name}    ${additional_args}=${EMPTY}    ${verbose}=TRUE
     [Documentation]    Create Network with neutron request.
@@ -54,24 +64,24 @@ Delete Network
     ${output}=    Write Commands Until Prompt    neutron -v net-delete ${network_name}    30s
     Close Connection
     Log    ${output}
-    Should Contain    ${output}    Deleted network: ${network_name}
+    Should Match Regexp    ${output}    Deleted network: ${network_name}|Deleted network\\(s\\): ${network_name}
 
 Create SubNet
-    [Arguments]    ${network_name}    ${subnet}    ${range_ip}
+    [Arguments]    ${network_name}    ${subnet}    ${range_ip}    ${additional_args}=${EMPTY}
     [Documentation]    Create SubNet for the Network with neutron request.
     ${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
+    ${output}=    Write Commands Until Prompt    neutron -v subnet-create ${network_name} ${range_ip} --name ${subnet} ${additional_args}    30s
     Close Connection
     Log    ${output}
     Should Contain    ${output}    Created a new subnet
 
 Create Port
-    [Arguments]    ${network_name}    ${port_name}
+    [Arguments]    ${network_name}    ${port_name}    ${sg}=default
     [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
+    ${output}=    Write Commands Until Prompt    neutron -v port-create ${network_name} --name ${port_name} --security-group ${sg}    30s
     Close Connection
     Log    ${output}
     Should Contain    ${output}    Created a new port
@@ -95,6 +105,21 @@ List Ports
     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
+    ${devstack_conn_id}=    Get ControlNode Connection
+    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
+    \    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
+    \    Log    ${output}
+    [Return]    ${ip_list}
+
 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
@@ -125,7 +150,7 @@ Delete SubNet
     ${output}=    Write Commands Until Prompt    neutron -v subnet-delete ${subnet}
     Close Connection
     Log    ${output}
-    Should Contain    ${output}    Deleted subnet: ${subnet}
+    Should Match Regexp    ${output}    Deleted subnet: ${subnet}|Deleted subnet\\(s\\): ${subnet}
 
 Verify No Gateway Ips
     [Documentation]    Verifies the Gateway Ips removed with dump flow.
@@ -184,26 +209,45 @@ Create Vm Instances
     : FOR    ${VmElement}    IN    @{vm_instance_names}
     \    ${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
+    [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}
     ${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
+    ${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}
     [Documentation]    Run these commands to check whether the created vm instance is active or not.
+    ${devstack_conn_id}=    Get ControlNode Connection
+    Switch Connection    ${devstack_conn_id}
     ${output}=    Write Commands Until Prompt    nova show ${vm_name} | grep OS-EXT-STS:vm_state    30s
     Log    ${output}
     Should Contain    ${output}    active
 
+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.
+    ${devstack_conn_id}=    Get ControlNode Connection
+    Switch Connection    ${devstack_conn_id}
+    ${ip_list}    Create List
+    : FOR    ${vm}    IN    @{vm_list}
+    \    ${output}=    Write Commands Until Prompt    nova console-log ${vm} | grep -i "obtained"    30s
+    \    ${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]
+
 View Vm Console
     [Arguments]    ${vm_instance_names}
     [Documentation]    View Console log of the created vm instances using nova show.
@@ -239,10 +283,21 @@ Ping From DHCP Should Not Succeed
     Log    ${output}
     Should Not Contain    ${output}    64 bytes
 
+Ping Vm From Control Node
+    [Arguments]    ${vm_floating_ip}
+    [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
+    Log    ${output}
+    Close Connection
+    Should Contain    ${output}    64 bytes
+
 Ping From Instance
-    [Arguments]    ${dest_vm}
+    [Arguments]    ${dest_vm_ip}
     [Documentation]    Ping to the expected destination ip.
-    ${output}=    Write Commands Until Expected Prompt    ping -c 3 ${dest_vm}    ${OS_SYSTEM_PROMPT}
+    ${output}=    Write Commands Until Expected Prompt    ping -c 3 ${dest_vm_ip}    ${OS_SYSTEM_PROMPT}
     Log    ${output}
     [Return]    ${output}
 
@@ -280,14 +335,30 @@ Check Metadata Access
     ${output}=    Write Commands Until Expected Prompt    curl -i http://169.254.169.254    ${OS_SYSTEM_PROMPT}
     Should Contain    ${output}    200
 
+Execute Command on VM Instance
+    [Arguments]    ${net_name}    ${vm_ip}    ${cmd}    ${user}=cirros    ${password}=cubswin:)
+    [Documentation]    Login to the vm instance using ssh in the network, executes a command inside the VM and returns the ouput.
+    ${devstack_conn_id} =    Get ControlNode Connection
+    Switch Connection    ${devstack_conn_id}
+    ${net_id} =    Get Net Id    ${net_name}    ${devstack_conn_id}
+    Log    ${vm_ip}
+    ${output} =    Write Commands Until Expected Prompt    sudo ip netns exec qdhcp-${net_id} ssh ${user}@${vm_ip} -o ConnectTimeout=10 -o StrictHostKeyChecking=no    d:
+    Log    ${output}
+    ${output} =    Write Commands Until Expected Prompt    ${password}    ${OS_SYSTEM_PROMPT}
+    Log    ${output}
+    ${rcode} =    Run Keyword And Return Status    Check If Console Is VmInstance
+    ${output} =    Run Keyword If    ${rcode}    Write Commands Until Expected Prompt    ${cmd}    ${OS_SYSTEM_PROMPT}
+    [Teardown]    Exit From Vm Console
+    [Return]    ${output}
+
 Test Operations From Vm Instance
-    [Arguments]    ${net_name}    ${src_ip}    ${list_of_local_dst_ips}    ${l2_or_l3}=l2    ${list_of_external_dst_ips}=${NONE}    ${user}=cirros
-    ...    ${password}=cubswin:)
+    [Arguments]    ${net_name}    ${src_ip}    ${dest_ips}    ${user}=cirros    ${password}=cubswin:)
     [Documentation]    Login to the vm instance using ssh in the network.
     ${devstack_conn_id}=    Get ControlNode Connection
     Switch Connection    ${devstack_conn_id}
+    Log    ${src_ip}
     ${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:
+    ${output}=    Write Commands Until Expected Prompt    sudo ip netns exec qdhcp-${net_id} ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no ${user}@${src_ip}    d:
     Log    ${output}
     ${output}=    Write Commands Until Expected Prompt    ${password}    ${OS_SYSTEM_PROMPT}
     Log    ${output}
@@ -295,32 +366,21 @@ Test Operations From Vm Instance
     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}
-    ${dest_dhcp}=    Get From List    ${list_of_local_dst_ips}    1
-    Log    ${dest_dhcp}
-    Run Keyword If    ${rcode}    Check Ping    ${dest_dhcp}
-    ${dest_vm}=    Get From List    ${list_of_local_dst_ips}    2
-    Log    ${dest_vm}
-    Run Keyword If    ${rcode}    Check Ping    ${dest_vm}
+    : 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 Metadata Access
-    Run Keyword If    '${l2_or_l3}' == 'l3'    Ping Other Instances    ${list_of_external_dst_ips}
     [Teardown]    Exit From Vm Console
 
 Ping Other Instances
     [Arguments]    ${list_of_external_dst_ips}
     [Documentation]    Check reachability with other network's instances.
     ${rcode}=    Run Keyword And Return Status    Check If Console Is VmInstance
-    ${dest_vm}=    Get From List    ${list_of_external_dst_ips}    0
-    Log    ${dest_vm}
-    Run Keyword If    ${rcode}    Check Ping    ${dest_vm}
-    ${dest_dhcp}=    Get From List    ${list_of_external_dst_ips}    1
-    Log    ${dest_dhcp}
-    Run Keyword If    ${rcode}    Check Ping    ${dest_dhcp}
-    ${dest_vm}=    Get From List    ${list_of_external_dst_ips}    2
-    Log    ${dest_vm}
-    Run Keyword If    ${rcode}    Check Ping    ${dest_vm}
+    : FOR    ${dest_ip}    IN    @{list_of_external_dst_ips}
+    \    Log    ${dest_ip}
+    \    Check Ping    ${dest_ip}
 
 Create Router
     [Arguments]    ${router_name}
@@ -339,6 +399,14 @@ Add Router Interface
     Close Connection
     Should Contain    ${output}    Added interface
 
+Add Router Gateway
+    [Arguments]    ${router_name}    ${network_name}
+    ${devstack_conn_id}=    Get ControlNode Connection
+    Switch Connection    ${devstack_conn_id}
+    ${output}=    Write Commands Until Prompt    neutron -v router-gateway-set ${router_name} ${network_name}
+    Close Connection
+    Should Contain    ${output}    Set gateway
+
 Remove Interface
     [Arguments]    ${router_name}    ${interface_name}
     [Documentation]    Remove Interface to the subnets.
@@ -348,6 +416,24 @@ Remove Interface
     Close Connection
     Should Contain    ${output}    Removed interface from router
 
+Update Router
+    [Arguments]    ${router_name}    ${cmd}
+    [Documentation]    Update the router with the command. Router name and command should be passed as argument.
+    ${devstack_conn_id} =    Get ControlNode Connection
+    Switch Connection    ${devstack_conn_id}
+    ${output} =    Write Commands Until Prompt    neutron router-update ${router_name} ${cmd}    30s
+    Close Connection
+    Should Contain    ${output}    Updated
+
+Show Router
+    [Arguments]    ${router_name}    ${options}
+    [Documentation]    Show information of a given router. Router name and optional fields should be sent as arguments.
+    ${devstack_conn_id} =    Get ControlNode Connection
+    Switch Connection    ${devstack_conn_id}
+    ${output} =    Write Commands Until Prompt    neutron router-show ${router_name} ${options}    30s
+    Log    ${output}
+    Close Connection
+
 Delete Router
     [Arguments]    ${router_name}
     [Documentation]    Delete Router and Interface to the subnets.
@@ -355,7 +441,7 @@ Delete Router
     Switch Connection    ${devstack_conn_id}
     ${output}=    Write Commands Until Prompt    neutron -v router-delete ${router_name}    60s
     Close Connection
-    Should Contain    ${output}    Deleted router:
+    Should Match Regexp    ${output}    Deleted router: ${router_name}|Deleted router\\(s\\): ${router_name}
 
 Get DumpFlows And Ovsconfig
     [Arguments]    ${openstack_node_ip}
@@ -395,7 +481,7 @@ Get OvsDebugInfo
     Run Keyword If    2 < ${NUM_OS_SYSTEM}    Get DumpFlows And Ovsconfig    ${OS_COMPUTE_2_IP}
 
 Show Debugs
-    [Arguments]    ${vm_indices}
+    [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}