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