2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
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 com.att.bpm.scripts;
23 import org.openecomp.mso.bpmn.core.WorkflowException
24 import org.openecomp.mso.bpmn.core.json.JsonUtils;
25 import org.openecomp.mso.rest.APIResponse
26 import org.openecomp.mso.rest.RESTClient
27 import org.openecomp.mso.rest.RESTConfig
29 import java.util.UUID;
31 import org.camunda.bpm.engine.delegate.BpmnError
32 import org.camunda.bpm.engine.runtime.Execution
33 import org.apache.commons.lang3.*
34 import org.apache.commons.codec.binary.Base64;
35 import org.springframework.web.util.UriUtils
37 import groovy.xml.XmlUtil
40 public class DeleteNetworkInstanceInfra extends AbstractServiceTaskProcessor {
41 String Prefix="DELNWKI_"
42 ExceptionUtil exceptionUtil = new ExceptionUtil()
43 JsonUtils jsonUtil = new JsonUtils()
44 VidUtils vidUtils = new VidUtils(this)
46 public InitializeProcessVariables(Execution execution){
47 /* Initialize all the process variables in this block */
49 execution.setVariable("DELNWKI_DeleteNetworkInstanceInfraJsonRequest", "")
50 execution.setVariable("DELNWKI_networkRequest", "")
51 execution.setVariable("DELNWKI_networkRESTRequest", "")
52 execution.setVariable("DELNWKI_CompleteMsoProcessRequest", "")
53 execution.setVariable("DELNWKI_FalloutHandlerRequest", "")
54 execution.setVariable("DELNWKI_isSilentSuccess", false)
55 execution.setVariable("DELNWKI_Success", false)
56 execution.setVariable("DELNWKI_isPONR", false) // Point-of-no-return, means, rollback is not needed
58 execution.setVariable("DELNWKI_requestId", "")
59 execution.setVariable("DELNWKI_source", "")
60 execution.setVariable("DELNWKI_networkInputs", "")
62 execution.setVariable("DELNWKI_queryAAIRequest","")
63 execution.setVariable("DELNWKI_queryAAIResponse", "")
64 execution.setVariable("DELNWKI_aaiReturnCode", "")
65 execution.setVariable("DELNWKI_isAAIGood", false)
66 execution.setVariable("DELNWKI_isVfRelationshipExist", false)
68 // AAI query Cloud Region
69 execution.setVariable("DELNWKI_queryCloudRegionRequest","")
70 execution.setVariable("DELNWKI_queryCloudRegionReturnCode","")
71 execution.setVariable("DELNWKI_queryCloudRegionResponse","")
72 execution.setVariable("DELNWKI_cloudRegionPo","")
73 execution.setVariable("DELNWKI_cloudRegionSdnc","")
75 execution.setVariable("DELNWKI_deleteNetworkRequest", "")
76 execution.setVariable("DELNWKI_deleteNetworkResponse", "")
77 execution.setVariable("DELNWKI_networkReturnCode", "")
79 execution.setVariable("DELNWKI_deleteSDNCRequest", "")
80 execution.setVariable("DELNWKI_deleteSDNCResponse", "")
81 execution.setVariable("DELNWKI_rollbackSDNCRequest", "")
82 execution.setVariable("DELNWKI_rollbackSDNCResponse", "")
83 execution.setVariable("DELNWKI_sdncReturnCode", "")
84 execution.setVariable("DELNWKI_rollbackSDNCReturnCode", "")
85 execution.setVariable("DELNWKI_isSdncRollbackNeeded", false)
86 execution.setVariable("DELNWKI_sdncResponseSuccess", false)
90 // **************************************************
91 // Pre or Prepare Request Section
92 // **************************************************
94 public void preProcessRequest (Execution execution) {
95 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
96 execution.setVariable("prefix",Prefix)
98 utils.log("DEBUG", " ***** Inside preProcessRequest() DeleteNetworkV2 Request ***** ", isDebugEnabled)
100 // initialize flow variables
101 InitializeProcessVariables(execution)
103 // get incoming message/input
104 String deleteNetworkJsonIncoming = execution.getVariable("bpmnRequest")
105 utils.logAudit(deleteNetworkJsonIncoming)
108 def prettyJson = JsonOutput.prettyPrint(deleteNetworkJsonIncoming.toString())
109 utils.log("DEBUG", " Incoming message formatted . . . : " + '\n' + prettyJson, isDebugEnabled)
111 } catch (Exception ex) {
112 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
113 utils.log("DEBUG", dataErrorMessage, isDebugEnabled)
114 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
118 String messageId = execution.getVariable("DELNWKI_messageId") // test scenario
119 if (messageId == null || messageId == "") {
120 messageId = UUID.randomUUID()
121 utils.log("DEBUG", " DELNWKI_messageId, random generated: " + messageId, isDebugEnabled)
123 utils.log("DEBUG", " DELNWKI_messageId, pre-assigned: " + messageId, isDebugEnabled)
125 execution.setVariable("DELNWKI_messageId", messageId)
127 // PO Authorization Info / headers Authorization=
128 String basicAuthValuePO = execution.getVariable("URN_mso_adapters_po_auth")
129 utils.log("DEBUG", " Obtained BasicAuth userid password for PO/SDNC adapter: " + basicAuthValuePO, isDebugEnabled)
131 def encodedString = utils.getBasicAuth(basicAuthValuePO, execution.getVariable("URN_mso_msoKey"))
132 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
133 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
135 } catch (IOException ex) {
136 String dataErrorMessage = " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
137 utils.log("DEBUG", dataErrorMessage, isDebugEnabled)
138 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
143 execution.setVariable("DELNWKI_DeleteNetworkInstanceInfraJsonRequest", deleteNetworkJsonIncoming)
145 // recreate the xml network-request
146 String networkRequest = vidUtils.createXmlNetworkRequestInfra(execution, deleteNetworkJsonIncoming)
147 execution.setVariable("DELNWKI_networkRequest", networkRequest)
148 utils.log("DEBUG", " network-request - " + '\n' + networkRequest, isDebugEnabled)
150 String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
151 execution.setVariable("DELNWKI_networkInputs", networkInputs)
153 String requestId = execution.getVariable("att-mso-request-id")
154 if (requestId == null || requestId == "") {
155 requestId = utils.getNodeText(networkRequest, "request-id")
157 execution.setVariable("DELNWKI_requestId", requestId)
158 execution.setVariable("DELNWKI_source", utils.getNodeText(networkRequest, "source"))
160 String networkId = ""
161 if (utils.nodeExists(networkInputs, "network-id")) {
162 networkId = utils.getNodeText1(networkInputs, "network-id")
163 if (networkId == 'null' || networkId == "") {
164 sendSyncError(execution)
165 // missing value of network-name
166 String dataErrorMessage = "network-request has missing 'network-id' element/value."
167 utils.log("DEBUG", " Invalid Request - " + dataErrorMessage, isDebugEnabled)
168 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
172 String lcpCloudRegion = ""
173 if (utils.nodeExists(networkInputs, "aic-cloud-region")) {
174 lcpCloudRegion = utils.getNodeText1(networkInputs, "aic-cloud-region")
175 if ((lcpCloudRegion == 'null') || (lcpCloudRegion == "")) {
176 sendSyncError(execution)
177 String dataErrorMessage = "network-request has missing 'aic-cloud-region' element/value."
178 utils.log("DEBUG", " Invalid Request - " + dataErrorMessage, isDebugEnabled)
179 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
184 } catch (BpmnError e) {
187 } catch (Exception ex){
189 String exceptionMessage = "Exception Encountered in DeleteNetworkInstanceInfra, PreProcessRequest() - " + ex.getMessage()
190 utils.log("DEBUG", exceptionMessage, isDebugEnabled)
191 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
197 public void sendSyncResponse (Execution execution) {
198 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
199 execution.setVariable("prefix",Prefix)
201 utils.log("DEBUG", " ***** Inside sendSyncResponse() of DeleteNetworkV2 ***** ", isDebugEnabled)
204 String requestId = execution.getVariable("att-mso-request-id")
205 String serviceInstanceId = execution.getVariable("serviceInstanceId")
207 // RESTResponse (for API Handler (APIH) Reply Task)
208 String deleteNetworkRestRequest = """{"requestReferences":{"instanceId":"${serviceInstanceId}","requestId":"${requestId}"}}""".trim()
210 utils.log("DEBUG", " sendSyncResponse to APIH - " + "\n" + deleteNetworkRestRequest, isDebugEnabled)
212 sendWorkflowResponse(execution, 202, deleteNetworkRestRequest)
214 } catch (Exception ex) {
216 String exceptionMessage = "Exception Encountered in DeleteNetworkInstanceInfra, sendSyncResponse() - " + ex.getMessage()
217 utils.log("DEBUG", exceptionMessage, isDebugEnabled)
218 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
224 public void callRESTQueryAAI (Execution execution) {
225 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
226 execution.setVariable("prefix",Prefix)
228 utils.log("DEBUG", " ***** Inside callRESTQueryAAI() of DeleteNetworkV2 ***** " , isDebugEnabled)
231 String networkInputs = execution.getVariable("DELNWKI_networkInputs")
232 String networkId = utils.getNodeText(networkInputs, "network-id")
233 networkId = UriUtils.encode(networkId,"UTF-8")
234 String messageId = execution.getVariable("DELNWKI_messageId")
237 String aai_endpoint = execution.getVariable("URN_aai_endpoint")
238 AaiUtil aaiUriUtil = new AaiUtil(this)
239 String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution)
240 String queryAAIRequest = "${aai_endpoint}${aai_uri}/" + networkId
241 utils.logAudit(queryAAIRequest)
242 execution.setVariable("DELNWKI_queryAAIRequest", queryAAIRequest)
243 utils.log("DEBUG", " DELNWKI_AAIRequest - " + "\n" + queryAAIRequest, isDebugEnabled)
245 String basicAuthCred = utils.getBasicAuth(execution.getVariable("URN_aai_auth"),execution.getVariable("URN_mso_msoKey"))
247 RESTConfig config = new RESTConfig(queryAAIRequest);
249 ExceptionUtil exceptionUtil = new ExceptionUtil()
250 Boolean isVfRelationshipExist = false
252 RESTClient client = new RESTClient(config).addHeader("X-TransactionId", messageId)
253 .addHeader("X-FromAppId", "MSO")
254 .addHeader("Content-Type", "application/xml")
255 .addHeader("Accept","application/xml");
256 if (basicAuthCred != null && !"".equals(basicAuthCred)) {
257 client.addAuthorizationHeader(basicAuthCred)
259 APIResponse response = client.get()
260 String returnCode = response.getStatusCode()
261 execution.setVariable("DELNWKI_aaiReturnCode", returnCode)
263 utils.log("DEBUG", " ***** AAI Response Code : " + returnCode, isDebugEnabled)
265 String aaiResponseAsString = response.getResponseBodyAsString()
266 aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString)
267 execution.setVariable("DELNWKI_queryAAIResponse", aaiResponseAsString)
269 if (returnCode=='200' || returnCode=='204') {
270 utils.logAudit(aaiResponseAsString)
271 execution.setVariable("DELNWKI_isAAIGood", true)
272 utils.log("DEBUG", " AAI Query Success REST Response - " + "\n" + aaiResponseAsString, isDebugEnabled)
273 // verify if vf or vnf relationship exist
274 if (utils.nodeExists(aaiResponseAsString, "relationship")) {
275 NetworkUtils networkUtils = new NetworkUtils()
276 isVfRelationshipExist = networkUtils.isVfRelationshipExist(aaiResponseAsString)
277 execution.setVariable("DELNWKI_isVfRelationshipExist", isVfRelationshipExist)
278 if (isVfRelationshipExist == true) {
279 String relationshipMessage = "AAI Query Success Response but 'vf-module' relationship exist, not allowed to delete: network Id: " + networkId
280 exceptionUtil.buildWorkflowException(execution, 2500, relationshipMessage)
284 utils.log("DEBUG", " DELNWKI_isVfRelationshipExist - " + isVfRelationshipExist, isDebugEnabled)
287 execution.setVariable("DELNWKI_isAAIGood", false)
288 if (returnCode=='404' || aaiResponseAsString == "" || aaiResponseAsString == null) {
289 // not found // empty aai response
290 execution.setVariable("DELNWKI_isSilentSuccess", true)
291 utils.log("DEBUG", " AAI Query is Silent Success", isDebugEnabled)
294 if (aaiResponseAsString.contains("RESTFault")) {
295 WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
296 execution.setVariable("WorkflowException", exceptionObject)
300 String dataErrorMessage = "Unexpected Error Response from callRESTQueryAAI() - " + returnCode
301 utils.log("DEBUG", dataErrorMessage, isDebugEnabled)
302 exceptionUtil.buildWorkflowException(execution, 2500, dataErrorMessage)
308 utils.log("DEBUG", " AAI Query call, isAAIGood? : " + execution.getVariable("DELNWKI_isAAIGood"), isDebugEnabled)
310 } catch (Exception ex) {
312 String exceptionMessage = "Exception Encountered in DeleteNetworkInstanceInfra, callRESTQueryAAI() - " + ex.getMessage()
313 utils.log("DEBUG", exceptionMessage, isDebugEnabled)
314 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
320 public void callRESTQueryAAICloudRegion (Execution execution) {
321 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
322 execution.setVariable("prefix", Prefix)
324 utils.log("DEBUG", " ***** Inside callRESTQueryAAICloudRegion of DeleteNetworkV2 ***** " , isDebugEnabled)
327 String networkInputs = execution.getVariable("DELNWKI_networkInputs")
328 String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
329 cloudRegion = UriUtils.encode(cloudRegion,"UTF-8")
331 String aai_endpoint = execution.getVariable("URN_aai_endpoint")
332 AaiUtil aaiUtil = new AaiUtil(this)
333 String aai_uri = aaiUtil.getCloudInfrastructureCloudRegionUri(execution)
334 String queryCloudRegionRequest = "${aai_endpoint}${aai_uri}/" + cloudRegion
335 utils.logAudit(queryCloudRegionRequest)
336 execution.setVariable("DELNWKI_queryCloudRegionRequest", queryCloudRegionRequest)
337 utils.log("DEBUG", " DELNWKI_queryCloudRegionRequest - " + "\n" + queryCloudRegionRequest, isDebugEnabled)
339 String cloudRegionPo = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
340 String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "SDNC", cloudRegion)
342 if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
343 execution.setVariable("DELNWKI_cloudRegionPo", cloudRegionPo)
344 execution.setVariable("DELNWKI_cloudRegionSdnc", cloudRegionSdnc)
347 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable("DELNWKI_queryCloudRegionReturnCode")
348 utils.log("DEBUG", dataErrorMessage, isDebugEnabled)
349 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
353 } catch (BpmnError e) {
356 } catch (Exception ex) {
358 String exceptionMessage = "Bpmn error encountered in DeleteNetworkInstanceInfra, callRESTQueryAAICloudRegion(). Unexpected Response from AAI - " + ex.getMessage()
359 utils.log("DEBUG", exceptionMessage, isDebugEnabled)
360 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
366 public void prepareNetworkRequest (Execution execution) {
367 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
368 execution.setVariable("prefix", Prefix)
370 utils.log("DEBUG", " ***** Inside prepareNetworkRequest of DeleteNetworkV2 ***** ", isDebugEnabled)
371 ExceptionUtil exceptionUtil = new ExceptionUtil()
374 String cloudSiteId = execution.getVariable("DELNWKI_cloudRegionPo")
375 String networkInputs = execution.getVariable("DELNWKI_networkInputs")
376 String tenantId = utils.getNodeText(networkInputs, "tenant-id")
377 String networkType = utils.getNodeText(networkInputs, "network-type")
378 String networkId = utils.getNodeText(networkInputs, "network-id")
380 String networkStackId = ""
381 networkStackId = utils.getNodeText1(execution.getVariable("DELNWKI_queryAAIResponse"), "heat-stack-id")
382 if (networkStackId == 'null' || networkStackId == "") {
383 networkStackId = "force_delete"
386 String requestId = execution.getVariable("DELNWKI_requestId")
387 String serviceInstanceId = execution.getVariable("serviceInstanceId")
389 // Added new Elements
390 String messageId = execution.getVariable("DELNWKI_messageId")
391 String notificationUrl = "" //TODO - is this coming from URN? What variable/value to use?
392 //String notificationUrl = execution.getVariable("URN_?????") //TODO - is this coming from URN? What variable/value to use?
394 String deleteNetworkRequest = """
395 <deleteNetworkRequest>
396 <cloudSiteId>${cloudSiteId}</cloudSiteId>
397 <tenantId>${tenantId}</tenantId>
398 <networkId>${networkId}</networkId>
399 <networkStackId>${networkStackId}</networkStackId>
400 <networkType>${networkType}</networkType>
401 <skipAAI>true</skipAAI>
403 <requestId>${requestId}</requestId>
404 <serviceInstanceId>${serviceInstanceId}</serviceInstanceId>
406 <messageId>${messageId}</messageId>
407 <notificationUrl>${notificationUrl}</notificationUrl>
408 </deleteNetworkRequest>
411 utils.log("DEBUG", " DELNWKI_deleteNetworkRequest - " + "\n" + deleteNetworkRequest, isDebugEnabled)
413 String buildDeleteNetworkRequestAsString = utils.formatXml(deleteNetworkRequest)
414 utils.logAudit(buildDeleteNetworkRequestAsString)
415 utils.log("DEBUG", " DELNWKI_deleteNetworkRequestAsString - " + "\n" + buildDeleteNetworkRequestAsString, isDebugEnabled)
417 String restURL = execution.getVariable("URN_mso_adapters_network_rest_endpoint")
418 execution.setVariable("URN_mso_adapters_network_rest_endpoint", restURL + "/" + networkId)
419 utils.log("DEBUG", "URN_mso_adapters_network_rest_endpoint - " + "\n" + restURL + "/" + networkId, isDebugEnabled)
421 execution.setVariable("DELNWKI_deleteNetworkRequest", buildDeleteNetworkRequestAsString)
422 utils.log("DEBUG", " DELNWKI_deleteNetworkRequest - " + "\n" + buildDeleteNetworkRequestAsString, isDebugEnabled)
424 catch (Exception ex) {
426 String exceptionMessage = "Bpmn error encountered in DeleteNetworkInstanceInfra, prepareNetworkRequest(). Unexpected Response from AAI - " + ex.getMessage()
427 utils.log("DEBUG", exceptionMessage, isDebugEnabled)
428 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
434 * This method is used instead of an HTTP Connector task because the
435 * connector does not allow DELETE with a body.
437 public void sendRequestToVnfAdapter(Execution execution) {
438 def method = getClass().getSimpleName() + '.sendRequestToVnfAdapter(' +
439 'execution=' + execution.getId() +
441 def isDebugEnabled = execution.getVariable('isDebugLogEnabled')
442 logDebug('Entered ' + method, isDebugEnabled)
446 String vnfAdapterUrl = execution.getVariable("URN_mso_adapters_network_rest_endpoint")
447 String vnfAdapterRequest = execution.getVariable("DELNWKI_deleteNetworkRequest")
449 RESTConfig config = new RESTConfig(vnfAdapterUrl)
450 RESTClient client = new RESTClient(config).
451 addHeader("Content-Type", "application/xml").
452 addAuthorizationHeader(execution.getVariable("BasicAuthHeaderValuePO"));
454 APIResponse response;
456 response = client.httpDelete(vnfAdapterRequest)
458 execution.setVariable("DELNWKI_networkReturnCode", response.getStatusCode())
459 execution.setVariable("DELNWKI_deleteNetworkResponse", response.getResponseBodyAsString())
461 } catch (Exception ex) {
463 String exceptionMessage = "Bpmn error encountered in DeleteNetworkInstanceInfra, sendRequestToVnfAdapter() - " + ex.getMessage()
464 logError(exceptionMessage)
465 utils.log("DEBUG", exceptionMessage, isDebugEnabled)
466 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
472 public void prepareSDNCRequest (Execution execution) {
473 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
474 execution.setVariable("prefix", Prefix)
476 utils.log("DEBUG", " ***** Inside prepareSDNCRequest of DeleteNetworkV2 ***** ", isDebugEnabled)
480 String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback")
481 String deleteNetworkInput = execution.getVariable("DELNWKI_networkRequest")
483 String networkId = ""
484 if (utils.nodeExists(deleteNetworkInput, "network-id")) {
485 networkId = utils.getNodeText1(deleteNetworkInput, "network-id")
487 if (networkId == 'null') {networkId = ""}
489 String serviceInstanceId = utils.getNodeText1(deleteNetworkInput, "service-instance-id")
491 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
492 String cloudRegionId = execution.getVariable("DELNWKI_cloudRegionSdnc")
493 // 1. prepare delete topology via SDNC Adapter SUBFLOW call
494 String sndcTopologyDeleteRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "delete", "DisconnectNetworkRequest", cloudRegionId, networkId, null)
495 String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest)
496 utils.logAudit(sndcTopologyDeleteRequesAsString)
497 execution.setVariable("DELNWKI_deleteSDNCRequest", sndcTopologyDeleteRequesAsString)
498 utils.log("DEBUG", " DELNWKI_deleteSDNCRequest - " + "\n" + sndcTopologyDeleteRequesAsString, isDebugEnabled)
500 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
501 String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "rollback", "DisconnectNetworkRequest", cloudRegionId, networkId, null)
502 String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
503 execution.setVariable("DELNWKI_rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
504 utils.log("DEBUG", " DELNWKI_rollbackSDNCRequest (prepared if NEEDED later for SDNC Topology delete's rollback/compensation . . . - " + "\n" + sndcTopologyRollbackRequestAsString, isDebugEnabled)
506 } catch (Exception ex) {
508 String exceptionMessage = "Bpmn error encountered in DeleteNetworkInstanceInfra, prepareSDNCRequest() - " + ex.getMessage()
509 logError(exceptionMessage)
510 utils.log("DEBUG", exceptionMessage, isDebugEnabled)
511 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
517 public void prepareDBRequest (Execution execution) {
518 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
519 execution.setVariable("prefix", Prefix)
522 utils.log("DEBUG", " ***** Inside prepareDBRequest of DeleteNetworkV2 ***** ", isDebugEnabled)
524 String aaiReturnCode = execution.getVariable("DELNWKI_aaiReturnCode")
525 String requestId = execution.getVariable("DELNWKI_requestId")
527 String statusMessage = ""
528 if (aaiReturnCode == '404' || execution.getVariable("DELNWKI_isSilentSuccess") == true) {
530 statusMessage = "Network Id to be deleted NOT found. Silent success."
532 statusMessage = "Network successfully deleted."
536 """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
539 <ns:updateInfraRequest xmlns:ns="http://com.att.mso/requestsdb">
540 <requestId>${requestId}</requestId>
541 <lastModifiedBy>BPMN</lastModifiedBy>
542 <statusMessage>${statusMessage}</statusMessage>
543 <responseBody></responseBody>
544 <requestStatus>COMPLETED</requestStatus>
545 <progress>100</progress>
546 <vnfOutputs><network-outputs xmlns="http://ecomp.att.com/mso/infra/vnf-request/v1" xmlns:aetgt="http://ecomp.att.com/mso/infra/vnf-request/v1" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"/></vnfOutputs>
547 </ns:updateInfraRequest>
549 </soapenv:Envelope>"""
551 String buildDeleteDBRequestAsString = utils.formatXml(dbRequest)
552 utils.logAudit(buildDeleteDBRequestAsString)
553 execution.setVariable("DELNWKI_deleteDBRequest", buildDeleteDBRequestAsString)
554 utils.log("DEBUG", " DB Adapter Request - " + "\n" + buildDeleteDBRequestAsString, isDebugEnabled)
556 } catch (Exception ex) {
558 String exceptionMessage = "Bpmn error encountered in DeleteNetworkInstanceInfra, prepareDBRequest() - " + ex.getMessage()
559 logError(exceptionMessage)
560 utils.log("DEBUG", exceptionMessage, isDebugEnabled)
561 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
567 public void prepareDBRequestError (Execution execution) {
568 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
569 execution.setVariable("prefix", Prefix)
572 utils.log("DEBUG", " ***** Inside prepareDBRequestError of DeleteNetworkV2 ***** ", isDebugEnabled)
574 WorkflowException wfe = execution.getVariable("WorkflowException")
575 String statusMessage = wfe.getErrorMessage()
576 String requestId = execution.getVariable("DELNWKI_requestId")
579 """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
582 <ns:updateInfraRequest xmlns:ns="http://com.att.mso/requestsdb">
583 <requestId>${requestId}</requestId>
584 <lastModifiedBy>BPMN</lastModifiedBy>
585 <statusMessage>${statusMessage}</statusMessage>
586 <responseBody></responseBody>
587 <requestStatus>FAILED</requestStatus>
588 <progress></progress>
589 <vnfOutputs><network-outputs xmlns="http://ecomp.att.com/mso/infra/vnf-request/v1" xmlns:aetgt="http://ecomp.att.com/mso/infra/vnf-request/v1" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"/></vnfOutputs>
590 </ns:updateInfraRequest>
592 </soapenv:Envelope>"""
594 execution.setVariable("DELNWKI_deleteDBRequest", dbRequest)
595 utils.log("DEBUG", " DB Adapter Request - " + "\n" + dbRequest, isDebugEnabled)
597 } catch (Exception ex) {
599 String exceptionMessage = "Bpmn error encountered in DeleteNetworkInstanceInfra, prepareDBRequestError() - " + ex.getMessage()
600 logError(exceptionMessage)
601 utils.log("DEBUG", exceptionMessage, isDebugEnabled)
602 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
608 // **************************************************
609 // Post or Validate Response Section
610 // **************************************************
612 public void validateNetworkResponse (Execution execution) {
613 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
614 execution.setVariable("prefix", Prefix)
616 utils.log("DEBUG", " ***** Inside validateNetworkResponse of DeleteNetworkV2 *****", isDebugEnabled)
619 String returnCode = execution.getVariable("DELNWKI_networkReturnCode")
620 String networkResponse = execution.getVariable("DELNWKI_deleteNetworkResponse")
622 utils.log("DEBUG", " Network Adapter responseCode: " + returnCode, isDebugEnabled)
623 utils.log("DEBUG", "Network Adapter Error Response - " + "\n" + networkResponse, isDebugEnabled)
625 String errorMessage = ""
626 if (returnCode == "200") {
627 utils.logAudit(networkResponse)
628 execution.setVariable("DELNWKI_deleteNetworkResponse", networkResponse)
629 utils.log("DEBUG", " Network Adapter Success Response - " + "\n" + networkResponse, isDebugEnabled)
631 } else { // network error
632 if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) { //4xx, 5xx
633 if (networkResponse.contains("deleteNetworkError") ) {
634 networkResponse = networkResponse.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '')
635 errorMessage = utils.getNodeText1(networkResponse, "message")
636 errorMessage = "Received error from Network Adapter: " + errorMessage
637 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
639 } else { // CatchAll exception
640 if (returnCode == "500") {
641 errorMessage = "JBWEB000065: HTTP Status 500."
643 errorMessage = "Return code is " + returnCode
645 errorMessage = "Received error from Network Adapter: " + errorMessage
646 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
650 } else { // CatchAll exception
651 String dataErrorMessage = "Received error from Network Adapter. Return code is: " + returnCode
652 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
658 } catch (BpmnError e) {
661 } catch (Exception ex) {
663 String exceptionMessage = "Bpmn error encountered in DeleteNetworkInstanceInfra, validateNetworkResponse() - " + ex.getMessage()
664 utils.log("DEBUG", exceptionMessage, isDebugEnabled)
665 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
671 public void validateSDNCResponse (Execution execution) {
672 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
673 execution.setVariable("prefix", Prefix)
675 utils.log("DEBUG", " ***** Inside validateSDNCResponse of DeleteNetworkV2 ***** ", isDebugEnabled)
677 String response = execution.getVariable("DELNWKI_deleteSDNCResponse")
678 WorkflowException workflowException = execution.getVariable("WorkflowException")
680 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
682 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
683 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
685 String deleteSDNCResponseDecodeXml = sdncAdapterUtils.decodeXML(execution.getVariable("DELNWKI_deleteSDNCResponse"))
686 deleteSDNCResponseDecodeXml = deleteSDNCResponseDecodeXml.replace("&", "&").replace('<?xml version="1.0" encoding="UTF-8"?>', "")
687 execution.setVariable("DELNWKI_deleteSDNCResponse", deleteSDNCResponseDecodeXml)
689 if (execution.getVariable("DELNWKI_sdncResponseSuccess") == true) { // from sdnc util, prefix+'sdncResponseSuccess'
690 execution.setVariable("DELNWKI_isSdncRollbackNeeded", true) //
691 execution.setVariable("DELNWKI_isPONR", true)
692 utils.log("DEBUG", "Successfully Validated SDNC Response", isDebugEnabled)
694 utils.log("DEBUG", "Did NOT Successfully Validated SDNC Response", isDebugEnabled)
695 throw new BpmnError("MSOWorkflowException")
701 public void postProcessResponse (Execution execution) {
702 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
703 execution.setVariable("prefix", Prefix)
705 utils.log("DEBUG", " ***** Inside postProcessResponse of DeleteNetworkV2 ***** ", isDebugEnabled)
708 // Display DB response: DELNWKI_deleteDBResponse / DELNWKI_dbReturnCode
709 String dbReturnCode = execution.getVariable("DELNWKI_dbReturnCode")
710 utils.log("DEBUG", " ***** DB Update Response Code : " + dbReturnCode, isDebugEnabled)
711 utils.log("DEBUG", " ***** DB Update Response String: " + '\n' + execution.getVariable("DELNWKI_deleteDBResponse"), isDebugEnabled)
713 if (dbReturnCode == '200') {
715 String source = execution.getVariable("DELNWKI_source")
716 String requestId = execution.getVariable("DELNWKI_requestId")
718 String msoCompletionRequest =
719 """<aetgt:MsoCompletionRequest xmlns:aetgt="http://ecomp.att.com/mso/workflow/schema/v1"
720 xmlns:ns="http://ecomp.att.com/mso/request/types/v1"
721 xmlns:ns8="http://ecomp.att.com/mso/workflow/schema/v1">
722 <request-info xmlns="http://ecomp.att.com/mso/infra/vnf-request/v1">
723 <request-id>${requestId}</request-id>
724 <action>DELETE</action>
725 <source>${source}</source>
727 <ns8:status-message>Network has been deleted successfully.</ns8:status-message>
728 <ns8:mso-bpel-name>BPMN Network action: DELETE</ns8:mso-bpel-name>
729 </aetgt:MsoCompletionRequest>"""
732 String xmlMsoCompletionRequest = utils.formatXml(msoCompletionRequest)
734 utils.logAudit(xmlMsoCompletionRequest)
735 execution.setVariable("DELNWKI_CompleteMsoProcessRequest", xmlMsoCompletionRequest)
736 execution.setVariable("DELNWKI_Success", true)
737 if (execution.getVariable("DELNWKI_isSilentSuccess") == false) {
738 utils.log("DEBUG", " Overall SUCCESS Response going to CompleteMsoProcess - " + "\n" + xmlMsoCompletionRequest, isDebugEnabled)
740 utils.log("DEBUG", " Silent SUCCESS going to CompleteMsoProcess - " + "\n" + xmlMsoCompletionRequest, isDebugEnabled)
745 String exceptionMessage = "Bpmn error encountered in DeleteNetworkInstanceInfra, DB Update Failed: " + dbReturnCode
746 utils.log("DEBUG", exceptionMessage, isDebugEnabled)
747 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, exceptionMessage)
751 } catch (BpmnError e) {
754 } catch (Exception ex) {
756 String exceptionMessage = "Bpmn error encountered in DeleteNetworkInstanceInfra, postProcessResponse() - " + ex.getMessage()
757 utils.log("DEBUG", exceptionMessage, isDebugEnabled)
758 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
765 // *******************************
766 // Build Error Section
767 // *******************************
769 // Prepare for FalloutHandler
770 public void buildErrorResponse (Execution execution) {
771 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
772 execution.setVariable("prefix", Prefix)
774 utils.log("DEBUG", " ***** Prepare for FalloutHandler. FAILURE - prepare request for sub-process FalloutHandler. *****", isDebugEnabled)
776 String dbReturnCode = execution.getVariable("DELNWKI_dbReturnCode")
777 utils.log("DEBUG", " ***** DB Update Response Code : " + dbReturnCode, isDebugEnabled)
778 utils.log("DEBUG", " ***** DB Update Response String: " + '\n' + execution.getVariable("DELNWKI_deleteDBResponse"), isDebugEnabled)
780 String falloutHandlerRequest = ""
781 String workflowException = ""
782 String requestId = execution.getVariable("DELNWKI_requestId")
783 String source = execution.getVariable("DELNWKI_source")
784 execution.setVariable("DELNWKI_Success", false)
786 WorkflowException wfe = execution.getVariable("WorkflowException")
787 String errorCode = String.valueOf(wfe.getErrorCode())
788 String errorMessage = wfe.getErrorMessage()
790 falloutHandlerRequest =
791 """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://ecomp.att.com/mso/workflow/schema/v1"
792 xmlns:ns="http://ecomp.att.com/mso/request/types/v1"
793 xmlns:wfsch="http://ecomp.att.com/mso/workflow/schema/v1">
794 <request-info xmlns="http://ecomp.att.com/mso/infra/vnf-request/v1">
795 <request-id>${requestId}</request-id>
796 <action>DELETE</action>
797 <source>${source}</source>
799 <aetgt:WorkflowException xmlns:aetgt="http://ecomp.att.com/mso/workflow/schema/v1">
800 <aetgt:ErrorMessage>${errorMessage}</aetgt:ErrorMessage>
801 <aetgt:ErrorCode>${errorCode}</aetgt:ErrorCode>
802 </aetgt:WorkflowException>
803 </aetgt:FalloutHandlerRequest>"""
805 utils.logAudit(falloutHandlerRequest)
806 execution.setVariable("DELNWKI_FalloutHandlerRequest", falloutHandlerRequest)
807 utils.log("ERROR", " Overall Error Response going to FalloutHandler: " + "\n" + falloutHandlerRequest, isDebugEnabled)
809 } catch (Exception ex) {
811 String exceptionMessage = "Bpmn error encountered in DeleteNetworkInstanceInfra, buildErrorResponse() - " + ex.getMessage()
812 utils.log("DEBUG", exceptionMessage, isDebugEnabled)
813 falloutHandlerRequest =
814 """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://ecomp.att.com/mso/workflow/schema/v1"
815 xmlns:ns="http://ecomp.att.com/mso/request/types/v1"
816 xmlns:wfsch="http://ecomp.att.com/mso/workflow/schema/v1">
817 <request-info xmlns="http://ecomp.att.com/mso/infra/vnf-request/v1">
818 <request-id>${requestId}</request-id>
819 <action>CREATE</action>
820 <source>${source}</source>
822 <aetgt:WorkflowException xmlns:aetgt="http://ecomp.att.com/mso/workflow/schema/v1">
823 <aetgt:ErrorMessage>${exceptionMessage}</aetgt:ErrorMessage>
824 <aetgt:ErrorCode>9999</aetgt:ErrorCode>
825 </aetgt:WorkflowException>
826 </aetgt:FalloutHandlerRequest>"""
827 execution.setVariable("DELNWKI_FalloutHandlerRequest", falloutHandlerRequest)
828 utils.log("DEBUG", " Overall Error Response going to FalloutHandler: " + "\n" + falloutHandlerRequest, isDebugEnabled)
833 public void sendSyncError (Execution execution) {
834 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
835 execution.setVariable("prefix", Prefix)
838 String requestId = execution.getVariable("att-mso-request-id")
839 String serviceInstanceId = execution.getVariable("serviceInstanceId")
841 // RESTResponse (for API Handler (APIH) Reply Task)
842 String deleteNetworkRestError = """{"requestReferences":{"instanceId":"${serviceInstanceId}","requestId":"${requestId}"}}""".trim()
844 utils.log("DEBUG", " sendSyncResponse to APIH - " + "\n" + deleteNetworkRestError, isDebugEnabled)
846 sendWorkflowResponse(execution, 500, deleteNetworkRestError)
848 } catch (Exception ex) {
849 utils.log("DEBUG", " Sending Sync Error Activity Failed - DeleteNetworkInstanceInfra, sendSyncError(): " + "\n" + ex.getMessage(), isDebugEnabled)
853 public void processJavaException(Execution execution){
854 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
855 execution.setVariable("prefix",Prefix)
857 utils.log("DEBUG", "Caught a Java Exception", isDebugEnabled)
858 utils.log("DEBUG", "Started processJavaException Method", isDebugEnabled)
859 utils.log("DEBUG", "Variables List: " + execution.getVariables(), isDebugEnabled)
860 execution.setVariable("UnexpectedError", "Caught a Java Lang Exception") // Adding this line temporarily until this flows error handling gets updated
861 exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Caught a Java Lang Exception")
863 utils.log("ERROR", "Rethrowing MSOWorkflowException", isDebugEnabled)
866 utils.log("DEBUG", "Caught Exception during processJavaException Method: " + e, isDebugEnabled)
867 execution.setVariable("UnexpectedError", "Exception in processJavaException method") // Adding this line temporarily until this flows error handling gets updated
868 exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Exception in processJavaException method")
870 utils.log("DEBUG", "Completed processJavaException Method", isDebugEnabled)