aboutsummaryrefslogtreecommitdiffstats
path: root/robot/resources/heatbridge.robot
diff options
context:
space:
mode:
Diffstat (limited to 'robot/resources/heatbridge.robot')
-rw-r--r--robot/resources/heatbridge.robot148
1 files changed, 148 insertions, 0 deletions
diff --git a/robot/resources/heatbridge.robot b/robot/resources/heatbridge.robot
new file mode 100644
index 00000000..eb6a9ed0
--- /dev/null
+++ b/robot/resources/heatbridge.robot
@@ -0,0 +1,148 @@
+*** Settings ***
+Library HeatBridge
+Library Collections
+Library StringTemplater
+Library OperatingSystem
+Library UUID
+
+Resource openstack/keystone_interface.robot
+Resource openstack/heat_interface.robot
+Resource openstack/nova_interface.robot
+Resource aai/aai_interface.robot
+
+*** Variables ***
+${VERSIONED_INDEX_PATH} /aai/v8
+${MULTIPART_PATH} /bulkadd
+${NAMED_QUERY_PATH} /aai/search/named-query
+${NAMED_QUERY_TEMPLATE} robot/assets/templates/aai/named_query.template
+${REVERSE_HEATBRIDGE}
+
+
+*** Keywords ***
+Execute Heatbridge
+ [Documentation] Run the Heatbridge against the stack to generate the bulkadd message
+ ... Execute the build add
+ ... Validate the add results by running the named query
+ [Arguments] ${stack_name} ${service_instance_id} ${service}
+ Return From Keyword If '${service}' == 'vVG'
+ Run Openstack Auth Request auth
+ ${stack_info}= Wait for Stack to Be Deployed auth ${stack_name}
+ ${stack_id}= Get From Dictionary ${stack_info} id
+ ${tenant_id}= Get From Dictionary ${stack_info} OS::project_id
+ ${vnf_id}= Get From Dictionary ${stack_info} vnf_id
+ ${openstack_identity_url}= Catenate ${GLOBAL_OPENSTACK_KEYSTONE_SERVER}/v2.0
+ Init Bridge ${openstack_identity_url} ${GLOBAL_VM_PROPERTIES['openstack_username']} ${GLOBAL_VM_PROPERTIES['openstack_password']} ${tenant_id} ${GLOBAL_OPENSTACK_SERVICE_REGION} ${GLOBAL_AAI_CLOUD_OWNER}
+ ${request}= Bridge Data ${stack_id}
+ Log ${request}
+ ${resp}= Run A&AI Put Request ${VERSIONED_INDEX_PATH}${MULTIPART_PATH} ${request}
+ Should Be Equal As Strings ${resp.status_code} 200
+ Generate Reverse Heatbridge ${request}
+ Run Validation Query ${stack_info} ${service}
+
+Run Validation Query
+ [Documentation] Run A&AI query to validate the bulk add
+ [Arguments] ${stack_info} ${service}
+ Return from Keyword If '${service}' == ''
+ ${server_name_parameter}= Get From Dictionary ${GLOBAL_VALIDATE_NAME_MAPPING} ${service}
+ ${vserver_name}= Get From Dictionary ${stack_info} ${server_name_parameter}
+ Run Vserver Query ${vserver_name}
+
+Run Vserver Query
+ [Documentation] Run A&AI query to validate the bulk add
+ [Arguments] ${vserver_name}
+ ${dict}= Create Dictionary vserver_name=${vserver_name}
+ ${request}= OperatingSystem.Get File ${NAMED_QUERY_TEMPLATE}
+ ${request}= Template String ${request} ${dict}
+ ${resp}= Run A&AI Post Request ${NAMED_QUERY_PATH} ${request}
+ Should Be Equal As Strings ${resp.status_code} 200
+
+Generate Reverse Heatbridge
+ [Documentation] Turn all of the HB puts into deletes...
+ [Arguments] ${heatbridge_string}
+ ${heatbridge}= To Json ${heatbridge_string}
+ ${list}= Get From Dictionary ${heatbridge} transactions
+ ${transactions}= Create List
+ ${dupeDict} Create Dictionary
+ :for ${t} in @{list}
+ \ ${entry}= Get Deletes From Heatbridge ${t} ${dupeDict}
+ \ Run Keyword If len(${entry}) > 0 Append To List ${transactions} ${entry}
+ ${reverse}= Create Dictionary transactions=${transactions}
+ Set Test Variable ${REVERSE_HEATBRIDGE} ${reverse}
+ [Return] ${REVERSE_HEATBRIDGE}
+
+Get Deletes From Heatbridge
+ [Documentation] Turn all of the HB puts into deletes... Should be one 'put' with one
+ ... Not sure why this is structured this way, dictionary with operation as the key
+ ... So only one occurrance of an each operation, but with list of urls/bodies
+ ... So multiple gets, puts, etc. but in which order???
+ [Arguments] ${putDict} ${dupeDict}
+ ${deleteDict}= Create Dictionary
+ ${keys}= Get Dictionary Keys ${putDict}
+ # We do not expect anyhting other than 'put'
+ :for ${key} in @{keys}
+ \ Should be Equal ${key} put
+ \ ${list}= Get From Dictionary ${putDict} put
+ \ ${deleteList}= Get List Of Deletes ${list} ${dupeDict}
+ \ Run Keyword If len(${deleteList}) > 0 Set To Dictionary ${deleteDict} delete=${deleteList}
+ [Return] ${deleteDict}
+
+Get List Of Deletes
+ [Documentation] Turn the list of puts into a list of deletes...
+ ... There is only on hash per 'put' but it looks like there can be more...
+ [Arguments] ${putList} ${dupeDict}
+ ${deleteList}= Create List
+ :for ${put} in @{putList}
+ \ ${uri}= Get From Dictionary ${put} uri
+ \ Continue For Loop If '${uri}' in ${dupeDict}
+ \ ${delete}= Create Dictionary uri=${uri}
+ \ Append To List ${deleteList} ${delete}
+ \ Set To Dictionary ${dupeDict} ${uri}=${uri}
+ [Return] ${deleteList}
+
+Execute Bulk Transaction
+ [Arguments] ${transaction}
+ :for ${put} in ${transaction}
+ \ Execute Put List ${put}
+
+Execute Put List
+ [Arguments] ${put}
+ Log ${put}
+ ${list}= Get From Dictionary ${put} put
+ :for ${request} in @{list}
+ \ Execute Single Put ${request}
+
+Execute Single Put
+ [Arguments] ${request}
+ ${data}= Get From Dictionary ${request} body
+ ${path}= Get From Dictionary ${request} uri
+ ${resp}= Run A&AI Put Request ${VERSIONED_INDEX_PATH}${path} ${data}
+ Should Be Equal As Strings ${resp.status_code} 201
+
+
+Execute Reverse Heatbridge
+ [Documentation] VID has already torn down the stack, reverse HB
+ [Arguments] ${reverse_heatbridge}
+ ${resp}= Run A&AI Put Request ${VERSIONED_INDEX_PATH}${MULTIPART_PATH} ${reverse_heatbridge}
+ Should Be Equal As Strings ${resp.status_code} 200
+
+
+Execute Heatbridge Teardown
+ [Documentation] Run teardown against the stack to generate a bulkadd message that removes it
+ [Arguments] ${stack_name}
+ Run Openstack Auth Request auth
+ ${stack_info}= Wait for Stack to Be Deployed auth ${stack_name}
+ ${stack_id}= Get From Dictionary ${stack_info} id
+ ${tenant_id}= Get From Dictionary ${stack_info} OS::project_id
+ ${stack_resources}= Get Stack Resources auth ${stack_name} ${stack_id}
+ ${resource_list}= Get From Dictionary ${stack_resources} resources
+ Get Length ${resource_list}
+ Log ${resource_list}
+ :FOR ${resource} in @{resource_list}
+ \ Log ${resource}
+ \ Run Keyword If '${resource['resource_type']}' == 'OS::Nova::Server' Execute Server Teardown auth ${resource['physical_resource_id']}
+
+Execute Server Teardown
+ [Documentation] Run teardown against the server to generate a message that removes it
+ [Arguments] ${alias} ${server_id}
+ ${server}= Get Openstack Server By Id ${alias} ${server_id}
+ Log ${server} \ No newline at end of file