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 Create Customer For VNF Demo
86 [Documentation] Create demo customer for the demo
87 [Arguments] ${customer_name} ${customer_id} ${customer_type} ${clouder_owner} ${cloud_region_id} ${tenant_id}
88 Create Service If Not Exists vFW
89 Create Service If Not Exists vFWCL
90 Create Service If Not Exists vLB
91 Create Service If Not Exists vCPE
92 Create Service If Not Exists vIMS
93 Create Service If Not Exists gNB
94 ${data_template}= OperatingSystem.Get File ${ADD_DEMO_CUSTOMER_BODY}
95 ${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}
96 Set To Dictionary ${arguments} service1=vFWCL service2=vLB service3=vCPE service4=vIMS service5=gNB service6=vFW
97 ${data}= Fill JSON Template ${data_template} ${arguments}
98 ${put_resp}= Run A&AI Put Request ${INDEX PATH}${ROOT_CUSTOMER_PATH}${customer_id} ${data}
99 ${status_string}= Convert To String ${put_resp.status_code}
100 Should Match Regexp ${status_string} ^(200|201|412)$
103 [Documentation] Preload the demo data for the passed VNF with the passed module name
104 [Arguments] ${vnf_name} ${vf_module_name}
105 # Go to A&AI and get information about the VNF we need to preload
106 ${status} ${generic_vnf}= Run Keyword And Ignore Error Get Service Instance ${vnf_name}
107 Run Keyword If '${status}' == 'FAIL' FAIL VNF Name: ${vnf_name} is not found.
108 ${vnf_type}= Set Variable ${generic_vnf['vnf-type']}
109 ${relationships}= Set Variable ${generic_vnf['relationship-list']['relationship']}
110 ${relationship_data}= Get Relationship Data ${relationships}
111 ${customer_id}= Catenate
112 :for ${r} in @{relationship_data}
113 \ ${service}= Set Variable If '${r['relationship-key']}' == 'service-subscription.service-type' ${r['relationship-value']} ${service}
114 \ ${service_instance_id}= Set Variable If '${r['relationship-key']}' == 'service-instance.service-instance-id' ${r['relationship-value']} ${service_instance_id}
115 \ ${customer_id}= Set Variable If '${r['relationship-key']}' == 'customer.global-customer-id' ${r['relationship-value']} ${customer_id}
116 ${invariantUUID}= Get Persona Model Id ${service_instance_id} ${service} ${customer_id}
118 # We still need the vf module names. We can get them from VID using the persona_model_id (invariantUUID) from A&AI
121 ${vf_modules}= Get Module Names from VID ${invariantUUID}
123 Log ${service_instance_id},${vnf_name},${vnf_type},${vf_module_name},${vf_modules},${service}
124 Preload Vnf ${service_instance_id} ${vnf_name} ${vnf_type} ${vf_module_name} ${vf_modules} ${service} demo
125 [Teardown] Close All Browsers
128 Get Relationship Data
129 [Arguments] ${relationships}
130 :for ${r} in @{relationships}
131 \ ${status} ${relationship_data} Run Keyword And Ignore Error Set Variable ${r['relationship-data']}
132 \ Return From Keyword If '${status}' == 'PASS' ${relationship_data}
135 Get Generic VNF By ID
136 [Arguments] ${vnf_id}
137 ${resp}= Run A&AI Get Request ${AAI_INDEX PATH}/network/generic-vnfs/generic-vnf?vnf-id=${vnf_id}
138 Should Be Equal As Strings ${resp.status_code} 200
139 [Return] ${resp.json()}
142 [Arguments] ${vnf_name}
143 ${resp}= Run A&AI Get Request ${AAI_INDEX PATH}/network/generic-vnfs/generic-vnf?vnf-name=${vnf_name}
144 Should Be Equal As Strings ${resp.status_code} 200
145 [Return] ${resp.json()}
148 [Documentation] Query and Validates A&AI Service Instance
149 [Arguments] ${service_instance_id} ${service_type} ${customer_id}
150 ${resp}= Run A&AI Get Request ${INDEX PATH}${CUSTOMER SPEC PATH}${customer_id}${SERVICE SUBSCRIPTIONS}${service_type}${SERVICE INSTANCE}${service_instance_id}
151 ${persona_model_id}= Get From DIctionary ${resp.json()['service-instance'][0]} model-invariant-id
152 [Return] ${persona_model_id}
155 [Arguments] ${vf_module_name}
156 Run Openstack Auth Request auth
157 ${status} ${stack_info}= Run Keyword and Ignore Error Wait for Stack to Be Deployed auth ${vf_module_name} timeout=120s
158 Run Keyword if '${status}' == 'FAIL' FAIL ${vf_module_name} Stack is not found
159 ${stack_id}= Get From Dictionary ${stack_info} id
160 ${server_list}= Get Openstack Servers auth
161 ${vpg_name_0}= Get From Dictionary ${stack_info} vpg_name_0
162 ${vnf_id}= Get From Dictionary ${stack_info} vnf_id
163 ${vpg_public_ip}= Get Server Ip ${server_list} ${stack_info} vpg_name_0 network_name=public
164 ${vpg_oam_ip}= Get From Dictionary ${stack_info} vpg_private_ip_1
165 #${appc}= Create Mount Point In APPC ${vpg_name_0} ${vpg_oam_ip}
166 #${appc}= Create Mount Point In APPC ${vnf_id} ${vpg_oam_ip}
167 ${appc}= Create Mount Point In APPC ${vnf_id} ${vpg_public_ip}
170 [Arguments] ${service} ${vf_module_label}=NULL
171 Setup Orchestrate VNF ${GLOBAL_AAI_CLOUD_OWNER} SharedNode OwnerType v1 CloudZone
172 ${vf_module_name} ${service} ${generic_vnfs}= Orchestrate VNF DemoCust ${service} ${service} ${TENANT_NAME}
174 Log to Console Customer Name=${CUSTOMER_NAME}
175 Log to Console VNF Module Name=${vf_module_name}
176 # Don't get from MSO for now due to SO-1186
177 # ${model_invariant_id}= Run MSO Get ModelInvariantId ${SUITE_SERVICE_MODEL_NAME} ${vf_module_label}
178 ${model_invariant_id}= Set Variable ${EMPTY}
179 :for ${vf_module} in @{generic_vnfs}
180 \ ${generic_vnf}= Get From Dictionary ${generic_vnfs} ${vf_module}
181 \ ${model_invariant_id}= Set Variable If '${vf_module_label}' in '${vf_module}' ${generic_vnf['model-invariant-id']} ${model_invariant_id}
182 Log to Console ModelInvariantID=${model_invariant_id}
183 ${status} ${value}= Run Keyword And Ignore Error Update vVFWCL Policy ${model_invariant_id}
184 ${status} ${value}= Run Keyword And Ignore Error APPC Mount Point ${vf_module_name}
187 [Arguments] ${service} ${vf_module_label}=NULL
188 Setup Orchestrate VNF ${GLOBAL_AAI_CLOUD_OWNER} SharedNode OwnerType v1 CloudZone
189 ${vf_module_name} ${service} ${generic_vnfs}= Orchestrate Demo VNF Demonstration ${service} ${service} ${TENANT_NAME}
191 Log to Console Customer Name=${CUSTOMER_NAME}
192 Log to Console VNF Module Name=${vf_module_name}
193 # Don't get from MSO for now due to SO-1186
194 # ${model_invariant_id}= Run MSO Get ModelInvariantId ${SUITE_SERVICE_MODEL_NAME} ${vf_module_label}
195 ${model_invariant_id}= Set Variable ${EMPTY}
196 :for ${vf_module} in @{generic_vnfs}
197 \ ${generic_vnf}= Get From Dictionary ${generic_vnfs} ${vf_module}
198 \ ${model_invariant_id}= Set Variable If '${vf_module_label}' in '${vf_module}' ${generic_vnf['model-invariant-id']} ${model_invariant_id}
199 ${model_invariant_id}= Run MSO Get ModelInvariantId ${SUITE_SERVICE_MODEL_NAME} ${vf_module_label}
200 Log to Console ModelInvariantID=${model_invariant_id}
201 ${status} ${value}= Run Keyword And Ignore Error Update vVFWCL Policy ${model_invariant_id}
202 ${status} ${value}= Run Keyword And Ignore Error APPC Mount Point ${vf_module_name}
206 [Documentation] Create a variable file to be loaded for save for delete
207 ${dict}= Create Dictionary
208 Set To Dictionary ${dict} TENANT_NAME=${TENANT_NAME}
209 Set To Dictionary ${dict} TENANT_ID=${TENANT_ID}
210 Set To Dictionary ${dict} CUSTOMER_NAME=${CUSTOMER_NAME}
211 Set To Dictionary ${dict} STACK_NAME=${STACK_NAME}
212 Set To Dictionary ${dict} SERVICE=${SERVICE}
213 Set To Dictionary ${dict} VVG_SERVER_ID=${VVG_SERVER_ID}
214 Set To Dictionary ${dict} SERVICE_INSTANCE_ID=${SERVICE_INSTANCE_ID}
216 Set To Dictionary ${dict} VLB_CLOSED_LOOP_DELETE=${VLB_CLOSED_LOOP_DELETE}
217 Set To Dictionary ${dict} VLB_CLOSED_LOOP_VNF_ID=${VLB_CLOSED_LOOP_VNF_ID}
219 Set To Dictionary ${dict} CATALOG_SERVICE_ID=${CATALOG_SERVICE_ID}
222 ${keys}= Get Dictionary Keys ${dict}
223 :for ${key} in @{keys}
224 \ ${value}= Get From Dictionary ${dict} ${key}
225 \ ${vars}= Catenate ${vars}${key} = "${value}"\n
228 ${vars}= Catenate ${vars}CATALOG_RESOURCE_IDS = [
229 :for ${id} in @{CATALOG_RESOURCE_IDS}
230 \ ${vars}= Catenate ${vars}${comma} "${id}"
231 \ ${comma}= Catenate ,
232 ${vars}= Catenate ${vars}]\n
233 OperatingSystem.Create File ${FILE_CACHE}/${STACK_NAME}.py ${vars}
234 OperatingSystem.Create File ${FILE_CACHE}/lastVNF4HEATBRIGE.py ${vars}