2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (c) 2019 Samsung
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.so.bpmn.infrastructure.scripts
25 import javax.ws.rs.core.Response
26 import org.camunda.bpm.engine.delegate.BpmnError
27 import org.camunda.bpm.engine.delegate.DelegateExecution
28 import org.onap.aai.domain.yang.L3Network
29 import org.onap.aaiclient.client.aai.AAIObjectType
30 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
31 import org.onap.aaiclient.client.aai.entities.Relationships
32 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
33 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
34 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
35 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.Types
36 import org.onap.aaiclient.client.graphinventory.entities.uri.Depth
37 import org.onap.logging.filter.base.ErrorCode
38 import org.onap.logging.filter.base.ONAPComponents;
39 import org.onap.so.bpmn.common.scripts.AaiUtil
40 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
41 import org.onap.so.bpmn.common.scripts.ExceptionUtil
42 import org.onap.so.bpmn.common.scripts.MsoUtils
43 import org.onap.so.bpmn.common.scripts.NetworkUtils
44 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
45 import org.onap.so.bpmn.common.scripts.VidUtils
46 import org.onap.so.bpmn.core.UrnPropertiesReader
47 import org.onap.so.bpmn.core.WorkflowException
48 import org.onap.so.bpmn.core.json.JsonUtils
49 import org.onap.so.client.HttpClient
50 import org.onap.so.client.HttpClientFactory
51 import org.onap.so.constants.Defaults
52 import org.onap.so.logger.LoggingAnchor
53 import org.onap.so.logger.MessageEnum
54 import org.slf4j.Logger
55 import org.slf4j.LoggerFactory
56 import org.springframework.web.util.UriUtils
57 import groovy.json.JsonOutput
59 public class DoDeleteNetworkInstance extends AbstractServiceTaskProcessor {
60 private static final Logger logger = LoggerFactory.getLogger( DoDeleteNetworkInstance.class);
62 String Prefix= "DELNWKI_"
63 String groovyClassName = "DoDeleteNetworkInstance"
64 ExceptionUtil exceptionUtil = new ExceptionUtil()
65 JsonUtils jsonUtil = new JsonUtils()
66 VidUtils vidUtils = new VidUtils(this)
67 NetworkUtils networkUtils = new NetworkUtils()
68 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
70 public InitializeProcessVariables(DelegateExecution execution){
71 /* Initialize all the process variables in this block */
73 execution.setVariable(Prefix + "networkRequest", "")
74 execution.setVariable(Prefix + "isSilentSuccess", false)
75 execution.setVariable(Prefix + "Success", false)
77 execution.setVariable(Prefix + "requestId", "")
78 execution.setVariable(Prefix + "source", "")
79 execution.setVariable(Prefix + "lcpCloudRegion", "")
80 execution.setVariable(Prefix + "networkInputs", "")
81 execution.setVariable(Prefix + "tenantId", "")
83 execution.setVariable(Prefix + "queryAAIResponse", "")
84 execution.setVariable(Prefix + "aaiReturnCode", "")
85 execution.setVariable(Prefix + "isAAIGood", false)
86 execution.setVariable(Prefix + "isVfRelationshipExist", false)
88 // AAI query Cloud Region
89 execution.setVariable(Prefix + "queryCloudRegionRequest","")
90 execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
91 execution.setVariable(Prefix + "queryCloudRegionResponse","")
92 execution.setVariable(Prefix + "cloudRegionPo","")
93 execution.setVariable(Prefix + "cloudRegionSdnc","")
95 execution.setVariable(Prefix + "deleteNetworkRequest", "")
96 execution.setVariable(Prefix + "deleteNetworkResponse", "")
97 execution.setVariable(Prefix + "networkReturnCode", "")
98 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
100 execution.setVariable(Prefix + "deleteSDNCRequest", "")
101 execution.setVariable(Prefix + "deleteSDNCResponse", "")
102 execution.setVariable(Prefix + "sdncReturnCode", "")
103 execution.setVariable(Prefix + "sdncResponseSuccess", false)
105 execution.setVariable(Prefix + "deactivateSDNCRequest", "")
106 execution.setVariable(Prefix + "deactivateSDNCResponse", "")
107 execution.setVariable(Prefix + "deactivateSdncReturnCode", "")
108 execution.setVariable(Prefix + "isSdncDeactivateRollbackNeeded", "")
110 execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", "")
111 execution.setVariable(Prefix + "isException", false)
116 // **************************************************
117 // Pre or Prepare Request Section
118 // **************************************************
120 public void preProcessRequest (DelegateExecution execution) {
122 execution.setVariable("prefix",Prefix)
124 logger.trace("Inside preProcessRequest() of " + groovyClassName + " Request ")
126 // initialize flow variables
127 InitializeProcessVariables(execution)
130 // get incoming message/input
131 execution.setVariable("action", "DELETE")
132 String deleteNetwork = execution.getVariable("bpmnRequest")
133 if (deleteNetwork != null) {
134 if (deleteNetwork.contains("requestDetails")) {
135 // JSON format request is sent, create xml
137 def prettyJson = JsonOutput.prettyPrint(deleteNetwork.toString())
138 logger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
139 deleteNetwork = vidUtils.createXmlNetworkRequestInfra(execution, deleteNetwork)
141 } catch (Exception ex) {
142 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
143 logger.debug(dataErrorMessage)
144 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
147 // XML format request is sent
151 // vIPR format request is sent, create xml from individual variables
152 deleteNetwork = vidUtils.createXmlNetworkRequestInstance(execution)
155 deleteNetwork = utils.formatXml(deleteNetwork)
156 logger.debug(deleteNetwork)
157 execution.setVariable(Prefix + "networkRequest", deleteNetwork)
158 logger.debug(Prefix + "networkRequest - " + '\n' + deleteNetwork)
160 // validate 'backout-on-failure' to override 'mso.rollback'
161 boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, deleteNetwork)
162 execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
163 logger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
165 String networkInputs = utils.getNodeXml(deleteNetwork, "network-inputs", false).replace("tag0:","").replace(":tag0","")
166 execution.setVariable(Prefix + "networkInputs", networkInputs)
169 String messageId = execution.getVariable("testMessageId") // for testing
170 if (messageId == null || messageId == "") {
171 messageId = UUID.randomUUID()
172 logger.debug(Prefix + "messageId, random generated: " + messageId)
174 logger.debug(Prefix + "messageId, pre-assigned: " + messageId)
176 execution.setVariable(Prefix + "messageId", messageId)
178 String source = utils.getNodeText(deleteNetwork, "source")
179 execution.setVariable(Prefix + "source", source)
180 logger.debug(Prefix + "source - " + source)
182 String networkId = ""
183 if (utils.nodeExists(networkInputs, "network-id")) {
184 networkId = utils.getNodeText(networkInputs, "network-id")
185 if (networkId == null || networkId == "" || networkId == 'null' ) {
186 sendSyncError(execution)
187 // missing value of network-id
188 String dataErrorMessage = "network-request has missing 'network-id' element/value."
189 logger.debug(" Invalid Request - " + dataErrorMessage)
190 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
194 // lcpCloudRegion or tenantId not sent, will be extracted from query AA&I
195 def lcpCloudRegion = null
196 if (utils.nodeExists(networkInputs, "aic-cloud-region")) {
197 lcpCloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
198 if (lcpCloudRegion == 'null') {
199 lcpCloudRegion = null
202 execution.setVariable(Prefix + "lcpCloudRegion", lcpCloudRegion)
203 logger.debug("lcpCloudRegion : " + lcpCloudRegion)
205 String tenantId = null
206 if (utils.nodeExists(networkInputs, "tenant-id")) {
207 tenantId = utils.getNodeText(networkInputs, "tenant-id")
208 if (tenantId == 'null') {
213 execution.setVariable(Prefix + "tenantId", tenantId)
214 logger.debug("tenantId : " + tenantId)
216 String sdncVersion = execution.getVariable("sdncVersion")
217 logger.debug("sdncVersion? : " + sdncVersion)
219 // PO Authorization Info / headers Authorization=
220 String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth", execution)
223 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey", execution))
224 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
225 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
227 } catch (IOException ex) {
228 String dataErrorMessage = " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
229 logger.debug(dataErrorMessage )
230 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
233 } catch (BpmnError e) {
236 } catch (Exception ex){
238 String exceptionMessage = "Exception Encountered in DoDeleteNetworkInstance, PreProcessRequest() - " + ex.getMessage()
239 logger.debug(exceptionMessage)
240 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
247 public void callRESTQueryAAI (DelegateExecution execution) {
249 execution.setVariable("prefix",Prefix)
251 logger.debug(" ***** Inside callRESTQueryAAI() of DoDoDeleteNetworkInstance ***** " )
254 String networkInputs = execution.getVariable(Prefix + "networkInputs")
255 String networkId = utils.getNodeText(networkInputs, "network-id")
256 networkId = UriUtils.encode(networkId,"UTF-8")
257 ExceptionUtil exceptionUtil = new ExceptionUtil()
258 Boolean isVfRelationshipExist = false
260 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().l3Network(networkId)).depth(Depth.ALL)
261 Optional<L3Network> l3Network = getAAIClient().get(L3Network.class,uri);
262 AAIResultWrapper wrapper = getAAIClient().get(uri);
263 Optional<Relationships> relationships = wrapper.getRelationships()
265 if (l3Network.isPresent()) {
266 execution.setVariable(Prefix + "aaiReturnCode", 200)
267 execution.setVariable(Prefix + "queryAAIResponse", l3Network.get())
268 execution.setVariable(Prefix + "isAAIGood", true)
269 if (relationships.isPresent()){
270 if(!relationships.get().getRelatedUris(Types.VF_MODULE).isEmpty()){
271 execution.setVariable(Prefix + "isVfRelationshipExist", true)
272 isVfRelationshipExist = true
273 String relationshipMessage = "AAI Query Success Response but 'vf-module' relationship exist, not allowed to delete: network Id: " + networkId
274 exceptionUtil.buildWorkflowException(execution, 2500, relationshipMessage)
276 List<AAIResourceUri> tenantURIList = relationships.get().getRelatedUris(Types.TENANT)
277 for(AAIResourceUri tenantURI: tenantURIList){
278 if(execution.getVariable(Prefix + "tenantId") == null) {
279 String tenantId = tenantURI.getURIKeys().get(AAIFluentTypeBuilder.Types.TENANT.getUriParams().tenantId)
280 execution.setVariable(Prefix + "tenantId", tenantId)
281 logger.debug(" Get AAI getTenantId() : " + tenantId)
284 List<AAIResourceUri> cloudRegionURIList = relationships.get().getRelatedUris(Types.CLOUD_REGION)
285 for(AAIResourceUri tenantURI: cloudRegionURIList){
286 if(execution.getVariable(Prefix + "lcpCloudRegion") == null) {
287 String lcpCloudRegion = tenantURI.getURIKeys().get(AAIFluentTypeBuilder.Types.CLOUD_REGION.getUriParams().cloudRegionId)
288 execution.setVariable(Prefix + "lcpCloudRegion", lcpCloudRegion)
289 logger.debug(" Get AAI getCloudRegion() : " + lcpCloudRegion)
294 logger.debug(Prefix + "isVfRelationshipExist - " + isVfRelationshipExist)
296 // not found // empty aai response
297 execution.setVariable(Prefix + "aaiReturnCode", 404)
298 execution.setVariable(Prefix + "isAAIGood", false)
299 execution.setVariable(Prefix + "isSilentSuccess", true)
300 logger.debug(" AAI Query is Silent Success")
302 logger.debug(" AAI Query call, isAAIGood? : " + execution.getVariable(Prefix + "isAAIGood"))
303 } catch (Exception ex) {
305 String exceptionMessage = "Exception Encountered in DoDeleteNetworkInstance, callRESTQueryAAI() - " + ex.getMessage()
306 logger.debug(exceptionMessage)
307 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
313 public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
315 execution.setVariable("prefix", Prefix)
317 logger.debug(" ***** Inside callRESTQueryAAICloudRegion of DoDeleteNetworkInstance ***** " )
320 String networkInputs = execution.getVariable(Prefix + "networkInputs")
321 // String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
322 String cloudRegion = execution.getVariable(Prefix + "lcpCloudRegion")
324 AaiUtil aaiUtil = new AaiUtil(this)
326 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.cloudInfrastructure().cloudRegion(Defaults.CLOUD_OWNER.toString(), cloudRegion))
327 def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
329 execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
331 String cloudRegionPo = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
332 String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "SDNC", cloudRegion)
334 if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
335 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
336 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
339 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
340 logger.debug(dataErrorMessage)
341 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
345 } catch (BpmnError e) {
348 } catch (Exception ex) {
350 String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, callRESTQueryAAICloudRegion(). Unexpected Response from AAI - " + ex.getMessage()
351 logger.debug(exceptionMessage)
352 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
358 public void prepareNetworkRequest (DelegateExecution execution) {
360 execution.setVariable("prefix", Prefix)
362 logger.trace("Inside prepareNetworkRequest of DoDeleteNetworkInstance ")
363 ExceptionUtil exceptionUtil = new ExceptionUtil()
366 String networkRequest = execution.getVariable(Prefix + "networkRequest")
367 String cloudSiteId = execution.getVariable(Prefix + "cloudRegionPo")
368 String tenantId = execution.getVariable(Prefix + "tenantId")
370 L3Network l3Network = execution.getVariable(Prefix + "queryAAIResponse")
371 String networkType = l3Network.getNetworkType()
372 String networkId = l3Network.getNetworkId()
374 String networkStackId = ""
375 networkStackId = l3Network.getHeatStackId()
376 if (networkStackId == 'null' || networkStackId == "" || networkStackId == null) {
377 networkStackId = "force_delete"
380 String requestId = execution.getVariable("msoRequestId")
381 if (requestId != null) {
382 execution.setVariable("mso-request-id", requestId)
384 requestId = execution.getVariable("mso-request-id")
386 String serviceInstanceId = execution.getVariable("serviceInstanceId")
388 // Added new Elements
389 String messageId = execution.getVariable(Prefix + "messageId")
390 String notificationUrl = "" //TODO - is this coming from URN? What variable/value to use?
391 //String notificationUrl = execution.getVariable("URN_?????") //TODO - is this coming from URN? What variable/value to use?
393 String modelCustomizationUuid = ""
394 if (utils.nodeExists(networkRequest, "networkModelInfo")) {
395 String networkModelInfo = utils.getNodeXml(networkRequest, "networkModelInfo", false).replace("tag0:","").replace(":tag0","")
396 modelCustomizationUuid = utils.getNodeText(networkModelInfo, "modelCustomizationUuid")
398 modelCustomizationUuid = utils.getNodeText(networkRequest, "modelCustomizationId")
401 String deleteNetworkRequest = """
402 <deleteNetworkRequest>
403 <cloudSiteId>${MsoUtils.xmlEscape(cloudSiteId)}</cloudSiteId>
404 <tenantId>${MsoUtils.xmlEscape(tenantId)}</tenantId>
405 <networkId>${MsoUtils.xmlEscape(networkId)}</networkId>
406 <networkStackId>${MsoUtils.xmlEscape(networkStackId)}</networkStackId>
407 <networkType>${MsoUtils.xmlEscape(networkType)}</networkType>
408 <modelCustomizationUuid>${MsoUtils.xmlEscape(modelCustomizationUuid)}</modelCustomizationUuid>
409 <skipAAI>true</skipAAI>
411 <requestId>${MsoUtils.xmlEscape(requestId)}</requestId>
412 <serviceInstanceId>${MsoUtils.xmlEscape(serviceInstanceId)}</serviceInstanceId>
414 <messageId>${MsoUtils.xmlEscape(messageId)}</messageId>
415 <notificationUrl>${MsoUtils.xmlEscape(notificationUrl)}</notificationUrl>
416 </deleteNetworkRequest>
419 logger.debug(Prefix + "deleteNetworkRequest - " + "\n" + deleteNetworkRequest)
421 String buildDeleteNetworkRequestAsString = utils.formatXml(deleteNetworkRequest)
422 logger.debug(buildDeleteNetworkRequestAsString)
423 logger.debug(Prefix + "deleteNetworkRequestAsString - " + "\n" + buildDeleteNetworkRequestAsString)
425 String restURL = UrnPropertiesReader.getVariable("mso.adapters.network.rest.endpoint", execution)
426 execution.setVariable("mso.adapters.network.rest.endpoint", restURL + "/" + networkId)
427 logger.debug("mso.adapters.network.rest.endpoint - " + "\n" + restURL + "/" + networkId)
429 execution.setVariable(Prefix + "deleteNetworkRequest", buildDeleteNetworkRequestAsString)
430 logger.debug(Prefix + "deleteNetworkRequest - " + "\n" + buildDeleteNetworkRequestAsString)
432 catch (Exception ex) {
434 String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareNetworkRequest(). Unexpected Response from AAI - " + ex.getMessage()
435 logger.debug(exceptionMessage)
436 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
442 * This method is used instead of an HTTP Connector task because the
443 * connector does not allow DELETE with a body.
445 public void sendRequestToVnfAdapter(DelegateExecution execution) {
446 def method = getClass().getSimpleName() + '.sendRequestToVnfAdapter(' +
447 'execution=' + execution.getId() +
450 logger.trace('Entered ' + method)
454 String vnfAdapterUrl = UrnPropertiesReader.getVariable("mso.adapters.network.rest.endpoint",execution)
455 String vnfAdapterRequest = execution.getVariable(Prefix + "deleteNetworkRequest")
457 URL url = new URL(vnfAdapterUrl)
458 HttpClient httpClient = new HttpClientFactory().newXmlClient(url, ONAPComponents.OPENSTACK_ADAPTER)
459 httpClient.accept = "application/xml"
460 httpClient.addAdditionalHeader("Authorization", execution.getVariable("BasicAuthHeaderValuePO"))
461 Response response = httpClient.delete(vnfAdapterRequest)
463 execution.setVariable(Prefix + "deleteNetworkResponse", response.readEntity(String.class))
464 execution.setVariable(Prefix + "networkReturnCode", response.getStatus())
466 } catch (Exception ex) {
468 String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, sendRequestToVnfAdapter() - " + ex.getMessage()
469 logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), exceptionMessage,
470 "BPMN", ErrorCode.UnknownError.getValue(),
471 "Exception is:\n" + ex);
472 logger.debug(exceptionMessage)
473 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
479 public void prepareSDNCRequest (DelegateExecution execution) {
481 execution.setVariable("prefix", Prefix)
483 logger.trace("Inside prepareSDNCRequest of DoDeleteNetworkInstance ")
487 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
488 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
490 String networkId = ""
491 if (utils.nodeExists(deleteNetworkInput, "network-id")) {
492 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
494 if (networkId == 'null') {networkId = ""}
496 String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
498 // get/set 'msoRequestId' and 'mso-request-id'
499 String requestId = execution.getVariable("msoRequestId")
500 if (requestId != null) {
501 execution.setVariable("mso-request-id", requestId)
503 requestId = execution.getVariable("mso-request-id")
505 execution.setVariable(Prefix + "requestId", requestId)
506 logger.debug(Prefix + "requestId " + requestId)
507 L3Network queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse")
509 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
510 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
511 // 1. prepare delete topology via SDNC Adapter SUBFLOW call
512 String sndcTopologyDeleteRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "delete", "DisconnectNetworkRequest", cloudRegionId, networkId, queryAAIResponse, null)
513 String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest)
514 logger.debug(sndcTopologyDeleteRequesAsString)
515 execution.setVariable(Prefix + "deleteSDNCRequest", sndcTopologyDeleteRequesAsString)
516 logger.debug(Prefix + "deleteSDNCRequest - " + "\n" + sndcTopologyDeleteRequesAsString)
518 } catch (Exception ex) {
520 String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRequest() - " + ex.getMessage()
521 logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), exceptionMessage,
522 "BPMN", ErrorCode.UnknownError.getValue(),
523 "Exception is:\n" + ex);
524 logger.debug(exceptionMessage)
525 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
531 public void prepareRpcSDNCRequest (DelegateExecution execution) {
533 execution.setVariable("prefix", Prefix)
535 logger.trace("Inside prepareRpcSDNCRequest of DoDeleteNetworkInstance ")
539 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
540 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
542 String networkId = ""
543 if (utils.nodeExists(deleteNetworkInput, "network-id")) {
544 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
546 if (networkId == 'null') {networkId = ""}
548 String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
550 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
551 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
552 // 1. prepare delete topology via SDNC Adapter SUBFLOW call
553 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
554 String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
555 logger.debug(sndcTopologyDeleteRequesAsString)
556 execution.setVariable(Prefix + "deleteSDNCRequest", sndcTopologyDeleteRequesAsString)
557 logger.debug(Prefix + "deleteSDNCRequest - " + "\n" + sndcTopologyDeleteRequesAsString)
559 } catch (Exception ex) {
561 String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRequest() - " + ex.getMessage()
562 logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), exceptionMessage,
563 "BPMN", ErrorCode.UnknownError.getValue(),
564 "Exception is:\n" + ex);
565 logger.debug(exceptionMessage)
566 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
573 public void prepareRpcSDNCDeactivate(DelegateExecution execution) {
575 execution.setVariable("prefix",Prefix)
577 logger.trace("Inside prepareRpcSDNCDeactivate() of DoDeleteNetworkInstance ")
582 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
583 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
584 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
585 String networkId = ""
586 if (utils.nodeExists(deleteNetworkInput, "network-id")) {
587 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
589 if (networkId == 'null') {networkId = ""}
590 String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
592 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
593 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
594 execution.setVariable(Prefix + "deactivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
595 logger.debug(" Preparing request for RPC SDNC Topology deactivate - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
598 } catch (Exception ex) {
599 String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
600 logger.debug(exceptionMessage)
601 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
607 public void validateSDNCResponse (DelegateExecution execution) {
609 execution.setVariable("prefix", Prefix)
611 logger.trace("Inside validateSDNCResponse of DoDeleteNetworkInstance ")
613 String response = execution.getVariable(Prefix + "deleteSDNCResponse")
614 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
615 WorkflowException workflowException = execution.getVariable("WorkflowException")
617 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
618 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
620 String deleteSDNCResponseDecodeXml = execution.getVariable(Prefix + "deleteSDNCResponse")
621 deleteSDNCResponseDecodeXml = deleteSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
622 execution.setVariable(Prefix + "deleteSDNCResponse", deleteSDNCResponseDecodeXml)
624 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, prefix+'sdncResponseSuccess'
625 execution.setVariable(Prefix + "isSdncRollbackNeeded", true) //
626 execution.setVariable(Prefix + "isPONR", true)
627 logger.debug("Successfully Validated SDNC Response")
629 logger.debug("Did NOT Successfully Validated SDNC Response")
630 throw new BpmnError("MSOWorkflowException")
635 public void validateRpcSDNCDeactivateResponse (DelegateExecution execution) {
637 execution.setVariable("prefix",Prefix)
639 logger.trace("Inside validateRpcSDNCDeactivateResponse() of DoDeleteNetworkInstance ")
641 String response = execution.getVariable(Prefix + "deactivateSDNCResponse")
642 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
643 WorkflowException workflowException = execution.getVariable("WorkflowException")
645 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
646 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
648 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "deactivateSDNCResponse")
649 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
650 execution.setVariable(Prefix + "deactivateSDNCResponse", assignSDNCResponseDecodeXml)
652 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
653 execution.setVariable(Prefix + "isSdncDeactivateRollbackNeeded", true)
654 logger.debug("Successfully Validated Rpc SDNC Activate Response")
657 logger.debug("Did NOT Successfully Validated Rpc SDNC Deactivate Response")
658 throw new BpmnError("MSOWorkflowException")
663 public void prepareRpcSDNCDeactivateRollback(DelegateExecution execution) {
665 execution.setVariable("prefix",Prefix)
667 logger.trace("Inside prepareRpcSDNCDeactivateRollback() of DoDeleteNetworkInstance ")
672 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
673 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
674 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
675 String deactivateSDNCResponse = execution.getVariable(Prefix + "deactivateSDNCResponse")
676 String networkId = utils.getNodeText(deactivateSDNCResponse, "network-id")
677 if (networkId == 'null') {networkId = ""}
678 String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
680 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
681 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
682 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
683 execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
684 logger.debug(" Preparing request for RPC SDNC Topology 'activate-CreateNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
687 } catch (Exception ex) {
688 String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCDeactivateRollback() - " + ex.getMessage()
689 logger.debug(exceptionMessage)
690 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
696 public void prepareRollbackData(DelegateExecution execution) {
698 execution.setVariable("prefix",Prefix)
700 logger.trace("Inside prepareRollbackData() of DoDeleteNetworkInstance ")
704 Map<String, String> rollbackData = new HashMap<String, String>();
705 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
706 if (rollbackNetworkRequest != null) {
707 if (rollbackNetworkRequest != "") {
708 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
711 String rollbackDeactivateSDNCRequest = execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")
712 if (rollbackDeactivateSDNCRequest != null) {
713 if (rollbackDeactivateSDNCRequest != "") {
714 rollbackData.put("rollbackDeactivateSDNCRequest", execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest"))
717 execution.setVariable("rollbackData", rollbackData)
718 logger.debug("** rollbackData : " + rollbackData)
720 execution.setVariable("WorkflowException", execution.getVariable("WorkflowException"))
721 logger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
723 } catch (Exception ex) {
724 String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
725 logger.debug(exceptionMessage)
726 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
732 public void postProcessResponse (DelegateExecution execution) {
734 execution.setVariable("prefix", Prefix)
736 logger.trace("Inside postProcessResponse of DoDeleteNetworkInstance ")
740 logger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
741 if (execution.getVariable(Prefix + "isException") == false) {
742 execution.setVariable(Prefix + "Success", true)
743 execution.setVariable("WorkflowException", null)
744 if (execution.getVariable(Prefix + "isSilentSuccess") == true) {
745 execution.setVariable("rolledBack", false)
747 execution.setVariable("rolledBack", true)
749 prepareSuccessRollbackData(execution) // populate rollbackData
752 execution.setVariable(Prefix + "Success", false)
753 execution.setVariable("rollbackData", null)
754 String exceptionMessage = " Exception encountered in MSO Bpmn. "
755 if (execution.getVariable("workflowException") != null) { // Output of Rollback flow.
756 logger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
757 WorkflowException wfex = execution.getVariable("workflowException")
758 exceptionMessage = wfex.getErrorMessage()
760 if (execution.getVariable(Prefix + "WorkflowException") != null) {
761 WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
762 exceptionMessage = pwfex.getErrorMessage()
764 if (execution.getVariable("WorkflowException") != null) {
765 WorkflowException pwfex = execution.getVariable("WorkflowException")
766 exceptionMessage = pwfex.getErrorMessage()
771 // going to the Main flow: a-la-carte or macro
772 logger.debug(" ***** postProcessResponse(), BAD !!!")
773 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
774 throw new BpmnError("MSOWorkflowException")
778 } catch(BpmnError b){
779 logger.debug("Rethrowing MSOWorkflowException")
782 } catch (Exception ex) {
784 String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, postProcessResponse() - " + ex.getMessage()
785 logger.debug(exceptionMessage)
786 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
787 throw new BpmnError("MSOWorkflowException")
793 public void prepareSuccessRollbackData(DelegateExecution execution) {
795 execution.setVariable("prefix",Prefix)
797 logger.trace("Inside prepareSuccessRollbackData() of DoDeleteNetworkInstance ")
801 if (execution.getVariable("sdncVersion") != '1610') {
802 prepareRpcSDNCDeactivateRollback(execution)
803 prepareRpcSDNCUnassignRollback(execution)
805 prepareSDNCRollback(execution)
808 Map<String, String> rollbackData = new HashMap<String, String>();
809 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
810 if (rollbackSDNCRequest != null) {
811 if (rollbackSDNCRequest != "") {
812 rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
815 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
816 if (rollbackNetworkRequest != null) {
817 if (rollbackNetworkRequest != "") {
818 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
821 String rollbackDeactivateSDNCRequest = execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")
822 if (rollbackDeactivateSDNCRequest != null) {
823 if (rollbackDeactivateSDNCRequest != "") {
824 rollbackData.put("rollbackDeactivateSDNCRequest", execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest"))
827 execution.setVariable("rollbackData", rollbackData)
829 logger.debug("** rollbackData : " + rollbackData)
830 execution.setVariable("WorkflowException", null)
833 } catch (Exception ex) {
834 String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
835 logger.debug(exceptionMessage)
836 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
842 public void prepareRpcSDNCUnassignRollback(DelegateExecution execution) {
844 execution.setVariable("prefix",Prefix)
846 logger.trace("Inside prepareRpcSDNCUnassignRollbac() of DoDeleteNetworkInstance ")
851 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
852 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
854 String deleteSDNCResponse = execution.getVariable(Prefix + "deleteSDNCResponse")
855 String networkId = utils.getNodeText(deleteSDNCResponse, "network-id")
856 if (networkId == 'null') {networkId = ""}
857 String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
859 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
860 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
861 // 1. prepare delete topology via SDNC Adapter SUBFLOW call
862 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
863 String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
864 logger.debug(sndcTopologyDeleteRequesAsString)
865 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyDeleteRequesAsString)
866 logger.debug(Prefix + "rollbackSDNCRequest" + "\n" + sndcTopologyDeleteRequesAsString)
867 logger.debug(" Preparing request for RPC SDNC Topology 'assign-CreateNetworkInstance' rollback . . . - " + "\n" + sndcTopologyDeleteRequesAsString)
870 } catch (Exception ex) {
871 String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCUnassignRollback() - " + ex.getMessage()
872 logger.debug(exceptionMessage)
873 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
879 public void prepareSDNCRollback (DelegateExecution execution) {
881 execution.setVariable("prefix", Prefix)
883 logger.trace("Inside prepareSDNCRollback of DoDeleteNetworkInstance ")
888 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
889 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
891 String networkId = ""
892 if (utils.nodeExists(deleteNetworkInput, "network-id")) {
893 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
895 if (networkId == 'null') {networkId = ""}
897 String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
899 // get/set 'msoRequestId' and 'mso-request-id'
900 String requestId = execution.getVariable("msoRequestId")
901 if (requestId != null) {
902 execution.setVariable("mso-request-id", requestId)
904 requestId = execution.getVariable("mso-request-id")
906 execution.setVariable(Prefix + "requestId", requestId)
908 L3Network queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse")
910 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
911 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
912 // 1. prepare delete topology via SDNC Adapter SUBFLOW call
913 String sndcTopologyDeleteRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "rollback", "DisconnectNetworkRequest", cloudRegionId, networkId, queryAAIResponse, null)
914 String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest)
915 logger.debug(sndcTopologyDeleteRequesAsString)
916 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyDeleteRequesAsString)
917 logger.debug(Prefix + "rollbackSDNCRequest - " + "\n" + sndcTopologyDeleteRequesAsString)
918 logger.debug(" Preparing request for RPC SDNC Topology 'rollback-DisconnectNetworkRequest' rollback . . . - " + "\n" + sndcTopologyDeleteRequesAsString)
921 } catch (Exception ex) {
923 String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRollback() - " + ex.getMessage()
924 logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), exceptionMessage,
925 "BPMN", ErrorCode.UnknownError.getValue(),
926 "Exception is:\n" + ex);
927 logger.debug(exceptionMessage)
928 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
934 public void setExceptionFlag(DelegateExecution execution){
936 execution.setVariable("prefix",Prefix)
938 logger.trace("Inside setExceptionFlag() of DoDeleteNetworkInstance ")
942 execution.setVariable(Prefix + "isException", true)
944 if (execution.getVariable("SavedWorkflowException1") != null) {
945 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
947 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
949 logger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
951 } catch(Exception ex){
952 String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
953 logger.debug(exceptionMessage)
954 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
960 // *******************************
961 // Build Error Section
962 // *******************************
964 public void processJavaException(DelegateExecution execution){
966 execution.setVariable("prefix",Prefix)
968 logger.debug("Caught a Java Exception")
969 logger.debug("Started processJavaException Method")
970 logger.debug("Variables List: " + execution.getVariables())
971 execution.setVariable("UnexpectedError", "Caught a Java Lang Exception") // Adding this line temporarily until this flows error handling gets updated
972 exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
975 logger.debug("Caught Exception during processJavaException Method: " + e)
976 execution.setVariable("UnexpectedError", "Exception in processJavaException method") // Adding this line temporarily until this flows error handling gets updated
977 exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method")
979 logger.debug("Completed processJavaException Method of " + Prefix)