cleaning up some warnings
[testsuite.git] / robot / resources / openstack / nova_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               ONAPLibrary.JSON
6 Library               ONAPLibrary.Templating    WITH NAME    Templating
7 Library    OperatingSystem
8 Library    Collections
9 Resource    ../global_properties.robot
10 Resource    openstack_common.robot
11
12 *** Variables ***
13 ${OPENSTACK_NOVA_API_VERSION}    /v2
14 ${OPENSTACK_NOVA_KEYPAIR_PATH}    /os-keypairs
15 ${OPENSTACK_NOVA_KEYPAIR_ADD_BODY_FILE}    openstack/nova_add_keypair.jinja
16 ${OPENSTACK_NOVA_FLAVORS_PATH}    /flavors
17 ${OPENSTACK_NOVA_SERVERS_PATH}    /servers
18 ${OPENSTACK_NOVA_IMAGES_PATH}    /images
19 ${OPENSTACK_NOVA_SERVERS_REBOOT_BODY}    {"reboot" : { "type" : "SOFT" }}
20 ${OPENSTACK_NOVA_SERVER_ADD_BODY_FILE}    openstack/nova_add_server.jinja
21
22
23 *** Keywords ***
24 Get Openstack Keypair
25     [Documentation]    Runs an Openstack Request and returns the keypair info
26     [Arguments]    ${alias}    ${keypair_name}
27     ${resp}=    Internal Get Openstack    ${alias}    ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE}    ${OPENSTACK_NOVA_KEYPAIR_PATH}    /${keypair_name}
28     [Return]    ${resp.json()}
29
30 Add Openstack Keypair
31     [Documentation]    Runs an Openstack Request to add a keypair and returns the keypair name
32     [Arguments]    ${alias}    ${name}    ${ssh_key}
33     ${arguments}=    Create Dictionary    name=${name}      publickey=${ssh_key}
34     Templating.Create Environment    openstack    ${GLOBAL_TEMPLATE_FOLDER}
35     ${data}=   Templating.Apply Template    openstack    ${OPENSTACK_NOVA_KEYPAIR_ADD_BODY_FILE}    ${arguments}
36     ${resp}=    Internal Post Openstack    ${alias}    ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE}    ${OPENSTACK_NOVA_KEYPAIR_PATH}    data_path=    data=${data}
37     Should Be Equal As Strings    200  ${resp.status_code}
38     [Return]    ${resp.json()['keypair']['name']}
39
40 Delete Openstack Keypair
41     [Documentation]    Runs an Openstack Request to delete a keypair
42     [Arguments]    ${alias}    ${keypair_name}
43     ${resp}=    Internal Delete Openstack    ${alias}    ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE}    ${OPENSTACK_NOVA_KEYPAIR_PATH}          /${keypair_name}
44     ${status_string}=    Convert To String    ${resp.status_code}
45     Should Match Regexp    ${status_string}    ^(204|202|200)$
46     [Return]    ${resp.text}
47
48
49 Get Openstack Servers
50     [Documentation]    Returns the list of servers as a dictionary by name
51     [Arguments]    ${alias}
52     ${resp}=    Internal Get Openstack    ${alias}    ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE}    ${OPENSTACK_NOVA_SERVERS_PATH}    /detail
53     Log    Returned from Internal Get Openstack
54     ${by_name}=    Make List Into Dict    ${resp.json()['servers']}    name
55     Log    got it
56     [Return]    ${by_name}
57
58 Get Openstack Server By Id
59     [Documentation]    Returns the openstack stacks info for the given stack name
60     [Arguments]    ${alias}    ${server_id}
61     ${resp}=    Internal Get Openstack    ${alias}    ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE}    ${OPENSTACK_NOVA_SERVERS_PATH}    /${server_id}
62     [Return]    ${resp}
63
64 Get Openstack Flavors
65     [Documentation]    Runs an Openstack Request and returns the flavor list
66     [Arguments]    ${alias}
67     ${resp}=    Internal Get Openstack    ${alias}    ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE}    ${OPENSTACK_NOVA_FLAVORS_PATH}
68     [Return]    ${resp.json()}
69
70 Get Openstack Images
71     [Documentation]    Runs an Openstack Request and returns the flavor list
72     [Arguments]    ${alias}
73     ${resp}=    Internal Get Openstack    ${alias}    ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE}    ${OPENSTACK_NOVA_IMAGES_PATH}
74     [Return]    ${resp.json()}
75
76 Reboot Server
77     [Documentation]    Requests a reboot of the passed server id
78     [Arguments]    ${alias}    ${server_id}
79     ${resp}=    Internal Post Openstack    ${alias}    ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE}    ${OPENSTACK_NOVA_SERVERS_PATH}    /${server_id}/action    ${OPENSTACK_NOVA_SERVERS_REBOOT_BODY}
80     [Return]    ${resp}
81
82 Add Server
83     [Documentation]    Adds a server for the passed if
84     [Arguments]    ${alias}    ${name}    ${imageRef}    ${flavorRef}
85     ${dict}=    Create Dictionary   name=${name}   imageRef=${imageRef}   flavorRef=${flavorRef}
86     Create Environment    openstack    ${GLOBAL_TEMPLATE_FOLDER}
87     ${data}=   Apply Template    openstack   ${OPENSTACK_NOVA_SERVER_ADD_BODY_FILE}    ${dict}
88     ${resp}=    Internal Post Openstack    ${alias}    ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE}    ${OPENSTACK_NOVA_SERVERS_PATH}   data_path=    data=${data}
89     [Return]    ${resp}
90
91 Add Server For Image Name
92     [Documentation]    Adds a server for the passed if
93     [Arguments]    ${alias}    ${name}    ${imageName}    ${flavorName}   ${public_net_id}
94     ${images}=  Get Openstack Images    ${alias}
95     ${flavors}=  Get Openstack Flavors    ${alias}
96     ${images}=   Get From Dictionary   ${images}   images
97     ${flavors}=   Get From Dictionary   ${flavors}   flavors
98     ${imageRef}=    Get Id For Name   ${images}    ${imageName}
99     ${flavorRef}=   Get Id For Name   ${flavors}    ${flavorName}
100     ${dict}=    Create Dictionary   name=${name}   imageRef=${imageRef}   flavorRef=${flavorRef}   public_net_id=${public_net_id}
101     Templating.Create Environment    openstack    ${GLOBAL_TEMPLATE_FOLDER}
102     ${data}=   Templating.Apply Template    openstack   ${OPENSTACK_NOVA_SERVER_ADD_BODY_FILE}    ${dict}
103     ${resp}=    Internal Post Openstack    ${alias}    ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE}    ${OPENSTACK_NOVA_SERVERS_PATH}   data_path=    data=${data}
104     ${status_string}=    Convert To String    ${resp.status_code}
105     Should Match Regexp    ${status_string}    ^(202)$
106     [Return]    ${resp.json()}
107
108 Wait for Server to Be Active
109     [Arguments]    ${alias}   ${server_id}    ${timeout}=300s
110     ${server_info}=    Wait Until Keyword Succeeds    ${timeout}    10 sec    Get Active Server    ${alias}    ${server_id}
111     ${status}=   Get From Dictionary    ${server_info}    status
112     Should Be Equal    ${status}    ACTIVE
113     [Return]    ${server_info}
114
115 Get Active Server
116     [Arguments]    ${alias}    ${server_id}
117     ${resp}=    Get Openstack Server By Id    ${alias}    ${server_id}
118     Should Be Equal As Strings   ${resp.status_code}    200
119     ${server_info}=    Set Variable    ${resp.json()}
120     ${server_info}=    Get From Dictionary   ${server_info}    server
121     ${status}=   Get From Dictionary    ${server_info}    status
122     Should Not Be Equal    ${status}    BUILD
123     [Return]    ${server_info}
124
125 Wait for Server to Be Deleted
126     [Arguments]    ${alias}    ${server_id}
127     Wait Until Keyword Succeeds    300s   10s    Get Deleted Server   ${alias}    ${server_id}
128
129 Get Deleted Server
130     [Arguments]    ${alias}    ${server_id}
131     ${resp}=  Get Openstack Server By Id   ${alias}    ${server_id}
132     Should Be Equal As Strings    ${resp.status_code}    404
133
134 Delete Server
135     [Documentation]    Runs an Openstack Request to delete a keypair
136     [Arguments]    ${alias}    ${server_id}
137     ${resp}=    Internal Delete Openstack    ${alias}    ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE}    ${OPENSTACK_NOVA_SERVERS_PATH}          /${server_id}
138     ${status_string}=    Convert To String    ${resp.status_code}
139     Should Match Regexp    ${status_string}    ^(204)$
140     [Return]    ${resp.text}
141
142 Get Id For Name
143     [Arguments]    ${list}    ${name}
144     :FOR   ${item}   IN   @{list}
145     \    ${id}=    Get From Dictionary    ${item}    id
146     \    ${n}=    Get From Dictionary    ${item}    name
147     \    Return from Keyword If   '${n}' == '${name}'   ${id}
148     [Return]   None