+++ /dev/null
-*** Settings ***
-Documentation The main interface for interacting with Openstack. It handles low level stuff like managing the authtoken and Openstack required fields
-Library OpenstackLibrary
-Library RequestsLibrary
-Library UUID
-Library OperatingSystem
-Library Collections
-Resource ../global_properties.robot
-Resource ../json_templater.robot
-Resource openstack_common.robot
-
-*** Variables ***
-${OPENSTACK_NEUTRON_API_VERSION} /v2.0
-${OPENSTACK_NEUTRON_NETWORK_PATH} /networks
-${OPENSTACK_NEUTRON_NETWORK_ADD_BODY_FILE} robot/assets/templates/neutron_add_network.template
-${OPENSTACK_NEUTRON_SUBNET_PATH} /subnets
-${OPENSTACK_NEUTRON_SUBNET_ADD_BODY_FILE} robot/assets/templates/neutron_add_subnet.template
-${OPENSTACK_NEUTRON_PORT_PATH} /ports
-
-*** Keywords ***
-Get Openstack Network
- [Documentation] Runs an Openstack Request and returns the network info
- [Arguments] ${alias} ${network_id}
- ${resp}= Internal Get Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_NETWORK_PATH} /${network_id}
- [Return] ${resp.json()}
-
-Get Openstack Networks
- [Documentation] Runs an Openstack Request and returns the network info
- [Arguments] ${alias}
- ${resp}= Internal Get Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_NETWORK_PATH}
- [Return] ${resp.json()}
-
-Get Openstack Subnets
- [Documentation] Runs an Openstack Request and returns the network info
- [Arguments] ${alias}
- ${resp}= Internal Get Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_SUBNET_PATH}
- [Return] ${resp.json()}
-
-Get Openstack Ports
- [Documentation] Runs an Openstack Request and returns the network info
- [Arguments] ${alias}
- ${resp}= Internal Get Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_PORT_PATH}
- [Return] ${resp.json()}
-
-Add Openstack Network
- [Documentation] Runs an Openstack Request to add a network and returns that network id of the created network
- [Arguments] ${alias} ${name}
- ${data_template}= OperatingSystem.Get File ${OPENSTACK_NEUTRON_NETWORK_ADD_BODY_FILE}
- ${arguments}= Create Dictionary name=${name}
- ${data}= Fill JSON Template ${data_template} ${arguments}
- ${resp}= Internal Post Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_NETWORK_PATH} data_path= data=${data}
- Should Be Equal As Strings 201 ${resp.status_code}
- [Return] ${resp.json()['network']['id']}
-
-Delete Openstack Network
- [Documentation] Runs an Openstack Request to delete a network
- [Arguments] ${alias} ${network_id}
- ${resp}= Internal Delete Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_NETWORK_PATH} /${network_id}
- ${status_string}= Convert To String ${resp.status_code}
- Should Match Regexp ${status_string} ^(204|200)$
- [Return] ${resp.text}
-
-Add Openstack Network With Subnet If Not Exists
- [Documentation] Runs an Openstack Request to add a network and returns that network id of the created network
- [Arguments] ${alias} ${name} ${cidr}
- ${network}= Get Openstack Subnet By Name ${alias} ${name} ${cidr}
- ${pass} ${v}= Run Keyword and Ignore Error Dictionary Should Contain Key ${network} id
- Run Keyword If '${pass}' == 'FAIL' Add Openstack Network With Subnet ${alias} ${name} ${cidr}
- ${network}= Get Openstack Subnet By Name ${alias} ${name} ${cidr}
- ${network_id}= Get From Dictionary ${network} id
- [Return] ${network_id}
-
-
-Add Openstack Network With Subnet
- [Documentation] Runs an Openstack Request to add a network and returns that network id of the created network
- [Arguments] ${alias} ${name} ${cidr}
- ${network_id}= Add Openstack Network ${alias} ${name}
- ${data_template}= OperatingSystem.Get File ${OPENSTACK_NEUTRON_SUBNET_ADD_BODY_FILE}
- ${arguments}= Create Dictionary network_id=${network_id} cidr=${cidr} subnet_name=${name}
- ${data}= Fill JSON Template ${data_template} ${arguments}
- ${resp}= Internal Post Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_SUBNET_PATH} data_path= data=${data}
- Should Be Equal As Strings 201 ${resp.status_code}
- [Return] ${network_id}
-
-Get Openstack Subnet By Name
- [Documentation] Retrieve the subnet from openstack by it's name.
- [Arguments] ${alias} ${network_name} ${network_cidr}
- ${resp}= Get Openstack Subnets ${alias}
- @{list}= Get From Dictionary ${resp} subnets
- ${returnnet}= Set Variable
- :for ${net} in @{list}
- \ ${name}= Get From Dictionary ${net} name
- \ ${cidr}= Get From Dictionary ${net} cidr
- \ ${returnnet}= Set Variable ${net}
- \ Exit For Loop If '${name}'=='${network_name}' and '${cidr}'=='${network_cidr}'
- \ ${returnnet}= Create DIctionary
- [Return] ${returnnet}
-
-Get Openstack IP By Name
- [Arguments] ${alias} ${network_name} ${cidr} ${ip}
- ${ports}= Get Openstack Ports For Subnet ${alias} ${network_name} ${cidr}
- Log ${ports}
- :for ${port} in @{ports}
- \ Return From Keyword If '${port['fixed_ips'][0]['ip_address']}' == '${ip}' ${port}
- [Return] None
-
-Get Openstack Ports For Subnet
- [Arguments] ${alias} ${network_name} ${cidr}
- ${net}= Get Openstack Subnet By Name ${alias} ${network_name} ${cidr}
- ${ports}= Get Openstack Ports ${alias}
- ${net_ports}= Create List
- :for ${port} in @{ports['ports']}
- \ Run Keyword If '${net['network_id']}' == '${port['network_id']}' Append To List ${net_ports} ${port}
- [Return] ${net_ports}
-
-Get Openstack Port By Id
- [Arguments] ${alias} ${port_id}
- ${resp}= Internal Get Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_PORT_PATH}/${port_id}
- [Return] ${resp}
-
-
-Delete Openstack Port
- [Arguments] ${alias} ${port_id}
- ${resp}= Internal Delete Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_PORT_PATH} /${port_id}
- ${status_string}= Convert To String ${resp.status_code}
- Should Match Regexp ${status_string} ^(204|200)$
- [Return] ${resp.text}
-