summaryrefslogtreecommitdiffstats
path: root/robot/resources/openstack/neutron_interface.robot
diff options
context:
space:
mode:
Diffstat (limited to 'robot/resources/openstack/neutron_interface.robot')
-rw-r--r--robot/resources/openstack/neutron_interface.robot123
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