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("nssiId")
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 ****")
307 private AAIResultWrapper queryAAI(DelegateExecution execution, AAIObjectName aaiObjectName, String instanceId, String errorMsg) {
308 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: queryAAI ****")
309 String globalSubscriberId = execution.getVariable("globalSubscriberId")
310 String serviceType = execution.getVariable("serviceType")
311 AAIResourceUri resourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(instanceId))
312 if (!getAAIClient().exists(resourceUri)) {
313 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMsg)
315 AAIResultWrapper wrapper = getAAIClient().get(resourceUri, NotFoundException.class)
316 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: queryAAI ****")
320 public void getServiceVNFAndVFsFromCatalogDB(DelegateExecution execution) {
321 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: getServiceVNFAndVFsFromCatalogDB ****")
322 String serviceVnfs="";
324 String modelInvariantUuid = execution.getVariable("networkServiceModelInvariantUuid")
326 CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create()
327 String json = catalogDbUtils.getServiceResourcesByServiceModelInvariantUuidString(execution, modelInvariantUuid)
328 logger.debug("***** JSON IS: "+json)
329 serviceVnfs = jsonUtil.getJsonValue(json, "serviceResources.serviceVnfs") ?: ""
330 String serviceModelInfo = jsonUtil.getJsonValue(json, "serviceResources.modelInfo") ?: ""
331 execution.setVariable("serviceModelInfo", serviceModelInfo)
332 execution.setVariable("serviceVnfs",serviceVnfs)
333 logger.debug("***** serviceVnfs is: "+ serviceVnfs)
336 } catch (Exception ex){
337 msg = "Exception in preProcessRequest " + ex.getMessage()
339 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
341 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: getServiceVNFAndVFsFromCatalogDB ****")
344 public void prepareSOMacroRequestPayload(DelegateExecution execution) {
345 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: prepareSOMacroRequestPayLoad ****")
346 String json = execution.getVariable("serviceVnfs")
347 logger.debug(">>>> json "+json)
348 List<Object> vnfList = mapper.readValue(json, List.class);
349 logger.debug("vnfList: "+vnfList)
350 Map<String,Object> serviceMap = mapper.readValue(execution.getVariable("serviceModelInfo"), Map.class);
351 ModelInfo serviceModelInfo = new ModelInfo()
352 serviceModelInfo.setModelType(ModelType.service)
353 serviceModelInfo.setModelInvariantId(serviceMap.get("modelInvariantUuid"))
354 serviceModelInfo.setModelVersionId(serviceMap.get("modelUuid"))
355 serviceModelInfo.setModelName(serviceMap.get("modelName"))
356 serviceModelInfo.setModelVersion(serviceMap.get("modelVersion"))
357 logger.debug("serviceModelInfo: "+serviceModelInfo)
359 List<Object> vnfModelInfoList = new ArrayList<>()
361 Map vnfMap = vnfList.get(0)
362 ModelInfo vnfModelInfo = vnfMap.get("modelInfo")
363 vnfModelInfo.setModelCustomizationId(vnfModelInfo.getModelCustomizationUuid())
364 vnfModelInfo.setModelVersionId(vnfModelInfo.getModelId())
365 logger.debug("vnfModelInfo "+vnfModelInfo)
368 List<Map<String, Object>> vfModuleList = vnfMap.get("vfModules")
369 logger.debug("vfModuleList "+vfModuleList)
372 List<ModelInfo> vfModelInfoList = new ArrayList<>()
374 //Traverse VFModules List and add in vfModelInfoList
375 for (vfModule in vfModuleList) {
376 ModelInfo vfModelInfo = vfModule.get("modelInfo")
377 vfModelInfo.setModelCustomizationId(vfModelInfo.getModelCustomizationUuid())
378 vfModelInfo.setModelVersionId(vfModelInfo.getModelId())
379 logger.debug("vfModelInfo "+vfModelInfo)
380 vfModelInfoList.add(vfModelInfo)
383 RequestInfo requestInfo = new RequestInfo()
385 //Dummy Product FamilyId
386 requestInfo.setProductFamilyId("test1234")
387 requestInfo.setSource("VID")
388 requestInfo.setInstanceName(execution.getVariable("networkServiceInstanceName"))
389 requestInfo.setSuppressRollback(false)
390 requestInfo.setRequestorId("NBI")
392 //Service Level InstanceParams
393 List<Map<String, Object>> serviceParams = new ArrayList<>()
394 Map<String, Object> serviceParamsValues = new LinkedHashMap<>()
395 serviceParams.add(serviceParamsValues)
397 //Cloud Configuration
398 CloudConfiguration cloudConfiguration = new CloudConfiguration()
399 cloudConfiguration.setLcpCloudRegionId(execution.getVariable("lcpCloudRegionId"))
400 cloudConfiguration.setTenantId(execution.getVariable("tenantId"))
401 cloudConfiguration.setCloudOwner(execution.getVariable("cloudOwner"))
404 List<Map<String, Object>> vfModules = new ArrayList<>()
405 for (ModelInfo vfModuleModelInfo : vfModelInfoList) {
406 //Individual VFModule List
407 Map<String, Object> vfModuleValues = new LinkedHashMap<>()
408 vfModuleValues.put("modelInfo", vfModuleModelInfo)
409 vfModuleValues.put("instanceName", vfModuleModelInfo.getModelName())
411 //VFModule InstanceParams should be empty or this field should not be there?
412 List<Map<String, Object>> vfModuleInstanceParams = new ArrayList<>()
413 vfModuleValues.put("instanceParams", vfModuleInstanceParams)
414 vfModules.add(vfModuleValues)
418 Map<String, Object> sliceProfile = mapper.readValue(execution.getVariable("sliceProfile"), Map.class);
420 List<Map<String, Object>> vnfInstanceParamsList = new ArrayList<>()
421 String supportedsNssaiJson= prepareVnfInstanceParamsJson(execution)
423 Map<String, Object> supportedNssai= new LinkedHashMap<>()
424 supportedNssai.put("supportedsNssai", supportedsNssaiJson)
425 vnfInstanceParamsList.add(supportedNssai)
427 Platform platform = new Platform()
428 String platformName = execution.getVariable("platformName")
429 platform.setPlatformName(platformName)
431 LineOfBusiness lineOfbusiness = new LineOfBusiness()
432 String lineOfBusinessName = execution.getVariable("lineOfBusinessName")
433 lineOfbusiness.setLineOfBusinessName(lineOfBusinessName)
436 Map<String, Object> vnfValues = new LinkedHashMap<>()
437 vnfValues.put("lineOfBusiness", lineOfbusiness)
438 vnfValues.put("platform", platform)
439 vnfValues.put("productFamilyId", "test1234")
440 vnfValues.put("cloudConfiguration", cloudConfiguration)
441 vnfValues.put("vfModules", vfModules)
442 vnfValues.put("modelInfo", vnfModelInfo)
443 vnfValues.put("instanceName", vnfModelInfo.getModelInstanceName())
444 vnfValues.put("instanceParams",vnfInstanceParamsList)
446 vnfModelInfoList.add(vnfValues)
447 //Service Level Resources
448 Map<String, Object> serviceResources = new LinkedHashMap<>()
449 serviceResources.put("vnfs", vnfModelInfoList)
452 Map<String, Object> serviceValues = new LinkedHashMap<>()
453 serviceValues.put("modelInfo", serviceModelInfo)
454 serviceValues.put("instanceName", execution.getVariable("networkServiceInstanceName"))
455 serviceValues.put("resources", serviceResources)
456 serviceValues.put("instanceParams", serviceParams)
459 Map<String, Object> userParamsValues = new LinkedHashMap<>()
461 Map<String, Object> homingSolution = new LinkedHashMap<>()
462 homingSolution.put("Homing_Solution", "none")
464 userParamsValues.put("service", serviceValues)
467 List<Map<String, Object>> userParams = new ArrayList<>()
468 userParams.add(homingSolution)
469 userParams.add(userParamsValues)
472 RequestParameters requestParameters = new RequestParameters()
473 requestParameters.setaLaCarte(false)
474 requestParameters.setSubscriptionServiceType(execution.getVariable("serviceType"))
475 requestParameters.setUserParams(userParams)
478 SubscriberInfo subscriberInfo = new SubscriberInfo()
479 subscriberInfo.setGlobalSubscriberId(execution.getVariable("globalSubscriberId"))
482 OwningEntity owningEntity = new OwningEntity()
483 owningEntity.setOwningEntityId(execution.getVariable("owningEntityId"))
486 Project project = new Project()
487 project.setProjectName(execution.getVariable("projectName"))
489 RequestDetails requestDetails = new RequestDetails()
490 requestDetails.setModelInfo(serviceModelInfo)
491 requestDetails.setSubscriberInfo(subscriberInfo)
492 requestDetails.setRequestInfo(requestInfo)
493 requestDetails.setRequestParameters(requestParameters)
494 requestDetails.setCloudConfiguration(cloudConfiguration)
495 requestDetails.setOwningEntity(owningEntity)
496 requestDetails.setProject(project)
498 Map<String, Object> requestDetailsMap = new LinkedHashMap<>()
499 requestDetailsMap.put("requestDetails", requestDetails)
500 String requestPayload = mapper.writeValueAsString(requestDetailsMap)
501 logger.debug("requestDetails "+requestPayload)
502 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)
511 String supportedsNssaiJson = mapper.writeValueAsString(nSsai)
513 logger.debug("**** supportedsNssaiJson**** "+supportedsNssaiJson)
514 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: prepareVnfInstanceParamsJson ****")
515 return supportedsNssaiJson
518 public void sendPutRequestToSOMacro(DelegateExecution execution) {
519 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: sendPutRequestToSOMacro ****")
521 String msoEndpoint = UrnPropertiesReader.getVariable("mso.infra.endpoint.url", execution)
522 String url = msoEndpoint+"/serviceInstantiation/v7/serviceInstances/"+execution.getVariable("networkServiceInstanceId")+"/vnfs/"+execution.getVariable("vnfId")
523 String requestBody = execution.getVariable("requestPayload")
524 String encodeString = "Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA=="
525 logger.debug("msoEndpoint: "+msoEndpoint +" "+ "url: "+url +" requestBody: "+requestBody +" "+ "encodeString: "+encodeString)
526 HttpClient httpClient = getHttpClientFactory().newJsonClient(new URL(url), ONAPComponents.SO)
527 httpClient.addAdditionalHeader("Authorization", encodeString)
528 httpClient.addAdditionalHeader("Accept", "application/json")
529 Response httpResponse = httpClient.put(requestBody)
530 handleSOResponse(httpResponse, execution)
531 } catch (BpmnError e) {
534 String msg = Prefix+" Exception in DoAllocateCoreSharedSlice " + any.getCause()
536 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
538 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: sendPostRequestToSOMacro ****")
541 private void handleSOResponse(Response httpResponse, DelegateExecution execution){
542 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: handleSOResponse ****")
543 int soResponseCode = httpResponse.getStatus()
544 logger.debug("soResponseCode : "+soResponseCode)
546 if (soResponseCode >= 200 && soResponseCode < 204 && httpResponse.hasEntity()) {
547 String soResponse = httpResponse.readEntity(String.class)
548 logger.debug("soResponse: "+soResponse)
549 logger.debug("soResponse JsonUtil: "+jsonUtil.getJsonValue(soResponse, "requestReferences.requestId"))
550 def macroOperationId = jsonUtil.getJsonValue(soResponse, "requestReferences.requestId")
551 def requestSelfLink = jsonUtil.getJsonValue(soResponse, "requestReferences.requestSelfLink")
552 execution.setVariable("macroOperationId", macroOperationId)
553 execution.setVariable("requestSelfLink", requestSelfLink)
554 execution.setVariable("isSOTimeOut", "no")
555 execution.setVariable("isSOResponseSucceed","yes")
558 execution.setVariable("isSOResponseSucceed","no")
559 prepareFailedOperationStatusUpdate(execution)
561 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: handleSOResponse ****")
564 public void getSOPUTProgress(DelegateExecution execution) {
565 logger.debug(Prefix+ " **** Enter DoAllocateCoreSharedSlice ::: getSOPUTProgress ****")
566 String url= execution.getVariable("requestSelfLink")
567 logger.debug("url "+url)
568 HttpClient httpClient = getHttpClientFactory().newJsonClient(new URL(url), ONAPComponents.SO)
569 //Hardcoding for now, will be updated in next patch
570 httpClient.addAdditionalHeader("Authorization", "Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==")
571 httpClient.addAdditionalHeader("Accept", "application/json")
572 Response httpResponse = httpClient.get()
573 logger.debug("httpResponse "+httpResponse)
574 int soResponseCode = httpResponse.getStatus()
575 logger.debug("soResponseCode : "+soResponseCode)
576 if (soResponseCode >= 200 && soResponseCode < 204 && httpResponse.hasEntity()) {
577 String soResponse = httpResponse.readEntity(String.class)
578 logger.debug("soResponse: "+soResponse)
579 String requestState= jsonUtil.getJsonValue(soResponse, "request.requestStatus.requestState")
580 logger.debug("requestState: "+requestState)
581 execution.setVariable("requestState", requestState)
583 execution.setVariable("isSOResponseSucceed","no")
584 prepareFailedOperationStatusUpdate(execution)
586 logger.debug(Prefix+ " **** Exit DoAllocateCoreSharedSlice ::: getSOPUTProgress ****")
589 public void timeDelay(DelegateExecution execution) {
591 logger.debug(Prefix+ " **** DoAllocateCoreSharedSlice ::: timeDelay going to sleep for 5 sec")
593 logger.debug("**** DoAllocateCoreNonSharedSlice ::: timeDelay wakeup after 5 sec")
594 } catch(InterruptedException e) {
595 logger.error(Prefix+ " **** DoAllocateCoreSharedSlice ::: timeDelay exception" + e)
599 void prepareUpdateResourceOperationStatus(DelegateExecution execution) {
601 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: prepareUpdateResourceOperationStatus ****")
602 //Prepare Update Status for PUT failure and success
603 if("COMPLETED".equals(execution.getVariable("requestState"))) {
604 execution.setVariable("progress", "100")
605 execution.setVariable("status", "finished")
606 execution.setVariable("operationContent", "AllocteCoreNSSI successful.")
607 logger.debug("Success ,result:${execution.getVariable("result")}, reason: ${execution.getVariable("reason")}")
609 logger.debug("SO PUT Failure")
610 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "SO PUT Failure")
612 setResourceOperationStatus(execution)
613 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: prepareUpdateResourceOperationStatus ****")
616 private void setResourceOperationStatus(DelegateExecution execution) {
617 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: setResourceOperationStatus ****")
618 String serviceId = execution.getVariable("nssiId")
619 String jobId = execution.getVariable("jobId")
620 String nsiId = execution.getVariable("nsiId")
621 String operationType = execution.getVariable("operationType")
622 logger.debug("serviceId: "+serviceId +" "+ " jobId: "+jobId +" "+ " nsiId: "+nsiId+" nssiId: "+nssiId+" operationType: "+operationType)
623 ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
624 resourceOperationStatus.setServiceId(serviceId)
625 resourceOperationStatus.setOperationId(jobId)
626 resourceOperationStatus.setResourceTemplateUUID(nsiId)
627 resourceOperationStatus.setResourceInstanceID(nssiId)
628 resourceOperationStatus.setOperType(operationType)
629 resourceOperationStatus.setStatus("finished")
630 resourceOperationStatus.setProgress("100")
631 resourceOperationStatus.setStatusDescription("Core Allocate successful")
632 requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
633 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: setResourceOperationStatus ****")
636 void prepareFailedOperationStatusUpdate(DelegateExecution execution){
637 logger.debug(Prefix + " **** Enter DoAllocateCoreSharedSlice ::: prepareFailedOperationStatusUpdate ****")
638 String serviceId = execution.getVariable("nsiId")
639 String jobId = execution.getVariable("jobId")
640 String nsiId = execution.getVariable("nsiId")
641 String operationType = "ALLOCATE"
642 logger.debug("serviceId: "+serviceId +" "+ " jobId: "+jobId +" "+ " nsiId: "+nsiId+" operationType: "+operationType)
643 String modelUuid= execution.getVariable("modelUuid")
644 ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
645 resourceOperationStatus.setServiceId(serviceId)
646 resourceOperationStatus.setJobId(jobId)
647 resourceOperationStatus.setOperationId(jobId)
648 resourceOperationStatus.setResourceTemplateUUID(modelUuid)
649 resourceOperationStatus.setOperType(operationType)
650 resourceOperationStatus.setProgress("0")
651 resourceOperationStatus.setStatus("failed")
652 resourceOperationStatus.setStatusDescription("Core NSSI Allocate Failed")
653 requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
654 logger.debug(Prefix + " **** Exit DoAllocateCoreSharedSlice ::: prepareFailedOperationStatusUpdate ****")