diff options
Diffstat (limited to 'robot/resources/openstack/neutron_interface.robot')
-rw-r--r-- | robot/resources/openstack/neutron_interface.robot | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/robot/resources/openstack/neutron_interface.robot b/robot/resources/openstack/neutron_interface.robot new file mode 100644 index 00000000..77635cdd --- /dev/null +++ b/robot/resources/openstack/neutron_interface.robot @@ -0,0 +1,123 @@ +*** 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} + +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} + +
\ No newline at end of file |