adjust where we source keywords from
[testsuite.git] / robot / resources / openstack / neutron_interface.robot
1 *** Settings ***
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
5 Library           OperatingSystem
6 Library           Collections
7 Resource    ../global_properties.robot
8 Resource    ../json_templater.robot
9 Resource    openstack_common.robot
10
11 *** Variables ***
12 ${OPENSTACK_NEUTRON_API_VERSION}    /v2.0
13 ${OPENSTACK_NEUTRON_NETWORK_PATH}    /networks
14 ${OPENSTACK_NEUTRON_NETWORK_ADD_BODY_FILE}    robot/assets/templates/neutron_add_network.template
15 ${OPENSTACK_NEUTRON_SUBNET_PATH}    /subnets
16 ${OPENSTACK_NEUTRON_SUBNET_ADD_BODY_FILE}    robot/assets/templates/neutron_add_subnet.template
17 ${OPENSTACK_NEUTRON_PORT_PATH}    /ports
18
19 *** Keywords ***
20 Get Openstack Network
21     [Documentation]    Runs an Openstack Request and returns the network info
22     [Arguments]    ${alias}    ${network_id}
23     ${resp}=    Internal Get Openstack    ${alias}    ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE}    ${OPENSTACK_NEUTRON_NETWORK_PATH}    /${network_id}
24     [Return]    ${resp.json()}
25
26 Get Openstack Networks
27     [Documentation]    Runs an Openstack Request and returns the network info
28     [Arguments]    ${alias}
29     ${resp}=    Internal Get Openstack    ${alias}    ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE}    ${OPENSTACK_NEUTRON_NETWORK_PATH}
30     [Return]    ${resp.json()}
31
32 Get Openstack Subnets
33     [Documentation]    Runs an Openstack Request and returns the network info
34     [Arguments]    ${alias}
35     ${resp}=    Internal Get Openstack    ${alias}    ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE}    ${OPENSTACK_NEUTRON_SUBNET_PATH}
36     [Return]    ${resp.json()}
37
38 Get Openstack Ports
39     [Documentation]    Runs an Openstack Request and returns the network info
40     [Arguments]    ${alias}
41     ${resp}=    Internal Get Openstack    ${alias}    ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE}    ${OPENSTACK_NEUTRON_PORT_PATH}
42     [Return]    ${resp.json()}
43
44 Add Openstack Network
45     [Documentation]    Runs an Openstack Request to add a network and returns that network id of the created network
46     [Arguments]    ${alias}    ${name}
47     ${data_template}=    OperatingSystem.Get File    ${OPENSTACK_NEUTRON_NETWORK_ADD_BODY_FILE}
48     ${arguments}=    Create Dictionary    name=${name}
49     ${data}=    Fill JSON Template    ${data_template}    ${arguments}
50     ${resp}=    Internal Post Openstack    ${alias}    ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE}    ${OPENSTACK_NEUTRON_NETWORK_PATH}    data_path=    data=${data}
51     Should Be Equal As Strings    201  ${resp.status_code}
52     [Return]    ${resp.json()['network']['id']}
53
54 Delete Openstack Network
55     [Documentation]    Runs an Openstack Request to delete a network
56     [Arguments]    ${alias}    ${network_id}
57     ${resp}=    Internal Delete Openstack    ${alias}    ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE}    ${OPENSTACK_NEUTRON_NETWORK_PATH}    /${network_id}
58     ${status_string}=    Convert To String    ${resp.status_code}
59     Should Match Regexp    ${status_string}    ^(204|200)$
60     [Return]    ${resp.text}
61
62 Add Openstack Network With Subnet If Not Exists
63     [Documentation]    Runs an Openstack Request to add a network and returns that network id of the created network
64     [Arguments]    ${alias}    ${name}    ${cidr}
65     ${network}=    Get Openstack Subnet By Name    ${alias}    ${name}   ${cidr}
66     ${pass}    ${v}=    Run Keyword and Ignore Error    Dictionary Should Contain Key    ${network}    id
67     Run Keyword If    '${pass}' == 'FAIL'    Add Openstack Network With Subnet    ${alias}    ${name}    ${cidr}
68     ${network}=    Get Openstack Subnet By Name    ${alias}    ${name}   ${cidr}
69     ${network_id}=     Get From Dictionary    ${network}    id
70     [Return]     ${network_id}
71
72
73 Add Openstack Network With Subnet
74     [Documentation]    Runs an Openstack Request to add a network and returns that network id of the created network
75     [Arguments]    ${alias}    ${name}    ${cidr}
76     ${network_id}=    Add Openstack Network    ${alias}    ${name}
77     ${data_template}=    OperatingSystem.Get File    ${OPENSTACK_NEUTRON_SUBNET_ADD_BODY_FILE}
78     ${arguments}=    Create Dictionary    network_id=${network_id}    cidr=${cidr}    subnet_name=${name}
79     ${data}=    Fill JSON Template    ${data_template}    ${arguments}
80     ${resp}=    Internal Post Openstack    ${alias}    ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE}    ${OPENSTACK_NEUTRON_SUBNET_PATH}    data_path=    data=${data}
81     Should Be Equal As Strings    201  ${resp.status_code}
82     [Return]     ${network_id}
83
84 Get Openstack Subnet By Name
85     [Documentation]    Retrieve the subnet from openstack by it's name.
86     [Arguments]    ${alias}    ${network_name}    ${network_cidr}
87     ${resp}=    Get Openstack Subnets    ${alias}
88     @{list}=    Get From Dictionary    ${resp}    subnets
89     ${returnnet}=    Set Variable
90     :FOR    ${net}    IN    @{list}
91     \    ${name}=   Get From Dictionary    ${net}    name
92     \    ${cidr}=   Get From Dictionary    ${net}    cidr
93     \    ${returnnet}=    Set Variable    ${net}
94     \    Exit For Loop If    '${name}'=='${network_name}' and '${cidr}'=='${network_cidr}'
95     \    ${returnnet}=    Create DIctionary
96     [Return]    ${returnnet}
97
98 Get Openstack IP By Name
99     [Arguments]    ${alias}    ${network_name}    ${cidr}    ${ip}
100     ${ports}=    Get Openstack Ports For Subnet    ${alias}    ${network_name}    ${cidr}
101     Log    ${ports}
102     :FOR    ${port}   IN   @{ports}
103     \    Return From Keyword If    '${port['fixed_ips'][0]['ip_address']}' == '${ip}'    ${port}
104     [Return]    None
105
106 Get Openstack Ports For Subnet
107     [Arguments]    ${alias}    ${network_name}    ${cidr}
108     ${net}=    Get Openstack Subnet By Name    ${alias}    ${network_name}    ${cidr}
109     ${ports}=    Get Openstack Ports     ${alias}
110     ${net_ports}=    Create List
111     :FOR    ${port}    IN    @{ports['ports']}
112     \    Run Keyword If   '${net['network_id']}' == '${port['network_id']}'    Append To List    ${net_ports}   ${port}
113     [Return]   ${net_ports}
114
115 Get Openstack Port By Id
116     [Arguments]    ${alias}    ${port_id}
117     ${resp}=    Internal Get Openstack    ${alias}    ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE}    ${OPENSTACK_NEUTRON_PORT_PATH}/${port_id}
118     [Return]    ${resp}
119
120
121 Delete Openstack Port
122     [Arguments]    ${alias}    ${port_id}
123     ${resp}=    Internal Delete Openstack    ${alias}    ${GLOBAL_OPENSTACK_NEUTRON_SERVICE_TYPE}    ${OPENSTACK_NEUTRON_PORT_PATH}       /${port_id}
124     ${status_string}=    Convert To String    ${resp.status_code}
125     Should Match Regexp    ${status_string}    ^(204|200)$
126     [Return]    ${resp.text}
127