*** 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} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${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} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${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} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${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} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${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} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${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} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${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} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${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} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${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} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${OPENSTACK_NEUTRON_PORT_PATH} /${port_id} ${status_string}= Convert To String ${resp.status_code} Should Match Regexp ${status_string} ^(204|200)$ [Return] ${resp.text}