*** Comments ***
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.


*** Settings ***
Documentation   Library providing keywords to interact with Openstack with openstack client.

Library   OperatingSystem
Library   String

Resource   ns_lib.resource
Resource   vnf_lib.resource


*** Variables ***
${SUCCESS_RETURN_CODE}   0


*** Keywords ***
Get Server Flavor ID
    [Documentation]   Get from Openstack the flavor id of a server/VM passed as argument.
    [Arguments]   ${server_id}
    Should Not Be Empty   ${server_id}
    ${rc}   ${stdout}=   Run And Return Rc And Output   openstack server show ${server_id} | grep flavor | awk 'NR>1{print $1}' RS='(' FS=')'
    Log   ${stdout}
    Should Be Equal As Integers   ${rc}   ${SUCCESS_RETURN_CODE}
    RETURN   ${stdout}

Get Flavor Properties
    [Documentation]   Get from Openstack the properties of a flavor passed as argument.
    [Arguments]   ${flavor_id}
    Should Not Be Empty   ${flavor_id}
    ${rc}   ${stdout}=   Run And Return Rc And Output   openstack flavor show ${flavor_id} | grep properties | awk -F '|' '{print $3}'
    Log   ${stdout}
    Should Be Equal As Integers   ${rc}   ${SUCCESS_RETURN_CODE}
    RETURN   ${stdout}

Check NS Servers In VIM
    [Documentation]   Check if the number of servers in Openstack by filtering by NS name is as expected.
    [Arguments]   ${ns_name}   ${number}
    Should Not Be Empty   ${ns_name}
    ${rc}   ${stdout}=   Run And Return Rc And Output   openstack server list | grep ${ns_name} | awk '{print $4}'
    Log   ${stdout}
    Should Be Equal As Integers   ${rc}   ${SUCCESS_RETURN_CODE}
    @{servers}=   Split String   ${stdout}
    ${n_servers}=   Get Length   ${servers}
    Should Be Equal As Integers   ${number}   ${n_servers}

Check If Volume Bootable
    [Documentation]   Check the volume properties and return whether it is bootable or not.
    [Arguments]   ${volume_id}
    Should Not Be Empty   ${volume_id}
    ${rc}   ${stdout}=   Run And Return Rc And Output   openstack volume show ${volume_id} | grep bootable | awk '{print $4}'
    Log   ${stdout}
    Should Be Equal As Integers   ${rc}   ${SUCCESS_RETURN_CODE}
    RETURN   ${stdout}

Get Project Quota
    [Documentation]   Get a field (ram, cores, ports, etc.) from quota in current project.
    [Arguments]   ${field}
    Should Not Be Empty   ${field}
    ${rc}   ${stdout}=   Run And Return Rc And Output   openstack quota show -f yaml | yq '.[] | select(.Resource=="${field}") | .Limit'
    Log   ${stdout}
    Should Be Equal As Integers   ${rc}   ${SUCCESS_RETURN_CODE}
    RETURN   ${stdout}

Get Server Property
    [Documentation]   Get a field (flavor, image, volumes_attached, etc.) from a server.
    [Arguments]   ${server_id}   ${field}
    Should Not Be Empty   ${server_id}
    Should Not Be Empty   ${field}
    ${rc}   ${stdout}=   Run And Return Rc And Output   openstack server show ${server_id} -c ${field} -f value
    Log   ${stdout}
    Should Be Equal As Integers   ${rc}   ${SUCCESS_RETURN_CODE}
    RETURN   ${stdout}

Check VM In Server Group
    [Documentation]   Check if a given server is included in an Openstack server group
    [Arguments]   ${server_id}   ${server_group_name}
    Should Not Be Empty   ${server_group_name}
    Should Not Be Empty   ${server_id}
    ${rc}   ${stdout}=   Run And Return Rc And Output   openstack server group show ${server_group_name} -c members -f value
    Log   ${stdout}
    Should Be Equal As Integers   ${rc}   ${SUCCESS_RETURN_CODE}
    Should Contain   ${stdout}   ${server_id}

Set Volume Id
    [Documentation]   Sets the root volume ID and ordinary volume ID by checking bootable property of volumes
    [Arguments]   ${volume_match}   ${index}
    Should Not Be Empty   ${volume_match}   ${index}
    ${bootable}=   Check If Volume Bootable   ${volume_match}[${index}]
    IF   '${bootable}'=='true'
        Set Suite Variable   ${ROOT_VOL_ID}   ${volume_match}[${index}]
        IF   not ${index}
            Set Suite Variable   ${ORDINARY_VOL_ID}   ${volume_match}[1]
        ELSE
            Set Suite Variable   ${ORDINARY_VOL_ID}   ${volume_match}[0]
        END
    END

