blob: efee279a5b71fa088e8073adb11c79ca4538a459 [file] [log] [blame]
*** 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 JSONUtils
Library UUID
Library OperatingSystem
Library Collections
Resource ../global_properties.robot
Resource ../json_templater.robot
Resource openstack_common.robot
*** Variables ***
${OPENSTACK_NOVA_API_VERSION} /v2
${OPENSTACK_NOVA_KEYPAIR_PATH} /os-keypairs
${OPENSTACK_NOVA_KEYPAIR_ADD_BODY_FILE} robot/assets/templates/nova_add_keypair.template
${OPENSTACK_NOVA_KEYPAIR_SSH_KEY} robot/assets/keys/robot_ssh_public_key.txt
${OPENSTACK_NOVA_FLAVORS_PATH} /flavors
${OPENSTACK_NOVA_SERVERS_PATH} /servers
${OPENSTACK_NOVA_IMAGES_PATH} /images
${OPENSTACK_NOVA_SERVERS_REBOOT_BODY} {"reboot" : { "type" : "SOFT" }}
${OPENSTACK_NOVA_SERVER_ADD_BODY_FILE} robot/assets/templates/nova_add_server.template
*** Keywords ***
Get Openstack Keypair
[Documentation] Runs an Openstack Request and returns the keypair info
[Arguments] ${alias} ${keypair_name}
${resp}= Internal Get Openstack ${alias} ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${OPENSTACK_NOVA_KEYPAIR_PATH} /${keypair_name}
[Return] ${resp.json()}
Add Openstack Keypair
[Documentation] Runs an Openstack Request to add a keypair and returns the keypair name
[Arguments] ${alias} ${name}
${data_template}= OperatingSystem.Get File ${OPENSTACK_NOVA_KEYPAIR_ADD_BODY_FILE}
${ssh_key}= OperatingSystem.Get File ${OPENSTACK_NOVA_KEYPAIR_SSH_KEY}
${arguments}= Create Dictionary name=${name} publickey=${ssh_key}
${data}= Fill JSON Template ${data_template} ${arguments}
${resp}= Internal Post Openstack ${alias} ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${OPENSTACK_NOVA_KEYPAIR_PATH} data_path= data=${data}
Should Be Equal As Strings 200 ${resp.status_code}
[Return] ${resp.json()['keypair']['name']}
Delete Openstack Keypair
[Documentation] Runs an Openstack Request to delete a keypair
[Arguments] ${alias} ${keypair_name}
${resp}= Internal Delete Openstack ${alias} ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${OPENSTACK_NOVA_KEYPAIR_PATH} /${keypair_name}
${status_string}= Convert To String ${resp.status_code}
Should Match Regexp ${status_string} ^(204|202|200)$
[Return] ${resp.text}
Get Openstack Servers
[Documentation] Returns the list of servers as a dictionary by name
[Arguments] ${alias}
${resp}= Internal Get Openstack ${alias} ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${OPENSTACK_NOVA_SERVERS_PATH} /detail
Log Returned from Internal Get Openstack
${by_name}= Make List Into Dict ${resp.json()['servers']} name
Log got it
[Return] ${by_name}
Get Openstack Server By Id
[Documentation] Returns the openstack stacks info for the given stack name
[Arguments] ${alias} ${server_id}
${resp}= Internal Get Openstack ${alias} ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${OPENSTACK_NOVA_SERVERS_PATH} /${server_id}
[Return] ${resp}
Get Openstack Flavors
[Documentation] Runs an Openstack Request and returns the flavor list
[Arguments] ${alias}
${resp}= Internal Get Openstack ${alias} ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${OPENSTACK_NOVA_FLAVORS_PATH}
[Return] ${resp.json()}
Get Openstack Images
[Documentation] Runs an Openstack Request and returns the flavor list
[Arguments] ${alias}
${resp}= Internal Get Openstack ${alias} ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${OPENSTACK_NOVA_IMAGES_PATH}
[Return] ${resp.json()}
Reboot Server
[Documentation] Requests a reboot of the passed server id
[Arguments] ${alias} ${server_id}
${resp}= Internal Post Openstack ${alias} ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${OPENSTACK_NOVA_SERVERS_PATH} /${server_id}/action ${OPENSTACK_NOVA_SERVERS_REBOOT_BODY}
[Return] ${resp}
Add Server
[Documentation] Adds a server for the passed if
[Arguments] ${alias} ${name} ${imageRef} ${flavorRef}
${dict}= Create Dictionary name=${name} imageRef=${imageRef} flavorRef=${flavorRef}
${data}= Fill JSON Template File ${OPENSTACK_NOVA_SERVER_ADD_BODY_FILE} ${dict}
${resp}= Internal Post Openstack ${alias} ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${OPENSTACK_NOVA_SERVERS_PATH} data_path= data=${data}
[Return] ${resp}
Add Server For Image Name
[Documentation] Adds a server for the passed if
[Arguments] ${alias} ${name} ${imageName} ${flavorName}
${images}= Get Openstack Images ${alias}
${flavors}= Get Openstack Flavors ${alias}
${images}= Get From Dictionary ${images} images
${flavors}= Get From Dictionary ${flavors} flavors
${imageRef}= Get Id For Name ${images} ${imageName}
${flavorRef}= Get Id For Name ${flavors} ${flavorName}
${dict}= Create Dictionary name=${name} imageRef=${imageRef} flavorRef=${flavorRef}
${data}= Fill JSON Template File ${OPENSTACK_NOVA_SERVER_ADD_BODY_FILE} ${dict}
${resp}= Internal Post Openstack ${alias} ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${OPENSTACK_NOVA_SERVERS_PATH} data_path= data=${data}
${status_string}= Convert To String ${resp.status_code}
Should Match Regexp ${status_string} ^(202)$
[Return] ${resp.json()}
Wait for Server to Be Active
[Arguments] ${alias} ${server_id} ${timeout}=300s
${server_info}= Wait Until Keyword Succeeds ${timeout} 10 sec Get Active Server ${alias} ${server_id}
${status}= Get From Dictionary ${server_info} status
Should Be Equal ${status} ACTIVE
[Return] ${server_info}
Get Active Server
[Arguments] ${alias} ${server_id}
${resp}= Get Openstack Server By Id ${alias} ${server_id}
Should Be Equal As Strings ${resp.status_code} 200
${server_info}= Set Variable ${resp.json()}
${server_info}= Get From Dictionary ${server_info} server
${status}= Get From Dictionary ${server_info} status
Should Not Be Equal ${status} BUILD
[Return] ${server_info}
Wait for Server to Be Deleted
[Arguments] ${alias} ${server_id}
Wait Until Keyword Succeeds 300s 10s Get Deleted Server ${alias} ${server_id}
Get Deleted Server
[Arguments] ${alias} ${server_id}
${resp}= Get Openstack Server By Id ${alias} ${server_id}
Should Be Equal As Strings ${resp.status_code} 404
Delete Server
[Documentation] Runs an Openstack Request to delete a keypair
[Arguments] ${alias} ${server_id}
${resp}= Internal Delete Openstack ${alias} ${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${OPENSTACK_NOVA_SERVERS_PATH} /${server_id}
${status_string}= Convert To String ${resp.status_code}
Should Match Regexp ${status_string} ^(204)$
[Return] ${resp.text}
Get Id For Name
[Arguments] ${list} ${name}
:for ${item} in @{list}
\ ${id}= Get From Dictionary ${item} id
\ ${n}= Get From Dictionary ${item} name
\ Return from Keyword If '${n}' == '${name}' ${id}
[Return] None