2 Documentation This test template encapsulates the VNF Orchestration use case.
4 Resource test_templates/model_test_template.robot
5 Resource test_templates/vnf_orchestration_test_template.robot
6 Resource asdc_interface.robot
7 Resource so_interface.robot
8 Resource vid/vid_interface.robot
9 Resource policy_interface.robot
13 Library OperatingSystem
14 Library HttpLibrary.HTTP
15 Library ExtendedSelenium2Library
16 Library RequestsLibrary
20 ${ADD_DEMO_CUSTOMER_BODY} robot/assets/templates/aai/add_demo_customer.template
21 ${AAI_INDEX_PATH} /aai/v8
22 ${VF_MODULES_NAME} _Demo_VFModules.json
25 ${VPKG_MODULE_LABEL} base_vpkg
29 Load Customer And Models
30 [Documentation] Use openECOMP to Orchestrate a service.
31 [Arguments] ${customer_name}
32 Load OwningEntity lineOfBusiness LOB-${customer_name}
33 Load OwningEntity platform Platform-${customer_name}
34 Load OwningEntity project Project-${customer_name}
35 Load OwningEntity owningEntity OE-${customer_name}
36 Load Customer ${customer_name}
37 Load Models ${customer_name}
40 [Documentation] Use openECOMP to Orchestrate a service.
41 [Arguments] ${parameter} ${name}
42 ${data_path}= Set Variable /maintenance/category_parameter/${parameter}
43 ${vid_data}= Set Variable {"options":["${name}"]}
44 ${auth}= Create List ${GLOBAL_VID_USERNAME} ${GLOBAL_VID_PASSWORD}
45 Log Creating session ${data_path}
46 ${session}= Create Session vid ${VID_ENDPOINT}${VID_ENV} auth=${auth}
47 ${uuid}= Generate UUID
48 ${headers}= Create Dictionary Accept=application/json Content-Type=application/json USER_ID=${GLOBAL_VID_USERNAME} X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
49 ${resp}= Post Request vid ${data_path} data=${vid_data} headers=${headers}
52 [Documentation] Use openECOMP to Orchestrate a service.
53 [Arguments] ${customer_name}
54 Setup Orchestrate VNF ${GLOBAL_AAI_CLOUD_OWNER} SharedNode OwnerType v1 CloudZone
55 Set Test Variable ${CUSTOMER_NAME} ${customer_name}
56 ${region}= Get Openstack Region
57 Create Customer For VNF Demo ${CUSTOMER_NAME} ${CUSTOMER_NAME} INFRA ${GLOBAL_AAI_CLOUD_OWNER} ${region} ${TENANT_ID}
58 Create Customer For VNF Demo ${CUSTOMER_NAME} ${CUSTOMER_NAME} INFRA ${GLOBAL_AAI_CLOUD_OWNER} RegionTlab 50b190410b2a4c229d8a6044a80ab7c1
61 [Documentation] Use openECOMP to Orchestrate a service.
62 [Arguments] ${customer_name}
63 Set Test Variable ${CUSTOMER_NAME} ${customer_name}
64 Log To Console ${\n}Distributing vFWCL
65 ${status} ${value}= Run Keyword And Ignore Error Distribute Model vFWCL ${DEMO_PREFIX}VFWCL
66 Log To Console Distibuting vLB
67 ${status} ${value}= Run Keyword And Ignore Error Distribute Model vLB ${DEMO_PREFIX}VLB
68 ##${status} ${value}= Run Keyword And Ignore Error Distribute Model vCPE ${DEMO_PREFIX}VCPE
69 ##${status} ${value}= Run Keyword And Ignore Error Distribute Model vIMS ${DEMO_PREFIX}VIMS
70 Log To Console Distibuting vCPEInfra
71 ${status} ${value}= Run Keyword And Ignore Error Distribute Model vCPEInfra ${DEMO_PREFIX}VCPEInfra
72 Log To Console Distibuting vCPEvBNG
73 ${status} ${value}= Run Keyword And Ignore Error Distribute Model vCPEvBNG ${DEMO_PREFIX}VCPEvBNG
74 Log To Console Distibuting vCPEvBRGEMU
75 ${status} ${value}= Run Keyword And Ignore Error Distribute Model vCPEvBRGEMU ${DEMO_PREFIX}VCPEvBRGEMU
76 Log To Console Distibuting vCPEvGMUX
77 ${status} ${value}= Run Keyword And Ignore Error Distribute Model vCPEvGMUX ${DEMO_PREFIX}VCPEvGMUX
78 Log To Console Distibuting vCPEvGW (this is not vCPEResCust service)
79 ${status} ${value}= Run Keyword And Ignore Error Distribute Model vCPEvGW ${DEMO_PREFIX}VCPEvGW
82 [Arguments] ${service} ${modelName}
83 ${service_model_type} ${vnf_type} ${vf_modules} ${catalog_resources}= Model Distribution For Directory ${service} ${modelName}
85 Distribute vCPEResCust Model
86 [Arguments] ${service} ${modelName}
87 ${service_model_type} ${vnf_type} ${vf_modules} ${catalog_resources}= Model Distribution For vCPEResCust Directory ${service} ${modelName}
90 Create Customer For VNF Demo
91 [Documentation] Create demo customer for the demo
92 [Arguments] ${customer_name} ${customer_id} ${customer_type} ${clouder_owner} ${cloud_region_id} ${tenant_id}
93 Create Service If Not Exists vFW
94 Create Service If Not Exists vFWCL
95 Create Service If Not Exists vLB
96 Create Service If Not Exists vCPE
97 Create Service If Not Exists vIMS
98 Create Service If Not Exists gNB
99 ${data_template}= OperatingSystem.Get File ${ADD_DEMO_CUSTOMER_BODY}
100 ${arguments}= Create Dictionary subscriber_name=${customer_name} global_customer_id=${customer_id} subscriber_type=${customer_type} cloud_owner=${clouder_owner} cloud_region_id=${cloud_region_id} tenant_id=${tenant_id}
101 Set To Dictionary ${arguments} service1=vFWCL service2=vLB service3=vCPE service4=vIMS service5=gNB service6=vFW
102 ${data}= Fill JSON Template ${data_template} ${arguments}
103 ${put_resp}= Run A&AI Put Request ${INDEX PATH}${ROOT_CUSTOMER_PATH}${customer_id} ${data}
104 ${status_string}= Convert To String ${put_resp.status_code}
105 Should Match Regexp ${status_string} ^(200|201|412)$
108 [Documentation] Preload the demo data for the passed VNF with the passed module name
109 [Arguments] ${vnf_name} ${vf_module_name}
110 # Go to A&AI and get information about the VNF we need to preload
111 ${status} ${generic_vnf}= Run Keyword And Ignore Error Get Service Instance ${vnf_name}
112 Run Keyword If '${status}' == 'FAIL' FAIL VNF Name: ${vnf_name} is not found.
113 ${vnf_type}= Set Variable ${generic_vnf['vnf-type']}
114 ${relationships}= Set Variable ${generic_vnf['relationship-list']['relationship']}
115 ${relationship_data}= Get Relationship Data ${relationships}
116 ${customer_id}= Catenate
117 :for ${r} in @{relationship_data}
118 \ ${service}= Set Variable If '${r['relationship-key']}' == 'service-subscription.service-type' ${r['relationship-value']} ${service}
119 \ ${service_instance_id}= Set Variable If '${r['relationship-key']}' == 'service-instance.service-instance-id' ${r['relationship-value']} ${service_instance_id}
120 \ ${customer_id}= Set Variable If '${r['relationship-key']}' == 'customer.global-customer-id' ${r['relationship-value']} ${customer_id}
121 ${invariantUUID}= Get Persona Model Id ${service_instance_id} ${service} ${customer_id}
123 # We still need the vf module names. We can get them from VID using the persona_model_id (invariantUUID) from A&AI
126 ${vf_modules}= Get Module Names from VID ${invariantUUID}
128 Log ${service_instance_id},${vnf_name},${vnf_type},${vf_module_name},${vf_modules},${service}
129 Preload Vnf ${service_instance_id} ${vnf_name} ${vnf_type} ${vf_module_name} ${vf_modules} ${service} demo
130 [Teardown] Close All Browsers
133 Get Relationship Data
134 [Arguments] ${relationships}
135 :for ${r} in @{relationships}
136 \ ${status} ${relationship_data} Run Keyword And Ignore Error Set Variable ${r['relationship-data']}
137 \ Return From Keyword If '${status}' == 'PASS' ${relationship_data}
140 Get Generic VNF By ID
141 [Arguments] ${vnf_id}
142 ${resp}= Run A&AI Get Request ${AAI_INDEX PATH}/network/generic-vnfs/generic-vnf?vnf-id=${vnf_id}
143 Should Be Equal As Strings ${resp.status_code} 200
144 [Return] ${resp.json()}
147 [Arguments] ${vnf_name}
148 ${resp}= Run A&AI Get Request ${AAI_INDEX PATH}/network/generic-vnfs/generic-vnf?vnf-name=${vnf_name}
149 Should Be Equal As Strings ${resp.status_code} 200
150 [Return] ${resp.json()}
153 [Documentation] Query and Validates A&AI Service Instance
154 [Arguments] ${service_instance_id} ${service_type} ${customer_id}
155 ${resp}= Run A&AI Get Request ${INDEX PATH}${CUSTOMER SPEC PATH}${customer_id}${SERVICE SUBSCRIPTIONS}${service_type}${SERVICE INSTANCE}${service_instance_id}
156 ${persona_model_id}= Get From DIctionary ${resp.json()['service-instance'][0]} model-invariant-id
157 [Return] ${persona_model_id}
160 [Arguments] ${vf_module_name}
161 Run Openstack Auth Request auth
162 ${status} ${stack_info}= Run Keyword and Ignore Error Wait for Stack to Be Deployed auth ${vf_module_name} timeout=120s
163 Run Keyword if '${status}' == 'FAIL' FAIL ${vf_module_name} Stack is not found
164 ${stack_id}= Get From Dictionary ${stack_info} id
165 ${server_list}= Get Openstack Servers auth
166 ${vpg_name_0}= Get From Dictionary ${stack_info} vpg_name_0
167 ${vnf_id}= Get From Dictionary ${stack_info} vnf_id
168 ${vpg_public_ip}= Get Server Ip ${server_list} ${stack_info} vpg_name_0 network_name=public
169 ${vpg_oam_ip}= Get From Dictionary ${stack_info} vpg_private_ip_1
170 #${appc}= Create Mount Point In APPC ${vpg_name_0} ${vpg_oam_ip}
171 #${appc}= Create Mount Point In APPC ${vnf_id} ${vpg_oam_ip}
172 ${appc}= Create Mount Point In APPC ${vnf_id} ${vpg_public_ip}
175 [Arguments] ${service} ${vf_module_label}=NULL
176 Setup Orchestrate VNF ${GLOBAL_AAI_CLOUD_OWNER} SharedNode OwnerType v1 CloudZone
177 ${vf_module_name} ${service} ${generic_vnfs}= Orchestrate VNF DemoCust ${service} ${service} ${TENANT_NAME}
179 Log to Console Customer Name=${CUSTOMER_NAME}
180 Log to Console VNF Module Name=${vf_module_name}
181 # Don't get from MSO for now due to SO-1186
182 # ${model_invariant_id}= Run MSO Get ModelInvariantId ${SUITE_SERVICE_MODEL_NAME} ${vf_module_label}
183 ${model_invariant_id}= Set Variable ${EMPTY}
184 :for ${vf_module} in @{generic_vnfs}
185 \ ${generic_vnf}= Get From Dictionary ${generic_vnfs} ${vf_module}
186 \ ${model_invariant_id}= Set Variable If '${vf_module_label}' in '${vf_module}' ${generic_vnf['model-invariant-id']} ${model_invariant_id}
187 Log to Console ModelInvariantID=${model_invariant_id}
188 ${status} ${value}= Run Keyword And Ignore Error Update vVFWCL Policy ${model_invariant_id}
189 ${status} ${value}= Run Keyword And Ignore Error APPC Mount Point ${vf_module_name}
192 [Arguments] ${service} ${vf_module_label}=NULL
193 Setup Orchestrate VNF ${GLOBAL_AAI_CLOUD_OWNER} SharedNode OwnerType v1 CloudZone
194 ${vf_module_name} ${service} ${generic_vnfs}= Orchestrate Demo VNF Demonstration ${service} ${service} ${TENANT_NAME}
196 Log to Console Customer Name=${CUSTOMER_NAME}
197 Log to Console VNF Module Name=${vf_module_name}
198 # Don't get from MSO for now due to SO-1186
199 # ${model_invariant_id}= Run MSO Get ModelInvariantId ${SUITE_SERVICE_MODEL_NAME} ${vf_module_label}
200 ${model_invariant_id}= Set Variable ${EMPTY}
201 :for ${vf_module} in @{generic_vnfs}
202 \ ${generic_vnf}= Get From Dictionary ${generic_vnfs} ${vf_module}
203 \ ${model_invariant_id}= Set Variable If '${vf_module_label}' in '${vf_module}' ${generic_vnf['model-invariant-id']} ${model_invariant_id}
204 Log to Console ModelInvariantID=${model_invariant_id}
205 ${status} ${value}= Run Keyword And Ignore Error Update vVFWCL Policy ${model_invariant_id}
206 ${status} ${value}= Run Keyword And Ignore Error APPC Mount Point ${vf_module_name}
210 [Documentation] Create a variable file to be loaded for save for delete
211 ${dict}= Create Dictionary
212 Set To Dictionary ${dict} TENANT_NAME=${TENANT_NAME}
213 Set To Dictionary ${dict} TENANT_ID=${TENANT_ID}
214 Set To Dictionary ${dict} CUSTOMER_NAME=${CUSTOMER_NAME}
215 Set To Dictionary ${dict} STACK_NAME=${STACK_NAME}
216 Set To Dictionary ${dict} SERVICE=${SERVICE}
217 Set To Dictionary ${dict} VVG_SERVER_ID=${VVG_SERVER_ID}
218 Set To Dictionary ${dict} SERVICE_INSTANCE_ID=${SERVICE_INSTANCE_ID}
220 Set To Dictionary ${dict} VLB_CLOSED_LOOP_DELETE=${VLB_CLOSED_LOOP_DELETE}
221 Set To Dictionary ${dict} VLB_CLOSED_LOOP_VNF_ID=${VLB_CLOSED_LOOP_VNF_ID}
223 Set To Dictionary ${dict} CATALOG_SERVICE_ID=${CATALOG_SERVICE_ID}
226 ${keys}= Get Dictionary Keys ${dict}
227 :for ${key} in @{keys}
228 \ ${value}= Get From Dictionary ${dict} ${key}
229 \ ${vars}= Catenate ${vars}${key} = "${value}"\n
232 ${vars}= Catenate ${vars}CATALOG_RESOURCE_IDS = [
233 :for ${id} in @{CATALOG_RESOURCE_IDS}
234 \ ${vars}= Catenate ${vars}${comma} "${id}"
235 \ ${comma}= Catenate ,
236 ${vars}= Catenate ${vars}]\n
237 OperatingSystem.Create File ${FILE_CACHE}/${STACK_NAME}.py ${vars}
238 OperatingSystem.Create File ${FILE_CACHE}/lastVNF4HEATBRIGE.py ${vars}