2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2020 Tech Mahindra
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.bpmn.infrastructure.scripts
23 import org.camunda.bpm.engine.delegate.BpmnError
24 import org.camunda.bpm.engine.delegate.DelegateExecution
25 import org.json.JSONObject
26 import org.onap.logging.filter.base.ONAPComponents
27 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
28 import org.onap.so.bpmn.common.scripts.CatalogDbUtils
29 import org.onap.so.bpmn.common.scripts.CatalogDbUtilsFactory
30 import org.onap.so.bpmn.common.scripts.ExceptionUtil
31 import org.onap.so.bpmn.common.scripts.RequestDBUtil
32 import org.onap.so.serviceinstancebeans.CloudConfiguration
33 import org.onap.so.serviceinstancebeans.LineOfBusiness
34 import org.onap.so.serviceinstancebeans.ModelInfo
35 import org.onap.so.serviceinstancebeans.ModelType
36 import org.onap.so.serviceinstancebeans.OwningEntity
37 import org.onap.so.serviceinstancebeans.Platform
38 import org.onap.so.serviceinstancebeans.Project
39 import org.onap.so.bpmn.core.json.JsonUtils
40 import org.onap.so.bpmn.core.UrnPropertiesReader
41 import org.onap.so.rest.catalog.beans.Vnf
42 import org.onap.so.serviceinstancebeans.RequestDetails
43 import org.onap.so.serviceinstancebeans.RequestInfo
44 import org.onap.so.serviceinstancebeans.RequestParameters
45 import org.onap.so.serviceinstancebeans.SubscriberInfo
46 import org.onap.aai.domain.yang.GenericVnf
47 import org.onap.aai.domain.yang.RelatedToProperty
48 import org.onap.aai.domain.yang.Relationship
49 import org.onap.aai.domain.yang.RelationshipData
50 import org.onap.aai.domain.yang.RelationshipList
51 import org.onap.aai.domain.yang.ServiceInstance
52 import org.onap.aai.domain.yang.v19.SliceProfile
53 import org.onap.aai.domain.yang.v19.SliceProfiles
54 import org.slf4j.Logger
55 import org.slf4j.LoggerFactory
56 import org.onap.so.client.HttpClient
57 import org.onap.so.client.HttpClientFactory
58 import org.onap.so.db.request.beans.OperationStatus
59 import org.onap.so.db.request.beans.ResourceOperationStatus
60 import org.onap.aaiclient.client.aai.AAIObjectType
61 import org.onap.aaiclient.client.aai.AAIResourcesClient
62 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
63 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
64 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
65 import com.fasterxml.jackson.databind.ObjectMapper
67 import javax.ws.rs.NotFoundException
68 import javax.ws.rs.core.Response
70 class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
71 String Prefix="DACTCNSSI_"
72 private static final Logger logger = LoggerFactory.getLogger(DoActivateCoreNSSI.class);
73 CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create()
74 private RequestDBUtil requestDBUtil = new RequestDBUtil()
75 ExceptionUtil exceptionUtil = new ExceptionUtil()
76 ObjectMapper mapper = new ObjectMapper();
78 JsonUtils jsonUtil = new JsonUtils()
80 private final Long TIMEOUT = 60 * 60 * 1000
83 public void preProcessRequest(DelegateExecution execution) {
84 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: preProcessRequest ****")
86 String operationType = execution.getVariable("operationType")
89 if(operationType.equals("activateInstance")) {
92 oStatus ="deactivated"
95 execution.setVariable("oStatus", oStatus)
96 String sNssaiListAsString = jsonUtil.getJsonValue(execution.getVariable("sliceParams"), "snssaiList")
98 logger.debug("sNssaiListAsString "+sNssaiListAsString)
100 List<String> sNssaiList = jsonUtil.StringArrayToList(sNssaiListAsString)
102 logger.debug("sNssaiList "+sNssaiList)
105 String sNssai = sNssaiList.get(0)
106 execution.setVariable("sNssai", sNssai)
108 logger.debug("sNssai: "+sNssai)
110 String serviceType = execution.getVariable("subscriptionServiceType")
111 execution.setVariable("serviceType", serviceType)
112 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: preProcessRequest ****")
115 public void getNetworkInstanceWithSPInstanceAssociatedWithNssiId(DelegateExecution execution) {
116 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: getNetworkInstanceWithSPInstanceAssociatedWithNssiId ****")
117 //NSSI Id as service Instance Id to get from Request
118 String serviceInstanceId = execution.getVariable("serviceInstanceID")
119 String errorMsg = "query Network Service Instance from AAI failed"
120 AAIResultWrapper wrapper = queryAAI(execution, AAIObjectType.SERVICE_INSTANCE, serviceInstanceId, errorMsg)
121 Optional<ServiceInstance> nsi = wrapper.asBean(ServiceInstance.class)
122 String networkServiceInstanceName = ""
123 String networkServiceInstanceId =""
124 if(nsi.isPresent()) {
125 List<Relationship> relationshipList = nsi.get().getRelationshipList()?.getRelationship()
126 List spiWithsNssaiAndOrchStatusList = new ArrayList<>()
128 for (Relationship relationship : relationshipList) {
129 String relatedTo = relationship.getRelatedTo()
130 if (relatedTo == "service-instance") {
131 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
132 List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
133 for (RelationshipData relationshipData : relationshipDataList) {
134 if (relationshipData.getRelationshipKey() == "service-instance.service-instance-id") {
135 execution.setVariable("networkServiceInstanceId", relationshipData.getRelationshipValue())
138 for (RelatedToProperty relatedToProperty : relatedToPropertyList) {
139 if (relatedToProperty.getPropertyKey() == "service-instance.service-instance-name") {
140 execution.setVariable("networkServiceInstanceName", relatedToProperty.getPropertyValue())
145 //If related to is allotted-Resource
146 if (relatedTo == "allotted-resource") {
147 //get slice Profile Instance Id from allotted resource in list by nssi
148 List<String> sliceProfileInstanceIdList = new ArrayList<>()
149 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
150 for (RelationshipData relationshipData : relationshipDataList) {
151 if (relationshipData.getRelationshipKey() == "service-instance.service-instance-id") {
152 sliceProfileInstanceIdList.add(relationshipData.getRelationshipValue())
155 for (String sliceProfileServiceInstanceId : sliceProfileInstanceIdList) {
156 String errorSliceProfileMsg = "Slice Profile Service Instance was not found in aai"
158 //Query Slice Profile Service Instance From AAI by sliceProfileServiceInstanceId
159 AAIResultWrapper sliceProfileInstanceWrapper = queryAAI(execution, AAIObjectType.SERVICE_INSTANCE, sliceProfileServiceInstanceId, errorSliceProfileMsg)
160 Optional<ServiceInstance> sliceProfileServiceInstance = sliceProfileInstanceWrapper.asBean(ServiceInstance.class)
161 if (sliceProfileServiceInstance.isPresent()) {
162 String orchestrationStatus= sliceProfileServiceInstance.get().getOrchestrationStatus()
163 String sNssai = sliceProfileServiceInstance.get().getSliceProfiles().getSliceProfile().get(0).getSNssai()
164 if(sNssai.equals(execution.getVariable("sNssai"))) {
165 orchestrationStatus = execution.getVariable("oStatus")
166 //Slice Profile Service Instance to be updated in AAI
167 execution.setVariable("sliceProfileServiceInstance", sliceProfileServiceInstance)
170 Map<String, Object> spiWithsNssaiAndOrchStatus = new LinkedHashMap<>()
171 spiWithsNssaiAndOrchStatus.put("snssai", sNssai)
172 spiWithsNssaiAndOrchStatus.put("status", orchestrationStatus)
173 spiWithsNssaiAndOrchStatusList.add(spiWithsNssaiAndOrchStatus)
178 execution.setVariable("snssaiAndOrchStatusList", spiWithsNssaiAndOrchStatusList)
180 logger.debug("NSSI Id: ${serviceInstanceId}, network Service Instance Id: ${networkServiceInstanceId}, serviceName: ${networkServiceInstanceName}")
181 //Get ServiceInstance Relationships
182 getServiceInstanceRelationships(execution)
183 //Get Vnf Relationships
184 getVnfRelationships(execution)
185 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getNetworkInstanceWithSPInstanceAssociatedWithNssiId ****")
189 private String prepareVnfInstanceParamsJson(DelegateExecution execution) {
190 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: prepareVnfInstanceParamsJson ****")
191 List instanceParamsvalues = execution.getVariable("snssaiAndOrchStatusList")
192 Map<String, Object> nSsai= new LinkedHashMap<>()
193 nSsai.put("sNssai", instanceParamsvalues)
194 String supportedsNssaiJson = mapper.writeValueAsString(nSsai)
196 Map<String, Object> supportedNssai= new LinkedHashMap<>()
197 supportedNssai.put("supportedNssai", supportedsNssaiJson)
198 logger.debug("**** supportedsNssaiJson**** "+supportedNssai)
199 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareVnfInstanceParamsJson ****")
200 return supportedNssai
203 private void getServiceInstanceRelationships(DelegateExecution execution) {
204 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: getServiceInstanceRelationships ****")
205 String serviceInstanceId = execution.getVariable("networkServiceInstanceId")
206 logger.debug("**** serviceInstanceId :: getServiceInstanceRelationships :: "+serviceInstanceId)
207 String errorMsg = "query Network Service Instance from AAI failed"
208 AAIResultWrapper wrapper = queryAAI(execution, AAIObjectType.SERVICE_INSTANCE, serviceInstanceId, errorMsg)
209 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
211 String networkServiceModelInvariantUuid = si.get().getModelInvariantId()
212 execution.setVariable("networkServiceModelInvariantUuid", networkServiceModelInvariantUuid)
214 List<Relationship> relationshipList = si.get().getRelationshipList()?.getRelationship()
215 for (Relationship relationship : relationshipList) {
216 String relatedTo = relationship.getRelatedTo()
217 if (relatedTo == "owning-entity") {
218 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
219 for (RelationshipData relationshipData : relationshipDataList) {
220 if (relationshipData.getRelationshipKey() == "owning-entity.owning-entity-id") {
221 execution.setVariable("owningEntityId", relationshipData.getRelationshipValue())
224 } else if (relatedTo == "generic-vnf") {
225 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
226 List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
229 for (RelationshipData relationshipData : relationshipDataList) {
230 if (relationshipData.getRelationshipKey() == "generic-vnf.vnf-id") {
231 execution.setVariable("vnfId", relationshipData.getRelationshipValue())
232 String vnfId = relationshipData.getRelationshipValue()
233 logger.debug("vnfId :"+vnfId)
236 } else if (relatedTo == "project") {
237 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
238 for (RelationshipData relationshipData : relationshipDataList) {
239 if (relationshipData.getRelationshipKey() == "project.project-name") {
240 execution.setVariable("projectName", relationshipData.getRelationshipValue())
245 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getServiceInstanceRelationships ****")
249 private void getVnfRelationships(DelegateExecution execution) {
251 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: getVnfRelationships ****")
252 String msg = "query Generic Vnf from AAI failed"
254 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, 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()
274 for (RelationshipData relationshipData : relationshipDataList) {
275 if (relationshipData.getRelationshipKey() == "cloud-region.cloud-owner") {
276 execution.setVariable("cloudOwner", relationshipData.getRelationshipValue())
277 } else if (relationshipData.getRelationshipKey() == "cloud-region.cloud-region-id") {
278 execution.setVariable("lcpCloudRegionId", relationshipData.getRelationshipValue())
281 } else if (relatedTo == "platform") {
282 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
283 for (RelationshipData relationshipData : relationshipDataList) {
284 if (relationshipData.getRelationshipKey() == "platform.platform-name") {
285 execution.setVariable("platformName", relationshipData.getRelationshipValue())
288 } else if (relatedTo == "line-of-business") {
289 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
290 for (RelationshipData relationshipData : relationshipDataList) {
291 if (relationshipData.getRelationshipKey() == "line-of-business.line-of-business-name") {
292 execution.setVariable("lineOfBusinessName", relationshipData.getRelationshipValue())
298 } catch(BpmnError e){
300 } catch (Exception ex){
301 msg = "Exception in getVnfRelationships " + ex.getMessage()
303 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
305 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getVnfRelationships ****")
312 * @param aaiObjectType
314 * @return AAIResultWrapper
316 private AAIResultWrapper queryAAI(DelegateExecution execution, AAIObjectType aaiObjectType, String instanceId, String errorMsg) {
317 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: queryAAI ****")
319 String globalSubscriberId = execution.getVariable("globalSubscriberId")
320 String serviceType = execution.getVariable("serviceType")
322 AAIResourceUri resourceUri = AAIUriFactory.createResourceUri(aaiObjectType, globalSubscriberId, serviceType, instanceId)
323 if (!getAAIClient().exists(resourceUri)) {
324 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMsg)
326 AAIResultWrapper wrapper = getAAIClient().get(resourceUri, NotFoundException.class)
328 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: queryAAI ****")
332 public void getServiceVNFAndVFsFromCatalogDB(DelegateExecution execution) {
333 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getServiceVNFAndVFsFromCatalogDB ****")
335 String modelInvariantUuid = execution.getVariable("networkServiceModelInvariantUuid")
338 CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create()
339 String json = catalogDbUtils.getServiceResourcesByServiceModelInvariantUuidString(execution, modelInvariantUuid)
340 logger.debug("***** JSON IS: "+json)
342 String serviceVnfs = jsonUtil.getJsonValue(json, "serviceResources.serviceVnfs") ?: ""
343 String serviceModelInfo = jsonUtil.getJsonValue(json, "serviceResources.modelInfo") ?: ""
346 execution.setVariable("serviceVnfs",serviceVnfs)
347 execution.setVariable("serviceModelInfo", serviceModelInfo)
348 logger.debug(Prefix +" ***** serviceVnfs is: "+ serviceVnfs)
351 } catch (Exception ex){
352 String msg = "Exception in getServiceVNFAndVFsFromCatalogDB " + ex.getMessage()
354 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
356 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getServiceVNFAndVFsFromCatalogDB ****")
359 public void prepareSOMacroRequestPayLoad(DelegateExecution execution) {
360 logger.debug("**** Enter DoActivateCoreNSSI ::: prepareSOMacroRequestPayLoad ****")
361 String json = execution.getVariable("serviceVnfs")
362 logger.debug(">>>> json "+json)
363 List<Object> vnfList = mapper.readValue(json, List.class);
364 logger.debug("vnfList: "+vnfList)
365 Map<String,Object> serviceMap = mapper.readValue(execution.getVariable("serviceModelInfo"), Map.class);
366 ModelInfo serviceModelInfo = new ModelInfo()
367 serviceModelInfo.setModelType(ModelType.service)
368 serviceModelInfo.setModelInvariantId(serviceMap.get("modelInvariantUuid"))
369 serviceModelInfo.setModelVersionId(serviceMap.get("modelUuid"))
370 serviceModelInfo.setModelName(serviceMap.get("modelName"))
371 serviceModelInfo.setModelVersion(serviceMap.get("modelVersion"))
373 logger.debug("serviceModelInfo: "+serviceModelInfo)
375 List<Object> vnfModelInfoList = new ArrayList<>()
377 Map vnfMap = vnfList.get(0)
378 ModelInfo vnfModelInfo = vnfMap.get("modelInfo")
379 logger.debug("vnfModelInfo "+vnfModelInfo)
382 List<Map<String, Object>> vfModuleList = vnfMap.get("vfModules")
383 logger.debug("vfModuleList "+vfModuleList)
386 List<ModelInfo> vfModelInfoList = new ArrayList<>()
388 //Traverse VFModules List and add in vfModelInfoList
389 for (vfModule in vfModuleList) {
390 ModelInfo vfModelInfo = vfModule.get("modelInfo")
391 logger.debug("vfModelInfo "+vfModelInfo)
392 vfModelInfoList.add(vfModelInfo)
396 RequestInfo requestInfo = new RequestInfo()
398 //Dummy Product FamilyId
399 requestInfo.setProductFamilyId("test1234")
400 requestInfo.setSource("VID")
401 requestInfo.setInstanceName(execution.getVariable("networkServiceInstanceName"))
402 requestInfo.setSuppressRollback(false)
403 requestInfo.setRequestorId("NBI")
405 //Service Level InstanceParams
406 List<Map<String, Object>> serviceParams = new ArrayList<>()
407 Map<String, Object> serviceParamsValues = new LinkedHashMap<>()
408 serviceParams.add(serviceParamsValues)
410 //Cloud Configuration
411 CloudConfiguration cloudConfiguration = new CloudConfiguration()
412 cloudConfiguration.setLcpCloudRegionId(execution.getVariable("lcpCloudRegionId"))
413 cloudConfiguration.setTenantId(execution.getVariable("tenantId"))
414 cloudConfiguration.setCloudOwner(execution.getVariable("cloudOwner"))
417 List<Map<String, Object>> vfModules = new ArrayList<>()
418 for (ModelInfo vfModuleModelInfo : vfModelInfoList) {
419 //Individual VFModule List
420 Map<String, Object> vfModuleValues = new LinkedHashMap<>()
421 vfModuleValues.put("modelInfo", vfModuleModelInfo)
422 vfModuleValues.put("instanceName", vfModuleModelInfo.getModelInstanceName())
424 //VFModule InstanceParams should be empty or this field should not be there?
425 List<Map<String, Object>> vfModuleInstanceParams = new ArrayList<>()
426 vfModuleValues.put("instanceParams", vfModuleInstanceParams)
430 ObjectMapper objectMapper = new ObjectMapper();
431 Map<String, Object> sliceProfile = objectMapper.readValue(execution.getVariable("sliceProfile"), Map.class);
433 List vnfInstanceParamsList = new ArrayList<>()
434 String supportedsNssaiJson= prepareVnfInstanceParamsJson(execution)
435 vnfInstanceParamsList.add(supportedsNssaiJson)
437 Platform platform = new Platform()
438 platform.setPlatformName(execution.getVariable("platform"))
440 LineOfBusiness lineOfbusiness = new LineOfBusiness()
441 lineOfbusiness.setLineOfBusinessName(execution.getVariable("lineOfBusiness"))
444 Map<String, Object> vnfValues = new LinkedHashMap<>()
445 vnfValues.put("lineOfBusiness", lineOfbusiness)
446 vnfValues.put("platform", platform)
447 vnfValues.put("productFamilyId", "test1234")
448 vnfValues.put("cloudConfiguration", cloudConfiguration)
449 vnfValues.put("vfModules", vfModules)
450 vnfValues.put("modelInfo", vnfModelInfo)
451 vnfValues.put("instanceName", execution.getVariable("vnfInstanceName"))
452 vnfValues.put("instanceParams",vnfInstanceParamsList)
454 vnfModelInfoList.add(vnfValues)
455 //Service Level Resources
456 Map<String, Object> serviceResources = new LinkedHashMap<>()
457 serviceResources.put("vnfs", vnfModelInfoList)
460 Map<String, Object> serviceValues = new LinkedHashMap<>()
461 serviceValues.put("modelInfo", serviceModelInfo)
462 serviceValues.put("instanceName", execution.getVariable("networkServiceInstanceName"))
463 serviceValues.put("resources", serviceResources)
464 serviceValues.put("instanceParams", serviceParams)
467 Map<String, Object> userParamsValues = new LinkedHashMap<>()
469 Map<String, Object> homingSolution = new LinkedHashMap<>()
470 homingSolution.put("Homing_Solution", "none")
472 userParamsValues.put("service", serviceValues)
475 List<Map<String, Object>> userParams = new ArrayList<>()
476 userParams.add(homingSolution)
477 userParams.add(userParamsValues)
480 RequestParameters requestParameters = new RequestParameters()
481 requestParameters.setaLaCarte(false)
482 requestParameters.setSubscriptionServiceType(execution.getVariable("serviceType"))
483 requestParameters.setUserParams(userParams)
486 SubscriberInfo subscriberInfo = new SubscriberInfo()
487 subscriberInfo.setGlobalSubscriberId(execution.getVariable("globalSubscriberId"))
490 OwningEntity owningEntity = new OwningEntity()
491 owningEntity.setOwningEntityId(execution.getVariable("owningEntityId"))
494 Project project = new Project()
495 project.setProjectName(execution.getVariable("projectName"))
497 RequestDetails requestDetails = new RequestDetails()
498 requestDetails.setModelInfo(serviceModelInfo)
499 requestDetails.setSubscriberInfo(subscriberInfo)
500 requestDetails.setRequestInfo(requestInfo)
501 requestDetails.setRequestParameters(requestParameters)
502 requestDetails.setCloudConfiguration(cloudConfiguration)
503 requestDetails.setOwningEntity(owningEntity)
504 requestDetails.setProject(project)
506 Map<String, Object> requestDetailsMap = new LinkedHashMap<>()
507 requestDetailsMap.put("requestDetails", requestDetails)
508 String requestPayload = objectMapper.writeValueAsString(requestDetailsMap)
510 logger.debug("requestDetails "+requestPayload)
511 execution.setVariable("requestPayload", requestPayload)
513 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareSOMacroRequestPayLoad ****")
516 public void sendPutRequestToSOMacro(DelegateExecution execution) {
518 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: sendPutRequestToSOMacro ****")
520 String msoEndpoint = UrnPropertiesReader.getVariable("mso.infra.endpoint.url", execution)
521 String url = msoEndpoint+"/serviceInstantiation/v7/serviceInstances/"+execution.getVariable("networkServiceInstanceId")+"/vnfs/"+execution.getVariable("vnfId")
522 String requestBody = execution.getVariable("requestPayload")
523 String msoKey = UrnPropertiesReader.getVariable("mso.msoKey", execution)
524 String basicAuth = UrnPropertiesReader.getVariable("mso.infra.endpoint.auth", execution)
525 String basicAuthValue = utils.encrypt(basicAuth, msoKey)
526 String encodeString = utils.getBasicAuth(basicAuthValue, msoKey)
528 HttpClient httpClient = getHttpClientFactory().newJsonClient(new URL(url), ONAPComponents.SO)
529 httpClient.addAdditionalHeader("Authorization", encodeString)
530 httpClient.addAdditionalHeader("Accept", "application/json")
531 Response httpResponse = httpClient.put(requestBody)
532 handleSOResponse(httpResponse, execution)
534 } catch (BpmnError e) {
537 String msg = "Exception in DoActivateCoreNSSSI " + any.getCause()
539 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
541 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: sendPostRequestToSOMacro ****")
545 * Handle SO Response for PUT and prepare update operation status
548 private void handleSOResponse(Response httpResponse, DelegateExecution execution){
549 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: handleSOResponse ****")
551 int soResponseCode = httpResponse.getStatus()
552 logger.debug("soResponseCode : "+soResponseCode)
554 if (soResponseCode >= 200 && soResponseCode < 204 && httpResponse.hasEntity()) {
555 String soResponse = httpResponse.readEntity(String.class)
556 String operationId = execution.getVariable("operationId")
557 def macroOperationId = jsonUtil.getJsonValue(soResponse, "operationId")
558 execution.setVariable("macroOperationId", macroOperationId)
559 execution.setVariable("isSOTimeOut", "no")
560 execution.setVariable("isSOResponseSucceed","yes")
564 String serviceName = execution.getVariable("serviceInstanceName")
565 execution.setVariable("isSOResponseSucceed","no")
566 prepareFailedOperationStatusUpdate(execution)
569 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: handleSOResponse ****")
573 * prepare to call sub process CheckProcessStatus
576 void prepareCallCheckProcessStatus(DelegateExecution execution){
577 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: prepareCallCheckProcessStatus ****")
578 def successConditions = new ArrayList<>()
579 successConditions.add("finished")
580 execution.setVariable("successConditions", successConditions)
581 def errorConditions = new ArrayList<>()
582 errorConditions.add("error")
583 execution.setVariable("errorConditions", errorConditions)
584 execution.setVariable("processServiceType", "Network service")
585 execution.setVariable("subOperationType", "PUT")
586 execution.setVariable("initProgress", 20)
587 execution.setVariable("endProgress",90)
588 execution.setVariable("timeOut", TIMEOUT)
589 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareCallCheckProcessStatus ****")
592 void prepareUpdateResourceOperationStatus(DelegateExecution execution) {
594 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: prepareUpdateResourceOperationStatus ****")
596 String nssiOperationId = execution.getVariable("nssiOperationId")
597 execution.setVariable("operationId", nssiOperationId)
598 //Prepare Update Status for PUT failure and success
599 if(execution.getVariable("isTimeOut").equals("YES")) {
600 logger.debug("TIMEOUT - SO PUT Failure")
601 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "SO PUT Failure")
603 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareUpdateResourceOperationStatus ****")
606 void updateSliceProfileOrchestrationStatus(DelegateExecution execution) {
608 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: updateSliceProfileOrchestrationStatus ****")
610 String globalCustId = execution.getVariable("globalSubscriberId")
611 String serviceType = execution.getVariable("serviceType")
612 String oStatus = execution.getVariable("oStatus")
614 ServiceInstance si = execution.getVariable("sliceProfileServiceInstance")
615 String sliceProfileInstanceId = si.getServiceInstanceId()
616 si.setOrchestrationStatus(oStatus)
618 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
619 globalCustId, serviceType, sliceProfileInstanceId)
622 Response response = getAAIClient().update(uri, si)
624 if(response.getStatus()!=200 || response.getStatus()!=201 || response.getStatus()!=202) {
625 exceptionUtil.buildAndThrowWorkflowException(execution, response.getStatus(), "AAI failed to update sliceProlie service Instance orchestration status")
627 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("nssiId")
648 String jobId = execution.getVariable("jobId")
649 String nsiId = execution.getVariable("nsiId")
650 String operationType = execution.getVariable("operationType")
651 ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
652 resourceOperationStatus.setServiceId(serviceId)
653 resourceOperationStatus.setOperationId(jobId)
654 resourceOperationStatus.setResourceTemplateUUID(nsiId)
655 resourceOperationStatus.setOperType(operationType)
656 resourceOperationStatus.setStatus("finished")
657 resourceOperationStatus.setProgress("100")
658 resourceOperationStatus.setStatusDescription("Core Activation Successful")
659 requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
661 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: setResourceOperationStatus ****")
664 void prepareFailedOperationStatusUpdate(DelegateExecution execution){
665 logger.debug(Prefix + " **** Enter DoActivateCoreNSSI ::: prepareFailedOperationStatusUpdate ****")
667 String serviceId = execution.getVariable("nssiId")
668 String jobId = execution.getVariable("jobId")
669 String nsiId = execution.getVariable("nsiId")
670 String operationType = execution.getVariable("operationType")
672 ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
673 resourceOperationStatus.setServiceId(serviceId)
674 resourceOperationStatus.setOperationId(jobId)
675 resourceOperationStatus.setResourceTemplateUUID(nsiId)
676 resourceOperationStatus.setOperType(operationType)
677 resourceOperationStatus.setProgress(0)
678 resourceOperationStatus.setStatus("failed")
679 resourceOperationStatus.setStatusDescription("Core NSSI Activation Failed")
680 requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
682 logger.debug(Prefix + " **** Exit DoActivateCoreNSSI ::: prepareFailedOperationStatusUpdate ****")