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 org.camunda.bpm.engine.delegate.BpmnError
24 import org.camunda.bpm.engine.delegate.DelegateExecution
25 import org.json.JSONObject
26 import org.onap.logging.filter.base.ONAPComponents
27 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
28 import org.onap.so.bpmn.common.scripts.CatalogDbUtils
29 import org.onap.so.bpmn.common.scripts.CatalogDbUtilsFactory
30 import org.onap.so.bpmn.common.scripts.ExceptionUtil
31 import org.onap.so.bpmn.common.scripts.RequestDBUtil
32 import org.onap.so.serviceinstancebeans.CloudConfiguration
33 import org.onap.so.serviceinstancebeans.LineOfBusiness
34 import org.onap.so.serviceinstancebeans.ModelInfo
35 import org.onap.so.serviceinstancebeans.ModelType
36 import org.onap.so.serviceinstancebeans.OwningEntity
37 import org.onap.so.serviceinstancebeans.Platform
38 import org.onap.so.serviceinstancebeans.Project
39 import org.onap.so.bpmn.core.json.JsonUtils
40 import org.onap.so.bpmn.core.UrnPropertiesReader
41 import org.onap.so.rest.catalog.beans.Vnf
42 import org.onap.so.serviceinstancebeans.RequestDetails
43 import org.onap.so.serviceinstancebeans.RequestInfo
44 import org.onap.so.serviceinstancebeans.RequestParameters
45 import org.onap.so.serviceinstancebeans.SubscriberInfo
46 import org.onap.aai.domain.yang.GenericVnf
47 import org.onap.aai.domain.yang.RelatedToProperty
48 import org.onap.aai.domain.yang.Relationship
49 import org.onap.aai.domain.yang.RelationshipData
50 import org.onap.aai.domain.yang.RelationshipList
51 import org.onap.aai.domain.yang.ServiceInstance
52 import org.slf4j.Logger
53 import org.slf4j.LoggerFactory
54 import org.onap.so.client.HttpClient
55 import org.onap.so.client.HttpClientFactory
56 import org.onap.so.db.request.beans.OperationStatus
57 import org.onap.so.db.request.beans.ResourceOperationStatus
58 import org.onap.aaiclient.client.aai.AAIObjectType
59 import org.onap.aaiclient.client.aai.AAIResourcesClient
60 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
61 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
62 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
63 import com.fasterxml.jackson.databind.ObjectMapper
65 import static org.apache.commons.lang3.StringUtils.isBlank
67 import javax.ws.rs.NotFoundException
68 import javax.ws.rs.core.Response
70 class DoAllocateCoreSharedSlice extends AbstractServiceTaskProcessor {
72 String Prefix="DACSNSSI_"
73 private static final Logger logger = LoggerFactory.getLogger(DoAllocateCoreSharedSlice.class);
74 private CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create()
75 private RequestDBUtil requestDBUtil = new RequestDBUtil()
76 private ExceptionUtil exceptionUtil = new ExceptionUtil()
77 private JsonUtils jsonUtil = new JsonUtils()
78 ObjectMapper mapper = new ObjectMapper();
80 private final Long TIMEOUT = 60 * 60 * 1000
83 public void preProcessRequest(DelegateExecution execution) {
85 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: preProcessRequest ****")
87 String nssisolutions = execution.getVariable("solutions")
90 List<String> nssiSolutionList = jsonUtil.StringArrayToList(nssisolutions)
92 logger.debug("nssiSolutionList : "+nssiSolutionList)
94 String nssiId = jsonUtil.getJsonValue(nssiSolutionList.get(0), "NSSIId")
95 logger.debug("NSSIId : "+nssiId)
97 if (isBlank(nssiId)) {
98 String msg = "solution nssiId is null"
100 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
102 execution.setVariable("nssiId", nssiId)
105 String sNssaiListAsString = jsonUtil.getJsonValue(execution.getVariable("sliceProfile"), "snssaiList")
106 logger.debug("sNssaiListAsString "+sNssaiListAsString)
107 List<String> sNssaiList = jsonUtil.StringArrayToList(sNssaiListAsString)
108 logger.debug("sNssaiList "+sNssaiList)
109 String sNssai = sNssaiList.get(0)
110 execution.setVariable("sNssai", sNssai)
111 logger.debug("sNssai: "+sNssai)
113 String serviceType = execution.getVariable("subscriptionServiceType")
114 execution.setVariable("serviceType", serviceType)
115 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: preProcessRequest ****")
118 public void getNetworkInstanceAssociatedWithNssiId(DelegateExecution execution) {
120 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: getNetworkInstanceAssociatedWithNssiId ****")
122 //NSSI Id as service Instance Id to get from Request
123 String serviceInstanceId = execution.getVariable("serviceInstanceID")
125 String errorMsg = "query Network Service Instance from AAI failed"
126 AAIResultWrapper wrapper = queryAAI(execution, AAIObjectType.SERVICE_INSTANCE, serviceInstanceId, errorMsg)
127 Optional<ServiceInstance> nsi = wrapper.asBean(ServiceInstance.class)
129 String networkServiceInstanceName = ""
130 String networkServiceInstanceId =""
131 if(nsi.isPresent()) {
132 List<Relationship> relationshipList = nsi.get().getRelationshipList()?.getRelationship()
133 List spiWithsNssaiAndOrchStatusList = new ArrayList<>()
135 for (Relationship relationship : relationshipList) {
136 String relatedTo = relationship.getRelatedTo()
137 if (relatedTo == "service-instance") {
138 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
139 List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
140 for (RelationshipData relationshipData : relationshipDataList) {
141 if (relationshipData.getRelationshipKey() == "service-instance.service-instance-id") {
142 logger.debug("**** service-instance.service-instance-id 1 :: getServiceInstanceRelationships :: "+ relationshipData.getRelationshipValue())
143 execution.setVariable("networkServiceInstanceId", relationshipData.getRelationshipValue())
146 for (RelatedToProperty relatedToProperty : relatedToPropertyList) {
147 if (relatedToProperty.getPropertyKey() == "service-instance.service-instance-name") {
148 execution.setVariable("networkServiceInstanceName", relatedToProperty.getPropertyValue())
152 //If related to is allotted-Resource
153 if (relatedTo == "allotted-resource") {
154 //get slice Profile Instance Id from allotted resource in list by nssi
155 List<String> sliceProfileInstanceIdList = new ArrayList<>()
156 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
157 for (RelationshipData relationshipData : relationshipDataList) {
158 if (relationshipData.getRelationshipKey() == "service-instance.service-instance-id") {
159 sliceProfileInstanceIdList.add(relationshipData.getRelationshipValue())
162 for (String sliceProfileServiceInstanceId : sliceProfileInstanceIdList) {
163 String errorSliceProfileMsg = "Slice Profile Service Instance was not found in aai"
165 //Query Slice Profile Service Instance From AAI by sliceProfileServiceInstanceId
166 AAIResultWrapper sliceProfileInstanceWrapper = queryAAI(execution, AAIObjectType.SERVICE_INSTANCE, sliceProfileServiceInstanceId, errorSliceProfileMsg)
167 Optional<ServiceInstance> sliceProfileServiceInstance = sliceProfileInstanceWrapper.asBean(ServiceInstance.class)
168 if (sliceProfileServiceInstance.isPresent()) {
169 String orchestrationStatus= sliceProfileServiceInstance.get().getOrchestrationStatus()
170 String sNssai = sliceProfileServiceInstance.get().getSliceProfiles().getSliceProfile().get(0).getSNssai()
171 if(sNssai.equals(execution.getVariable("sNssai"))) {
172 orchestrationStatus = execution.getVariable("oStatus")
173 //Slice Profile Service Instance to be updated in AAI
174 execution.setVariable("sliceProfileServiceInstance", sliceProfileServiceInstance)
177 Map<String, Object> spiWithsNssaiAndOrchStatus = new LinkedHashMap<>()
178 spiWithsNssaiAndOrchStatus.put("snssai", sNssai)
179 spiWithsNssaiAndOrchStatus.put("status", orchestrationStatus)
180 spiWithsNssaiAndOrchStatusList.add(spiWithsNssaiAndOrchStatus)
181 logger.debug("service Profile's NSSAI And Orchestration Status: "+spiWithsNssaiAndOrchStatus)
186 execution.setVariable("snssaiAndOrchStatusList", spiWithsNssaiAndOrchStatusList)
189 logger.debug("NSSI Id: ${serviceInstanceId}, network Service Instance Id: ${networkServiceInstanceId}, serviceName: ${networkServiceInstanceName}")
191 //Get ServiceInstance Relationships
192 getServiceInstanceRelationships(execution)
194 //Get Vnf Relationships
195 getVnfRelationships(execution)
197 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: getNetworkInstanceAssociatedWithNssiId ****")
200 private void getServiceInstanceRelationships(DelegateExecution execution) {
202 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: getServiceInstanceRelationships ****")
204 String serviceInstanceId = execution.getVariable("networkServiceInstanceId")
206 String errorMsg = "query Network Service Instance from AAI failed"
207 AAIResultWrapper wrapper = queryAAI(execution, AAIObjectType.SERVICE_INSTANCE, serviceInstanceId, errorMsg)
208 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
210 String networkServiceModelInvariantUuid = si.get().getModelInvariantId()
211 execution.setVariable("networkServiceModelInvariantUuid", networkServiceModelInvariantUuid)
213 List<Relationship> relationshipList = si.get().getRelationshipList()?.getRelationship()
214 for (Relationship relationship : relationshipList) {
215 String relatedTo = relationship.getRelatedTo()
216 if (relatedTo == "owning-entity") {
217 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
218 for (RelationshipData relationshipData : relationshipDataList) {
219 if (relationshipData.getRelationshipKey() == "owning-entity.owning-entity-id") {
220 execution.setVariable("owningEntityId", relationshipData.getRelationshipValue())
223 } else if (relatedTo == "generic-vnf") {
224 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
225 List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
228 for (RelationshipData relationshipData : relationshipDataList) {
229 if (relationshipData.getRelationshipKey() == "generic-vnf.vnf-id") {
230 execution.setVariable("vnfId", relationshipData.getRelationshipValue())
234 //Get Vnf Name Check If necessary
235 for (RelatedToProperty relatedToProperty : relatedToPropertyList) {
236 if (relatedToProperty.getPropertyKey() == "generic-vnf.vnf-name") {
237 execution.setVariable("vnfName", relatedToProperty.getPropertyValue())
240 } else if (relatedTo == "project") {
241 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
242 for (RelationshipData relationshipData : relationshipDataList) {
243 if (relationshipData.getRelationshipKey() == "project.project-name") {
244 execution.setVariable("projectName", relationshipData.getRelationshipValue())
250 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: getServiceInstanceRelationships ****")
254 private void getVnfRelationships(DelegateExecution execution) {
256 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: getVnfRelationships ****")
257 String msg = "query Generic Vnf from AAI failed"
259 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, execution.getVariable('vnfId'))
260 if (!getAAIClient().exists(uri)) {
261 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
263 AAIResultWrapper wrapper = getAAIClient().get(uri, NotFoundException.class)
264 Optional<GenericVnf> vnf = wrapper.asBean(GenericVnf.class)
265 if(vnf.isPresent()) {
266 List<Relationship> relationshipList = vnf.get().getRelationshipList()?.getRelationship()
267 for (Relationship relationship : relationshipList) {
268 String relatedTo = relationship.getRelatedTo()
269 if (relatedTo == "tenant") {
270 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
271 for (RelationshipData relationshipData : relationshipDataList) {
272 if (relationshipData.getRelationshipKey() == "tenant.tenant-id") {
273 execution.setVariable("tenantId", relationshipData.getRelationshipValue())
276 } else if (relatedTo == "cloud-region") {
277 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
278 for (RelationshipData relationshipData : relationshipDataList) {
279 if (relationshipData.getRelationshipKey() == "cloud-region.cloud-owner") {
280 execution.setVariable("cloudOwner", relationshipData.getRelationshipValue())
281 } else if (relationshipData.getRelationshipKey() == "cloud-region.cloud-region-id") {
282 execution.setVariable("lcpCloudRegionId", relationshipData.getRelationshipValue())
285 } else if (relatedTo == "platform") {
286 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
287 for (RelationshipData relationshipData : relationshipDataList) {
288 if (relationshipData.getRelationshipKey() == "platform.platform-name") {
289 execution.setVariable("platformName", relationshipData.getRelationshipValue())
292 } else if (relatedTo == "line-of-business") {
293 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
294 for (RelationshipData relationshipData : relationshipDataList) {
295 if (relationshipData.getRelationshipKey() == "line-of-business.line-of-business-name") {
296 execution.setVariable("lineOfBusinessName", relationshipData.getRelationshipValue())
302 } catch(BpmnError e){
304 } catch (Exception ex){
305 msg = "Exception in getVnfRelationships " + ex.getMessage()
307 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
309 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: getVnfRelationships ****")
316 * @param aaiObjectType
318 * @return AAIResultWrapper
320 private AAIResultWrapper queryAAI(DelegateExecution execution, AAIObjectType aaiObjectType, String instanceId, String errorMsg) {
321 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: queryAAI ****")
322 String globalSubscriberId = execution.getVariable("globalSubscriberId")
323 String serviceType = execution.getVariable("serviceType")
324 AAIResourceUri resourceUri = AAIUriFactory.createResourceUri(aaiObjectType, globalSubscriberId, serviceType, instanceId)
325 if (!getAAIClient().exists(resourceUri)) {
326 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMsg)
328 AAIResultWrapper wrapper = getAAIClient().get(resourceUri, NotFoundException.class)
329 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: queryAAI ****")
333 public void getServiceVNFAndVFsFromCatalogDB(DelegateExecution execution) {
334 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: getServiceVNFAndVFsFromCatalogDB ****")
335 String serviceVnfs="";
337 String modelInvariantUuid = execution.getVariable("networkServiceModelInvariantUuid")
339 CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create()
340 String json = catalogDbUtils.getServiceResourcesByServiceModelInvariantUuidString(execution, modelInvariantUuid)
341 logger.debug("***** JSON IS: "+json)
342 serviceVnfs = jsonUtil.getJsonValue(json, "serviceResources.serviceVnfs") ?: ""
343 String serviceModelInfo = jsonUtil.getJsonValue(json, "serviceResources.modelInfo") ?: ""
344 execution.setVariable("serviceModelInfo", serviceModelInfo)
345 execution.setVariable("serviceVnfs",serviceVnfs)
346 logger.debug("***** serviceVnfs is: "+ serviceVnfs)
349 } catch (Exception ex){
350 msg = "Exception in preProcessRequest " + ex.getMessage()
352 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
354 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: getServiceVNFAndVFsFromCatalogDB ****")
357 public void prepareSOMacroRequestPayload(DelegateExecution execution) {
358 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: prepareSOMacroRequestPayLoad ****")
359 String json = execution.getVariable("serviceVnfs")
360 logger.debug(">>>> json "+json)
361 List<Object> vnfList = mapper.readValue(json, List.class);
362 logger.debug("vnfList: "+vnfList)
363 Map<String,Object> serviceMap = mapper.readValue(execution.getVariable("serviceModelInfo"), Map.class);
364 ModelInfo serviceModelInfo = new ModelInfo()
365 serviceModelInfo.setModelType(ModelType.service)
366 serviceModelInfo.setModelInvariantId(serviceMap.get("modelInvariantUuid"))
367 serviceModelInfo.setModelVersionId(serviceMap.get("modelUuid"))
368 serviceModelInfo.setModelName(serviceMap.get("modelName"))
369 serviceModelInfo.setModelVersion(serviceMap.get("modelVersion"))
370 logger.debug("serviceModelInfo: "+serviceModelInfo)
372 List<Object> vnfModelInfoList = new ArrayList<>()
374 Map vnfMap = vnfList.get(0)
375 ModelInfo vnfModelInfo = vnfMap.get("modelInfo")
376 logger.debug("vnfModelInfo "+vnfModelInfo)
379 List<Map<String, Object>> vfModuleList = vnfMap.get("vfModules")
380 logger.debug("vfModuleList "+vfModuleList)
383 List<ModelInfo> vfModelInfoList = new ArrayList<>()
385 //Traverse VFModules List and add in vfModelInfoList
386 for (vfModule in vfModuleList) {
387 ModelInfo vfModelInfo = vfModule.get("modelInfo")
388 logger.debug("vfModelInfo "+vfModelInfo)
389 vfModelInfoList.add(vfModelInfo)
392 RequestInfo requestInfo = new RequestInfo()
394 //Dummy Product FamilyId
395 requestInfo.setProductFamilyId("test1234")
396 requestInfo.setSource("VID")
397 requestInfo.setInstanceName(execution.getVariable("networkServiceInstanceName"))
398 requestInfo.setSuppressRollback(false)
399 requestInfo.setRequestorId("NBI")
401 //Service Level InstanceParams
402 List<Map<String, Object>> serviceParams = new ArrayList<>()
403 Map<String, Object> serviceParamsValues = new LinkedHashMap<>()
404 serviceParams.add(serviceParamsValues)
406 //Cloud Configuration
407 CloudConfiguration cloudConfiguration = new CloudConfiguration()
408 cloudConfiguration.setLcpCloudRegionId(execution.getVariable("lcpCloudRegionId"))
409 cloudConfiguration.setTenantId(execution.getVariable("tenantId"))
410 cloudConfiguration.setCloudOwner(execution.getVariable("cloudOwner"))
413 List<Map<String, Object>> vfModules = new ArrayList<>()
414 for (ModelInfo vfModuleModelInfo : vfModelInfoList) {
415 //Individual VFModule List
416 Map<String, Object> vfModuleValues = new LinkedHashMap<>()
417 vfModuleValues.put("modelInfo", vfModuleModelInfo)
418 vfModuleValues.put("instanceName", vfModuleModelInfo.getModelInstanceName())
420 //VFModule InstanceParams should be empty or this field should not be there?
421 List<Map<String, Object>> vfModuleInstanceParams = new ArrayList<>()
422 vfModuleValues.put("instanceParams", vfModuleInstanceParams)
426 Map<String, Object> sliceProfile = mapper.readValue(execution.getVariable("sliceProfile"), Map.class);
428 List vnfInstanceParamsList = new ArrayList<>()
429 String supportedsNssaiJson= prepareVnfInstanceParamsJson(execution)
430 vnfInstanceParamsList.add(supportedsNssaiJson)
432 Platform platform = new Platform()
433 platform.setPlatformName(execution.getVariable("platform"))
435 LineOfBusiness lineOfbusiness = new LineOfBusiness()
436 lineOfbusiness.setLineOfBusinessName(execution.getVariable("lineOfBusiness"))
439 Map<String, Object> vnfValues = new LinkedHashMap<>()
440 vnfValues.put("lineOfBusiness", lineOfbusiness)
441 vnfValues.put("platform", platform)
442 vnfValues.put("productFamilyId", "test1234")
443 vnfValues.put("cloudConfiguration", cloudConfiguration)
444 vnfValues.put("vfModules", vfModules)
445 vnfValues.put("modelInfo", vnfModelInfo)
446 vnfValues.put("instanceName", execution.getVariable("vnfInstanceName"))
447 vnfValues.put("instanceParams",vnfInstanceParamsList)
449 vnfModelInfoList.add(vnfValues)
450 //Service Level Resources
451 Map<String, Object> serviceResources = new LinkedHashMap<>()
452 serviceResources.put("vnfs", vnfModelInfoList)
455 Map<String, Object> serviceValues = new LinkedHashMap<>()
456 serviceValues.put("modelInfo", serviceModelInfo)
457 serviceValues.put("instanceName", execution.getVariable("networkServiceInstanceName"))
458 serviceValues.put("resources", serviceResources)
459 serviceValues.put("instanceParams", serviceParams)
462 Map<String, Object> userParamsValues = new LinkedHashMap<>()
464 Map<String, Object> homingSolution = new LinkedHashMap<>()
465 homingSolution.put("Homing_Solution", "none")
467 userParamsValues.put("service", serviceValues)
470 List<Map<String, Object>> userParams = new ArrayList<>()
471 userParams.add(homingSolution)
472 userParams.add(userParamsValues)
475 RequestParameters requestParameters = new RequestParameters()
476 requestParameters.setaLaCarte(false)
477 requestParameters.setSubscriptionServiceType(execution.getVariable("serviceType"))
478 requestParameters.setUserParams(userParams)
481 SubscriberInfo subscriberInfo = new SubscriberInfo()
482 subscriberInfo.setGlobalSubscriberId(execution.getVariable("globalSubscriberId"))
485 OwningEntity owningEntity = new OwningEntity()
486 owningEntity.setOwningEntityId(execution.getVariable("owningEntityId"))
489 Project project = new Project()
490 project.setProjectName(execution.getVariable("projectName"))
492 RequestDetails requestDetails = new RequestDetails()
493 requestDetails.setModelInfo(serviceModelInfo)
494 requestDetails.setSubscriberInfo(subscriberInfo)
495 requestDetails.setRequestInfo(requestInfo)
496 requestDetails.setRequestParameters(requestParameters)
497 requestDetails.setCloudConfiguration(cloudConfiguration)
498 requestDetails.setOwningEntity(owningEntity)
499 requestDetails.setProject(project)
501 Map<String, Object> requestDetailsMap = new LinkedHashMap<>()
502 requestDetailsMap.put("requestDetails", requestDetails)
503 String requestPayload = mapper.writeValueAsString(requestDetailsMap)
505 logger.debug("requestDetails "+requestPayload)
506 execution.setVariable("requestPayload", requestPayload)
508 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: prepareSOMacroRequestPayLoad ****")
511 private String prepareVnfInstanceParamsJson(DelegateExecution execution) {
512 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: prepareVnfInstanceParamsJson ****")
513 List instanceParamsvalues = execution.getVariable("snssaiAndOrchStatusList")
514 Map<String, Object> nSsai= new LinkedHashMap<>()
515 nSsai.put("sNssai", instanceParamsvalues)
517 String supportedsNssaiJson = mapper.writeValueAsString(nSsai)
519 Map<String, Object> supportedNssai= new LinkedHashMap<>()
520 supportedNssai.put("supportedNssai", supportedsNssaiJson)
521 logger.debug("**** supportedsNssaiJson**** "+supportedNssai)
522 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: prepareVnfInstanceParamsJson ****")
523 return supportedNssai
526 public void sendPutRequestToSOMacro(DelegateExecution execution) {
527 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: sendPutRequestToSOMacro ****")
529 String msoEndpoint = UrnPropertiesReader.getVariable("mso.infra.endpoint.url", execution)
530 String url = msoEndpoint+"/serviceInstantiation/v7/serviceInstances/"+execution.getVariable("networkServiceInstanceId")+"/vnfs/"+execution.getVariable("vnfId")
532 String requestBody = execution.getVariable("requestPayload")
534 String msoKey = UrnPropertiesReader.getVariable("mso.msoKey", execution)
535 String basicAuth = UrnPropertiesReader.getVariable("mso.infra.endpoint.auth", execution)
536 String basicAuthValue = utils.encrypt(basicAuth, msoKey)
537 String encodeString = utils.getBasicAuth(basicAuthValue, msoKey)
539 HttpClient httpClient = getHttpClientFactory().newJsonClient(new URL(url), ONAPComponents.SO)
540 httpClient.addAdditionalHeader("Authorization", encodeString)
541 httpClient.addAdditionalHeader("Accept", "application/json")
542 Response httpResponse = httpClient.put(requestBody)
543 handleSOResponse(httpResponse, execution)
544 } catch (BpmnError e) {
547 String msg = Prefix+" Exception in DoAllocateCoreSharedSlice " + any.getCause()
549 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
551 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: sendPostRequestToSOMacro ****")
555 * Handle SO Response for PUT and prepare update operation status
558 private void handleSOResponse(Response httpResponse, DelegateExecution execution){
559 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: handleSOResponse ****")
561 int soResponseCode = httpResponse.getStatus()
562 logger.debug("soResponseCode : "+soResponseCode)
564 if (soResponseCode >= 200 && soResponseCode < 204 && httpResponse.hasEntity()) {
565 String soResponse = httpResponse.readEntity(String.class)
566 String operationId = execution.getVariable("operationId")
567 def macroOperationId = jsonUtil.getJsonValue(soResponse, "operationId")
568 execution.setVariable("macroOperationId", macroOperationId)
569 execution.setVariable("isSOTimeOut", "no")
570 execution.setVariable("isSOResponseSucceed","yes")
573 String serviceName = execution.getVariable("serviceInstanceName")
574 execution.setVariable("isSOResponseSucceed","no")
575 prepareFailedOperationStatusUpdate(execution)
577 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: handleSOResponse ****")
581 * prepare to call sub process CheckProcessStatus
584 void prepareCallCheckProcessStatus(DelegateExecution execution){
585 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: prepareCallCheckProcessStatus ****")
586 def successConditions = new ArrayList<>()
587 successConditions.add("finished")
588 execution.setVariable("successConditions", successConditions)
589 def errorConditions = new ArrayList<>()
590 errorConditions.add("error")
591 execution.setVariable("errorConditions", errorConditions)
592 execution.setVariable("processServiceType", "Network service")
593 execution.setVariable("subOperationType", "PUT")
594 execution.setVariable("initProgress", 20)
595 execution.setVariable("endProgress",90)
596 execution.setVariable("timeOut", TIMEOUT)
597 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: prepareCallCheckProcessStatus ****")
600 void prepareUpdateResourceOperationStatus(DelegateExecution execution) {
602 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: prepareUpdateResourceOperationStatus ****")
603 //Prepare Update Status for PUT failure and success
604 if(execution.getVariable("isTimeOut").equals("YES")) {
605 logger.debug("TIMEOUT - SO PUT Failure")
606 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "SO PUT Failure")
608 execution.setVariable("progress", "100")
609 execution.setVariable("status", "finished")
610 execution.setVariable("operationContent", "AllocteCoreNSSI successful.")
611 logger.debug("prepareFailureStatus,result:${execution.getVariable("result")}, reason: ${execution.getVariable("reason")}")
613 setResourceOperationStatus(execution)
614 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: prepareUpdateResourceOperationStatus ****")
618 * prepare ResourceOperation status
620 * @param operationType
622 private void setResourceOperationStatus(DelegateExecution execution) {
623 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: setResourceOperationStatus ****")
624 String serviceId = execution.getVariable("nssiId")
625 String jobId = execution.getVariable("jobId")
626 String nsiId = execution.getVariable("nsiId")
627 String operationType = execution.getVariable("operationType")
628 ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
629 resourceOperationStatus.setServiceId(serviceId)
630 resourceOperationStatus.setOperationId(jobId)
631 resourceOperationStatus.setResourceTemplateUUID(nsiId)
632 resourceOperationStatus.setOperType(operationType)
633 resourceOperationStatus.setStatus("finished")
634 resourceOperationStatus.setProgress("100")
635 resourceOperationStatus.setStatusDescription("Core Allocate successful")
636 requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
637 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: setResourceOperationStatus ****")
640 void prepareFailedOperationStatusUpdate(DelegateExecution execution){
641 logger.debug(Prefix + " **** Enter DoAllocateCoreSharedSlice ::: prepareFailedOperationStatusUpdate ****")
642 String serviceId = execution.getVariable("nssiId")
643 String jobId = execution.getVariable("jobId")
644 String nsiId = execution.getVariable("nsiId")
645 String operationType = execution.getVariable("operationType")
647 ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
648 resourceOperationStatus.setServiceId(serviceId)
649 resourceOperationStatus.setOperationId(jobId)
650 resourceOperationStatus.setResourceTemplateUUID(nsiId)
651 resourceOperationStatus.setOperType(operationType)
652 resourceOperationStatus.setProgress(0)
653 resourceOperationStatus.setStatus("failed")
654 resourceOperationStatus.setStatusDescription("Core NSSI Allocate Failed")
655 requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
656 logger.debug(Prefix + " **** Exit DoAllocateCoreSharedSlice ::: prepareFailedOperationStatusUpdate ****")