2 Documentation The main interface for interacting with Openstack. It handles low level stuff like managing the authtoken and Openstack required fields
3 Library ONAPLibrary.Openstack
4 Library RequestsLibrary
6 Library ONAPLibrary.Templating
7 Resource ../global_properties.robot
8 Resource openstack_common.robot
11 ${OPENSTACK_NEUTRON_API_VERSION} /v2.0
12 ${OPENSTACK_NEUTRON_NETWORK_PATH} /networks
13 ${OPENSTACK_NEUTRON_NETWORK_ADD_BODY_FILE} openstack/neutron_add_network.jinja
14 ${OPENSTACK_NEUTRON_SUBNET_PATH} /subnets
15 ${OPENSTACK_NEUTRON_SUBNET_ADD_BODY_FILE} openstack/neutron_add_subnet.jinja
16 ${OPENSTACK_NEUTRON_PORT_PATH} /ports
20 [Documentation] Runs an Openstack Request and returns the network info
21 [Arguments] ${alias} ${network_id}
22 ${resp}= Internal Get Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_NETWORK_PATH} /${network_id}
23 [Return] ${resp.json()}
25 Get Openstack Networks
26 [Documentation] Runs an Openstack Request and returns the network info
28 ${resp}= Internal Get Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_NETWORK_PATH}
29 [Return] ${resp.json()}
32 [Documentation] Runs an Openstack Request and returns the network info
34 ${resp}= Internal Get Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_SUBNET_PATH}
35 [Return] ${resp.json()}
38 [Documentation] Runs an Openstack Request and returns the network info
40 ${resp}= Internal Get Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_PORT_PATH}
41 [Return] ${resp.json()}
44 [Documentation] Runs an Openstack Request to add a network and returns that network id of the created network
45 [Arguments] ${alias} ${name}
46 ${arguments}= Create Dictionary name=${name}
47 Create Environment openstack ${GLOBAL_TEMPLATE_FOLDER}
48 ${data}= Apply Template openstack ${OPENSTACK_NEUTRON_NETWORK_ADD_BODY_FILE} ${arguments}
49 ${resp}= Internal Post Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_NETWORK_PATH} data_path= data=${data}
50 Should Be Equal As Strings 201 ${resp.status_code}
51 [Return] ${resp.json()['network']['id']}
53 Delete Openstack Network
54 [Documentation] Runs an Openstack Request to delete a network
55 [Arguments] ${alias} ${network_id}
56 ${resp}= Internal Delete Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_NETWORK_PATH} /${network_id}
57 ${status_string}= Convert To String ${resp.status_code}
58 Should Match Regexp ${status_string} ^(204|200)$
61 Add Openstack Network With Subnet If Not Exists
62 [Documentation] Runs an Openstack Request to add a network and returns that network id of the created network
63 [Arguments] ${alias} ${name} ${cidr}
64 ${network}= Get Openstack Subnet By Name ${alias} ${name} ${cidr}
65 ${pass} ${v}= Run Keyword and Ignore Error Dictionary Should Contain Key ${network} id
66 Run Keyword If '${pass}' == 'FAIL' Add Openstack Network With Subnet ${alias} ${name} ${cidr}
67 ${network}= Get Openstack Subnet By Name ${alias} ${name} ${cidr}
68 ${network_id}= Get From Dictionary ${network} id
69 [Return] ${network_id}
72 Add Openstack Network With Subnet
73 [Documentation] Runs an Openstack Request to add a network and returns that network id of the created network
74 [Arguments] ${alias} ${name} ${cidr}
75 ${network_id}= Add Openstack Network ${alias} ${name}
76 ${arguments}= Create Dictionary network_id=${network_id} cidr=${cidr} subnet_name=${name}
77 Create Environment openstack ${GLOBAL_TEMPLATE_FOLDER}
78 ${data}= Apply Template openstack ${OPENSTACK_NEUTRON_SUBNET_ADD_BODY_FILE} ${arguments}
79 ${resp}= Internal Post Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_SUBNET_PATH} data_path= data=${data}
80 Should Be Equal As Strings 201 ${resp.status_code}
81 [Return] ${network_id}
83 Get Openstack Subnet By Name
84 [Documentation] Retrieve the subnet from openstack by it's name.
85 [Arguments] ${alias} ${network_name} ${network_cidr}
86 ${resp}= Get Openstack Subnets ${alias}
87 @{list}= Get From Dictionary ${resp} subnets
88 ${returnnet}= Set Variable
89 :FOR ${net} IN @{list}
90 \ ${name}= Get From Dictionary ${net} name
91 \ ${cidr}= Get From Dictionary ${net} cidr
92 \ ${returnnet}= Set Variable ${net}
93 \ Exit For Loop If '${name}'=='${network_name}' and '${cidr}'=='${network_cidr}'
94 \ ${returnnet}= Create DIctionary
97 Get Openstack IP By Name
98 [Arguments] ${alias} ${network_name} ${cidr} ${ip}
99 ${ports}= Get Openstack Ports For Subnet ${alias} ${network_name} ${cidr}
101 :FOR ${port} IN @{ports}
102 \ Return From Keyword If '${port['fixed_ips'][0]['ip_address']}' == '${ip}' ${port}
105 Get Openstack Ports For Subnet
106 [Arguments] ${alias} ${network_name} ${cidr}
107 ${net}= Get Openstack Subnet By Name ${alias} ${network_name} ${cidr}
108 ${ports}= Get Openstack Ports ${alias}
109 ${net_ports}= Create List
110 :FOR ${port} IN @{ports['ports']}
111 \ Run Keyword If '${net['network_id']}' == '${port['network_id']}' Append To List ${net_ports} ${port}
112 [Return] ${net_ports}
114 Get Openstack Port By Id
115 [Arguments] ${alias} ${port_id}
116 ${resp}= Internal Get Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_PORT_PATH}/${port_id}
120 Delete Openstack Port
121 [Arguments] ${alias} ${port_id}
122 ${resp}= Internal Delete Openstack ${alias} ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE} ${OPENSTACK_NEUTRON_PORT_PATH} /${port_id}
123 ${status_string}= Convert To String ${resp.status_code}
124 Should Match Regexp ${status_string} ^(204|200)$
125 [Return] ${resp.text}