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")
82 if(operationType.equals("activateInstance")) {
85 oStatus ="deactivated"
88 execution.setVariable("oStatus", oStatus)
89 String sNssaiListAsString = jsonUtil.getJsonValue(execution.getVariable("sliceParams"), "snssaiList")
91 logger.debug("sNssaiListAsString "+sNssaiListAsString)
93 List<String> sNssaiList = jsonUtil.StringArrayToList(sNssaiListAsString)
95 logger.debug("sNssaiList "+sNssaiList)
98 String sNssai = sNssaiList.get(0)
99 execution.setVariable("sNssai", sNssai)
101 logger.debug("sNssai: "+sNssai)
103 String serviceType = execution.getVariable("subscriptionServiceType")
104 execution.setVariable("serviceType", serviceType)
105 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: preProcessRequest ****")
108 public void getNetworkInstanceWithSPInstanceAssociatedWithNssiId(DelegateExecution execution) {
109 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: getNetworkInstanceWithSPInstanceAssociatedWithNssiId ****")
110 //NSSI Id as service Instance Id to get from Request
111 String serviceInstanceId = execution.getVariable("serviceInstanceID")
112 String errorMsg = "query Network Service Instance from AAI failed"
113 AAIResultWrapper wrapper = queryAAI(execution, Types.SERVICE_INSTANCE, serviceInstanceId, errorMsg)
114 Optional<ServiceInstance> nsi = wrapper.asBean(ServiceInstance.class)
115 String networkServiceInstanceName = ""
116 String networkServiceInstanceId =""
117 if(nsi.isPresent()) {
118 List<Relationship> relationshipList = nsi.get().getRelationshipList()?.getRelationship()
119 List spiWithsNssaiAndOrchStatusList = new ArrayList<>()
121 for (Relationship relationship : relationshipList) {
122 String relatedTo = relationship.getRelatedTo()
123 if (relatedTo == "service-instance") {
124 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
125 List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
126 for (RelationshipData relationshipData : relationshipDataList) {
127 if (relationshipData.getRelationshipKey() == "service-instance.service-instance-id") {
128 execution.setVariable("networkServiceInstanceId", relationshipData.getRelationshipValue())
131 for (RelatedToProperty relatedToProperty : relatedToPropertyList) {
132 if (relatedToProperty.getPropertyKey() == "service-instance.service-instance-name") {
133 execution.setVariable("networkServiceInstanceName", relatedToProperty.getPropertyValue())
138 //If related to is allotted-Resource
139 if (relatedTo == "allotted-resource") {
140 //get slice Profile Instance Id from allotted resource in list by nssi
141 List<String> sliceProfileInstanceIdList = new ArrayList<>()
142 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
143 for (RelationshipData relationshipData : relationshipDataList) {
144 if (relationshipData.getRelationshipKey() == "service-instance.service-instance-id") {
145 sliceProfileInstanceIdList.add(relationshipData.getRelationshipValue())
148 for (String sliceProfileServiceInstanceId : sliceProfileInstanceIdList) {
149 String errorSliceProfileMsg = "Slice Profile Service Instance was not found in aai"
151 //Query Slice Profile Service Instance From AAI by sliceProfileServiceInstanceId
152 AAIResultWrapper sliceProfileInstanceWrapper = queryAAI(execution, Types.SERVICE_INSTANCE, sliceProfileServiceInstanceId, errorSliceProfileMsg)
153 Optional<ServiceInstance> sliceProfileServiceInstance = sliceProfileInstanceWrapper.asBean(ServiceInstance.class)
154 if (sliceProfileServiceInstance.isPresent()) {
155 String orchestrationStatus= sliceProfileServiceInstance.get().getOrchestrationStatus()
156 String sNssai = sliceProfileServiceInstance.get().getSliceProfiles().getSliceProfile().get(0).getSNssai()
157 if(sNssai.equals(execution.getVariable("sNssai"))) {
158 orchestrationStatus = execution.getVariable("oStatus")
159 //Slice Profile Service Instance to be updated in AAI
160 execution.setVariable("sliceProfileServiceInstance", sliceProfileServiceInstance)
163 Map<String, Object> spiWithsNssaiAndOrchStatus = new LinkedHashMap<>()
164 spiWithsNssaiAndOrchStatus.put("snssai", sNssai)
165 spiWithsNssaiAndOrchStatus.put("status", orchestrationStatus)
166 spiWithsNssaiAndOrchStatusList.add(spiWithsNssaiAndOrchStatus)
171 execution.setVariable("snssaiAndOrchStatusList", spiWithsNssaiAndOrchStatusList)
173 logger.debug("NSSI Id: ${serviceInstanceId}, network Service Instance Id: ${networkServiceInstanceId}, serviceName: ${networkServiceInstanceName}")
174 //Get ServiceInstance Relationships
175 getServiceInstanceRelationships(execution)
176 //Get Vnf Relationships
177 getVnfRelationships(execution)
178 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getNetworkInstanceWithSPInstanceAssociatedWithNssiId ****")
182 private String prepareVnfInstanceParamsJson(DelegateExecution execution) {
183 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: prepareVnfInstanceParamsJson ****")
184 List instanceParamsvalues = execution.getVariable("snssaiAndOrchStatusList")
185 Map<String, Object> nSsai= new LinkedHashMap<>()
186 nSsai.put("sNssai", instanceParamsvalues)
187 String supportedsNssaiJson = mapper.writeValueAsString(nSsai)
189 Map<String, Object> supportedNssai= new LinkedHashMap<>()
190 supportedNssai.put("supportedNssai", supportedsNssaiJson)
191 logger.debug("**** supportedsNssaiJson**** "+supportedNssai)
192 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareVnfInstanceParamsJson ****")
193 return supportedNssai
196 private void getServiceInstanceRelationships(DelegateExecution execution) {
197 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: getServiceInstanceRelationships ****")
198 String serviceInstanceId = execution.getVariable("networkServiceInstanceId")
199 logger.debug("**** serviceInstanceId :: getServiceInstanceRelationships :: "+serviceInstanceId)
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 (relatedTo == "owning-entity") {
211 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
212 for (RelationshipData relationshipData : relationshipDataList) {
213 if (relationshipData.getRelationshipKey() == "owning-entity.owning-entity-id") {
214 execution.setVariable("owningEntityId", relationshipData.getRelationshipValue())
217 } else if (relatedTo == "generic-vnf") {
218 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
219 List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
222 for (RelationshipData relationshipData : relationshipDataList) {
223 if (relationshipData.getRelationshipKey() == "generic-vnf.vnf-id") {
224 execution.setVariable("vnfId", relationshipData.getRelationshipValue())
225 String vnfId = relationshipData.getRelationshipValue()
226 logger.debug("vnfId :"+vnfId)
229 } else if (relatedTo == "project") {
230 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
231 for (RelationshipData relationshipData : relationshipDataList) {
232 if (relationshipData.getRelationshipKey() == "project.project-name") {
233 execution.setVariable("projectName", relationshipData.getRelationshipValue())
238 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getServiceInstanceRelationships ****")
242 private void getVnfRelationships(DelegateExecution execution) {
244 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: getVnfRelationships ****")
245 String msg = "query Generic Vnf from AAI failed"
247 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().genericVnf(execution.getVariable('vnfId')))
248 if (!getAAIClient().exists(uri)) {
249 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
251 AAIResultWrapper wrapper = getAAIClient().get(uri, NotFoundException.class)
252 Optional<GenericVnf> vnf = wrapper.asBean(GenericVnf.class)
253 if(vnf.isPresent()) {
254 List<Relationship> relationshipList = vnf.get().getRelationshipList()?.getRelationship()
255 for (Relationship relationship : relationshipList) {
256 String relatedTo = relationship.getRelatedTo()
257 if (relatedTo == "tenant") {
258 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
259 for (RelationshipData relationshipData : relationshipDataList) {
260 if (relationshipData.getRelationshipKey() == "tenant.tenant-id") {
261 execution.setVariable("tenantId", relationshipData.getRelationshipValue())
264 } else if (relatedTo == "cloud-region") {
265 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
267 for (RelationshipData relationshipData : relationshipDataList) {
268 if (relationshipData.getRelationshipKey() == "cloud-region.cloud-owner") {
269 execution.setVariable("cloudOwner", relationshipData.getRelationshipValue())
270 } else if (relationshipData.getRelationshipKey() == "cloud-region.cloud-region-id") {
271 execution.setVariable("lcpCloudRegionId", relationshipData.getRelationshipValue())
274 } else if (relatedTo == "platform") {
275 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
276 for (RelationshipData relationshipData : relationshipDataList) {
277 if (relationshipData.getRelationshipKey() == "platform.platform-name") {
278 execution.setVariable("platformName", relationshipData.getRelationshipValue())
281 } else if (relatedTo == "line-of-business") {
282 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
283 for (RelationshipData relationshipData : relationshipDataList) {
284 if (relationshipData.getRelationshipKey() == "line-of-business.line-of-business-name") {
285 execution.setVariable("lineOfBusinessName", relationshipData.getRelationshipValue())
291 } catch(BpmnError e){
293 } catch (Exception ex){
294 msg = "Exception in getVnfRelationships " + ex.getMessage()
296 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
298 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getVnfRelationships ****")
305 * @param aaiObjectType
307 * @return AAIResultWrapper
309 private AAIResultWrapper queryAAI(DelegateExecution execution, AAIObjectName aaiObjectName, String instanceId, String errorMsg) {
310 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: queryAAI ****")
312 String globalSubscriberId = execution.getVariable("globalSubscriberId")
313 String serviceType = execution.getVariable("serviceType")
315 AAIResourceUri resourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(instanceId))
316 if (!getAAIClient().exists(resourceUri)) {
317 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMsg)
319 AAIResultWrapper wrapper = getAAIClient().get(resourceUri, NotFoundException.class)
321 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: queryAAI ****")
325 public void getServiceVNFAndVFsFromCatalogDB(DelegateExecution execution) {
326 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getServiceVNFAndVFsFromCatalogDB ****")
328 String modelInvariantUuid = execution.getVariable("networkServiceModelInvariantUuid")
331 CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create()
332 String json = catalogDbUtils.getServiceResourcesByServiceModelInvariantUuidString(execution, modelInvariantUuid)
333 logger.debug("***** JSON IS: "+json)
335 String serviceVnfs = jsonUtil.getJsonValue(json, "serviceResources.serviceVnfs") ?: ""
336 String serviceModelInfo = jsonUtil.getJsonValue(json, "serviceResources.modelInfo") ?: ""
339 execution.setVariable("serviceVnfs",serviceVnfs)
340 execution.setVariable("serviceModelInfo", serviceModelInfo)
341 logger.debug(Prefix +" ***** serviceVnfs is: "+ serviceVnfs)
344 } catch (Exception ex){
345 String msg = "Exception in getServiceVNFAndVFsFromCatalogDB " + ex.getMessage()
347 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
349 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getServiceVNFAndVFsFromCatalogDB ****")
352 public void prepareSOMacroRequestPayLoad(DelegateExecution execution) {
353 logger.debug("**** Enter DoActivateCoreNSSI ::: prepareSOMacroRequestPayLoad ****")
354 String json = execution.getVariable("serviceVnfs")
355 logger.debug(">>>> json "+json)
356 List<Object> vnfList = mapper.readValue(json, List.class);
357 logger.debug("vnfList: "+vnfList)
358 Map<String,Object> serviceMap = mapper.readValue(execution.getVariable("serviceModelInfo"), Map.class);
359 ModelInfo serviceModelInfo = new ModelInfo()
360 serviceModelInfo.setModelType(ModelType.service)
361 serviceModelInfo.setModelInvariantId(serviceMap.get("modelInvariantUuid"))
362 serviceModelInfo.setModelVersionId(serviceMap.get("modelUuid"))
363 serviceModelInfo.setModelName(serviceMap.get("modelName"))
364 serviceModelInfo.setModelVersion(serviceMap.get("modelVersion"))
366 logger.debug("serviceModelInfo: "+serviceModelInfo)
368 List<Object> vnfModelInfoList = new ArrayList<>()
370 Map vnfMap = vnfList.get(0)
371 ModelInfo vnfModelInfo = vnfMap.get("modelInfo")
372 logger.debug("vnfModelInfo "+vnfModelInfo)
375 List<Map<String, Object>> vfModuleList = vnfMap.get("vfModules")
376 logger.debug("vfModuleList "+vfModuleList)
379 List<ModelInfo> vfModelInfoList = new ArrayList<>()
381 //Traverse VFModules List and add in vfModelInfoList
382 for (vfModule in vfModuleList) {
383 ModelInfo vfModelInfo = vfModule.get("modelInfo")
384 logger.debug("vfModelInfo "+vfModelInfo)
385 vfModelInfoList.add(vfModelInfo)
389 RequestInfo requestInfo = new RequestInfo()
391 //Dummy Product FamilyId
392 requestInfo.setProductFamilyId("test1234")
393 requestInfo.setSource("VID")
394 requestInfo.setInstanceName(execution.getVariable("networkServiceInstanceName"))
395 requestInfo.setSuppressRollback(false)
396 requestInfo.setRequestorId("NBI")
398 //Service Level InstanceParams
399 List<Map<String, Object>> serviceParams = new ArrayList<>()
400 Map<String, Object> serviceParamsValues = new LinkedHashMap<>()
401 serviceParams.add(serviceParamsValues)
403 //Cloud Configuration
404 CloudConfiguration cloudConfiguration = new CloudConfiguration()
405 cloudConfiguration.setLcpCloudRegionId(execution.getVariable("lcpCloudRegionId"))
406 cloudConfiguration.setTenantId(execution.getVariable("tenantId"))
407 cloudConfiguration.setCloudOwner(execution.getVariable("cloudOwner"))
410 List<Map<String, Object>> vfModules = new ArrayList<>()
411 for (ModelInfo vfModuleModelInfo : vfModelInfoList) {
412 //Individual VFModule List
413 Map<String, Object> vfModuleValues = new LinkedHashMap<>()
414 vfModuleValues.put("modelInfo", vfModuleModelInfo)
415 vfModuleValues.put("instanceName", vfModuleModelInfo.getModelInstanceName())
417 //VFModule InstanceParams should be empty or this field should not be there?
418 List<Map<String, Object>> vfModuleInstanceParams = new ArrayList<>()
419 vfModuleValues.put("instanceParams", vfModuleInstanceParams)
423 ObjectMapper objectMapper = new ObjectMapper();
424 Map<String, Object> sliceProfile = objectMapper.readValue(execution.getVariable("sliceProfile"), Map.class);
426 List vnfInstanceParamsList = new ArrayList<>()
427 String supportedsNssaiJson= prepareVnfInstanceParamsJson(execution)
428 vnfInstanceParamsList.add(supportedsNssaiJson)
430 Platform platform = new Platform()
431 platform.setPlatformName(execution.getVariable("platform"))
433 LineOfBusiness lineOfbusiness = new LineOfBusiness()
434 lineOfbusiness.setLineOfBusinessName(execution.getVariable("lineOfBusiness"))
437 Map<String, Object> vnfValues = new LinkedHashMap<>()
438 vnfValues.put("lineOfBusiness", lineOfbusiness)
439 vnfValues.put("platform", platform)
440 vnfValues.put("productFamilyId", "test1234")
441 vnfValues.put("cloudConfiguration", cloudConfiguration)
442 vnfValues.put("vfModules", vfModules)
443 vnfValues.put("modelInfo", vnfModelInfo)
444 vnfValues.put("instanceName", execution.getVariable("vnfInstanceName"))
445 vnfValues.put("instanceParams",vnfInstanceParamsList)
447 vnfModelInfoList.add(vnfValues)
448 //Service Level Resources
449 Map<String, Object> serviceResources = new LinkedHashMap<>()
450 serviceResources.put("vnfs", vnfModelInfoList)
453 Map<String, Object> serviceValues = new LinkedHashMap<>()
454 serviceValues.put("modelInfo", serviceModelInfo)
455 serviceValues.put("instanceName", execution.getVariable("networkServiceInstanceName"))
456 serviceValues.put("resources", serviceResources)
457 serviceValues.put("instanceParams", serviceParams)
460 Map<String, Object> userParamsValues = new LinkedHashMap<>()
462 Map<String, Object> homingSolution = new LinkedHashMap<>()
463 homingSolution.put("Homing_Solution", "none")
465 userParamsValues.put("service", serviceValues)
468 List<Map<String, Object>> userParams = new ArrayList<>()
469 userParams.add(homingSolution)
470 userParams.add(userParamsValues)
473 RequestParameters requestParameters = new RequestParameters()
474 requestParameters.setaLaCarte(false)
475 requestParameters.setSubscriptionServiceType(execution.getVariable("serviceType"))
476 requestParameters.setUserParams(userParams)
479 SubscriberInfo subscriberInfo = new SubscriberInfo()
480 subscriberInfo.setGlobalSubscriberId(execution.getVariable("globalSubscriberId"))
483 OwningEntity owningEntity = new OwningEntity()
484 owningEntity.setOwningEntityId(execution.getVariable("owningEntityId"))
487 Project project = new Project()
488 project.setProjectName(execution.getVariable("projectName"))
490 RequestDetails requestDetails = new RequestDetails()
491 requestDetails.setModelInfo(serviceModelInfo)
492 requestDetails.setSubscriberInfo(subscriberInfo)
493 requestDetails.setRequestInfo(requestInfo)
494 requestDetails.setRequestParameters(requestParameters)
495 requestDetails.setCloudConfiguration(cloudConfiguration)
496 requestDetails.setOwningEntity(owningEntity)
497 requestDetails.setProject(project)
499 Map<String, Object> requestDetailsMap = new LinkedHashMap<>()
500 requestDetailsMap.put("requestDetails", requestDetails)
501 String requestPayload = objectMapper.writeValueAsString(requestDetailsMap)
503 logger.debug("requestDetails "+requestPayload)
504 execution.setVariable("requestPayload", requestPayload)
506 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareSOMacroRequestPayLoad ****")
509 public void sendPutRequestToSOMacro(DelegateExecution execution) {
511 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: sendPutRequestToSOMacro ****")
513 String msoEndpoint = UrnPropertiesReader.getVariable("mso.infra.endpoint.url", execution)
514 String url = msoEndpoint+"/serviceInstantiation/v7/serviceInstances/"+execution.getVariable("networkServiceInstanceId")+"/vnfs/"+execution.getVariable("vnfId")
515 String requestBody = execution.getVariable("requestPayload")
516 String msoKey = UrnPropertiesReader.getVariable("mso.msoKey", execution)
517 String basicAuth = UrnPropertiesReader.getVariable("mso.infra.endpoint.auth", execution)
518 String basicAuthValue = utils.encrypt(basicAuth, msoKey)
519 String encodeString = utils.getBasicAuth(basicAuthValue, msoKey)
521 HttpClient httpClient = getHttpClientFactory().newJsonClient(new URL(url), ONAPComponents.SO)
522 httpClient.addAdditionalHeader("Authorization", encodeString)
523 httpClient.addAdditionalHeader("Accept", "application/json")
524 Response httpResponse = httpClient.put(requestBody)
525 handleSOResponse(httpResponse, execution)
527 } catch (BpmnError e) {
530 String msg = "Exception in DoActivateCoreNSSSI " + any.getCause()
532 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
534 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: sendPostRequestToSOMacro ****")
538 * Handle SO Response for PUT and prepare update operation status
541 private void handleSOResponse(Response httpResponse, DelegateExecution execution){
542 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: handleSOResponse ****")
544 int soResponseCode = httpResponse.getStatus()
545 logger.debug("soResponseCode : "+soResponseCode)
547 if (soResponseCode >= 200 && soResponseCode < 204 && httpResponse.hasEntity()) {
548 String soResponse = httpResponse.readEntity(String.class)
549 String operationId = execution.getVariable("operationId")
550 def macroOperationId = jsonUtil.getJsonValue(soResponse, "operationId")
551 execution.setVariable("macroOperationId", macroOperationId)
552 execution.setVariable("isSOTimeOut", "no")
553 execution.setVariable("isSOResponseSucceed","yes")
557 String serviceName = execution.getVariable("serviceInstanceName")
558 execution.setVariable("isSOResponseSucceed","no")
559 prepareFailedOperationStatusUpdate(execution)
562 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: handleSOResponse ****")
566 * prepare to call sub process CheckProcessStatus
569 void prepareCallCheckProcessStatus(DelegateExecution execution){
570 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: prepareCallCheckProcessStatus ****")
571 def successConditions = new ArrayList<>()
572 successConditions.add("finished")
573 execution.setVariable("successConditions", successConditions)
574 def errorConditions = new ArrayList<>()
575 errorConditions.add("error")
576 execution.setVariable("errorConditions", errorConditions)
577 execution.setVariable("processServiceType", "Network service")
578 execution.setVariable("subOperationType", "PUT")
579 execution.setVariable("initProgress", 20)
580 execution.setVariable("endProgress",90)
581 execution.setVariable("timeOut", TIMEOUT)
582 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareCallCheckProcessStatus ****")
585 void prepareUpdateResourceOperationStatus(DelegateExecution execution) {
587 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: prepareUpdateResourceOperationStatus ****")
589 String nssiOperationId = execution.getVariable("nssiOperationId")
590 execution.setVariable("operationId", nssiOperationId)
591 //Prepare Update Status for PUT failure and success
592 if(execution.getVariable("isTimeOut").equals("YES")) {
593 logger.debug("TIMEOUT - SO PUT Failure")
594 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "SO PUT Failure")
596 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareUpdateResourceOperationStatus ****")
599 void updateSliceProfileOrchestrationStatus(DelegateExecution execution) {
601 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: updateSliceProfileOrchestrationStatus ****")
603 String globalCustId = execution.getVariable("globalSubscriberId")
604 String serviceType = execution.getVariable("serviceType")
605 String oStatus = execution.getVariable("oStatus")
607 ServiceInstance si = execution.getVariable("sliceProfileServiceInstance")
608 String sliceProfileInstanceId = si.getServiceInstanceId()
609 si.setOrchestrationStatus(oStatus)
611 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalCustId).serviceSubscription(serviceType).serviceInstance(sliceProfileInstanceId))
614 Response response = getAAIClient().update(uri, si)
616 if(response.getStatus()!=200 || response.getStatus()!=201 || response.getStatus()!=202) {
617 exceptionUtil.buildAndThrowWorkflowException(execution, response.getStatus(), "AAI failed to update sliceProlie service Instance orchestration status")
619 setResourceOperationStatus(execution)
621 } catch (Exception e) {
622 logger.info("Update OrchestrationStatus in AAI failed")
623 String msg = "Update OrchestrationStatus in AAI failed, " + e.getMessage()
624 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
627 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: updateSliceProfileOrchestrationStatus ****")
631 * prepare ResourceOperation status
633 * @param operationType
635 private void setResourceOperationStatus(DelegateExecution execution) {
637 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: setResourceOperationStatus ****")
639 String serviceId = execution.getVariable("nssiId")
640 String jobId = execution.getVariable("jobId")
641 String nsiId = execution.getVariable("nsiId")
642 String operationType = execution.getVariable("operationType")
643 ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
644 resourceOperationStatus.setServiceId(serviceId)
645 resourceOperationStatus.setOperationId(jobId)
646 resourceOperationStatus.setResourceTemplateUUID(nsiId)
647 resourceOperationStatus.setOperType(operationType)
648 resourceOperationStatus.setStatus("finished")
649 resourceOperationStatus.setProgress("100")
650 resourceOperationStatus.setStatusDescription("Core Activation Successful")
651 requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
653 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: setResourceOperationStatus ****")
656 void prepareFailedOperationStatusUpdate(DelegateExecution execution){
657 logger.debug(Prefix + " **** Enter DoActivateCoreNSSI ::: prepareFailedOperationStatusUpdate ****")
659 String serviceId = execution.getVariable("nssiId")
660 String jobId = execution.getVariable("jobId")
661 String nsiId = execution.getVariable("nsiId")
662 String operationType = execution.getVariable("operationType")
664 ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
665 resourceOperationStatus.setServiceId(serviceId)
666 resourceOperationStatus.setOperationId(jobId)
667 resourceOperationStatus.setResourceTemplateUUID(nsiId)
668 resourceOperationStatus.setOperType(operationType)
669 resourceOperationStatus.setProgress(0)
670 resourceOperationStatus.setStatus("failed")
671 resourceOperationStatus.setStatusDescription("Core NSSI Activation Failed")
672 requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
674 logger.debug(Prefix + " **** Exit DoActivateCoreNSSI ::: prepareFailedOperationStatusUpdate ****")