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<>()
110 for (Relationship relationship : relationshipList) {
111 String relatedTo = relationship.getRelatedTo()
112 if ("service-instance".equals(relatedTo)) {
113 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
114 List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
115 for (RelationshipData relationshipData : relationshipDataList) {
116 if ("service-instance.service-instance-id".equals(relationshipData.getRelationshipKey())) {
117 //Query Every related Service Instance From AAI by service Instance ID
118 AAIResultWrapper instanceWrapper = queryAAI(execution, Types.SERVICE_INSTANCE, relationshipData.getRelationshipValue(), "No Instance Present")
119 Optional<ServiceInstance> relatedServiceInstance = instanceWrapper.asBean(ServiceInstance.class)
120 if (relatedServiceInstance.isPresent()) {
121 ServiceInstance relatedServiceInstanceObj = relatedServiceInstance.get()
122 String role = relatedServiceInstanceObj.getServiceRole();
124 if(role == null || role.isEmpty()) {
125 networkServiceInstanceId = relatedServiceInstanceObj.getServiceInstanceId()
126 networkServiceInstanceName = relatedServiceInstanceObj.getServiceInstanceName()
127 logger.debug("networkServiceInstanceId: {} networkServiceInstanceName: {} ",networkServiceInstanceId, networkServiceInstanceName)
128 execution.setVariable("networkServiceInstanceId", networkServiceInstanceId)
129 execution.setVariable("networkServiceInstanceName", networkServiceInstanceName)
130 } else if("slice-profile".equals(role)) {
131 String orchestrationStatus= relatedServiceInstanceObj.getOrchestrationStatus()
132 String sNssai = relatedServiceInstanceObj.getEnvironmentContext()
133 if(sNssai.equals(execution.getVariable("sNssai"))) {
134 orchestrationStatus = execution.getVariable("oStatus")
135 //Slice Profile Service Instance to be updated in AAI
136 execution.setVariable("sliceProfileServiceInstance", relatedServiceInstanceObj)
138 Map<String, Object> spiWithsNssaiAndOrchStatus = new LinkedHashMap<>()
139 spiWithsNssaiAndOrchStatus.put("snssai", sNssai)
140 spiWithsNssaiAndOrchStatus.put("status", orchestrationStatus)
141 spiWithsNssaiAndOrchStatusList.add(spiWithsNssaiAndOrchStatus)
142 logger.debug("service Profile's NSSAI And Orchestration Status: "+spiWithsNssaiAndOrchStatus)
149 execution.setVariable("snssaiAndOrchStatusList", spiWithsNssaiAndOrchStatusList)
151 logger.debug("NSSI Id: ${serviceInstanceId}, network Service Instance Id: ${networkServiceInstanceId}, serviceName: ${networkServiceInstanceName}")
152 //Get ServiceInstance Relationships
153 getServiceInstanceRelationships(execution)
154 //Get Vnf Relationships
155 getVnfRelationships(execution)
156 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getNetworkInstanceWithSPInstanceAssociatedWithNssiId ****")
160 private String prepareVnfInstanceParamsJson(DelegateExecution execution) {
161 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: prepareVnfInstanceParamsJson ****")
162 List instanceParamsvalues = execution.getVariable("snssaiAndOrchStatusList")
163 Map<String, Object> nSsai= new LinkedHashMap<>()
164 nSsai.put("sNssai", instanceParamsvalues)
165 String supportedsNssaiJson = mapper.writeValueAsString(nSsai)
166 logger.debug(Prefix+" **** Exit DoActivateCoreNSSI ::: prepareVnfInstanceParamsJson ****")
167 return supportedsNssaiJson
170 private void getServiceInstanceRelationships(DelegateExecution execution) {
171 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: getServiceInstanceRelationships ****")
172 String serviceInstanceId = execution.getVariable("networkServiceInstanceId")
173 String errorMsg = "query Network Service Instance from AAI failed"
174 AAIResultWrapper wrapper = queryAAI(execution, Types.SERVICE_INSTANCE, serviceInstanceId, errorMsg)
175 Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
177 String networkServiceModelInvariantUuid = si.get().getModelInvariantId()
178 execution.setVariable("networkServiceModelInvariantUuid", networkServiceModelInvariantUuid)
180 List<Relationship> relationshipList = si.get().getRelationshipList()?.getRelationship()
181 for (Relationship relationship : relationshipList) {
182 String relatedTo = relationship.getRelatedTo()
183 if (("owning-entity").equals(relatedTo)) {
184 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
185 for (RelationshipData relationshipData : relationshipDataList) {
186 if (("owning-entity.owning-entity-id").equals(relationshipData.getRelationshipKey())) {
187 execution.setVariable("owningEntityId", relationshipData.getRelationshipValue())
190 } else if (("generic-vnf").equals(relatedTo)) {
191 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
192 List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
195 for (RelationshipData relationshipData : relationshipDataList) {
196 if (("generic-vnf.vnf-id").equals(relationshipData.getRelationshipKey())) {
197 execution.setVariable("vnfId", relationshipData.getRelationshipValue())
200 //Get Vnf Name Check If necessary
201 for (RelatedToProperty relatedToProperty : relatedToPropertyList) {
202 if (("generic-vnf.vnf-name").equals(relatedToProperty.getPropertyKey())) {
203 execution.setVariable("vnfName", relatedToProperty.getPropertyValue())
206 } else if (("project").equals(relatedTo)) {
207 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
208 for (RelationshipData relationshipData : relationshipDataList) {
209 if (("project.project-name").equals(relationshipData.getRelationshipKey())) {
210 execution.setVariable("projectName", relationshipData.getRelationshipValue())
215 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getServiceInstanceRelationships ****")
219 private void getVnfRelationships(DelegateExecution execution) {
221 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: getVnfRelationships ****")
222 String msg = "query Generic Vnf from AAI failed"
224 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().genericVnf(execution.getVariable('vnfId')))
225 if (!getAAIClient().exists(uri)) {
226 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
228 AAIResultWrapper wrapper = getAAIClient().get(uri, NotFoundException.class)
229 Optional<GenericVnf> vnf = wrapper.asBean(GenericVnf.class)
230 if(vnf.isPresent()) {
231 List<Relationship> relationshipList = vnf.get().getRelationshipList()?.getRelationship()
232 for (Relationship relationship : relationshipList) {
233 String relatedTo = relationship.getRelatedTo()
234 if (("tenant").equals(relatedTo)) {
235 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
236 for (RelationshipData relationshipData : relationshipDataList) {
237 if (("tenant.tenant-id").equals(relationshipData.getRelationshipKey())) {
238 execution.setVariable("tenantId", relationshipData.getRelationshipValue())
241 } else if (("cloud-region").equals(relatedTo)) {
242 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
244 for (RelationshipData relationshipData : relationshipDataList) {
245 if (("cloud-region.cloud-owner").equals(relationshipData.getRelationshipKey())) {
246 execution.setVariable("cloudOwner", relationshipData.getRelationshipValue())
247 } else if (("cloud-region.cloud-region-id").equals(relationshipData.getRelationshipKey())) {
248 execution.setVariable("lcpCloudRegionId", relationshipData.getRelationshipValue())
251 } else if (("platform").equals(relatedTo)) {
252 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
253 for (RelationshipData relationshipData : relationshipDataList) {
254 if (("platform.platform-name").equals(relationshipData.getRelationshipKey())) {
255 execution.setVariable("platformName", relationshipData.getRelationshipValue())
258 } else if (("line-of-business").equals(relatedTo)) {
259 List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
260 for (RelationshipData relationshipData : relationshipDataList) {
261 if (("line-of-business.line-of-business-name").equals(relationshipData.getRelationshipKey())) {
262 execution.setVariable("lineOfBusinessName", relationshipData.getRelationshipValue())
268 } catch(BpmnError e){
270 } catch (Exception ex){
271 msg = "Exception in getVnfRelationships " + ex.getMessage()
273 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
275 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getVnfRelationships ****")
282 * @param aaiObjectType
284 * @return AAIResultWrapper
286 private AAIResultWrapper queryAAI(DelegateExecution execution, AAIObjectName aaiObjectName, String instanceId, String errorMsg) {
287 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: queryAAI ****")
289 String globalSubscriberId = execution.getVariable("globalSubscriberId")
290 String serviceType = execution.getVariable("serviceType")
292 AAIResourceUri resourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(instanceId))
293 if (!getAAIClient().exists(resourceUri)) {
294 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMsg)
296 AAIResultWrapper wrapper = getAAIClient().get(resourceUri, NotFoundException.class)
298 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: queryAAI ****")
302 public void getServiceVNFAndVFsFromCatalogDB(DelegateExecution execution) {
303 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getServiceVNFAndVFsFromCatalogDB ****")
305 String modelInvariantUuid = execution.getVariable("networkServiceModelInvariantUuid")
308 CatalogDbUtils catalogDbUtils = new CatalogDbUtilsFactory().create()
309 String json = catalogDbUtils.getServiceResourcesByServiceModelInvariantUuidString(execution, modelInvariantUuid)
310 logger.debug("***** JSON IS: "+json)
312 String serviceVnfs = jsonUtil.getJsonValue(json, "serviceResources.serviceVnfs") ?: ""
313 String serviceModelInfo = jsonUtil.getJsonValue(json, "serviceResources.modelInfo") ?: ""
314 execution.setVariable("serviceVnfs",serviceVnfs)
315 execution.setVariable("serviceModelInfo", serviceModelInfo)
316 logger.debug(Prefix +" ***** serviceVnfs : "+ serviceVnfs)
319 } catch (Exception ex){
320 String msg = "Exception in getServiceVNFAndVFsFromCatalogDB " + ex.getMessage()
322 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
324 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: getServiceVNFAndVFsFromCatalogDB ****")
327 public void prepareSOMacroRequestPayLoad(DelegateExecution execution) {
328 logger.debug("**** Enter DoActivateCoreNSSI ::: prepareSOMacroRequestPayLoad ****")
329 String json = execution.getVariable("serviceVnfs")
330 List<Object> vnfList = mapper.readValue(json, List.class);
331 Map<String,Object> serviceMap = mapper.readValue(execution.getVariable("serviceModelInfo"), Map.class);
332 ModelInfo serviceModelInfo = new ModelInfo()
333 serviceModelInfo.setModelType(ModelType.service)
334 serviceModelInfo.setModelInvariantId(serviceMap.get("modelInvariantUuid"))
335 serviceModelInfo.setModelVersionId(serviceMap.get("modelUuid"))
336 serviceModelInfo.setModelName(serviceMap.get("modelName"))
337 serviceModelInfo.setModelVersion(serviceMap.get("modelVersion"))
339 List<Object> vnfModelInfoList = new ArrayList<>()
341 Map vnfMap = vnfList.get(0)
343 List<Map<String, Object>> vfModuleList = vnfMap.get("vfModules")
346 List<ModelInfo> vfModelInfoList = new ArrayList<>()
348 //Traverse VFModules List and add in vfModelInfoList
349 for (vfModule in vfModuleList) {
350 ModelInfo vfModelInfo = vfModule.get("modelInfo")
351 vfModelInfo.setModelCustomizationId(vfModelInfo.getModelCustomizationUuid())
352 vfModelInfo.setModelVersionId(vfModelInfo.getModelId())
353 vfModelInfoList.add(vfModelInfo)
356 String networkServiceInstanceName = execution.getVariable("networkServiceInstanceName")
358 RequestInfo requestInfo = new RequestInfo()
360 //Dummy Product FamilyId
361 requestInfo.setProductFamilyId("test1234")
362 requestInfo.setSource("VID")
363 requestInfo.setInstanceName(networkServiceInstanceName)
364 requestInfo.setSuppressRollback(false)
365 requestInfo.setRequestorId("NBI")
367 //Service Level InstanceParams
368 List<Map<String, Object>> serviceParams = new ArrayList<>()
369 Map<String, Object> serviceParamsValues = new LinkedHashMap<>()
370 serviceParams.add(serviceParamsValues)
372 //Cloud Configuration
373 String lcpCloudRegionId = execution.getVariable("lcpCloudRegionId")
374 String tenantId = execution.getVariable("tenantId")
375 String cloudOwner = execution.getVariable("cloudOwner")
376 CloudConfiguration cloudConfiguration = new CloudConfiguration()
377 cloudConfiguration.setLcpCloudRegionId(lcpCloudRegionId)
378 cloudConfiguration.setTenantId(tenantId)
379 cloudConfiguration.setCloudOwner(cloudOwner)
382 List<Map<String, Object>> vfModules = new ArrayList<>()
383 for (ModelInfo vfModuleModelInfo : vfModelInfoList) {
384 //Individual VFModule List
385 Map<String, Object> vfModuleValues = new LinkedHashMap<>()
386 vfModuleValues.put("modelInfo", vfModuleModelInfo)
387 vfModuleValues.put("instanceName", vfModuleModelInfo.getModelName())
389 //VFModule InstanceParams should be empty or this field should not be there?
390 List<Map<String, Object>> vfModuleInstanceParams = new ArrayList<>()
391 vfModuleValues.put("instanceParams", vfModuleInstanceParams)
392 vfModules.add(vfModuleValues)
396 List<Map<String, Object>> vnfInstanceParamsList = new ArrayList<>()
397 String supportedsNssaiJson= prepareVnfInstanceParamsJson(execution)
399 Map<String, Object> supportedNssai= new LinkedHashMap<>()
400 supportedNssai.put("supportedsNssai", supportedsNssaiJson)
401 vnfInstanceParamsList.add(supportedNssai)
403 Platform platform = new Platform()
404 String platformName = execution.getVariable("platformName")
405 platform.setPlatformName(platformName)
407 LineOfBusiness lineOfbusiness = new LineOfBusiness()
408 String lineOfBusinessName = execution.getVariable("lineOfBusinessName")
409 lineOfbusiness.setLineOfBusinessName(lineOfBusinessName)
411 ModelInfo vnfModelInfo = vnfMap.get("modelInfo")
412 vnfModelInfo.setModelCustomizationId(vnfModelInfo.getModelCustomizationUuid())
413 vnfModelInfo.setModelVersionId(vnfModelInfo.getModelId())
416 Map<String, Object> vnfValues = new LinkedHashMap<>()
417 vnfValues.put("lineOfBusiness", lineOfbusiness)
418 vnfValues.put("platform", platform)
419 vnfValues.put("productFamilyId", "test1234")
420 vnfValues.put("cloudConfiguration", cloudConfiguration)
421 vnfValues.put("vfModules", vfModules)
422 vnfValues.put("modelInfo", vnfModelInfo)
423 vnfValues.put("instanceName", vnfModelInfo.getModelInstanceName())
424 vnfValues.put("instanceParams",vnfInstanceParamsList)
426 vnfModelInfoList.add(vnfValues)
427 //Service Level Resources
428 Map<String, Object> serviceResources = new LinkedHashMap<>()
429 serviceResources.put("vnfs", vnfModelInfoList)
432 String serviceInstanceName = execution.getVariable("networkServiceInstanceName")
433 Map<String, Object> serviceValues = new LinkedHashMap<>()
434 serviceValues.put("modelInfo", serviceModelInfo)
435 serviceValues.put("instanceName", serviceInstanceName)
436 serviceValues.put("resources", serviceResources)
437 serviceValues.put("instanceParams", serviceParams)
440 Map<String, Object> userParamsValues = new LinkedHashMap<>()
442 Map<String, Object> homingSolution = new LinkedHashMap<>()
443 homingSolution.put("Homing_Solution", "none")
445 userParamsValues.put("service", serviceValues)
448 List<Map<String, Object>> userParams = new ArrayList<>()
449 userParams.add(homingSolution)
450 userParams.add(userParamsValues)
453 String serviceType = execution.getVariable("serviceType")
454 RequestParameters requestParameters = new RequestParameters()
455 requestParameters.setaLaCarte(false)
456 requestParameters.setSubscriptionServiceType(serviceType)
457 requestParameters.setUserParams(userParams)
460 String globalSubscriberId = execution.getVariable("globalSubscriberId")
461 SubscriberInfo subscriberInfo = new SubscriberInfo()
462 subscriberInfo.setGlobalSubscriberId(globalSubscriberId)
465 String owningEntityId = execution.getVariable("owningEntityId")
466 OwningEntity owningEntity = new OwningEntity()
467 owningEntity.setOwningEntityId(owningEntityId)
470 String projectName = execution.getVariable("projectName")
471 Project project = new Project()
472 project.setProjectName(projectName)
474 RequestDetails requestDetails = new RequestDetails()
475 requestDetails.setModelInfo(serviceModelInfo)
476 requestDetails.setSubscriberInfo(subscriberInfo)
477 requestDetails.setRequestInfo(requestInfo)
478 requestDetails.setRequestParameters(requestParameters)
479 requestDetails.setCloudConfiguration(cloudConfiguration)
480 requestDetails.setOwningEntity(owningEntity)
481 requestDetails.setProject(project)
483 Map<String, Object> requestDetailsMap = new LinkedHashMap<>()
484 requestDetailsMap.put("requestDetails", requestDetails)
485 String requestPayload = mapper.writeValueAsString(requestDetailsMap)
486 logger.debug("requestDetails "+requestPayload)
487 execution.setVariable("requestPayload", requestPayload)
489 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareSOMacroRequestPayLoad ****")
492 public void sendPutRequestToSOMacro(DelegateExecution execution) {
494 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: sendPutRequestToSOMacro ****")
496 String msoEndpoint = UrnPropertiesReader.getVariable("mso.infra.endpoint.url", execution)
497 String networkServiceInstanceId = execution.getVariable("networkServiceInstanceId")
498 String vnfId = execution.getVariable("vnfId")
499 String url = msoEndpoint+"/serviceInstantiation/v7/serviceInstances/"+networkServiceInstanceId+"/vnfs/"+vnfId
500 String requestBody = execution.getVariable("requestPayload")
501 String msoKey = UrnPropertiesReader.getVariable("mso.msoKey", execution)
502 String basicAuth = UrnPropertiesReader.getVariable("mso.adapters.po.auth", execution)
503 String encodeString = utils.getBasicAuth(basicAuth, msoKey)
504 logger.debug("msoEndpoint: "+msoEndpoint +" "+ "url: "+url +" requestBody: "+requestBody +" "+ "encodeString: "+encodeString)
505 HttpClient httpClient = getHttpClientFactory().newJsonClient(new URL(url), ONAPComponents.SO)
506 httpClient.addAdditionalHeader("Authorization", encodeString)
507 httpClient.addAdditionalHeader("Accept", "application/json")
508 Response httpResponse = httpClient.put(requestBody)
509 handleSOResponse(httpResponse, execution)
510 } catch (BpmnError e) {
513 String msg = Prefix+" Exception in DoActivateCoreNSSI " + any.getCause()
515 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
517 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: sendPostRequestToSOMacro ****")
521 * Handle SO Response for PUT and prepare update operation status
524 private void handleSOResponse(Response httpResponse, DelegateExecution execution){
525 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: handleSOResponse ****")
527 int soResponseCode = httpResponse.getStatus()
528 logger.debug("soResponseCode : "+soResponseCode)
530 if (soResponseCode >= 200 && soResponseCode < 204 && httpResponse.hasEntity()) {
531 String soResponse = httpResponse.readEntity(String.class)
532 logger.debug("soResponse: "+soResponse)
533 String macroOperationId = jsonUtil.getJsonValue(soResponse, "requestReferences.requestId")
534 String requestSelfLink = jsonUtil.getJsonValue(soResponse, "requestReferences.requestSelfLink")
535 execution.setVariable("macroOperationId", macroOperationId)
536 execution.setVariable("requestSelfLink", requestSelfLink)
537 execution.setVariable("isSOTimeOut", "no")
538 execution.setVariable("isSOResponseSucceed","yes")
541 execution.setVariable("isSOResponseSucceed","no")
542 prepareFailedOperationStatusUpdate(execution)
545 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: handleSOResponse ****")
548 public void getSOPUTProgress(DelegateExecution execution) {
549 logger.debug(Prefix+ " **** Enter DoActivateCoreNSSI ::: getSOPUTProgress ****")
550 String url= execution.getVariable("requestSelfLink")
551 HttpClient httpClient = getHttpClientFactory().newJsonClient(new URL(url), ONAPComponents.SO)
552 String msoKey = UrnPropertiesReader.getVariable("mso.msoKey", execution)
553 String basicAuth = UrnPropertiesReader.getVariable("mso.adapters.po.auth", execution)
554 String encodeString = utils.getBasicAuth(basicAuth, msoKey)
555 httpClient.addAdditionalHeader("Authorization", encodeString)
556 httpClient.addAdditionalHeader("Accept", "application/json")
557 Response httpResponse = httpClient.get()
558 logger.debug("httpResponse "+httpResponse)
559 int soResponseCode = httpResponse.getStatus()
560 logger.debug("soResponseCode : "+soResponseCode)
561 if (soResponseCode >= 200 && soResponseCode < 204 && httpResponse.hasEntity()) {
562 String soResponse = httpResponse.readEntity(String.class)
563 logger.debug("soResponse: "+soResponse)
564 String requestState= jsonUtil.getJsonValue(soResponse, "request.requestStatus.requestState")
565 logger.debug("requestState: "+requestState)
566 execution.setVariable("requestState", requestState)
568 execution.setVariable("isSOResponseSucceed","no")
569 prepareFailedOperationStatusUpdate(execution)
571 logger.debug(Prefix+ " **** Exit DoActivateCoreNSSI ::: getSOPUTProgress ****")
574 public void timeDelay() {
576 logger.debug(Prefix+ " **** DoActivateCoreNSSI ::: timeDelay going to sleep for 5 sec")
578 logger.debug("**** DoActivateCoreNSSI ::: timeDelay wakeup after 5 sec")
579 } catch(InterruptedException e) {
580 logger.error(Prefix+ " **** DoActivateCoreNSSI ::: timeDelay exception" + e)
584 void prepareUpdateResourceOperationStatus(DelegateExecution execution) {
586 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: prepareUpdateResourceOperationStatus ****")
588 String soRequestState = execution.getVariable("requestState")
589 //Prepare Update Status for PUT failure and success
590 if("COMPLETE".equalsIgnoreCase(soRequestState)) {
591 execution.setVariable("progress", "100")
592 execution.setVariable("status", "finished")
593 execution.setVariable("operationContent", "AllocteCoreNSSI successful.")
594 logger.debug("Success ,result:${execution.getVariable("result")}, reason: ${execution.getVariable("reason")}")
596 logger.debug("SO PUT Failure with State: "+soRequestState)
597 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "SO PUT Failure")
599 setResourceOperationStatus(execution)
600 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareUpdateResourceOperationStatus ****")
603 void updateSliceProfileOrchestrationStatus(DelegateExecution execution) {
605 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: updateSliceProfileOrchestrationStatus ****")
607 String globalCustId = execution.getVariable("globalSubscriberId")
608 String serviceType = execution.getVariable("serviceType")
609 String oStatus = execution.getVariable("oStatus")
611 ServiceInstance si = execution.getVariable("sliceProfileServiceInstance")
612 String sliceProfileInstanceId = si.getServiceInstanceId()
614 if(sliceProfileInstanceId==null) {
615 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "Slice Profile Instance Update failed")
617 si.setOrchestrationStatus(oStatus)
619 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalCustId).serviceSubscription(serviceType).serviceInstance(sliceProfileInstanceId))
621 getAAIClient().update(uri, si)
622 setResourceOperationStatus(execution)
623 } catch (Exception e) {
624 logger.info("Update OrchestrationStatus in AAI failed")
625 String msg = "Update OrchestrationStatus in AAI failed, " + e.getMessage()
626 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
629 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: updateSliceProfileOrchestrationStatus ****")
633 * prepare ResourceOperation status
635 * @param operationType
637 private void setResourceOperationStatus(DelegateExecution execution) {
639 logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: setResourceOperationStatus ****")
641 String serviceId = execution.getVariable("nsiId")
642 String jobId = execution.getVariable("jobId")
643 String nssiId = execution.getVariable("serviceInstanceID")
644 String modelUuid= execution.getVariable("modelUuid")
645 String operationType = execution.getVariable("operationType")
646 ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
647 resourceOperationStatus.setServiceId(serviceId)
648 resourceOperationStatus.setJobId(jobId)
649 resourceOperationStatus.setOperationId(jobId)
650 resourceOperationStatus.setResourceTemplateUUID(modelUuid)
651 resourceOperationStatus.setResourceInstanceID(nssiId)
652 resourceOperationStatus.setOperType(operationType)
653 resourceOperationStatus.setStatus("finished")
654 resourceOperationStatus.setProgress("100")
655 resourceOperationStatus.setStatusDescription("Core Activation Successful")
656 requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
658 logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: setResourceOperationStatus ****")
661 void prepareFailedOperationStatusUpdate(DelegateExecution execution){
662 logger.debug(Prefix + " **** Enter DoActivateCoreNSSI ::: prepareFailedOperationStatusUpdate ****")
664 String serviceId = execution.getVariable("nsiId")
665 String jobId = execution.getVariable("jobId")
666 String nssiId = execution.getVariable("serviceInstanceID")
667 String operationType = execution.getVariable("operationType")
668 String modelUuid= execution.getVariable("modelUuid")
670 ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
671 resourceOperationStatus.setServiceId(serviceId)
672 resourceOperationStatus.setJobId(jobId)
673 resourceOperationStatus.setOperationId(jobId)
674 resourceOperationStatus.setResourceInstanceID(nssiId)
675 resourceOperationStatus.setResourceTemplateUUID(modelUuid)
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 ****")