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")
83 String nssiId = jsonUtil.getJsonValue(nssisolutions, "NSSIId")
85 if (isBlank(nssiId)) {
86 String msg = "solution nssiId is null"
88 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
90 execution.setVariable("nssiId", nssiId)
93 String sNssaiListAsString = jsonUtil.getJsonValue(execution.getVariable("sliceProfile"), "snssaiList")
94 List<String> sNssaiList = jsonUtil.StringArrayToList(sNssaiListAsString)
95 String sNssai = sNssaiList.get(0)
96 execution.setVariable("sNssai", sNssai)
98 //Setting this value in Map
99 Map<String, Object> spiWithsNssaiAndOrchStatus = new LinkedHashMap<>()
100 spiWithsNssaiAndOrchStatus.put("snssai", sNssai)
101 spiWithsNssaiAndOrchStatus.put("status", "created")
103 List <Map<String, Object>> spiWithsNssaiAndOrchStatusList = new ArrayList<>();
104 spiWithsNssaiAndOrchStatusList.add(spiWithsNssaiAndOrchStatus)
106 execution.setVariable("snssaiAndOrchStatusList", spiWithsNssaiAndOrchStatusList)
107 logger.debug("service Profile's NSSAI And Orchestration Status: "+spiWithsNssaiAndOrchStatus)
109 String serviceType = execution.getVariable("subscriptionServiceType")
110 execution.setVariable("serviceType", serviceType)
111 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: preProcessRequest ****")
114 public void getNetworkInstanceAssociatedWithNssiId(DelegateExecution execution) {
116 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: getNetworkInstanceAssociatedWithNssiId ****")
118 //NSSI Id as service Instance Id to get from Request
119 String serviceInstanceId = execution.getVariable("nssiId")
121 String errorMsg = "query Network Service Instance from AAI failed"
122 AAIResultWrapper wrapper = queryAAI(execution, Types.SERVICE_INSTANCE, serviceInstanceId, errorMsg)
123 Optional<ServiceInstance> nsi = wrapper.asBean(ServiceInstance.class)
125 String networkServiceInstanceName = ""
126 String networkServiceInstanceId =""
127 if(nsi.isPresent()) {
128 List<Relationship> relationshipList = nsi.get().getRelationshipList()?.getRelationship()
130 List spiWithsNssaiAndOrchStatusList = execution.getVariable("snssaiAndOrchStatusList")
132 if(spiWithsNssaiAndOrchStatusList == null) {
133 spiWithsNssaiAndOrchStatusList = new ArrayList<>();
136 for (Relationship relationship : relationshipList) {
137 String relatedTo = relationship.getRelatedTo()
138 if ("service-instance".equals(relatedTo)) {
139 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
140 List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
141 for (RelationshipData relationshipData : relationshipDataList) {
142 if ("service-instance.service-instance-id".equals(relationshipData.getRelationshipKey())) {
143 logger.debug("**** service-instance.service-instance-id 1 :: getServiceInstanceRelationships :: "+ relationshipData.getRelationshipValue())
145 //Query Every related Service Instance From AAI by service Instance ID
146 AAIResultWrapper instanceWrapper = queryAAI(execution, Types.SERVICE_INSTANCE, relationshipData.getRelationshipValue(), "No Instance Present")
147 Optional<ServiceInstance> relatedServiceInstance = instanceWrapper.asBean(ServiceInstance.class)
148 if (relatedServiceInstance.isPresent()) {
149 ServiceInstance relatedServiceInstanceObj = relatedServiceInstance.get()
151 String role = relatedServiceInstanceObj.getServiceRole();
153 if(role == null || role.isEmpty()) {
154 networkServiceInstanceId = relatedServiceInstanceObj.getServiceInstanceId()
155 networkServiceInstanceName = relatedServiceInstanceObj.getServiceInstanceName()
157 logger.debug("networkServiceInstanceId: {} networkServiceInstanceName: {} ",networkServiceInstanceId, networkServiceInstanceName)
159 execution.setVariable("networkServiceInstanceId", networkServiceInstanceId)
160 execution.setVariable("networkServiceInstanceName", networkServiceInstanceName)
162 } else if("slice-profile-instance".equals(role)) {
164 String orchestrationStatus= relatedServiceInstanceObj.getOrchestrationStatus()
165 String sNssai = relatedServiceInstanceObj.getEnvironmentContext()
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", relatedServiceInstanceObj)
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)
186 execution.setVariable("snssaiAndOrchStatusList", spiWithsNssaiAndOrchStatusList)
188 logger.debug("NSSI Id: ${serviceInstanceId}, network Service Instance Id: ${networkServiceInstanceId}, serviceName: ${networkServiceInstanceName}")
189 //Get ServiceInstance Relationships
190 getServiceInstanceRelationships(execution)
191 //Get Vnf Relationships
192 getVnfRelationships(execution)
194 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: getNetworkInstanceAssociatedWithNssiId ****")
197 private void getServiceInstanceRelationships(DelegateExecution execution) {
198 logger.debug(Prefix +" **** Enter DoAllocateCoreSharedSlice ::: getServiceInstanceRelationships ****")
199 String serviceInstanceId = execution.getVariable("networkServiceInstanceId")
200 String errorMsg = "query Network Service Instance from AAI failed"
201 AAIResultWrapper wrapper = queryAAI(execution, Types.SERVICE_INSTANCE, serviceInstanceId, errorMsg)
202 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
204 String networkServiceModelInvariantUuid = si.get().getModelInvariantId()
205 execution.setVariable("networkServiceModelInvariantUuid", networkServiceModelInvariantUuid)
207 List<Relationship> relationshipList = si.get().getRelationshipList()?.getRelationship()
208 for (Relationship relationship : relationshipList) {
209 String relatedTo = relationship.getRelatedTo()
210 if (("owning-entity").equals(relatedTo)) {
211 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
212 for (RelationshipData relationshipData : relationshipDataList) {
213 if (("owning-entity.owning-entity-id").equals(relationshipData.getRelationshipKey())) {
214 execution.setVariable("owningEntityId", relationshipData.getRelationshipValue())
217 } else if (("generic-vnf").equals(relatedTo)) {
218 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
219 List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
222 for (RelationshipData relationshipData : relationshipDataList) {
223 if (("generic-vnf.vnf-id").equals(relationshipData.getRelationshipKey())) {
224 execution.setVariable("vnfId", relationshipData.getRelationshipValue())
227 //Get Vnf Name Check If necessary
228 for (RelatedToProperty relatedToProperty : relatedToPropertyList) {
229 if (("generic-vnf.vnf-name").equals(relatedToProperty.getPropertyKey())) {
230 execution.setVariable("vnfName", relatedToProperty.getPropertyValue())
233 } else if (("project").equals(relatedTo)) {
234 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
235 for (RelationshipData relationshipData : relationshipDataList) {
236 if (("project.project-name").equals(relationshipData.getRelationshipKey())) {
237 execution.setVariable("projectName", relationshipData.getRelationshipValue())
242 logger.debug(Prefix +" **** Exit DoAllocateCoreSharedSlice ::: getServiceInstanceRelationships ****")
246 private void getVnfRelationships(DelegateExecution execution) {
248 logger.debug(Prefix +" **** Enter DoAllocateCoreSharedSlice ::: getVnfRelationships ****")
249 String msg = "query Generic Vnf from AAI failed"
251 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().genericVnf(execution.getVariable('vnfId')))
252 if (!getAAIClient().exists(uri)) {
253 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
255 AAIResultWrapper wrapper = getAAIClient().get(uri, NotFoundException.class)
256 Optional<GenericVnf> vnf = wrapper.asBean(GenericVnf.class)
257 if(vnf.isPresent()) {
258 List<Relationship> relationshipList = vnf.get().getRelationshipList()?.getRelationship()
259 for (Relationship relationship : relationshipList) {
260 String relatedTo = relationship.getRelatedTo()
261 if (("tenant").equals(relatedTo)) {
262 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
263 for (RelationshipData relationshipData : relationshipDataList) {
264 if (("tenant.tenant-id").equals(relationshipData.getRelationshipKey())) {
265 execution.setVariable("tenantId", relationshipData.getRelationshipValue())
268 } else if (("cloud-region").equals(relatedTo)) {
269 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
271 for (RelationshipData relationshipData : relationshipDataList) {
272 if (("cloud-region.cloud-owner").equals(relationshipData.getRelationshipKey())) {
273 execution.setVariable("cloudOwner", relationshipData.getRelationshipValue())
274 } else if (("cloud-region.cloud-region-id").equals(relationshipData.getRelationshipKey())) {
275 execution.setVariable("lcpCloudRegionId", relationshipData.getRelationshipValue())
278 } else if (("platform").equals(relatedTo)) {
279 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
280 for (RelationshipData relationshipData : relationshipDataList) {
281 if (("platform.platform-name").equals(relationshipData.getRelationshipKey())) {
282 execution.setVariable("platformName", relationshipData.getRelationshipValue())
285 } else if (("line-of-business").equals(relatedTo)) {
286 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
287 for (RelationshipData relationshipData : relationshipDataList) {
288 if (("line-of-business.line-of-business-name").equals(relationshipData.getRelationshipKey())) {
289 execution.setVariable("lineOfBusinessName", relationshipData.getRelationshipValue())
295 } catch(BpmnError e){
297 } catch (Exception ex){
298 msg = "Exception in getVnfRelationships " + ex.getMessage()
300 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
302 logger.debug(Prefix +" **** Exit DoAllocateCoreSharedSlice ::: getVnfRelationships ****")
308 * @param aaiObjectName
310 * @return AAIResultWrapper
312 private AAIResultWrapper queryAAI(DelegateExecution execution, AAIObjectName aaiObjectName, String instanceId, String errorMsg) {
313 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: queryAAI ****")
314 String globalSubscriberId = execution.getVariable("globalSubscriberId")
315 String serviceType = execution.getVariable("serviceType")
316 AAIResourceUri resourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(instanceId))
317 if (!getAAIClient().exists(resourceUri)) {
318 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMsg)
320 AAIResultWrapper wrapper = getAAIClient().get(resourceUri, NotFoundException.class)
321 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: queryAAI ****")
325 public void getServiceVNFAndVFsFromCatalogDB(DelegateExecution execution) {
326 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: getServiceVNFAndVFsFromCatalogDB ****")
327 String serviceVnfs="";
329 String modelInvariantUuid = execution.getVariable("networkServiceModelInvariantUuid")
331 CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create()
332 String json = catalogDbUtils.getServiceResourcesByServiceModelInvariantUuidString(execution, modelInvariantUuid)
333 logger.debug("***** JSON IS: "+json)
334 serviceVnfs = jsonUtil.getJsonValue(json, "serviceResources.serviceVnfs") ?: ""
335 String serviceModelInfo = jsonUtil.getJsonValue(json, "serviceResources.modelInfo") ?: ""
336 execution.setVariable("serviceModelInfo", serviceModelInfo)
337 execution.setVariable("serviceVnfs",serviceVnfs)
338 logger.debug("***** serviceVnfs is: "+ serviceVnfs)
341 } catch (Exception ex){
342 msg = "Exception in preProcessRequest " + ex.getMessage()
344 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
346 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: getServiceVNFAndVFsFromCatalogDB ****")
349 public void prepareSOMacroRequestPayload(DelegateExecution execution) {
350 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: prepareSOMacroRequestPayLoad ****")
351 String json = execution.getVariable("serviceVnfs")
352 List<Object> vnfList = mapper.readValue(json, List.class);
353 Map<String,Object> serviceMap = mapper.readValue(execution.getVariable("serviceModelInfo"), Map.class);
354 ModelInfo serviceModelInfo = new ModelInfo()
355 serviceModelInfo.setModelType(ModelType.service)
356 serviceModelInfo.setModelInvariantId(serviceMap.get("modelInvariantUuid"))
357 serviceModelInfo.setModelVersionId(serviceMap.get("modelUuid"))
358 serviceModelInfo.setModelName(serviceMap.get("modelName"))
359 serviceModelInfo.setModelVersion(serviceMap.get("modelVersion"))
361 List<Object> vnfModelInfoList = new ArrayList<>()
363 Map vnfMap = vnfList.get(0)
365 List<Map<String, Object>> vfModuleList = vnfMap.get("vfModules")
368 List<ModelInfo> vfModelInfoList = new ArrayList<>()
370 //Traverse VFModules List and add in vfModelInfoList
371 for (vfModule in vfModuleList) {
372 ModelInfo vfModelInfo = vfModule.get("modelInfo")
373 vfModelInfo.setModelCustomizationId(vfModelInfo.getModelCustomizationUuid())
374 vfModelInfo.setModelVersionId(vfModelInfo.getModelId())
375 vfModelInfoList.add(vfModelInfo)
378 String networkServiceInstanceName = execution.getVariable("networkServiceInstanceName")
380 RequestInfo requestInfo = new RequestInfo()
382 //Dummy Product FamilyId
383 requestInfo.setProductFamilyId("test1234")
384 requestInfo.setSource("VID")
385 requestInfo.setInstanceName(networkServiceInstanceName)
386 requestInfo.setSuppressRollback(false)
387 requestInfo.setRequestorId("NBI")
389 //Service Level InstanceParams
390 List<Map<String, Object>> serviceParams = new ArrayList<>()
391 Map<String, Object> serviceParamsValues = new LinkedHashMap<>()
392 serviceParams.add(serviceParamsValues)
394 //Cloud Configuration
395 String lcpCloudRegionId = execution.getVariable("lcpCloudRegionId")
396 String tenantId = execution.getVariable("tenantId")
397 String cloudOwner = execution.getVariable("cloudOwner")
398 CloudConfiguration cloudConfiguration = new CloudConfiguration()
399 cloudConfiguration.setLcpCloudRegionId(lcpCloudRegionId)
400 cloudConfiguration.setTenantId(tenantId)
401 cloudConfiguration.setCloudOwner(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 List<Map<String, Object>> vnfInstanceParamsList = new ArrayList<>()
419 String supportedsNssaiJson= prepareVnfInstanceParamsJson(execution)
421 Map<String, Object> supportedNssai= new LinkedHashMap<>()
422 supportedNssai.put("supportedsNssai", supportedsNssaiJson)
423 vnfInstanceParamsList.add(supportedNssai)
425 Platform platform = new Platform()
426 String platformName = execution.getVariable("platformName")
427 platform.setPlatformName(platformName)
429 LineOfBusiness lineOfbusiness = new LineOfBusiness()
430 String lineOfBusinessName = execution.getVariable("lineOfBusinessName")
431 lineOfbusiness.setLineOfBusinessName(lineOfBusinessName)
433 ModelInfo vnfModelInfo = vnfMap.get("modelInfo")
434 vnfModelInfo.setModelCustomizationId(vnfModelInfo.getModelCustomizationUuid())
435 vnfModelInfo.setModelVersionId(vnfModelInfo.getModelId())
438 Map<String, Object> vnfValues = new LinkedHashMap<>()
439 vnfValues.put("lineOfBusiness", lineOfbusiness)
440 vnfValues.put("platform", platform)
441 vnfValues.put("productFamilyId", "test1234")
442 vnfValues.put("cloudConfiguration", cloudConfiguration)
443 vnfValues.put("vfModules", vfModules)
444 vnfValues.put("modelInfo", vnfModelInfo)
445 vnfValues.put("instanceName", vnfModelInfo.getModelInstanceName())
446 vnfValues.put("instanceParams",vnfInstanceParamsList)
448 vnfModelInfoList.add(vnfValues)
449 //Service Level Resources
450 Map<String, Object> serviceResources = new LinkedHashMap<>()
451 serviceResources.put("vnfs", vnfModelInfoList)
454 String serviceInstanceName = execution.getVariable("networkServiceInstanceName")
455 Map<String, Object> serviceValues = new LinkedHashMap<>()
456 serviceValues.put("modelInfo", serviceModelInfo)
457 serviceValues.put("instanceName", serviceInstanceName)
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 String serviceType = execution.getVariable("serviceType")
476 RequestParameters requestParameters = new RequestParameters()
477 requestParameters.setaLaCarte(false)
478 requestParameters.setSubscriptionServiceType(serviceType)
479 requestParameters.setUserParams(userParams)
482 String globalSubscriberId = execution.getVariable("globalSubscriberId")
483 SubscriberInfo subscriberInfo = new SubscriberInfo()
484 subscriberInfo.setGlobalSubscriberId(globalSubscriberId)
487 String owningEntityId = execution.getVariable("owningEntityId")
488 OwningEntity owningEntity = new OwningEntity()
489 owningEntity.setOwningEntityId(owningEntityId)
492 String projectName = execution.getVariable("projectName")
493 Project project = new Project()
494 project.setProjectName(projectName)
496 RequestDetails requestDetails = new RequestDetails()
497 requestDetails.setModelInfo(serviceModelInfo)
498 requestDetails.setSubscriberInfo(subscriberInfo)
499 requestDetails.setRequestInfo(requestInfo)
500 requestDetails.setRequestParameters(requestParameters)
501 requestDetails.setCloudConfiguration(cloudConfiguration)
502 requestDetails.setOwningEntity(owningEntity)
503 requestDetails.setProject(project)
505 Map<String, Object> requestDetailsMap = new LinkedHashMap<>()
506 requestDetailsMap.put("requestDetails", requestDetails)
507 String requestPayload = mapper.writeValueAsString(requestDetailsMap)
508 logger.debug("requestDetails "+requestPayload)
509 execution.setVariable("requestPayload", requestPayload)
511 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: prepareSOMacroRequestPayLoad ****")
514 private String prepareVnfInstanceParamsJson(DelegateExecution execution) {
515 logger.debug(Prefix +" **** Enter DoAllocateCoreSharedSlice ::: prepareVnfInstanceParamsJson ****")
516 List instanceParamsvalues = execution.getVariable("snssaiAndOrchStatusList")
517 Map<String, Object> nSsai= new LinkedHashMap<>()
518 nSsai.put("sNssai", instanceParamsvalues)
519 String supportedsNssaiJson = mapper.writeValueAsString(nSsai)
520 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: prepareVnfInstanceParamsJson ****")
521 return supportedsNssaiJson
524 public void sendPutRequestToSOMacro(DelegateExecution execution) {
525 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: sendPutRequestToSOMacro ****")
527 String msoEndpoint = UrnPropertiesReader.getVariable("mso.infra.endpoint.url", execution)
528 String networkServiceInstanceId = execution.getVariable("networkServiceInstanceId")
529 String vnfId = execution.getVariable("vnfId")
530 String url = msoEndpoint+"/serviceInstantiation/v7/serviceInstances/"+networkServiceInstanceId+"/vnfs/"+vnfId
531 String requestBody = execution.getVariable("requestPayload")
532 String msoKey = UrnPropertiesReader.getVariable("mso.msoKey", execution)
533 String basicAuth = UrnPropertiesReader.getVariable("mso.adapters.po.auth", execution)
534 String encodeString = utils.getBasicAuth(basicAuth, msoKey)
535 logger.debug("msoEndpoint: "+msoEndpoint +" "+ "url: "+url +" requestBody: "+requestBody +" "+ "encodeString: "+encodeString)
536 HttpClient httpClient = getHttpClientFactory().newJsonClient(new URL(url), ONAPComponents.SO)
537 httpClient.addAdditionalHeader("Authorization", encodeString)
538 httpClient.addAdditionalHeader("Accept", "application/json")
539 Response httpResponse = httpClient.put(requestBody)
540 handleSOResponse(httpResponse, execution)
541 } catch (BpmnError e) {
544 String msg = Prefix+" Exception in DoAllocate Shared " + any.getCause()
546 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
548 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: sendPostRequestToSOMacro ****")
552 * Handle SO Response for PUT and prepare update operation status
555 private void handleSOResponse(Response httpResponse, DelegateExecution execution){
556 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: handleSOResponse ****")
558 int soResponseCode = httpResponse.getStatus()
559 logger.debug("soResponseCode : "+soResponseCode)
561 if (soResponseCode >= 200 && soResponseCode < 204 && httpResponse.hasEntity()) {
562 String soResponse = httpResponse.readEntity(String.class)
563 logger.debug("soResponse: "+soResponse)
564 String macroOperationId = jsonUtil.getJsonValue(soResponse, "requestReferences.requestId")
565 String requestSelfLink = jsonUtil.getJsonValue(soResponse, "requestReferences.requestSelfLink")
566 execution.setVariable("macroOperationId", macroOperationId)
567 execution.setVariable("requestSelfLink", requestSelfLink)
568 execution.setVariable("isSOTimeOut", "no")
569 execution.setVariable("isSOResponseSucceed","yes")
572 execution.setVariable("isSOResponseSucceed","no")
573 prepareFailedOperationStatusUpdate(execution)
575 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: handleSOResponse ****")
578 public void getSOPUTProgress(DelegateExecution execution) {
579 logger.debug(Prefix+ " **** Enter DoAllocateCoreSharedSlice ::: getSOPUTProgress ****")
580 String url= execution.getVariable("requestSelfLink")
581 HttpClient httpClient = getHttpClientFactory().newJsonClient(new URL(url), ONAPComponents.SO)
582 String msoKey = UrnPropertiesReader.getVariable("mso.msoKey", execution)
583 String basicAuth = UrnPropertiesReader.getVariable("mso.adapters.po.auth", execution)
584 String encodeString = utils.getBasicAuth(basicAuth, msoKey)
585 httpClient.addAdditionalHeader("Authorization", encodeString)
586 httpClient.addAdditionalHeader("Accept", "application/json")
587 Response httpResponse = httpClient.get()
588 logger.debug("httpResponse "+httpResponse)
589 int soResponseCode = httpResponse.getStatus()
590 logger.debug("soResponseCode : "+soResponseCode)
591 if (soResponseCode >= 200 && soResponseCode < 204 && httpResponse.hasEntity()) {
592 String soResponse = httpResponse.readEntity(String.class)
593 logger.debug("soResponse: "+soResponse)
594 String requestState= jsonUtil.getJsonValue(soResponse, "request.requestStatus.requestState")
595 logger.debug("requestState: "+requestState)
596 execution.setVariable("requestState", requestState)
598 execution.setVariable("isSOResponseSucceed","no")
599 prepareFailedOperationStatusUpdate(execution)
601 logger.debug(Prefix+ " **** Exit DoAllocateCoreSharedSlice ::: getSOPUTProgress ****")
604 public void timeDelay() {
606 logger.debug(Prefix+ " **** DoAllocateCoreSharedSlice ::: timeDelay going to sleep for 5 sec")
608 logger.debug("**** DoActivateCoreNSSI ::: timeDelay wakeup after 5 sec")
609 } catch(InterruptedException e) {
610 logger.error(Prefix+ " **** DoAllocateCoreSharedSlice ::: timeDelay exception" + e)
614 void prepareUpdateResourceOperationStatus(DelegateExecution execution) {
616 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: prepareUpdateResourceOperationStatus ****")
617 //Prepare Update Status for PUT failure and success
618 if(execution.getVariable("isTimeOut").equals("YES")) {
619 logger.debug("TIMEOUT - SO PUT Failure")
620 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "SO PUT Failure")
622 execution.setVariable("progress", "100")
623 execution.setVariable("status", "finished")
624 execution.setVariable("operationContent", "AllocteCoreNSSI Shared successful.")
625 logger.debug("prepareFailureStatus,result:${execution.getVariable("result")}, reason: ${execution.getVariable("reason")}")
627 setResourceOperationStatus(execution)
628 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: prepareUpdateResourceOperationStatus ****")
632 * prepare ResourceOperation status
634 * @param operationType
636 private void setResourceOperationStatus(DelegateExecution execution) {
637 logger.debug(Prefix+" **** Enter DoAllocateCoreSharedSlice ::: setResourceOperationStatus ****")
638 String serviceId = execution.getVariable("nsiId")
639 String jobId = execution.getVariable("jobId")
640 String nssiId = execution.getVariable("nssiId")
641 String operationType = "ALLOCATE"
642 String modelUuid= execution.getVariable("modelUuid")
643 ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
644 resourceOperationStatus.setServiceId(serviceId)
645 resourceOperationStatus.setJobId(jobId)
646 resourceOperationStatus.setOperationId(jobId)
647 resourceOperationStatus.setResourceTemplateUUID(modelUuid)
648 resourceOperationStatus.setResourceInstanceID(nssiId)
649 resourceOperationStatus.setOperType(operationType)
650 resourceOperationStatus.setStatus(execution.getVariable("status"))
651 resourceOperationStatus.setProgress(execution.getVariable("progress"))
652 resourceOperationStatus.setStatusDescription(execution.getVariable("statusDescription"))
653 requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
654 logger.debug(Prefix+" **** Exit DoAllocateCoreSharedSlice ::: setResourceOperationStatus ****")
657 void prepareFailedOperationStatusUpdate(DelegateExecution execution){
658 logger.debug(Prefix + " **** Enter DoAllocateCoreSharedSlice ::: prepareFailedOperationStatusUpdate ****")
659 String serviceId = execution.getVariable("nsiId")
660 String jobId = execution.getVariable("jobId")
661 String nssiId = execution.getVariable("nssiId")
662 String operationType = "ALLOCATE"
664 String modelUuid= execution.getVariable("modelUuid")
665 logger.debug("serviceId: {}, jobId: {}, nssiId: {}, operationType: {}.", serviceId, jobId, nssiId, operationType)
666 ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
667 resourceOperationStatus.setServiceId(serviceId)
668 resourceOperationStatus.setJobId(jobId)
669 resourceOperationStatus.setOperationId(jobId)
670 resourceOperationStatus.setResourceInstanceID(nssiId)
671 resourceOperationStatus.setResourceTemplateUUID(modelUuid)
672 resourceOperationStatus.setOperType(operationType)
673 resourceOperationStatus.setProgress("0")
674 resourceOperationStatus.setStatus("failed")
675 resourceOperationStatus.setStatusDescription("Core NSSI Shared Allocate Failed")
676 requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
677 logger.debug(Prefix + " **** Exit DoAllocateCoreSharedSlice ::: prepareFailedOperationStatusUpdate ****")