aboutsummaryrefslogtreecommitdiffstats
path: root/robot/resources/openstack/neutron_interface.robot
blob: a88a943613badaeb374cffc985d766c570d5b2cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
*** 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}