blob: d77e9fb3ef78c57f52c956bd21c5473522b3347f [file] [log] [blame]
DR695Hccff30b2017-02-17 18:44:24 -05001*** Settings ***
2Library HeatBridge
3Library Collections
4Library StringTemplater
5Library OperatingSystem
6Library UUID
7
8Resource openstack/keystone_interface.robot
9Resource openstack/heat_interface.robot
10Resource openstack/nova_interface.robot
jf986075010a42017-02-22 16:52:54 -050011Resource openstack/neutron_interface.robot
DR695Hccff30b2017-02-17 18:44:24 -050012Resource aai/aai_interface.robot
13
14*** Variables ***
DR695Hccff30b2017-02-17 18:44:24 -050015${MULTIPART_PATH} /bulkadd
16${NAMED_QUERY_PATH} /aai/search/named-query
jf986099c63292017-03-09 15:28:42 -050017${NAMED_QUERY_TEMPLATE} robot/assets/templates/aai/named_query.template
DR695Hccff30b2017-02-17 18:44:24 -050018
jf986075010a42017-02-22 16:52:54 -050019${BASE_URI} /cloud-infrastructure/cloud-regions/cloud-region/\${cloud}/\${region}
20${IMAGE_URI} ${BASE_URI}/images/image/\${image_id}
21${FLAVOR_URI} ${BASE_URI}/flavors/flavor/\${flavor}
22${VSERVER_URI} ${BASE_URI}/tenants/tenant/\${tenant}/vservers/vserver/\${vserver_id}
23${L_INTERFACE_URI} ${VSERVER_URI}/l-interfaces/l-interface/\${linterface_id}
24
jf986099c63292017-03-09 15:28:42 -050025#******************** Test Case Variables ****************
26${REVERSE_HEATBRIDGE}
27
DR695Hccff30b2017-02-17 18:44:24 -050028
29*** Keywords ***
30Execute Heatbridge
31 [Documentation] Run the Heatbridge against the stack to generate the bulkadd message
32 ... Execute the build add
jf986099c63292017-03-09 15:28:42 -050033 ... Validate the add results by running the named query
34 [Arguments] ${stack_name} ${service_instance_id} ${service}
35 Return From Keyword If '${service}' == 'vVG'
DR695Hccff30b2017-02-17 18:44:24 -050036 Run Openstack Auth Request auth
37 ${stack_info}= Wait for Stack to Be Deployed auth ${stack_name}
38 ${stack_id}= Get From Dictionary ${stack_info} id
39 ${tenant_id}= Get From Dictionary ${stack_info} OS::project_id
40 ${vnf_id}= Get From Dictionary ${stack_info} vnf_id
Brian Freeman108048b2018-05-22 13:13:05 -050041 Run Set VNF ProvStatus ${vnf_id} PROV
Jerry Flood596db382017-10-27 08:37:37 -040042 ${url} ${path}= Get Keystone Url And Path
43 ${openstack_identity_url}= Catenate ${url}${path}
jf986099c63292017-03-09 15:28:42 -050044 ${region}= Get Openstack Region
45 ${user} ${pass}= Get Openstack Credentials
46 Init Bridge ${openstack_identity_url} ${user} ${pass} ${tenant_id} ${region} ${GLOBAL_AAI_CLOUD_OWNER}
DR695Hccff30b2017-02-17 18:44:24 -050047 ${request}= Bridge Data ${stack_id}
48 Log ${request}
Brian Freeman108048b2018-05-22 13:13:05 -050049 ${resp}= Run A&AI Put Request ${VERSIONED_INDEX_PATH}${MULTIPART_PATH} ${request}
DR695H11c06932017-03-03 18:12:49 -050050 ${status_string}= Convert To String ${resp.status_code}
51 Should Match Regexp ${status_string} ^(201|200)$
jf986075010a42017-02-22 16:52:54 -050052 ${reverse_heatbridge}= Generate Reverse Heatbridge From Stack Info ${stack_info}
53 Set Test Variable ${REVERSE_HEATBRIDGE} ${reverse_heatbridge}
DR695Hccff30b2017-02-17 18:44:24 -050054 Run Validation Query ${stack_info} ${service}
55
jf986075010a42017-02-22 16:52:54 -050056
DR695Hccff30b2017-02-17 18:44:24 -050057Run Validation Query
jf986099c63292017-03-09 15:28:42 -050058 [Documentation] Run A&AI query to validate the bulk add
DR695Hccff30b2017-02-17 18:44:24 -050059 [Arguments] ${stack_info} ${service}
jf986099c63292017-03-09 15:28:42 -050060 Return from Keyword If '${service}' == ''
DR695Hccff30b2017-02-17 18:44:24 -050061 ${server_name_parameter}= Get From Dictionary ${GLOBAL_VALIDATE_NAME_MAPPING} ${service}
62 ${vserver_name}= Get From Dictionary ${stack_info} ${server_name_parameter}
jf986099c63292017-03-09 15:28:42 -050063 Run Vserver Query ${vserver_name}
DR695Hccff30b2017-02-17 18:44:24 -050064
65Run Vserver Query
jf986099c63292017-03-09 15:28:42 -050066 [Documentation] Run A&AI query to validate the bulk add
DR695Hccff30b2017-02-17 18:44:24 -050067 [Arguments] ${vserver_name}
68 ${dict}= Create Dictionary vserver_name=${vserver_name}
69 ${request}= OperatingSystem.Get File ${NAMED_QUERY_TEMPLATE}
jf986099c63292017-03-09 15:28:42 -050070 ${request}= Template String ${request} ${dict}
DR695Hccff30b2017-02-17 18:44:24 -050071 ${resp}= Run A&AI Post Request ${NAMED_QUERY_PATH} ${request}
jf986099c63292017-03-09 15:28:42 -050072 Should Be Equal As Strings ${resp.status_code} 200
73
74
Brian Freeman108048b2018-05-22 13:13:05 -050075Run Set VNF ProvStatus
76 [Documentation] Run A&A GET and PUT to set prov-status
77 [Arguments] ${vnf_id} ${prov_status}=PROV
78 ${payload}= Run Get Generic VNF by VnfId ${vnf_id}
79
80 #${payload_json}= evaluate json.loads('''${payload}''') json
81 set to dictionary ${payload} prov-status ${prov_status}
82 ${payload_string}= evaluate json.dumps(${payload}) json
83
84 ${put_resp}= Run A&AI Put Request ${VERSIONED_INDEX_PATH}/network/generic-vnfs/generic-vnf/${vnf_id} ${payload_string}
85 ${status_string}= Convert To String ${put_resp.status_code}
86 Should Match Regexp ${status_string} ^(200|201)$
87 Log To Console Set VNF ProvStatus: ${vnf_id} to ${prov_status}
88
89Run Get Generic VNF By VnfId
90 [Documentation] Get VNF GET Payload with resource ID
91 [Arguments] ${vnf_id}
92 ${resp}= Run A&AI Get Request ${AAI_INDEX PATH}/network/generic-vnfs/generic-vnf?vnf-id=${vnf_id}
93 Should Be Equal As Strings ${resp.status_code} 200
94 [Return] ${resp.json()}
95
DR695Hccff30b2017-02-17 18:44:24 -050096Execute Reverse Heatbridge
jf986075010a42017-02-22 16:52:54 -050097 [Documentation] VID has already torn down the stack, reverse HB
98 Return From Keyword If len(${REVERSE_HEATBRIDGE}) == 0
99 :for ${uri} in @{REVERSE_HEATBRIDGE}
100 \ Run Keyword And Ignore Error Delete A&AI Entity ${uri}
DR695Hccff30b2017-02-17 18:44:24 -0500101
jf986099c63292017-03-09 15:28:42 -0500102Generate Reverse Heatbridge From Stack Name
jf986075010a42017-02-22 16:52:54 -0500103 [Arguments] ${stack_name}
DR695Hccff30b2017-02-17 18:44:24 -0500104 Run Openstack Auth Request auth
jf986075010a42017-02-22 16:52:54 -0500105 ${stack_info}= Wait for Stack to Be Deployed auth ${stack_name} timeout=10s
106 ${reverse_heatbridge}= Generate Reverse Heatbridge From Stack Info ${stack_info}
107 [Return] ${reverse_heatbridge}
jf986099c63292017-03-09 15:28:42 -0500108
109Generate Reverse Heatbridge From Stack Info
jf986075010a42017-02-22 16:52:54 -0500110 [Arguments] ${stack_info}
111 ${reverse_heatbridge}= Create List
112 ${stack_name}= Get From Dictionary ${stack_info} name
DR695Hccff30b2017-02-17 18:44:24 -0500113 ${stack_id}= Get From Dictionary ${stack_info} id
114 ${tenant_id}= Get From Dictionary ${stack_info} OS::project_id
jf986099c63292017-03-09 15:28:42 -0500115 ${region}= Get Openstack Region
116 ${keys}= Create Dictionary region=${region} cloud=${GLOBAL_AAI_CLOUD_OWNER} tenant=${tenant_id}
DR695Hccff30b2017-02-17 18:44:24 -0500117 ${stack_resources}= Get Stack Resources auth ${stack_name} ${stack_id}
118 ${resource_list}= Get From Dictionary ${stack_resources} resources
DR695Hccff30b2017-02-17 18:44:24 -0500119 :FOR ${resource} in @{resource_list}
120 \ Log ${resource}
jf986075010a42017-02-22 16:52:54 -0500121 \ Run Keyword If '${resource['resource_type']}' == 'OS::Neutron::Port' Generate Linterface Uri auth ${resource['physical_resource_id']} ${reverse_heatbridge} ${keys}
122 :FOR ${resource} in @{resource_list}
123 \ Log ${resource}
124 \ Run Keyword If '${resource['resource_type']}' == 'OS::Nova::Server' Generate Vserver Uri auth ${resource['physical_resource_id']} ${reverse_heatbridge} ${keys} ${resource_list}
125 [Return] ${reverse_heatbridge}
jf986099c63292017-03-09 15:28:42 -0500126
jf986075010a42017-02-22 16:52:54 -0500127Generate Vserver Uri
DR695Hccff30b2017-02-17 18:44:24 -0500128 [Documentation] Run teardown against the server to generate a message that removes it
jf986075010a42017-02-22 16:52:54 -0500129 [Arguments] ${alias} ${port_id} ${reverse_heatbridge} ${keys} ${resource_list}
130 ${resp}= Get Openstack Server By Id ${alias} ${port_id}
131 Return From Keyword If '${resp.status_code}' != '200'
jf986099c63292017-03-09 15:28:42 -0500132 ${info}= Set Variable ${resp.json()}
133 Set To Dictionary ${keys} vserver_id=${info['server']['id']}
134 Set To Dictionary ${keys} flavor=${info['server']['flavor']['id']}
135 Set To Dictionary ${keys} image_id=${info['server']['image']['id']}
jf986075010a42017-02-22 16:52:54 -0500136 ${uri}= Template String ${VSERVER_URI} ${keys}
137 Append To List ${reverse_heatbridge} ${uri}
138 ${uri}= Template String ${FLAVOR_URI} ${keys}
139 Append To List ${reverse_heatbridge} ${uri}
140 ${uri}= Template String ${IMAGE_URI} ${keys}
141 Append To List ${reverse_heatbridge} ${uri}
142
143Generate Linterface Uri
144 [Documentation] Run teardown against the server to generate a message that removes it
145 [Arguments] ${alias} ${server_id} ${reverse_heatbridge} ${keys}
146 ${resp}= Get Openstack Port By Id ${alias} ${server_id}
147 Return From Keyword If '${resp.status_code}' != '200'
jf986099c63292017-03-09 15:28:42 -0500148 ${info}= Set Variable ${resp.json()}
jf986075010a42017-02-22 16:52:54 -0500149 Set To Dictionary ${keys} vserver_id=${info['port']['device_id']}
150 Set To Dictionary ${keys} linterface_id=${info['port']['name']}
151 ${uri}= Template String ${L_INTERFACE_URI} ${keys}
152 Append To List ${reverse_heatbridge} ${uri}
jf986099c63292017-03-09 15:28:42 -0500153