Get Persistent Volumes Attached To Vm
    [Documentation]   Sets the root volume ID and ordinary volume ID by checking bootable property of volumes
    [Arguments]   ${ns_id}
    Variable Should Exist   ${ns_id}   msg=NS is not available
    ${vnfs_list}=   Get Ns Vnf List   ${ns_id}
    ${vim_id}=   Get VNF VIM ID   ${vnfs_list}[0]
    ${volumes_attached}=   Get Server Property   ${vim_id}   volumes_attached
    Log   ${volumes_attached}
    ${stdout}=   Get Regexp Matches   ${volumes_attached}   '([0-9a-f\-]+)'   1
    Log   ${stdout}
    RETURN   ${stdout}

Check If Volume Exists
    [Documentation]   Checks if a volume id exists
    [Arguments]   ${volume_id}
    Should Not Be Empty   ${volume_id}
    ${rc}   ${stdout}=   Run And Return Rc And Output   openstack volume list | grep ${volume_id} | wc -l
    Log   ${stdout}
    Should Be Equal As Integers   ${rc}   ${SUCCESS_RETURN_CODE}
    RETURN   ${stdout}

Delete Volume
    [Documentation]   Delete a volume by its identifier
    [Arguments]   ${volume_id}
    Should Not Be Empty   ${volume_id}
    ${rc}   ${stdout}=   Run And Return Rc And Output   openstack volume delete ${volume_id}
    Log   ${stdout}
    Should Be Equal As Integers   ${rc}   ${SUCCESS_RETURN_CODE}
    RETURN   ${stdout}

Get Subnet
    [Documentation]   Get subnet information in JSON format
    [Arguments]   ${subnet_id}
    Should Not Be Empty   ${subnet_id}
    ${rc}   ${stdout}=   Run And Return Rc And Output   openstack subnet show ${subnet_id} -f json
    Log   ${stdout}
    Should Be Equal As Integers   ${rc}   ${SUCCESS_RETURN_CODE}
    RETURN   ${stdout}

Stop Server
    [Documentation]   Stop a server
    [Arguments]   ${server_id}
    Should Not Be Empty   ${server_id}
    ${rc}   ${stdout}=   Run And Return Rc And Output   openstack server stop ${server_id}
    Log   ${stdout}
    Should Be Equal As Integers   ${rc}   ${SUCCESS_RETURN_CODE}
    RETURN   ${stdout}

Halt Server
    [Documentation]   Reset a server
    [Arguments]   ${server_id}
    Should Not Be Empty   ${server_id}
    ${rc}   ${stdout}=   Run And Return Rc And Output   openstack server set --state error ${server_id}
    Log   ${stdout}
    Should Be Equal As Integers   ${rc}   ${SUCCESS_RETURN_CODE}
    RETURN   ${stdout}

Delete Server
    [Documentation]   Delete a server
    [Arguments]   ${server_id}
    Should Not Be Empty   ${server_id}
    ${rc}   ${stdout}=   Run And Return Rc And Output   openstack server delete ${server_id}
    Log   ${stdout}
    Should Be Equal As Integers   ${rc}   ${SUCCESS_RETURN_CODE}
    RETURN   ${stdout}

Create Flavor
    [Documentation]   Create a Flavor
    [Arguments]   ${flavor_name}   ${cpu}=1   ${ram}=1024   ${disk}=10
    Should Not Be Empty   ${flavor_name}
    ${rc}   ${flavor_id}=   Run And Return Rc And Output   openstack flavor create ${flavor_name} --ram ${ram} --disk ${disk} --vcpus ${cpu} -c id -f value
    Log   ${flavor_id}
    Should Be Equal As Integers   ${rc}   ${SUCCESS_RETURN_CODE}
    RETURN   ${flavor_id}

Delete Flavor
    [Documentation]   Delete a Flavor
    [Arguments]   ${flavor_id}
    Should Not Be Empty   ${flavor_id}
    ${rc}   ${stdout}=   Run And Return Rc And Output   openstack flavor delete ${flavor_id}
    Log   ${stdout}
    Should Be Equal As Integers   ${rc}   ${SUCCESS_RETURN_CODE}
    RETURN   ${stdout}

Openstack Server List
    [Documentation]   Get the openstack server list
    [Arguments]   ${ns_name}
    ${result}=   Run And Return Rc And Output   openstack server list | grep ${ns_name} | awk 'index($0, "ipv6=") {gsub(/,$/, ""); gsub("ipv6=", ""); print $8, $9}'
    ${rc}=   Get From List   ${result}   0
    ${Ip}=   Get From List   ${result}   1
    Log   ${Ip}
    Should Be Equal As Integers   ${rc}   ${success_return_code}
    RETURN   ${Ip}

Source Openrc Command
    [Documentation]   Keyword to source openstack tenant
    Write   source openrc
