4 Library StringTemplater
5 Library OperatingSystem
8 Resource openstack/keystone_interface.robot
9 Resource openstack/heat_interface.robot
10 Resource openstack/nova_interface.robot
11 Resource openstack/neutron_interface.robot
12 Resource aai/aai_interface.robot
15 ${MULTIPART_PATH} /bulkadd
16 ${NAMED_QUERY_PATH} /aai/search/named-query
17 ${NAMED_QUERY_TEMPLATE} robot/assets/templates/aai/named_query.template
19 ${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}
25 #******************** Test Case Variables ****************
31 [Documentation] Run the Heatbridge against the stack to generate the bulkadd message
32 ... Execute the build add
33 ... Validate the add results by running the named query
34 [Arguments] ${stack_name} ${service_instance_id} ${service}
35 Return From Keyword If '${service}' == 'vVG'
36 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
41 ${url} ${path}= Get Keystone Url And Path
42 ${openstack_identity_url}= Catenate ${url}${path}
43 ${region}= Get Openstack Region
44 ${user} ${pass}= Get Openstack Credentials
45 Init Bridge ${openstack_identity_url} ${user} ${pass} ${tenant_id} ${region} ${GLOBAL_AAI_CLOUD_OWNER}
46 ${request}= Bridge Data ${stack_id}
48 ${resp}= Run A&AI Put Request ${VERSIONED_INDEX_PATH}${MULTIPART_PATH} ${request}
49 ${status_string}= Convert To String ${resp.status_code}
50 Should Match Regexp ${status_string} ^(201|200)$
51 ${reverse_heatbridge}= Generate Reverse Heatbridge From Stack Info ${stack_info}
52 Set Test Variable ${REVERSE_HEATBRIDGE} ${reverse_heatbridge}
53 Run Validation Query ${stack_info} ${service}
57 [Documentation] Run A&AI query to validate the bulk add
58 [Arguments] ${stack_info} ${service}
59 Return from Keyword If '${service}' == ''
60 ${server_name_parameter}= Get From Dictionary ${GLOBAL_VALIDATE_NAME_MAPPING} ${service}
61 ${vserver_name}= Get From Dictionary ${stack_info} ${server_name_parameter}
62 Run Vserver Query ${vserver_name}
65 [Documentation] Run A&AI query to validate the bulk add
66 [Arguments] ${vserver_name}
67 ${dict}= Create Dictionary vserver_name=${vserver_name}
68 ${request}= OperatingSystem.Get File ${NAMED_QUERY_TEMPLATE}
69 ${request}= Template String ${request} ${dict}
70 ${resp}= Run A&AI Post Request ${NAMED_QUERY_PATH} ${request}
71 Should Be Equal As Strings ${resp.status_code} 200
74 Execute Reverse Heatbridge
75 [Documentation] VID has already torn down the stack, reverse HB
76 Return From Keyword If len(${REVERSE_HEATBRIDGE}) == 0
77 :for ${uri} in @{REVERSE_HEATBRIDGE}
78 \ Run Keyword And Ignore Error Delete A&AI Entity ${uri}
80 Generate Reverse Heatbridge From Stack Name
81 [Arguments] ${stack_name}
82 Run Openstack Auth Request auth
83 ${stack_info}= Wait for Stack to Be Deployed auth ${stack_name} timeout=10s
84 ${reverse_heatbridge}= Generate Reverse Heatbridge From Stack Info ${stack_info}
85 [Return] ${reverse_heatbridge}
87 Generate Reverse Heatbridge From Stack Info
88 [Arguments] ${stack_info}
89 ${reverse_heatbridge}= Create List
90 ${stack_name}= Get From Dictionary ${stack_info} name
91 ${stack_id}= Get From Dictionary ${stack_info} id
92 ${tenant_id}= Get From Dictionary ${stack_info} OS::project_id
93 ${region}= Get Openstack Region
94 ${keys}= Create Dictionary region=${region} cloud=${GLOBAL_AAI_CLOUD_OWNER} tenant=${tenant_id}
95 ${stack_resources}= Get Stack Resources auth ${stack_name} ${stack_id}
96 ${resource_list}= Get From Dictionary ${stack_resources} resources
97 :FOR ${resource} in @{resource_list}
99 \ Run Keyword If '${resource['resource_type']}' == 'OS::Neutron::Port' Generate Linterface Uri auth ${resource['physical_resource_id']} ${reverse_heatbridge} ${keys}
100 :FOR ${resource} in @{resource_list}
102 \ Run Keyword If '${resource['resource_type']}' == 'OS::Nova::Server' Generate Vserver Uri auth ${resource['physical_resource_id']} ${reverse_heatbridge} ${keys} ${resource_list}
103 [Return] ${reverse_heatbridge}
106 [Documentation] Run teardown against the server to generate a message that removes it
107 [Arguments] ${alias} ${port_id} ${reverse_heatbridge} ${keys} ${resource_list}
108 ${resp}= Get Openstack Server By Id ${alias} ${port_id}
109 Return From Keyword If '${resp.status_code}' != '200'
110 ${info}= Set Variable ${resp.json()}
111 Set To Dictionary ${keys} vserver_id=${info['server']['id']}
112 Set To Dictionary ${keys} flavor=${info['server']['flavor']['id']}
113 Set To Dictionary ${keys} image_id=${info['server']['image']['id']}
114 ${uri}= Template String ${VSERVER_URI} ${keys}
115 Append To List ${reverse_heatbridge} ${uri}
116 ${uri}= Template String ${FLAVOR_URI} ${keys}
117 Append To List ${reverse_heatbridge} ${uri}
118 ${uri}= Template String ${IMAGE_URI} ${keys}
119 Append To List ${reverse_heatbridge} ${uri}
121 Generate Linterface Uri
122 [Documentation] Run teardown against the server to generate a message that removes it
123 [Arguments] ${alias} ${server_id} ${reverse_heatbridge} ${keys}
124 ${resp}= Get Openstack Port By Id ${alias} ${server_id}
125 Return From Keyword If '${resp.status_code}' != '200'
126 ${info}= Set Variable ${resp.json()}
127 Set To Dictionary ${keys} vserver_id=${info['port']['device_id']}
128 Set To Dictionary ${keys} linterface_id=${info['port']['name']}
129 ${uri}= Template String ${L_INTERFACE_URI} ${keys}
130 Append To List ${reverse_heatbridge} ${uri}