2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2020 Tech Mahindra
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.bpmn.infrastructure.scripts
23 import static org.apache.commons.lang3.StringUtils.isBlank
24 import javax.ws.rs.NotFoundException
25 import javax.ws.rs.core.Response
26 import org.camunda.bpm.engine.delegate.BpmnError
27 import org.camunda.bpm.engine.delegate.DelegateExecution
28 import org.onap.aai.domain.yang.GenericVnf
29 import org.onap.aai.domain.yang.RelatedToProperty
30 import org.onap.aai.domain.yang.Relationship
31 import org.onap.aai.domain.yang.RelationshipData
32 import org.onap.aai.domain.yang.ServiceInstance
33 import org.onap.aaiclient.client.aai.AAIObjectName
34 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
35 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
36 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
37 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
38 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.Types
39 import org.onap.logging.filter.base.ONAPComponents
40 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
41 import org.onap.so.bpmn.common.scripts.CatalogDbUtils
42 import org.onap.so.bpmn.common.scripts.CatalogDbUtilsFactory
43 import org.onap.so.bpmn.common.scripts.ExceptionUtil
44 import org.onap.so.bpmn.common.scripts.RequestDBUtil
45 import org.onap.so.bpmn.core.UrnPropertiesReader
46 import org.onap.so.bpmn.core.json.JsonUtils
47 import org.onap.so.client.HttpClient
48 import org.onap.so.db.request.beans.ResourceOperationStatus
49 import org.onap.so.serviceinstancebeans.CloudConfiguration
50 import org.onap.so.serviceinstancebeans.LineOfBusiness
51 import org.onap.so.serviceinstancebeans.ModelInfo
52 import org.onap.so.serviceinstancebeans.ModelType
53 import org.onap.so.serviceinstancebeans.OwningEntity
54 import org.onap.so.serviceinstancebeans.Platform
55 import org.onap.so.serviceinstancebeans.Project
56 import org.onap.so.serviceinstancebeans.RequestDetails
57 import org.onap.so.serviceinstancebeans.RequestInfo
58 import org.onap.so.serviceinstancebeans.RequestParameters
59 import org.onap.so.serviceinstancebeans.SubscriberInfo
60 import org.slf4j.Logger
61 import org.slf4j.LoggerFactory
62 import com.fasterxml.jackson.databind.ObjectMapper
65 class DoAllocateCoreSharedSlice extends AbstractServiceTaskProcessor {
67 String Prefix="DACSNSSI_"
68 private static final Logger logger = LoggerFactory.getLogger(DoAllocateCoreSharedSlice.class);
69 private CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create()
70 private RequestDBUtil requestDBUtil = new RequestDBUtil()
71 private ExceptionUtil exceptionUtil = new ExceptionUtil()
72 private JsonUtils jsonUtil = new JsonUtils()
73 ObjectMapper mapper = new ObjectMapper();
75 private final Long TIMEOUT = 60 * 60 * 1000
78 public void preProcessRequest(DelegateExecution execution) {
80 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: preProcessRequest ****")
82 String nssisolutions = execution.getVariable("solutions")
85 List<String> nssiSolutionList = jsonUtil.StringArrayToList(nssisolutions)
87 logger.debug("nssiSolutionList : "+nssiSolutionList)
89 String nssiId = jsonUtil.getJsonValue(nssiSolutionList.get(0), "NSSIId")
90 logger.debug("NSSIId : "+nssiId)
92 if (isBlank(nssiId)) {
93 String msg = "solution nssiId is null"
95 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
97 execution.setVariable("nssiId", nssiId)
100 String sNssaiListAsString = jsonUtil.getJsonValue(execution.getVariable("sliceProfile"), "snssaiList")
101 logger.debug("sNssaiListAsString "+sNssaiListAsString)
102 List<String> sNssaiList = jsonUtil.StringArrayToList(sNssaiListAsString)
103 logger.debug("sNssaiList "+sNssaiList)
104 String sNssai = sNssaiList.get(0)
105 execution.setVariable("sNssai", sNssai)
106 logger.debug("sNssai: "+sNssai)
108 String serviceType = execution.getVariable("subscriptionServiceType")
109 execution.setVariable("serviceType", serviceType)
110 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: preProcessRequest ****")
113 public void getNetworkInstanceAssociatedWithNssiId(DelegateExecution execution) {
115 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: getNetworkInstanceAssociatedWithNssiId ****")
117 //NSSI Id as service Instance Id to get from Request
118 String serviceInstanceId = execution.getVariable("serviceInstanceID")
120 String errorMsg = "query Network Service Instance from AAI failed"
121 AAIResultWrapper wrapper = queryAAI(execution, Types.SERVICE_INSTANCE, serviceInstanceId, errorMsg)
122 Optional<ServiceInstance> nsi = wrapper.asBean(ServiceInstance.class)
124 String networkServiceInstanceName = ""
125 String networkServiceInstanceId =""
126 if(nsi.isPresent()) {
127 List<Relationship> relationshipList = nsi.get().getRelationshipList()?.getRelationship()
128 List spiWithsNssaiAndOrchStatusList = new ArrayList<>()
130 for (Relationship relationship : relationshipList) {
131 String relatedTo = relationship.getRelatedTo()
132 if (relatedTo == "service-instance") {
133 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
134 List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
135 for (RelationshipData relationshipData : relationshipDataList) {
136 if (relationshipData.getRelationshipKey() == "service-instance.service-instance-id") {
137 logger.debug("**** service-instance.service-instance-id 1 :: getServiceInstanceRelationships :: "+ relationshipData.getRelationshipValue())
138 execution.setVariable("networkServiceInstanceId", relationshipData.getRelationshipValue())
141 for (RelatedToProperty relatedToProperty : relatedToPropertyList) {
142 if (relatedToProperty.getPropertyKey() == "service-instance.service-instance-name") {
143 execution.setVariable("networkServiceInstanceName", relatedToProperty.getPropertyValue())
147 //If related to is allotted-Resource
148 if (relatedTo == "allotted-resource") {
149 //get slice Profile Instance Id from allotted resource in list by nssi
150 List<String> sliceProfileInstanceIdList = new ArrayList<>()
151 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
152 for (RelationshipData relationshipData : relationshipDataList) {
153 if (relationshipData.getRelationshipKey() == "service-instance.service-instance-id") {
154 sliceProfileInstanceIdList.add(relationshipData.getRelationshipValue())
157 for (String sliceProfileServiceInstanceId : sliceProfileInstanceIdList) {
158 String errorSliceProfileMsg = "Slice Profile Service Instance was not found in aai"
160 //Query Slice Profile Service Instance From AAI by sliceProfileServiceInstanceId
161 AAIResultWrapper sliceProfileInstanceWrapper = queryAAI(execution, Types.SERVICE_INSTANCE, sliceProfileServiceInstanceId, errorSliceProfileMsg)
162 Optional<ServiceInstance> sliceProfileServiceInstance = sliceProfileInstanceWrapper.asBean(ServiceInstance.class)
163 if (sliceProfileServiceInstance.isPresent()) {
164 String orchestrationStatus= sliceProfileServiceInstance.get().getOrchestrationStatus()
165 String sNssai = sliceProfileServiceInstance.get().getSliceProfiles().getSliceProfile().get(0).getSNssai()
166 if(sNssai.equals(execution.getVariable("sNssai"))) {
167 orchestrationStatus = execution.getVariable("oStatus")
168 //Slice Profile Service Instance to be updated in AAI
169 execution.setVariable("sliceProfileServiceInstance", sliceProfileServiceInstance)
172 Map<String, Object> spiWithsNssaiAndOrchStatus = new LinkedHashMap<>()
173 spiWithsNssaiAndOrchStatus.put("snssai", sNssai)
174 spiWithsNssaiAndOrchStatus.put("status", orchestrationStatus)
175 spiWithsNssaiAndOrchStatusList.add(spiWithsNssaiAndOrchStatus)
176 logger.debug("service Profile's NSSAI And Orchestration Status: "+spiWithsNssaiAndOrchStatus)
181 execution.setVariable("snssaiAndOrchStatusList", spiWithsNssaiAndOrchStatusList)
184 logger.debug("NSSI Id: ${serviceInstanceId}, network Service Instance Id: ${networkServiceInstanceId}, serviceName: ${networkServiceInstanceName}")
186 //Get ServiceInstance Relationships
187 getServiceInstanceRelationships(execution)
189 //Get Vnf Relationships
190 getVnfRelationships(execution)
192 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: getNetworkInstanceAssociatedWithNssiId ****")
195 private void getServiceInstanceRelationships(DelegateExecution execution) {
197 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: getServiceInstanceRelationships ****")
199 String serviceInstanceId = execution.getVariable("networkServiceInstanceId")
201 String errorMsg = "query Network Service Instance from AAI failed"
202 AAIResultWrapper wrapper = queryAAI(execution, Types.SERVICE_INSTANCE, serviceInstanceId, errorMsg)
203 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
205 String networkServiceModelInvariantUuid = si.get().getModelInvariantId()
206 execution.setVariable("networkServiceModelInvariantUuid", networkServiceModelInvariantUuid)
208 List<Relationship> relationshipList = si.get().getRelationshipList()?.getRelationship()
209 for (Relationship relationship : relationshipList) {
210 String relatedTo = relationship.getRelatedTo()
211 if (relatedTo == "owning-entity") {
212 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
213 for (RelationshipData relationshipData : relationshipDataList) {
214 if (relationshipData.getRelationshipKey() == "owning-entity.owning-entity-id") {
215 execution.setVariable("owningEntityId", relationshipData.getRelationshipValue())
218 } else if (relatedTo == "generic-vnf") {
219 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
220 List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
223 for (RelationshipData relationshipData : relationshipDataList) {
224 if (relationshipData.getRelationshipKey() == "generic-vnf.vnf-id") {
225 execution.setVariable("vnfId", relationshipData.getRelationshipValue())
229 //Get Vnf Name Check If necessary
230 for (RelatedToProperty relatedToProperty : relatedToPropertyList) {
231 if (relatedToProperty.getPropertyKey() == "generic-vnf.vnf-name") {
232 execution.setVariable("vnfName", relatedToProperty.getPropertyValue())
235 } else if (relatedTo == "project") {
236 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
237 for (RelationshipData relationshipData : relationshipDataList) {
238 if (relationshipData.getRelationshipKey() == "project.project-name") {
239 execution.setVariable("projectName", relationshipData.getRelationshipValue())
245 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: getServiceInstanceRelationships ****")
249 private void getVnfRelationships(DelegateExecution execution) {
251 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: getVnfRelationships ****")
252 String msg = "query Generic Vnf from AAI failed"
254 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().genericVnf(execution.getVariable('vnfId')))
255 if (!getAAIClient().exists(uri)) {
256 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
258 AAIResultWrapper wrapper = getAAIClient().get(uri, NotFoundException.class)
259 Optional<GenericVnf> vnf = wrapper.asBean(GenericVnf.class)
260 if(vnf.isPresent()) {
261 List<Relationship> relationshipList = vnf.get().getRelationshipList()?.getRelationship()
262 for (Relationship relationship : relationshipList) {
263 String relatedTo = relationship.getRelatedTo()
264 if (relatedTo == "tenant") {
265 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
266 for (RelationshipData relationshipData : relationshipDataList) {
267 if (relationshipData.getRelationshipKey() == "tenant.tenant-id") {
268 execution.setVariable("tenantId", relationshipData.getRelationshipValue())
271 } else if (relatedTo == "cloud-region") {
272 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
273 for (RelationshipData relationshipData : relationshipDataList) {
274 if (relationshipData.getRelationshipKey() == "cloud-region.cloud-owner") {
275 execution.setVariable("cloudOwner", relationshipData.getRelationshipValue())
276 } else if (relationshipData.getRelationshipKey() == "cloud-region.cloud-region-id") {
277 execution.setVariable("lcpCloudRegionId", relationshipData.getRelationshipValue())
280 } else if (relatedTo == "platform") {
281 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
282 for (RelationshipData relationshipData : relationshipDataList) {
283 if (relationshipData.getRelationshipKey() == "platform.platform-name") {
284 execution.setVariable("platformName", relationshipData.getRelationshipValue())
287 } else if (relatedTo == "line-of-business") {
288 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
289 for (RelationshipData relationshipData : relationshipDataList) {
290 if (relationshipData.getRelationshipKey() == "line-of-business.line-of-business-name") {
291 execution.setVariable("lineOfBusinessName", relationshipData.getRelationshipValue())
297 } catch(BpmnError e){
299 } catch (Exception ex){
300 msg = "Exception in getVnfRelationships " + ex.getMessage()
302 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
304 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: getVnfRelationships ****")
311 * @param aaiObjectName
313 * @return AAIResultWrapper
315 private AAIResultWrapper queryAAI(DelegateExecution execution, AAIObjectName aaiObjectName, String instanceId, String errorMsg) {
316 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: queryAAI ****")
317 String globalSubscriberId = execution.getVariable("globalSubscriberId")
318 String serviceType = execution.getVariable("serviceType")
319 AAIResourceUri resourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(instanceId))
320 if (!getAAIClient().exists(resourceUri)) {
321 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMsg)
323 AAIResultWrapper wrapper = getAAIClient().get(resourceUri, NotFoundException.class)
324 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: queryAAI ****")
328 public void getServiceVNFAndVFsFromCatalogDB(DelegateExecution execution) {
329 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: getServiceVNFAndVFsFromCatalogDB ****")
330 String serviceVnfs="";
332 String modelInvariantUuid = execution.getVariable("networkServiceModelInvariantUuid")
334 CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create()
335 String json = catalogDbUtils.getServiceResourcesByServiceModelInvariantUuidString(execution, modelInvariantUuid)
336 logger.debug("***** JSON IS: "+json)
337 serviceVnfs = jsonUtil.getJsonValue(json, "serviceResources.serviceVnfs") ?: ""
338 String serviceModelInfo = jsonUtil.getJsonValue(json, "serviceResources.modelInfo") ?: ""
339 execution.setVariable("serviceModelInfo", serviceModelInfo)
340 execution.setVariable("serviceVnfs",serviceVnfs)
341 logger.debug("***** serviceVnfs is: "+ serviceVnfs)
344 } catch (Exception ex){
345 msg = "Exception in preProcessRequest " + ex.getMessage()
347 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
349 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: getServiceVNFAndVFsFromCatalogDB ****")
352 public void prepareSOMacroRequestPayload(DelegateExecution execution) {
353 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: prepareSOMacroRequestPayLoad ****")
354 String json = execution.getVariable("serviceVnfs")
355 logger.debug(">>>> json "+json)
356 List<Object> vnfList = mapper.readValue(json, List.class);
357 logger.debug("vnfList: "+vnfList)
358 Map<String,Object> serviceMap = mapper.readValue(execution.getVariable("serviceModelInfo"), Map.class);
359 ModelInfo serviceModelInfo = new ModelInfo()
360 serviceModelInfo.setModelType(ModelType.service)
361 serviceModelInfo.setModelInvariantId(serviceMap.get("modelInvariantUuid"))
362 serviceModelInfo.setModelVersionId(serviceMap.get("modelUuid"))
363 serviceModelInfo.setModelName(serviceMap.get("modelName"))
364 serviceModelInfo.setModelVersion(serviceMap.get("modelVersion"))
365 logger.debug("serviceModelInfo: "+serviceModelInfo)
367 List<Object> vnfModelInfoList = new ArrayList<>()
369 Map vnfMap = vnfList.get(0)
370 ModelInfo vnfModelInfo = vnfMap.get("modelInfo")
371 logger.debug("vnfModelInfo "+vnfModelInfo)
374 List<Map<String, Object>> vfModuleList = vnfMap.get("vfModules")
375 logger.debug("vfModuleList "+vfModuleList)
378 List<ModelInfo> vfModelInfoList = new ArrayList<>()
380 //Traverse VFModules List and add in vfModelInfoList
381 for (vfModule in vfModuleList) {
382 ModelInfo vfModelInfo = vfModule.get("modelInfo")
383 logger.debug("vfModelInfo "+vfModelInfo)
384 vfModelInfoList.add(vfModelInfo)
387 RequestInfo requestInfo = new RequestInfo()
389 //Dummy Product FamilyId
390 requestInfo.setProductFamilyId("test1234")
391 requestInfo.setSource("VID")
392 requestInfo.setInstanceName(execution.getVariable("networkServiceInstanceName"))
393 requestInfo.setSuppressRollback(false)
394 requestInfo.setRequestorId("NBI")
396 //Service Level InstanceParams
397 List<Map<String, Object>> serviceParams = new ArrayList<>()
398 Map<String, Object> serviceParamsValues = new LinkedHashMap<>()
399 serviceParams.add(serviceParamsValues)
401 //Cloud Configuration
402 CloudConfiguration cloudConfiguration = new CloudConfiguration()
403 cloudConfiguration.setLcpCloudRegionId(execution.getVariable("lcpCloudRegionId"))
404 cloudConfiguration.setTenantId(execution.getVariable("tenantId"))
405 cloudConfiguration.setCloudOwner(execution.getVariable("cloudOwner"))
408 List<Map<String, Object>> vfModules = new ArrayList<>()
409 for (ModelInfo vfModuleModelInfo : vfModelInfoList) {
410 //Individual VFModule List
411 Map<String, Object> vfModuleValues = new LinkedHashMap<>()
412 vfModuleValues.put("modelInfo", vfModuleModelInfo)
413 vfModuleValues.put("instanceName", vfModuleModelInfo.getModelInstanceName())
415 //VFModule InstanceParams should be empty or this field should not be there?
416 List<Map<String, Object>> vfModuleInstanceParams = new ArrayList<>()
417 vfModuleValues.put("instanceParams", vfModuleInstanceParams)
421 Map<String, Object> sliceProfile = mapper.readValue(execution.getVariable("sliceProfile"), Map.class);
423 List vnfInstanceParamsList = new ArrayList<>()
424 String supportedsNssaiJson= prepareVnfInstanceParamsJson(execution)
425 vnfInstanceParamsList.add(supportedsNssaiJson)
427 Platform platform = new Platform()
428 platform.setPlatformName(execution.getVariable("platform"))
430 LineOfBusiness lineOfbusiness = new LineOfBusiness()
431 lineOfbusiness.setLineOfBusinessName(execution.getVariable("lineOfBusiness"))
434 Map<String, Object> vnfValues = new LinkedHashMap<>()
435 vnfValues.put("lineOfBusiness", lineOfbusiness)
436 vnfValues.put("platform", platform)
437 vnfValues.put("productFamilyId", "test1234")
438 vnfValues.put("cloudConfiguration", cloudConfiguration)
439 vnfValues.put("vfModules", vfModules)
440 vnfValues.put("modelInfo", vnfModelInfo)
441 vnfValues.put("instanceName", execution.getVariable("vnfInstanceName"))
442 vnfValues.put("instanceParams",vnfInstanceParamsList)
444 vnfModelInfoList.add(vnfValues)
445 //Service Level Resources
446 Map<String, Object> serviceResources = new LinkedHashMap<>()
447 serviceResources.put("vnfs", vnfModelInfoList)
450 Map<String, Object> serviceValues = new LinkedHashMap<>()
451 serviceValues.put("modelInfo", serviceModelInfo)
452 serviceValues.put("instanceName", execution.getVariable("networkServiceInstanceName"))
453 serviceValues.put("resources", serviceResources)
454 serviceValues.put("instanceParams", serviceParams)
457 Map<String, Object> userParamsValues = new LinkedHashMap<>()
459 Map<String, Object> homingSolution = new LinkedHashMap<>()
460 homingSolution.put("Homing_Solution", "none")
462 userParamsValues.put("service", serviceValues)
465 List<Map<String, Object>> userParams = new ArrayList<>()
466 userParams.add(homingSolution)
467 userParams.add(userParamsValues)
470 RequestParameters requestParameters = new RequestParameters()
471 requestParameters.setaLaCarte(false)
472 requestParameters.setSubscriptionServiceType(execution.getVariable("serviceType"))
473 requestParameters.setUserParams(userParams)
476 SubscriberInfo subscriberInfo = new SubscriberInfo()
477 subscriberInfo.setGlobalSubscriberId(execution.getVariable("globalSubscriberId"))
480 OwningEntity owningEntity = new OwningEntity()
481 owningEntity.setOwningEntityId(execution.getVariable("owningEntityId"))
484 Project project = new Project()
485 project.setProjectName(execution.getVariable("projectName"))
487 RequestDetails requestDetails = new RequestDetails()
488 requestDetails.setModelInfo(serviceModelInfo)
489 requestDetails.setSubscriberInfo(subscriberInfo)
490 requestDetails.setRequestInfo(requestInfo)
491 requestDetails.setRequestParameters(requestParameters)
492 requestDetails.setCloudConfiguration(cloudConfiguration)
493 requestDetails.setOwningEntity(owningEntity)
494 requestDetails.setProject(project)
496 Map<String, Object> requestDetailsMap = new LinkedHashMap<>()
497 requestDetailsMap.put("requestDetails", requestDetails)
498 String requestPayload = mapper.writeValueAsString(requestDetailsMap)
500 logger.debug("requestDetails "+requestPayload)
501 execution.setVariable("requestPayload", requestPayload)
503 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: prepareSOMacroRequestPayLoad ****")
506 private String prepareVnfInstanceParamsJson(DelegateExecution execution) {
507 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: prepareVnfInstanceParamsJson ****")
508 List instanceParamsvalues = execution.getVariable("snssaiAndOrchStatusList")
509 Map<String, Object> nSsai= new LinkedHashMap<>()
510 nSsai.put("sNssai", instanceParamsvalues)
512 String supportedsNssaiJson = mapper.writeValueAsString(nSsai)
514 Map<String, Object> supportedNssai= new LinkedHashMap<>()
515 supportedNssai.put("supportedNssai", supportedsNssaiJson)
516 logger.debug("**** supportedsNssaiJson**** "+supportedNssai)
517 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: prepareVnfInstanceParamsJson ****")
518 return supportedNssai
521 public void sendPutRequestToSOMacro(DelegateExecution execution) {
522 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: sendPutRequestToSOMacro ****")
524 String msoEndpoint = UrnPropertiesReader.getVariable("mso.infra.endpoint.url", execution)
525 String url = msoEndpoint+"/serviceInstantiation/v7/serviceInstances/"+execution.getVariable("networkServiceInstanceId")+"/vnfs/"+execution.getVariable("vnfId")
527 String requestBody = execution.getVariable("requestPayload")
529 String msoKey = UrnPropertiesReader.getVariable("mso.msoKey", execution)
530 String basicAuth = UrnPropertiesReader.getVariable("mso.infra.endpoint.auth", execution)
531 String basicAuthValue = utils.encrypt(basicAuth, msoKey)
532 String encodeString = utils.getBasicAuth(basicAuthValue, msoKey)
534 HttpClient httpClient = getHttpClientFactory().newJsonClient(new URL(url), ONAPComponents.SO)
535 httpClient.addAdditionalHeader("Authorization", encodeString)
536 httpClient.addAdditionalHeader("Accept", "application/json")
537 Response httpResponse = httpClient.put(requestBody)
538 handleSOResponse(httpResponse, execution)
539 } catch (BpmnError e) {
542 String msg = Prefix+" Exception in DoAllocateCoreSharedSlice " + any.getCause()
544 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
546 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: sendPostRequestToSOMacro ****")
550 * Handle SO Response for PUT and prepare update operation status
553 private void handleSOResponse(Response httpResponse, DelegateExecution execution){
554 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: handleSOResponse ****")
556 int soResponseCode = httpResponse.getStatus()
557 logger.debug("soResponseCode : "+soResponseCode)
559 if (soResponseCode >= 200 && soResponseCode < 204 && httpResponse.hasEntity()) {
560 String soResponse = httpResponse.readEntity(String.class)
561 String operationId = execution.getVariable("operationId")
562 def macroOperationId = jsonUtil.getJsonValue(soResponse, "operationId")
563 execution.setVariable("macroOperationId", macroOperationId)
564 execution.setVariable("isSOTimeOut", "no")
565 execution.setVariable("isSOResponseSucceed","yes")
568 String serviceName = execution.getVariable("serviceInstanceName")
569 execution.setVariable("isSOResponseSucceed","no")
570 prepareFailedOperationStatusUpdate(execution)
572 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: handleSOResponse ****")
576 * prepare to call sub process CheckProcessStatus
579 void prepareCallCheckProcessStatus(DelegateExecution execution){
580 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: prepareCallCheckProcessStatus ****")
581 def successConditions = new ArrayList<>()
582 successConditions.add("finished")
583 execution.setVariable("successConditions", successConditions)
584 def errorConditions = new ArrayList<>()
585 errorConditions.add("error")
586 execution.setVariable("errorConditions", errorConditions)
587 execution.setVariable("processServiceType", "Network service")
588 execution.setVariable("subOperationType", "PUT")
589 execution.setVariable("initProgress", 20)
590 execution.setVariable("endProgress",90)
591 execution.setVariable("timeOut", TIMEOUT)
592 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: prepareCallCheckProcessStatus ****")
595 void prepareUpdateResourceOperationStatus(DelegateExecution execution) {
597 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: prepareUpdateResourceOperationStatus ****")
598 //Prepare Update Status for PUT failure and success
599 if(execution.getVariable("isTimeOut").equals("YES")) {
600 logger.debug("TIMEOUT - SO PUT Failure")
601 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "SO PUT Failure")
603 execution.setVariable("progress", "100")
604 execution.setVariable("status", "finished")
605 execution.setVariable("operationContent", "AllocteCoreNSSI successful.")
606 logger.debug("prepareFailureStatus,result:${execution.getVariable("result")}, reason: ${execution.getVariable("reason")}")
608 setResourceOperationStatus(execution)
609 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: prepareUpdateResourceOperationStatus ****")
613 * prepare ResourceOperation status
615 * @param operationType
617 private void setResourceOperationStatus(DelegateExecution execution) {
618 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: setResourceOperationStatus ****")
619 String serviceId = execution.getVariable("nssiId")
620 String jobId = execution.getVariable("jobId")
621 String nsiId = execution.getVariable("nsiId")
622 String operationType = execution.getVariable("operationType")
623 ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
624 resourceOperationStatus.setServiceId(serviceId)
625 resourceOperationStatus.setOperationId(jobId)
626 resourceOperationStatus.setResourceTemplateUUID(nsiId)
627 resourceOperationStatus.setOperType(operationType)
628 resourceOperationStatus.setStatus("finished")
629 resourceOperationStatus.setProgress("100")
630 resourceOperationStatus.setStatusDescription("Core Allocate successful")
631 requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
632 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: setResourceOperationStatus ****")
635 void prepareFailedOperationStatusUpdate(DelegateExecution execution){
636 logger.debug(Prefix + " **** Enter DoAllocateCoreSharedSlice ::: prepareFailedOperationStatusUpdate ****")
637 String serviceId = execution.getVariable("nssiId")
638 String jobId = execution.getVariable("jobId")
639 String nsiId = execution.getVariable("nsiId")
640 String operationType = execution.getVariable("operationType")
642 ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
643 resourceOperationStatus.setServiceId(serviceId)
644 resourceOperationStatus.setOperationId(jobId)
645 resourceOperationStatus.setResourceTemplateUUID(nsiId)
646 resourceOperationStatus.setOperType(operationType)
647 resourceOperationStatus.setProgress(0)
648 resourceOperationStatus.setStatus("failed")
649 resourceOperationStatus.setStatusDescription("Core NSSI Allocate Failed")
650 requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
651 logger.debug(Prefix + " **** Exit DoAllocateCoreSharedSlice ::: prepareFailedOperationStatusUpdate ****")