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 javax.ws.rs.NotFoundException
24 import javax.ws.rs.core.Response
25 import org.camunda.bpm.engine.delegate.BpmnError
26 import org.camunda.bpm.engine.delegate.DelegateExecution
27 import org.onap.aai.domain.yang.GenericVnf
28 import org.onap.aai.domain.yang.RelatedToProperty
29 import org.onap.aai.domain.yang.Relationship
30 import org.onap.aai.domain.yang.RelationshipData
31 import org.onap.aai.domain.yang.ServiceInstance
32 import org.onap.aaiclient.client.aai.AAIObjectName
33 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
34 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
35 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
36 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
37 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.Types
38 import org.onap.logging.filter.base.ONAPComponents
39 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
40 import org.onap.so.bpmn.common.scripts.CatalogDbUtils
41 import org.onap.so.bpmn.common.scripts.CatalogDbUtilsFactory
42 import org.onap.so.bpmn.common.scripts.ExceptionUtil
43 import org.onap.so.bpmn.common.scripts.RequestDBUtil
44 import org.onap.so.bpmn.core.UrnPropertiesReader
45 import org.onap.so.bpmn.core.json.JsonUtils
46 import org.onap.so.client.HttpClient
47 import org.onap.so.db.request.beans.ResourceOperationStatus
48 import org.onap.so.serviceinstancebeans.CloudConfiguration
49 import org.onap.so.serviceinstancebeans.LineOfBusiness
50 import org.onap.so.serviceinstancebeans.ModelInfo
51 import org.onap.so.serviceinstancebeans.ModelType
52 import org.onap.so.serviceinstancebeans.OwningEntity
53 import org.onap.so.serviceinstancebeans.Platform
54 import org.onap.so.serviceinstancebeans.Project
55 import org.onap.so.serviceinstancebeans.RequestDetails
56 import org.onap.so.serviceinstancebeans.RequestInfo
57 import org.onap.so.serviceinstancebeans.RequestParameters
58 import org.onap.so.serviceinstancebeans.SubscriberInfo
59 import org.slf4j.Logger
60 import org.slf4j.LoggerFactory
61 import com.fasterxml.jackson.databind.ObjectMapper
63 class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
64 String Prefix="DACTCNSSI_"
65 private static final Logger logger = LoggerFactory.getLogger(DoActivateCoreNSSI.class);
66 CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create()
67 private RequestDBUtil requestDBUtil = new RequestDBUtil()
68 ExceptionUtil exceptionUtil = new ExceptionUtil()
69 ObjectMapper mapper = new ObjectMapper();
71 JsonUtils jsonUtil = new JsonUtils()
73 private final Long TIMEOUT = 60 * 60 * 1000
76 public void preProcessRequest(DelegateExecution execution) {
77 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: preProcessRequest ****")
79 String operationType = execution.getVariable("operationType")
81 if(operationType.equals("activateInstance")) {
84 oStatus ="deactivated"
86 execution.setVariable("oStatus", oStatus)
87 String sNssaiListAsString = jsonUtil.getJsonValue(execution.getVariable("sliceParams"), "snssaiList")
88 List<String> sNssaiList = jsonUtil.StringArrayToList(sNssaiListAsString)
89 String sNssai = sNssaiList.get(0)
90 execution.setVariable("sNssai", sNssai)
91 String serviceType = execution.getVariable("subscriptionServiceType")
92 execution.setVariable("serviceType", serviceType)
93 logger.debug("operationType: {} , sNssai: {}, serviceType: {}.",operationType, sNssai, serviceType)
94 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: preProcessRequest ****")
97 public void getNetworkInstanceWithSPInstanceAssociatedWithNssiId(DelegateExecution execution) {
98 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: getNetworkInstanceWithSPInstanceAssociatedWithNssiId ****")
99 //NSSI Id as service Instance Id to get from Request
100 String serviceInstanceId = execution.getVariable("serviceInstanceID")
101 String errorMsg = "query Network Service Instance from AAI failed"
102 AAIResultWrapper wrapper = queryAAI(execution, Types.SERVICE_INSTANCE, serviceInstanceId, errorMsg)
103 Optional<ServiceInstance> nsi = wrapper.asBean(ServiceInstance.class)
104 String networkServiceInstanceName = ""
105 String networkServiceInstanceId =""
106 if(nsi.isPresent()) {
107 List<Relationship> relationshipList = nsi.get().getRelationshipList()?.getRelationship()
108 List spiWithsNssaiAndOrchStatusList = new ArrayList<>()
109 for (Relationship relationship : relationshipList) {
110 String relatedTo = relationship.getRelatedTo()
111 if (("service-instance").equals(relatedTo)) {
112 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
113 List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
114 for (RelationshipData relationshipData : relationshipDataList) {
115 if (("service-instance.service-instance-id").equals(relationshipData.getRelationshipKey())) {
116 execution.setVariable("networkServiceInstanceId", relationshipData.getRelationshipValue())
119 for (RelatedToProperty relatedToProperty : relatedToPropertyList) {
120 if (("service-instance.service-instance-name").equals(relatedToProperty.getPropertyKey())) {
121 execution.setVariable("networkServiceInstanceName", relatedToProperty.getPropertyValue())
126 //If related to is allotted-Resource
127 if (("allotted-resource").equals(relatedTo)) {
128 //get slice Profile Instance Id from allotted resource in list by nssi
129 List<String> sliceProfileInstanceIdList = new ArrayList<>()
130 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
131 for (RelationshipData relationshipData : relationshipDataList) {
132 if (relationshipData.getRelationshipKey().equals("service-instance.service-instance-id")) {
133 sliceProfileInstanceIdList.add(relationshipData.getRelationshipValue())
136 for (String sliceProfileServiceInstanceId : sliceProfileInstanceIdList) {
137 String errorSliceProfileMsg = "Slice Profile Service Instance was not found in aai"
139 //Query Slice Profile Service Instance From AAI by sliceProfileServiceInstanceId
140 AAIResultWrapper sliceProfileInstanceWrapper = queryAAI(execution, Types.SERVICE_INSTANCE, sliceProfileServiceInstanceId, errorSliceProfileMsg)
141 Optional<ServiceInstance> sliceProfileServiceInstance = sliceProfileInstanceWrapper.asBean(ServiceInstance.class)
142 if (sliceProfileServiceInstance.isPresent()) {
143 String orchestrationStatus= sliceProfileServiceInstance.get().getOrchestrationStatus()
144 String sNssai = sliceProfileServiceInstance.get().getEnvironmentContext()
145 String sNssaiValueFromRequest = execution.getVariable("sNssai")
146 if(sNssai.equals(sNssaiValueFromRequest)) {
147 orchestrationStatus = execution.getVariable("oStatus")
148 //Slice Profile Service Instance to be updated in AAI
149 execution.setVariable("sliceProfileServiceInstance", sliceProfileServiceInstance.get())
151 Map<String, Object> spiWithsNssaiAndOrchStatus = new LinkedHashMap<>()
152 spiWithsNssaiAndOrchStatus.put("snssai", sNssai)
153 spiWithsNssaiAndOrchStatus.put("status", orchestrationStatus)
154 spiWithsNssaiAndOrchStatusList.add(spiWithsNssaiAndOrchStatus)
159 execution.setVariable("snssaiAndOrchStatusList", spiWithsNssaiAndOrchStatusList)
161 logger.debug("NSSI Id: ${serviceInstanceId}, network Service Instance Id: ${networkServiceInstanceId}, serviceName: ${networkServiceInstanceName}")
162 //Get ServiceInstance Relationships
163 getServiceInstanceRelationships(execution)
164 //Get Vnf Relationships
165 getVnfRelationships(execution)
166 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getNetworkInstanceWithSPInstanceAssociatedWithNssiId ****")
170 private String prepareVnfInstanceParamsJson(DelegateExecution execution) {
171 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: prepareVnfInstanceParamsJson ****")
172 List instanceParamsvalues = execution.getVariable("snssaiAndOrchStatusList")
173 Map<String, Object> nSsai= new LinkedHashMap<>()
174 nSsai.put("sNssai", instanceParamsvalues)
175 String supportedsNssaiJson = mapper.writeValueAsString(nSsai)
176 logger.debug(Prefix+" **** Exit DoActivateCoreNSSI ::: prepareVnfInstanceParamsJson ****")
177 return supportedsNssaiJson
180 private void getServiceInstanceRelationships(DelegateExecution execution) {
181 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: getServiceInstanceRelationships ****")
182 String serviceInstanceId = execution.getVariable("networkServiceInstanceId")
183 String errorMsg = "query Network Service Instance from AAI failed"
184 AAIResultWrapper wrapper = queryAAI(execution, Types.SERVICE_INSTANCE, serviceInstanceId, errorMsg)
185 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
187 String networkServiceModelInvariantUuid = si.get().getModelInvariantId()
188 execution.setVariable("networkServiceModelInvariantUuid", networkServiceModelInvariantUuid)
190 List<Relationship> relationshipList = si.get().getRelationshipList()?.getRelationship()
191 for (Relationship relationship : relationshipList) {
192 String relatedTo = relationship.getRelatedTo()
193 if (("owning-entity").equals(relatedTo)) {
194 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
195 for (RelationshipData relationshipData : relationshipDataList) {
196 if (("owning-entity.owning-entity-id").equals(relationshipData.getRelationshipKey())) {
197 execution.setVariable("owningEntityId", relationshipData.getRelationshipValue())
200 } else if (("generic-vnf").equals(relatedTo)) {
201 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
202 List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
205 for (RelationshipData relationshipData : relationshipDataList) {
206 if (("generic-vnf.vnf-id").equals(relationshipData.getRelationshipKey())) {
207 execution.setVariable("vnfId", relationshipData.getRelationshipValue())
210 //Get Vnf Name Check If necessary
211 for (RelatedToProperty relatedToProperty : relatedToPropertyList) {
212 if (("generic-vnf.vnf-name").equals(relatedToProperty.getPropertyKey())) {
213 execution.setVariable("vnfName", relatedToProperty.getPropertyValue())
216 } else if (("project").equals(relatedTo)) {
217 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
218 for (RelationshipData relationshipData : relationshipDataList) {
219 if (("project.project-name").equals(relationshipData.getRelationshipKey())) {
220 execution.setVariable("projectName", relationshipData.getRelationshipValue())
225 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getServiceInstanceRelationships ****")
229 private void getVnfRelationships(DelegateExecution execution) {
231 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: getVnfRelationships ****")
232 String msg = "query Generic Vnf from AAI failed"
234 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().genericVnf(execution.getVariable('vnfId')))
235 if (!getAAIClient().exists(uri)) {
236 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
238 AAIResultWrapper wrapper = getAAIClient().get(uri, NotFoundException.class)
239 Optional<GenericVnf> vnf = wrapper.asBean(GenericVnf.class)
240 if(vnf.isPresent()) {
241 List<Relationship> relationshipList = vnf.get().getRelationshipList()?.getRelationship()
242 for (Relationship relationship : relationshipList) {
243 String relatedTo = relationship.getRelatedTo()
244 if (("tenant").equals(relatedTo)) {
245 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
246 for (RelationshipData relationshipData : relationshipDataList) {
247 if (("tenant.tenant-id").equals(relationshipData.getRelationshipKey())) {
248 execution.setVariable("tenantId", relationshipData.getRelationshipValue())
251 } else if (("cloud-region").equals(relatedTo)) {
252 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
254 for (RelationshipData relationshipData : relationshipDataList) {
255 if (("cloud-region.cloud-owner").equals(relationshipData.getRelationshipKey())) {
256 execution.setVariable("cloudOwner", relationshipData.getRelationshipValue())
257 } else if (("cloud-region.cloud-region-id").equals(relationshipData.getRelationshipKey())) {
258 execution.setVariable("lcpCloudRegionId", relationshipData.getRelationshipValue())
261 } else if (("platform").equals(relatedTo)) {
262 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
263 for (RelationshipData relationshipData : relationshipDataList) {
264 if (("platform.platform-name").equals(relationshipData.getRelationshipKey())) {
265 execution.setVariable("platformName", relationshipData.getRelationshipValue())
268 } else if (("line-of-business").equals(relatedTo)) {
269 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
270 for (RelationshipData relationshipData : relationshipDataList) {
271 if (("line-of-business.line-of-business-name").equals(relationshipData.getRelationshipKey())) {
272 execution.setVariable("lineOfBusinessName", relationshipData.getRelationshipValue())
278 } catch(BpmnError e){
280 } catch (Exception ex){
281 msg = "Exception in getVnfRelationships " + ex.getMessage()
283 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
285 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getVnfRelationships ****")
292 * @param aaiObjectType
294 * @return AAIResultWrapper
296 private AAIResultWrapper queryAAI(DelegateExecution execution, AAIObjectName aaiObjectName, String instanceId, String errorMsg) {
297 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: queryAAI ****")
299 String globalSubscriberId = execution.getVariable("globalSubscriberId")
300 String serviceType = execution.getVariable("serviceType")
302 AAIResourceUri resourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(instanceId))
303 if (!getAAIClient().exists(resourceUri)) {
304 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMsg)
306 AAIResultWrapper wrapper = getAAIClient().get(resourceUri, NotFoundException.class)
308 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: queryAAI ****")
312 public void getServiceVNFAndVFsFromCatalogDB(DelegateExecution execution) {
313 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getServiceVNFAndVFsFromCatalogDB ****")
315 String modelInvariantUuid = execution.getVariable("networkServiceModelInvariantUuid")
318 CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create()
319 String json = catalogDbUtils.getServiceResourcesByServiceModelInvariantUuidString(execution, modelInvariantUuid)
320 logger.debug("***** JSON IS: "+json)
322 String serviceVnfs = jsonUtil.getJsonValue(json, "serviceResources.serviceVnfs") ?: ""
323 String serviceModelInfo = jsonUtil.getJsonValue(json, "serviceResources.modelInfo") ?: ""
324 execution.setVariable("serviceVnfs",serviceVnfs)
325 execution.setVariable("serviceModelInfo", serviceModelInfo)
326 logger.debug(Prefix +" ***** serviceVnfs : "+ serviceVnfs)
329 } catch (Exception ex){
330 String msg = "Exception in getServiceVNFAndVFsFromCatalogDB " + ex.getMessage()
332 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
334 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getServiceVNFAndVFsFromCatalogDB ****")
337 public void prepareSOMacroRequestPayLoad(DelegateExecution execution) {
338 logger.debug("**** Enter DoActivateCoreNSSI ::: prepareSOMacroRequestPayLoad ****")
339 String json = execution.getVariable("serviceVnfs")
340 List<Object> vnfList = mapper.readValue(json, List.class);
341 Map<String,Object> serviceMap = mapper.readValue(execution.getVariable("serviceModelInfo"), Map.class);
342 ModelInfo serviceModelInfo = new ModelInfo()
343 serviceModelInfo.setModelType(ModelType.service)
344 serviceModelInfo.setModelInvariantId(serviceMap.get("modelInvariantUuid"))
345 serviceModelInfo.setModelVersionId(serviceMap.get("modelUuid"))
346 serviceModelInfo.setModelName(serviceMap.get("modelName"))
347 serviceModelInfo.setModelVersion(serviceMap.get("modelVersion"))
349 List<Object> vnfModelInfoList = new ArrayList<>()
351 Map vnfMap = vnfList.get(0)
353 List<Map<String, Object>> vfModuleList = vnfMap.get("vfModules")
356 List<ModelInfo> vfModelInfoList = new ArrayList<>()
358 //Traverse VFModules List and add in vfModelInfoList
359 for (vfModule in vfModuleList) {
360 ModelInfo vfModelInfo = vfModule.get("modelInfo")
361 vfModelInfo.setModelCustomizationId(vfModelInfo.getModelCustomizationUuid())
362 vfModelInfo.setModelVersionId(vfModelInfo.getModelId())
363 vfModelInfoList.add(vfModelInfo)
366 String networkServiceInstanceName = execution.getVariable("networkServiceInstanceName")
368 RequestInfo requestInfo = new RequestInfo()
370 //Dummy Product FamilyId
371 requestInfo.setProductFamilyId("test1234")
372 requestInfo.setSource("VID")
373 requestInfo.setInstanceName(networkServiceInstanceName)
374 requestInfo.setSuppressRollback(false)
375 requestInfo.setRequestorId("NBI")
377 //Service Level InstanceParams
378 List<Map<String, Object>> serviceParams = new ArrayList<>()
379 Map<String, Object> serviceParamsValues = new LinkedHashMap<>()
380 serviceParams.add(serviceParamsValues)
382 //Cloud Configuration
383 String lcpCloudRegionId = execution.getVariable("lcpCloudRegionId")
384 String tenantId = execution.getVariable("tenantId")
385 String cloudOwner = execution.getVariable("cloudOwner")
386 CloudConfiguration cloudConfiguration = new CloudConfiguration()
387 cloudConfiguration.setLcpCloudRegionId(lcpCloudRegionId)
388 cloudConfiguration.setTenantId(tenantId)
389 cloudConfiguration.setCloudOwner(cloudOwner)
392 List<Map<String, Object>> vfModules = new ArrayList<>()
393 for (ModelInfo vfModuleModelInfo : vfModelInfoList) {
394 //Individual VFModule List
395 Map<String, Object> vfModuleValues = new LinkedHashMap<>()
396 vfModuleValues.put("modelInfo", vfModuleModelInfo)
397 vfModuleValues.put("instanceName", vfModuleModelInfo.getModelName())
399 //VFModule InstanceParams should be empty or this field should not be there?
400 List<Map<String, Object>> vfModuleInstanceParams = new ArrayList<>()
401 vfModuleValues.put("instanceParams", vfModuleInstanceParams)
402 vfModules.add(vfModuleValues)
406 List<Map<String, Object>> vnfInstanceParamsList = new ArrayList<>()
407 String supportedsNssaiJson= prepareVnfInstanceParamsJson(execution)
409 Map<String, Object> supportedNssai= new LinkedHashMap<>()
410 supportedNssai.put("supportedsNssai", supportedsNssaiJson)
411 vnfInstanceParamsList.add(supportedNssai)
413 Platform platform = new Platform()
414 String platformName = execution.getVariable("platformName")
415 platform.setPlatformName(platformName)
417 LineOfBusiness lineOfbusiness = new LineOfBusiness()
418 String lineOfBusinessName = execution.getVariable("lineOfBusinessName")
419 lineOfbusiness.setLineOfBusinessName(lineOfBusinessName)
421 ModelInfo vnfModelInfo = vnfMap.get("modelInfo")
422 vnfModelInfo.setModelCustomizationId(vnfModelInfo.getModelCustomizationUuid())
423 vnfModelInfo.setModelVersionId(vnfModelInfo.getModelId())
426 Map<String, Object> vnfValues = new LinkedHashMap<>()
427 vnfValues.put("lineOfBusiness", lineOfbusiness)
428 vnfValues.put("platform", platform)
429 vnfValues.put("productFamilyId", "test1234")
430 vnfValues.put("cloudConfiguration", cloudConfiguration)
431 vnfValues.put("vfModules", vfModules)
432 vnfValues.put("modelInfo", vnfModelInfo)
433 vnfValues.put("instanceName", vnfModelInfo.getModelInstanceName())
434 vnfValues.put("instanceParams",vnfInstanceParamsList)
436 vnfModelInfoList.add(vnfValues)
437 //Service Level Resources
438 Map<String, Object> serviceResources = new LinkedHashMap<>()
439 serviceResources.put("vnfs", vnfModelInfoList)
442 String serviceInstanceName = execution.getVariable("networkServiceInstanceName")
443 Map<String, Object> serviceValues = new LinkedHashMap<>()
444 serviceValues.put("modelInfo", serviceModelInfo)
445 serviceValues.put("instanceName", serviceInstanceName)
446 serviceValues.put("resources", serviceResources)
447 serviceValues.put("instanceParams", serviceParams)
450 Map<String, Object> userParamsValues = new LinkedHashMap<>()
452 Map<String, Object> homingSolution = new LinkedHashMap<>()
453 homingSolution.put("Homing_Solution", "none")
455 userParamsValues.put("service", serviceValues)
458 List<Map<String, Object>> userParams = new ArrayList<>()
459 userParams.add(homingSolution)
460 userParams.add(userParamsValues)
463 String serviceType = execution.getVariable("serviceType")
464 RequestParameters requestParameters = new RequestParameters()
465 requestParameters.setaLaCarte(false)
466 requestParameters.setSubscriptionServiceType(serviceType)
467 requestParameters.setUserParams(userParams)
470 String globalSubscriberId = execution.getVariable("globalSubscriberId")
471 SubscriberInfo subscriberInfo = new SubscriberInfo()
472 subscriberInfo.setGlobalSubscriberId(globalSubscriberId)
475 String owningEntityId = execution.getVariable("owningEntityId")
476 OwningEntity owningEntity = new OwningEntity()
477 owningEntity.setOwningEntityId(owningEntityId)
480 String projectName = execution.getVariable("projectName")
481 Project project = new Project()
482 project.setProjectName(projectName)
484 RequestDetails requestDetails = new RequestDetails()
485 requestDetails.setModelInfo(serviceModelInfo)
486 requestDetails.setSubscriberInfo(subscriberInfo)
487 requestDetails.setRequestInfo(requestInfo)
488 requestDetails.setRequestParameters(requestParameters)
489 requestDetails.setCloudConfiguration(cloudConfiguration)
490 requestDetails.setOwningEntity(owningEntity)
491 requestDetails.setProject(project)
493 Map<String, Object> requestDetailsMap = new LinkedHashMap<>()
494 requestDetailsMap.put("requestDetails", requestDetails)
495 String requestPayload = mapper.writeValueAsString(requestDetailsMap)
496 logger.debug("requestDetails "+requestPayload)
497 execution.setVariable("requestPayload", requestPayload)
499 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareSOMacroRequestPayLoad ****")
502 public void sendPutRequestToSOMacro(DelegateExecution execution) {
504 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: sendPutRequestToSOMacro ****")
506 String msoEndpoint = UrnPropertiesReader.getVariable("mso.infra.endpoint.url", execution)
507 String networkServiceInstanceId = execution.getVariable("networkServiceInstanceId")
508 String vnfId = execution.getVariable("vnfId")
509 String url = msoEndpoint+"/serviceInstantiation/v7/serviceInstances/"+networkServiceInstanceId+"/vnfs/"+vnfId
510 String requestBody = execution.getVariable("requestPayload")
511 String msoKey = UrnPropertiesReader.getVariable("mso.msoKey", execution)
512 String basicAuth = UrnPropertiesReader.getVariable("mso.adapters.po.auth", execution)
513 String encodeString = utils.getBasicAuth(basicAuth, msoKey)
514 logger.debug("msoEndpoint: "+msoEndpoint +" "+ "url: "+url +" requestBody: "+requestBody +" "+ "encodeString: "+encodeString)
515 HttpClient httpClient = getHttpClientFactory().newJsonClient(new URL(url), ONAPComponents.SO)
516 httpClient.addAdditionalHeader("Authorization", encodeString)
517 httpClient.addAdditionalHeader("Accept", "application/json")
518 Response httpResponse = httpClient.put(requestBody)
519 handleSOResponse(httpResponse, execution)
520 } catch (BpmnError e) {
523 String msg = Prefix+" Exception in DoActivateCoreNSSI " + any.getCause()
525 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
527 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: sendPostRequestToSOMacro ****")
531 * Handle SO Response for PUT and prepare update operation status
534 private void handleSOResponse(Response httpResponse, DelegateExecution execution){
535 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: handleSOResponse ****")
537 int soResponseCode = httpResponse.getStatus()
538 logger.debug("soResponseCode : "+soResponseCode)
540 if (soResponseCode >= 200 && soResponseCode < 204 && httpResponse.hasEntity()) {
541 String soResponse = httpResponse.readEntity(String.class)
542 logger.debug("soResponse: "+soResponse)
543 String macroOperationId = jsonUtil.getJsonValue(soResponse, "requestReferences.requestId")
544 String requestSelfLink = jsonUtil.getJsonValue(soResponse, "requestReferences.requestSelfLink")
545 execution.setVariable("macroOperationId", macroOperationId)
546 execution.setVariable("requestSelfLink", requestSelfLink)
547 execution.setVariable("isSOTimeOut", "no")
548 execution.setVariable("isSOResponseSucceed","yes")
551 execution.setVariable("isSOResponseSucceed","no")
552 prepareFailedOperationStatusUpdate(execution)
555 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: handleSOResponse ****")
558 public void getSOPUTProgress(DelegateExecution execution) {
559 logger.debug(Prefix+ " **** Enter DoActivateCoreNSSI ::: getSOPUTProgress ****")
560 String url= execution.getVariable("requestSelfLink")
561 HttpClient httpClient = getHttpClientFactory().newJsonClient(new URL(url), ONAPComponents.SO)
562 String msoKey = UrnPropertiesReader.getVariable("mso.msoKey", execution)
563 String basicAuth = UrnPropertiesReader.getVariable("mso.adapters.po.auth", execution)
564 String encodeString = utils.getBasicAuth(basicAuth, msoKey)
565 httpClient.addAdditionalHeader("Authorization", encodeString)
566 httpClient.addAdditionalHeader("Accept", "application/json")
567 Response httpResponse = httpClient.get()
568 logger.debug("httpResponse "+httpResponse)
569 int soResponseCode = httpResponse.getStatus()
570 logger.debug("soResponseCode : "+soResponseCode)
571 if (soResponseCode >= 200 && soResponseCode < 204 && httpResponse.hasEntity()) {
572 String soResponse = httpResponse.readEntity(String.class)
573 logger.debug("soResponse: "+soResponse)
574 String requestState= jsonUtil.getJsonValue(soResponse, "request.requestStatus.requestState")
575 logger.debug("requestState: "+requestState)
576 execution.setVariable("requestState", requestState)
578 execution.setVariable("isSOResponseSucceed","no")
579 prepareFailedOperationStatusUpdate(execution)
581 logger.debug(Prefix+ " **** Exit DoActivateCoreNSSI ::: getSOPUTProgress ****")
584 public void timeDelay() {
586 logger.debug(Prefix+ " **** DoActivateCoreNSSI ::: timeDelay going to sleep for 5 sec")
588 logger.debug("**** DoActivateCoreNSSI ::: timeDelay wakeup after 5 sec")
589 } catch(InterruptedException e) {
590 logger.error(Prefix+ " **** DoActivateCoreNSSI ::: timeDelay exception" + e)
594 void prepareUpdateResourceOperationStatus(DelegateExecution execution) {
596 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: prepareUpdateResourceOperationStatus ****")
598 String soRequestState = execution.getVariable("requestState")
599 //Prepare Update Status for PUT failure and success
600 if("COMPLETE".equalsIgnoreCase(soRequestState)) {
601 execution.setVariable("progress", "100")
602 execution.setVariable("status", "finished")
603 execution.setVariable("operationContent", "AllocteCoreNSSI successful.")
604 logger.debug("Success ,result:${execution.getVariable("result")}, reason: ${execution.getVariable("reason")}")
606 logger.debug("SO PUT Failure with State: "+soRequestState)
607 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "SO PUT Failure")
609 setResourceOperationStatus(execution)
610 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareUpdateResourceOperationStatus ****")
613 void updateSliceProfileOrchestrationStatus(DelegateExecution execution) {
615 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: updateSliceProfileOrchestrationStatus ****")
617 String globalCustId = execution.getVariable("globalSubscriberId")
618 String serviceType = execution.getVariable("serviceType")
619 String oStatus = execution.getVariable("oStatus")
621 ServiceInstance si = execution.getVariable("sliceProfileServiceInstance")
622 String sliceProfileInstanceId = si.getServiceInstanceId()
623 si.setOrchestrationStatus(oStatus)
625 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalCustId).serviceSubscription(serviceType).serviceInstance(sliceProfileInstanceId))
627 getAAIClient().update(uri, si)
628 setResourceOperationStatus(execution)
629 } catch (Exception e) {
630 logger.info("Update OrchestrationStatus in AAI failed")
631 String msg = "Update OrchestrationStatus in AAI failed, " + e.getMessage()
632 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
635 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: updateSliceProfileOrchestrationStatus ****")
639 * prepare ResourceOperation status
641 * @param operationType
643 private void setResourceOperationStatus(DelegateExecution execution) {
645 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: setResourceOperationStatus ****")
647 String serviceId = execution.getVariable("nsiId")
648 String jobId = execution.getVariable("jobId")
649 String nssiId = execution.getVariable("serviceInstanceID")
650 String modelUuid= execution.getVariable("modelUuid")
651 String operationType = execution.getVariable("operationType")
652 ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
653 resourceOperationStatus.setServiceId(serviceId)
654 resourceOperationStatus.setJobId(jobId)
655 resourceOperationStatus.setOperationId(jobId)
656 resourceOperationStatus.setResourceTemplateUUID(modelUuid)
657 resourceOperationStatus.setResourceInstanceID(nssiId)
658 resourceOperationStatus.setOperType(operationType)
659 resourceOperationStatus.setStatus("finished")
660 resourceOperationStatus.setProgress("100")
661 resourceOperationStatus.setStatusDescription("Core Activation Successful")
662 requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
664 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: setResourceOperationStatus ****")
667 void prepareFailedOperationStatusUpdate(DelegateExecution execution){
668 logger.debug(Prefix + " **** Enter DoActivateCoreNSSI ::: prepareFailedOperationStatusUpdate ****")
670 String serviceId = execution.getVariable("nsiId")
671 String jobId = execution.getVariable("jobId")
672 String nssiId = execution.getVariable("serviceInstanceID")
673 String operationType = execution.getVariable("operationType")
674 String modelUuid= execution.getVariable("modelUuid")
676 ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
677 resourceOperationStatus.setServiceId(serviceId)
678 resourceOperationStatus.setJobId(jobId)
679 resourceOperationStatus.setOperationId(jobId)
680 resourceOperationStatus.setResourceInstanceID(nssiId)
681 resourceOperationStatus.setResourceTemplateUUID(modelUuid)
682 resourceOperationStatus.setOperType(operationType)
683 resourceOperationStatus.setProgress("0")
684 resourceOperationStatus.setStatus("failed")
685 resourceOperationStatus.setStatusDescription("Core NSSI Activation Failed")
686 requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
688 logger.debug(Prefix + " **** Exit DoActivateCoreNSSI ::: prepareFailedOperationStatusUpdate ****")