aboutsummaryrefslogtreecommitdiffstats
path: root/robot/resources/heatbridge.robot
blob: eb6a9ed0b6dd2e4d279ee896f4aceac8cb27ebea (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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
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}