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 org.onap.so.bpmn.infrastructure.scripts;
23 import org.apache.commons.lang3.*
24 import org.camunda.bpm.engine.delegate.BpmnError
25 import org.camunda.bpm.engine.delegate.DelegateExecution
26 import org.onap.so.bpmn.common.scripts.AaiUtil
27 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
28 import org.onap.so.bpmn.common.scripts.ExceptionUtil
29 import org.onap.so.bpmn.common.scripts.MsoUtils
30 import org.onap.so.bpmn.common.scripts.NetworkUtils
31 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
32 import org.onap.so.bpmn.common.scripts.VidUtils
33 import org.onap.so.bpmn.core.UrnPropertiesReader
34 import org.onap.so.bpmn.core.WorkflowException
35 import org.onap.so.bpmn.core.json.JsonUtils
36 import org.onap.so.logger.MsoLogger
37 import org.onap.so.rest.APIResponse;
38 import org.springframework.web.util.UriUtils
41 import groovy.xml.XmlUtil
45 * This groovy class supports the <class>DoCreateNetworkInstance.bpmn</class> process.
48 public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor {
49 private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, DoCreateNetworkInstance.class);
51 String Prefix="CRENWKI_"
52 ExceptionUtil exceptionUtil = new ExceptionUtil()
53 JsonUtils jsonUtil = new JsonUtils()
54 VidUtils vidUtils = new VidUtils(this)
55 NetworkUtils networkUtils = new NetworkUtils()
56 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
58 def className = getClass().getSimpleName()
61 * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstance.bpmn</class> process.
64 public InitializeProcessVariables(DelegateExecution execution){
65 /* Initialize all the process variables in this block */
67 execution.setVariable(Prefix + "networkRequest", "")
68 execution.setVariable(Prefix + "rollbackEnabled", null)
69 execution.setVariable(Prefix + "networkInputs", "")
70 //execution.setVariable(Prefix + "requestId", "")
71 execution.setVariable(Prefix + "messageId", "")
72 execution.setVariable(Prefix + "source", "")
73 execution.setVariable("BasicAuthHeaderValuePO", "")
74 execution.setVariable("BasicAuthHeaderValueSDNC", "")
75 execution.setVariable(Prefix + "serviceInstanceId","")
76 execution.setVariable("GENGS_type", "")
77 execution.setVariable(Prefix + "rsrc_endpoint", null)
78 execution.setVariable(Prefix + "networkOutputs", "")
79 execution.setVariable(Prefix + "networkId","")
80 execution.setVariable(Prefix + "networkName","")
83 execution.setVariable(Prefix + "queryNameAAIRequest","")
84 execution.setVariable(Prefix + "queryNameAAIResponse", "")
85 execution.setVariable(Prefix + "aaiNameReturnCode", "")
86 execution.setVariable(Prefix + "isAAIqueryNameGood", 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","")
94 execution.setVariable(Prefix + "isCloudRegionGood", false)
97 execution.setVariable(Prefix + "queryIdAAIRequest","")
98 execution.setVariable(Prefix + "queryIdAAIResponse", "")
99 execution.setVariable(Prefix + "aaiIdReturnCode", "")
101 // AAI query vpn binding
102 execution.setVariable(Prefix + "queryVpnBindingAAIRequest","")
103 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", "")
104 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "")
105 execution.setVariable(Prefix + "vpnBindings", null)
106 execution.setVariable(Prefix + "vpnCount", 0)
107 execution.setVariable(Prefix + "routeCollection", "")
109 // AAI query network policy
110 execution.setVariable(Prefix + "queryNetworkPolicyAAIRequest","")
111 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", "")
112 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "")
113 execution.setVariable(Prefix + "networkPolicyUriList", null)
114 execution.setVariable(Prefix + "networkPolicyCount", 0)
115 execution.setVariable(Prefix + "networkCollection", "")
117 // AAI query route table reference
118 execution.setVariable(Prefix + "queryNetworkTableRefAAIRequest","")
119 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", "")
120 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "")
121 execution.setVariable(Prefix + "networkTableRefUriList", null)
122 execution.setVariable(Prefix + "networkTableRefCount", 0)
123 execution.setVariable(Prefix + "tableRefCollection", "")
126 execution.setVariable(Prefix + "requeryIdAAIRequest","")
127 execution.setVariable(Prefix + "requeryIdAAIResponse", "")
128 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "")
130 // AAI update contrail
131 execution.setVariable(Prefix + "updateContrailAAIUrlRequest","")
132 execution.setVariable(Prefix + "updateContrailAAIPayloadRequest","")
133 execution.setVariable(Prefix + "updateContrailAAIResponse", "")
134 execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", "")
136 execution.setVariable(Prefix + "createNetworkRequest", "")
137 execution.setVariable(Prefix + "createNetworkResponse", "")
138 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
139 //execution.setVariable(Prefix + "rollbackNetworkResponse", "")
140 execution.setVariable(Prefix + "networkReturnCode", "")
141 //execution.setVariable(Prefix + "rollbackNetworkReturnCode", "")
142 execution.setVariable(Prefix + "isNetworkRollbackNeeded", false)
144 execution.setVariable(Prefix + "assignSDNCRequest", "")
145 execution.setVariable(Prefix + "assignSDNCResponse", "")
146 execution.setVariable(Prefix + "rollbackSDNCRequest", "")
147 //execution.setVariable(Prefix + "rollbackSDNCResponse", "")
148 execution.setVariable(Prefix + "sdncReturnCode", "")
149 //execution.setVariable(Prefix + "rollbackSDNCReturnCode", "")
150 execution.setVariable(Prefix + "isSdncRollbackNeeded", false)
151 execution.setVariable(Prefix + "sdncResponseSuccess", false)
153 execution.setVariable(Prefix + "activateSDNCRequest", "")
154 execution.setVariable(Prefix + "activateSDNCResponse", "")
155 execution.setVariable(Prefix + "rollbackActivateSDNCRequest", "")
156 //execution.setVariable(Prefix + "rollbackActivateSDNCResponse", "")
157 execution.setVariable(Prefix + "sdncActivateReturnCode", "")
158 //execution.setVariable(Prefix + "rollbackActivateSDNCReturnCode", "")
159 execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", false)
160 execution.setVariable(Prefix + "sdncActivateResponseSuccess", false)
162 execution.setVariable(Prefix + "orchestrationStatus", "")
163 execution.setVariable(Prefix + "isVnfBindingPresent", false)
164 execution.setVariable(Prefix + "Success", false)
166 execution.setVariable(Prefix + "isException", false)
170 // **************************************************
171 // Pre or Prepare Request Section
172 // **************************************************
174 * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstance.bpmn</class> process.
177 public void preProcessRequest (DelegateExecution execution) {
179 execution.setVariable("prefix",Prefix)
180 msoLogger.trace("Inside preProcessRequest() of " + className + ".groovy")
183 // initialize flow variables
184 InitializeProcessVariables(execution)
186 // GET Incoming request & validate 3 kinds of format.
187 execution.setVariable("action", "CREATE")
188 String networkRequest = execution.getVariable("bpmnRequest")
189 if (networkRequest != null) {
190 if (networkRequest.contains("requestDetails")) {
191 // JSON format request is sent, create xml
193 def prettyJson = JsonOutput.prettyPrint(networkRequest.toString())
194 msoLogger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
195 networkRequest = vidUtils.createXmlNetworkRequestInfra(execution, networkRequest)
197 } catch (Exception ex) {
198 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
199 msoLogger.debug(dataErrorMessage)
200 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
203 // XML format request is sent
207 // vIPR format request is sent, create xml from individual variables
208 networkRequest = vidUtils.createXmlNetworkRequestInstance(execution)
211 networkRequest = utils.formatXml(networkRequest)
212 execution.setVariable(Prefix + "networkRequest", networkRequest)
213 msoLogger.debug(Prefix + "networkRequest - " + '\n' + networkRequest)
215 // validate 'backout-on-failure' to override 'mso.rollback'
216 boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, networkRequest)
217 execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
218 msoLogger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
220 String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
221 execution.setVariable(Prefix + "networkInputs", networkInputs)
222 msoLogger.debug(Prefix + "networkInputs - " + '\n' + networkInputs)
225 String messageId = execution.getVariable("testMessageId") // for testing
226 if (messageId == null || messageId == "") {
227 messageId = UUID.randomUUID()
228 msoLogger.debug(Prefix + "messageId, random generated: " + messageId)
230 msoLogger.debug(Prefix + "messageId, pre-assigned: " + messageId)
232 execution.setVariable(Prefix + "messageId", messageId)
234 String source = utils.getNodeText(networkRequest, "source")
235 execution.setVariable(Prefix + "source", source)
236 msoLogger.debug(Prefix + "source - " + source)
238 // validate cloud region
239 String lcpCloudRegionId = utils.getNodeText(networkRequest, "aic-cloud-region")
240 if ((lcpCloudRegionId == null) || (lcpCloudRegionId == "") || (lcpCloudRegionId == "null")) {
241 String dataErrorMessage = "Missing value/element: 'lcpCloudRegionId' or 'cloudConfiguration' or 'aic-cloud-region'."
242 msoLogger.debug(" Invalid Request - " + dataErrorMessage)
243 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
246 // validate service instance id
247 String serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id")
248 if ((serviceInstanceId == null) || (serviceInstanceId == "") || (serviceInstanceId == "null")) {
249 String dataErrorMessage = "Missing value/element: 'serviceInstanceId'."
250 msoLogger.debug(" Invalid Request - " + dataErrorMessage)
251 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
254 // PO Authorization Info / headers Authorization=
255 String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
258 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey",execution))
259 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
260 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
262 } catch (IOException ex) {
263 String exceptionMessage = "Exception Encountered in DoCreateNetworkInstance, PreProcessRequest() - "
264 String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
265 msoLogger.debug(dataErrorMessage)
266 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
269 // Set variables for Generic Get Sub Flow use
270 execution.setVariable(Prefix + "serviceInstanceId", serviceInstanceId)
271 msoLogger.debug(Prefix + "serviceInstanceId - " + serviceInstanceId)
273 execution.setVariable("GENGS_type", "service-instance")
274 msoLogger.debug("GENGS_type - " + "service-instance")
275 msoLogger.debug(" Url for SDNC adapter: " + UrnPropertiesReader.getVariable("mso.adapters.sdnc.endpoint",execution))
277 String sdncVersion = execution.getVariable("sdncVersion")
278 msoLogger.debug("sdncVersion? : " + sdncVersion)
280 // build 'networkOutputs'
281 String networkId = utils.getNodeText(networkRequest, "network-id")
282 if ((networkId == null) || (networkId == "null")) {
285 String networkName = utils.getNodeText(networkRequest, "network-name")
286 if ((networkName == null) || (networkName == "null")) {
289 String networkOutputs =
291 <network-id>${MsoUtils.xmlEscape(networkId)}</network-id>
292 <network-name>${MsoUtils.xmlEscape(networkName)}</network-name>
293 </network-outputs>"""
294 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
295 msoLogger.debug(Prefix + "networkOutputs - " + '\n' + networkOutputs)
296 execution.setVariable(Prefix + "networkId", networkId)
297 execution.setVariable(Prefix + "networkName", networkName)
299 } catch (BpmnError e) {
302 } catch (Exception ex) {
303 sendSyncError(execution)
305 String exceptionMessage = "Exception Encountered in PreProcessRequest() of " + className + ".groovy ***** : " + ex.getMessage()
306 msoLogger.debug(exceptionMessage)
307 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
313 public void callRESTQueryAAINetworkName (DelegateExecution execution) {
315 execution.setVariable("prefix",Prefix)
317 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkName() of DoCreateNetworkInstance ***** " )
320 String networkInputs = execution.getVariable(Prefix + "networkInputs")
321 String networkName = utils.getNodeText(networkInputs, "network-name")
322 networkName = UriUtils.encode(networkName,"UTF-8")
324 // Prepare AA&I url with network-name
325 String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
326 AaiUtil aaiUriUtil = new AaiUtil(this)
327 String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution)
328 String queryAAINameRequest = "${aai_endpoint}${aai_uri}" + "?network-name=" + networkName
329 execution.setVariable(Prefix + "queryNameAAIRequest", queryAAINameRequest)
330 msoLogger.debug(Prefix + "queryNameAAIRequest - " + "\n" + queryAAINameRequest)
333 APIResponse response = aaiUriUtil.executeAAIGetCall(execution, queryAAINameRequest)
334 String returnCode = response.getStatusCode()
335 execution.setVariable(Prefix + "aaiNameReturnCode", returnCode)
336 msoLogger.debug(" ***** AAI Query Name Response Code : " + returnCode)
338 String aaiResponseAsString = response.getResponseBodyAsString()
339 msoLogger.debug(" ***** AAI Query Name Response : " +'\n'+ aaiResponseAsString)
341 if (returnCode=='200') {
342 execution.setVariable(Prefix + "queryNameAAIResponse", aaiResponseAsString)
343 execution.setVariable(Prefix + "isAAIqueryNameGood", true)
344 String orchestrationStatus = ""
346 // response is NOT empty
347 orchestrationStatus = utils.getNodeText(aaiResponseAsString, "orchestration-status")
348 execution.setVariable(Prefix + "orchestrationStatus", orchestrationStatus.toUpperCase())
349 msoLogger.debug(Prefix + "orchestrationStatus - " + orchestrationStatus.toUpperCase())
350 execution.setVariable("orchestrationStatus", orchestrationStatus)
352 } catch (Exception ex) {
354 execution.setVariable(Prefix + "orchestrationStatus", orchestrationStatus)
355 msoLogger.debug(Prefix + "orchestrationStatus - " + orchestrationStatus)
359 if (returnCode=='404') {
360 msoLogger.debug(" QueryAAINetworkName return code = '404' (Not Found). Proceed with the Create !!! ")
364 String dataErrorMessage = "Unexpected Error Response from QueryAAINetworkName - " + returnCode
365 msoLogger.debug(dataErrorMessage)
366 exceptionUtil.buildWorkflowException(execution, 2500, dataErrorMessage)
372 msoLogger.debug(Prefix + "isAAIqueryNameGood? : " + execution.getVariable(Prefix + "isAAIqueryNameGood"))
374 } catch (BpmnError e) {
377 } catch (Exception ex) {
379 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow - callRESTQueryAAINetworkName() - " + ex.getMessage()
380 msoLogger.debug(exceptionMessage)
381 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
387 public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
389 execution.setVariable("prefix",Prefix)
391 msoLogger.debug(" ***** Inside callRESTQueryAAICloudRegion() of DoCreateNetworkInstance ***** " )
394 String networkInputs = execution.getVariable(Prefix + "networkInputs")
395 String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
396 cloudRegion = UriUtils.encode(cloudRegion,"UTF-8")
399 String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
400 AaiUtil aaiUtil = new AaiUtil(this)
401 String aai_uri = aaiUtil.getCloudInfrastructureCloudRegionUri(execution)
402 String queryCloudRegionRequest = "${aai_endpoint}${aai_uri}/" + cloudRegion
403 execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
404 msoLogger.debug(Prefix + "queryCloudRegionRequest - " + "\n" + queryCloudRegionRequest)
406 String cloudRegionPo = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
407 String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "SDNC", cloudRegion)
409 if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
410 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
411 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
412 execution.setVariable(Prefix + "isCloudRegionGood", true)
415 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
416 msoLogger.debug(dataErrorMessage)
417 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
421 msoLogger.debug(" is Cloud Region Good: " + execution.getVariable(Prefix + "isCloudRegionGood"))
423 } catch (BpmnError e) {
426 } catch (Exception ex) {
428 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow - callRESTQueryAAICloudRegion() - " + ex.getMessage()
429 msoLogger.debug(exceptionMessage)
430 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
436 public void callRESTQueryAAINetworkId(DelegateExecution execution) {
438 execution.setVariable("prefix",Prefix)
440 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
444 String networkId = ""
445 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
446 if (execution.getVariable("sdncVersion") != "1610") {
447 String networkResponseInformation = ""
449 networkResponseInformation = utils.getNodeXml(assignSDNCResponse, "network-response-information", false).replace("tag0:","").replace(":tag0","")
450 networkId = utils.getNodeText(networkResponseInformation, "instance-id")
451 } catch (Exception ex) {
452 String dataErrorMessage = " SNDC Response network validation for 'instance-id' (network-id) failed: Empty <network-response-information>"
453 msoLogger.debug(dataErrorMessage)
454 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
458 networkId = utils.getNodeText(assignSDNCResponse, "network-id")
460 if (networkId == null || networkId == "null") {
461 String dataErrorMessage = "SNDC Response did not contains 'instance-id' or 'network-id' element, or the value is null."
462 msoLogger.debug(dataErrorMessage)
463 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
465 msoLogger.debug(" SNDC Response network validation for 'instance-id' (network-id)' is good: " + networkId)
469 execution.setVariable(Prefix + "networkId", networkId)
470 String networkName = utils.getNodeText(assignSDNCResponse, "network-name")
471 execution.setVariable(Prefix + "networkName", networkName)
473 networkId = UriUtils.encode(networkId,"UTF-8")
476 String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
477 AaiUtil aaiUriUtil = new AaiUtil(this)
478 String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution)
479 String queryIdAAIRequest = "${aai_endpoint}${aai_uri}/" + networkId + "?depth=all"
480 execution.setVariable(Prefix + "queryIdAAIRequest", queryIdAAIRequest)
481 msoLogger.debug(Prefix + "queryIdAAIRequest - " + "\n" + queryIdAAIRequest)
483 APIResponse response = aaiUriUtil.executeAAIGetCall(execution, queryIdAAIRequest)
484 String returnCode = response.getStatusCode()
485 execution.setVariable(Prefix + "aaiIdReturnCode", returnCode)
487 msoLogger.debug(" ***** AAI Response Code : " + returnCode)
489 String aaiResponseAsString = response.getResponseBodyAsString()
491 if (returnCode=='200') {
492 execution.setVariable(Prefix + "queryIdAAIResponse", aaiResponseAsString)
493 msoLogger.debug(" QueryAAINetworkId Success REST Response - " + "\n" + aaiResponseAsString)
495 String netId = utils.getNodeText(aaiResponseAsString, "network-id")
496 execution.setVariable(Prefix + "networkId", netId)
497 String netName = utils.getNodeText(aaiResponseAsString, "network-name")
498 execution.setVariable(Prefix + "networkName", netName)
501 if (returnCode=='404') {
502 String dataErrorMessage = "Response Error from QueryAAINetworkId is 404 (Not Found)."
503 msoLogger.debug(" AAI Query Failed. " + dataErrorMessage)
504 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
507 if (aaiResponseAsString.contains("RESTFault")) {
508 WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
509 execution.setVariable("WorkflowException", exceptionObject)
510 throw new BpmnError("MSOWorkflowException")
514 String dataErrorMessage = "Unexpected Response from QueryAAINetworkId - " + returnCode
515 msoLogger.debug("Unexpected Response from QueryAAINetworkId - " + dataErrorMessage)
516 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
522 } catch (BpmnError e) {
525 } catch (Exception ex) {
526 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkId() - " + ex.getMessage()
527 msoLogger.debug(exceptionMessage)
528 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
534 public void callRESTReQueryAAINetworkId(DelegateExecution execution) {
536 execution.setVariable("prefix",Prefix)
538 msoLogger.debug(" ***** Inside callRESTReQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
542 String networkId = execution.getVariable(Prefix + "networkId")
543 String netId = networkId
544 networkId = UriUtils.encode(networkId,"UTF-8")
547 String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
548 AaiUtil aaiUriUtil = new AaiUtil(this)
549 String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution)
550 String requeryIdAAIRequest = "${aai_endpoint}${aai_uri}/" + networkId + "?depth=all"
551 execution.setVariable(Prefix + "requeryIdAAIRequest", requeryIdAAIRequest)
552 msoLogger.debug(Prefix + "requeryIdAAIRequest - " + "\n" + requeryIdAAIRequest)
554 APIResponse response = aaiUriUtil.executeAAIGetCall(execution, requeryIdAAIRequest)
555 String returnCode = response.getStatusCode()
556 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", returnCode)
557 msoLogger.debug(" ***** AAI ReQuery Response Code : " + returnCode)
559 String aaiResponseAsString = response.getResponseBodyAsString()
561 if (returnCode=='200') {
562 execution.setVariable(Prefix + "requeryIdAAIResponse", aaiResponseAsString)
563 msoLogger.debug(" ReQueryAAINetworkId Success REST Response - " + "\n" + aaiResponseAsString)
565 String netName = utils.getNodeText(aaiResponseAsString, "network-name")
566 String networkOutputs =
568 <network-id>${MsoUtils.xmlEscape(netId)}</network-id>
569 <network-name>${MsoUtils.xmlEscape(netName)}</network-name>
570 </network-outputs>"""
571 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
572 msoLogger.debug(" networkOutputs - " + '\n' + networkOutputs)
575 if (returnCode=='404') {
576 String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
577 msoLogger.debug(" AAI ReQuery Failed. - " + dataErrorMessage)
578 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
581 if (aaiResponseAsString.contains("RESTFault")) {
582 WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
583 execution.setVariable("WorkflowException", exceptionObject)
584 throw new BpmnError("MSOWorkflowException")
588 String dataErrorMessage = "Unexpected Response from ReQueryAAINetworkId - " + returnCode
589 msoLogger.debug(dataErrorMessage)
590 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
596 } catch (BpmnError e) {
599 } catch (Exception ex) {
600 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTReQueryAAINetworkId() - " + ex.getMessage()
601 msoLogger.debug(exceptionMessage)
602 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
608 public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
610 execution.setVariable("prefix",Prefix)
612 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding() of DoCreateNetworkInstance ***** " )
617 String queryIdAAIResponse = execution.getVariable(Prefix + "queryIdAAIResponse").replace('<?xml version="1.0" encoding="UTF-8"?>', "")
618 String relationship = networkUtils.getFirstNodeXml(queryIdAAIResponse, "relationship-list").trim().replace("tag0:","").replace(":tag0","")
619 msoLogger.debug(" relationship - " + relationship)
621 // Check if Vnf Binding is present, then build a List of vnfBinding
622 List vpnBindingUri = networkUtils.getVnfBindingObject(relationship)
623 int vpnCount = vpnBindingUri.size()
624 execution.setVariable(Prefix + "vpnCount", vpnCount)
625 msoLogger.debug(Prefix + "vpnCount - " + vpnCount)
627 String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
628 AaiUtil aaiUriUtil = new AaiUtil(this)
631 execution.setVariable(Prefix + "vpnBindings", vpnBindingUri)
632 msoLogger.debug(" vpnBindingUri List - " + vpnBindingUri)
634 String routeTargets = ""
635 // AII loop call using list vpnBindings
636 for (i in 0..vpnBindingUri.size()-1) {
640 // prepare url using vpnBinding
641 String queryVpnBindingAAIRequest = ""
642 String aai_uri = aaiUriUtil.getNetworkVpnBindingUri(execution)
644 // Note: By default, the vpnBinding url is found in 'related-link' of the response,
645 // so, the default in URN mappings for this is set to "" (ie, space), unless forced to use the URN mapping.
646 if (aai_uri == null || aai_uri == "") {
647 // using value of 'related-link' from response
648 if (vpnBindingUri[i].charAt(vpnBindingUri[i].length()-1) == '/') {
649 queryVpnBindingAAIRequest = "${aai_endpoint}" + vpnBindingUri[i].substring(0, vpnBindingUri[i].length()-1) + "?depth=all"
651 queryVpnBindingAAIRequest = "${aai_endpoint}" + vpnBindingUri[i] + "?depth=all"
655 // using uri value in URN mapping
656 String vpnBindingId = vpnBindingUri[i].substring(vpnBindingUri[i].indexOf("/vpn-binding/")+13, vpnBindingUri[i].length())
657 if (vpnBindingId.charAt(vpnBindingId.length()-1) == '/') {
658 vpnBindingId = vpnBindingId.substring(0, vpnBindingId.length()-1)
660 queryVpnBindingAAIRequest = "${aai_endpoint}${aai_uri}/" + vpnBindingId + "?depth=all"
663 execution.setVariable(Prefix + "queryVpnBindingAAIRequest", queryVpnBindingAAIRequest)
664 msoLogger.debug(Prefix + "queryVpnBindingAAIRequest, , vpnBinding #" + counting + " : " + "\n" + queryVpnBindingAAIRequest)
666 APIResponse response = aaiUriUtil.executeAAIGetCall(execution, queryVpnBindingAAIRequest)
667 String returnCode = response.getStatusCode()
668 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", returnCode)
669 msoLogger.debug(" ***** AAI query vpn binding Response Code, vpnBinding #" + counting + " : " + returnCode)
671 String aaiResponseAsString = response.getResponseBodyAsString()
673 if (returnCode=='200') {
674 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiResponseAsString)
675 msoLogger.debug(" AAI Query Vpn Binding Success REST Response, , vpnBinding #" + counting + " : " + "\n" + aaiResponseAsString)
677 String routeTarget = ""
678 String routeRole = ""
679 if (utils.nodeExists(aaiResponseAsString, "route-targets")) {
680 String aaiRouteTargets = utils.getNodeXml(aaiResponseAsString, "route-targets", false)
681 def aaiRouteTargetsXml = new XmlSlurper().parseText(aaiRouteTargets)
682 def aaiRouteTarget = aaiRouteTargetsXml.'**'.findAll {it.name() == "route-target"}
683 for (j in 0..aaiRouteTarget.size()-1) {
684 routeTarget = utils.getNodeText(XmlUtil.serialize(aaiRouteTarget[j]), "global-route-target")
685 routeRole = utils.getNodeText(XmlUtil.serialize(aaiRouteTarget[j]), "route-target-role")
686 routeTargets += "<routeTargets>" + '\n' +
687 " <routeTarget>" + routeTarget + "</routeTarget>" + '\n' +
688 " <routeTargetRole>" + routeRole + "</routeTargetRole>" + '\n' +
689 "</routeTargets>" + '\n'
694 if (returnCode=='404') {
695 String dataErrorMessage = "Response Error from AAINetworkVpnBinding is 404 (Not Found)."
696 msoLogger.debug(dataErrorMessage)
697 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
700 if (aaiResponseAsString.contains("RESTFault")) {
701 WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
702 execution.setVariable("WorkflowException", exceptionObject)
703 throw new BpmnError("MSOWorkflowException")
707 String dataErrorMessage = " Unexpected Response from AAINetworkVpnBinding - " + returnCode
708 msoLogger.debug(dataErrorMessage)
709 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
717 execution.setVariable(Prefix + "routeCollection", routeTargets)
718 msoLogger.debug(Prefix + "routeCollection - " + '\n' + routeTargets)
721 // reset return code to success
722 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
723 String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution)
724 String schemaVersion = aaiUriUtil.getNamespaceFromUri(execution, aai_uri)
725 String aaiStubResponse =
726 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
727 <vpn-binding xmlns="${schemaVersion}">
728 <global-route-target/>
731 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
732 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiStubResponseAsXml)
733 execution.setVariable(Prefix + "routeCollection", "<routeTargets/>")
734 msoLogger.debug(" No vpnBinding, using this stub as response - " + '\n' + aaiStubResponseAsXml)
738 } catch (BpmnError e) {
741 } catch (Exception ex) {
742 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkVpnBinding() - " + ex.getMessage()
743 msoLogger.debug(exceptionMessage)
744 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
750 public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
752 execution.setVariable("prefix",Prefix)
754 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkPolicy() of DoCreateNetworkInstance ***** " )
758 String queryIdAAIResponse = execution.getVariable(Prefix + "queryIdAAIResponse").replace('<?xml version="1.0" encoding="UTF-8"?>', "")
759 String relationship = networkUtils.getFirstNodeXml(queryIdAAIResponse, "relationship-list").trim().replace("tag0:","").replace(":tag0","")
760 msoLogger.debug(" relationship - " + relationship)
762 // Check if Network Policy is present, then build a List of network policy
763 List networkPolicyUriList = networkUtils.getNetworkPolicyObject(relationship)
764 int networkPolicyCount = networkPolicyUriList.size()
765 execution.setVariable(Prefix + "networkPolicyCount", networkPolicyCount)
766 msoLogger.debug(Prefix + "networkPolicyCount - " + networkPolicyCount)
768 String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
769 AaiUtil aaiUriUtil = new AaiUtil(this)
771 if (networkPolicyCount > 0) {
772 execution.setVariable(Prefix + "networkPolicyUriList", networkPolicyUriList)
773 msoLogger.debug(" networkPolicyUri List - " + networkPolicyUriList)
775 String networkPolicies = ""
776 // AII loop call using list vpnBindings
777 for (i in 0..networkPolicyUriList.size()-1) {
781 // prepare url using vpnBinding
782 String queryNetworkPolicyAAIRequest = ""
784 String aai_uri = aaiUriUtil.getNetworkPolicyUri(execution)
786 // Note: By default, the network policy url is found in 'related-link' of the response,
787 // so, the default in URN mappings for this is set to "" (ie, space), unless forced to use the URN mapping.
788 if (aai_uri == null || aai_uri == "") {
789 // using value of 'related-link' from response
790 if (networkPolicyUriList[i].charAt(networkPolicyUriList[i].length()-1) == '/') {
791 queryNetworkPolicyAAIRequest = "${aai_endpoint}" + networkPolicyUriList[i].substring(0, networkPolicyUriList[i].length()-1) + "?depth=all"
793 queryNetworkPolicyAAIRequest = "${aai_endpoint}" + networkPolicyUriList[i] + "?depth=all"
796 // using uri value in URN mapping
797 String networkPolicyId = networkPolicyUriList[i].substring(networkPolicyUriList[i].indexOf("/network-policy/")+16, networkPolicyUriList[i].length())
798 println " networkPolicyId - " + networkPolicyId
799 if (networkPolicyId.charAt(networkPolicyId.length()-1) == '/') {
800 networkPolicyId = networkPolicyId.substring(0, networkPolicyId.length()-1)
802 queryNetworkPolicyAAIRequest = "${aai_endpoint}${aai_uri}/" + networkPolicyId + "?depth=all"
807 execution.setVariable(Prefix + "queryNetworkPolicyAAIRequest", queryNetworkPolicyAAIRequest)
808 msoLogger.debug(Prefix + "queryNetworkPolicyAAIRequest, , NetworkPolicy #" + counting + " : " + "\n" + queryNetworkPolicyAAIRequest)
810 APIResponse response = aaiUriUtil.executeAAIGetCall(execution, queryNetworkPolicyAAIRequest)
811 String returnCode = response.getStatusCode()
812 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", returnCode)
813 msoLogger.debug(" ***** AAI query network policy Response Code, NetworkPolicy #" + counting + " : " + returnCode)
815 String aaiResponseAsString = response.getResponseBodyAsString()
817 if (returnCode=='200') {
818 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiResponseAsString)
819 msoLogger.debug(" QueryAAINetworkPolicy Success REST Response, , NetworkPolicy #" + counting + " : " + "\n" + aaiResponseAsString)
821 String networkPolicy = ""
822 if (utils.nodeExists(aaiResponseAsString, "network-policy-fqdn")) {
823 networkPolicy = utils.getNodeText(aaiResponseAsString, "network-policy-fqdn")
824 networkPolicies += "<policyFqdns>" + networkPolicy + "</policyFqdns>" + '\n'
828 if (returnCode=='404') {
829 String dataErrorMessage = "Response Error from QueryAAINetworkPolicy is 404 (Not Found)."
830 msoLogger.debug(dataErrorMessage)
831 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
834 if (aaiResponseAsString.contains("RESTFault")) {
835 WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
836 execution.setVariable("WorkflowException", exceptionObject)
837 throw new BpmnError("MSOWorkflowException")
841 String dataErrorMessage = "Unexpected Response from QueryAAINetworkPolicy - " + returnCode
842 msoLogger.debug(dataErrorMessage)
843 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
851 execution.setVariable(Prefix + "networkCollection", networkPolicies)
852 msoLogger.debug(Prefix + "networkCollection - " + '\n' + networkPolicies)
855 // reset return code to success
856 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
857 String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution)
858 String schemaVersion = aaiUriUtil.getNamespaceFromUri(execution, aai_uri)
859 String aaiStubResponse =
860 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
861 <network-policy xmlns="${schemaVersion}">
862 <network-policy-fqdn/>
865 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
866 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiStubResponseAsXml)
867 execution.setVariable(Prefix + "networkCollection", "<policyFqdns/>")
868 msoLogger.debug(" No net policies, using this stub as response - " + '\n' + aaiStubResponseAsXml)
872 } catch (BpmnError e) {
875 } catch (Exception ex) {
876 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkPolicy() - " + ex.getMessage()
877 msoLogger.debug(exceptionMessage)
878 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
884 public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
886 execution.setVariable("prefix",Prefix)
888 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkTableRef() of DoCreateNetworkInstance ***** " )
892 String queryIdAAIResponse = execution.getVariable(Prefix + "queryIdAAIResponse").replace('<?xml version="1.0" encoding="UTF-8"?>', "")
893 String relationship = networkUtils.getFirstNodeXml(queryIdAAIResponse, "relationship-list").trim().replace("tag0:","").replace(":tag0","")
894 msoLogger.debug(" relationship - " + relationship)
896 // Check if Network TableREf is present, then build a List of network policy
897 List networkTableRefUriList = networkUtils.getNetworkTableRefObject(relationship)
898 int networkTableRefCount = networkTableRefUriList.size()
899 execution.setVariable(Prefix + "networkTableRefCount", networkTableRefCount)
900 msoLogger.debug(Prefix + "networkTableRefCount - " + networkTableRefCount)
902 String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
903 AaiUtil aaiUriUtil = new AaiUtil(this)
905 if (networkTableRefCount > 0) {
906 execution.setVariable(Prefix + "networkTableRefUriList", networkTableRefUriList)
907 msoLogger.debug(" networkTableRefUri List - " + networkTableRefUriList)
909 // AII loop call using list vpnBindings
910 String networkTableRefs = ""
911 for (i in 0..networkTableRefUriList.size()-1) {
915 // prepare url using tableRef
916 String queryNetworkTableRefAAIRequest = ""
918 String aai_uri = aaiUriUtil.getNetworkTableReferencesUri(execution)
920 // Note: By default, the network policy url is found in 'related-link' of the response,
921 // so, the default in URN mappings for this is set to "" (ie, space), unless forced to use the URN mapping.
922 if (aai_uri == null || aai_uri == "") {
923 // using value of 'related-link' from response
924 if (networkTableRefUriList[i].charAt(networkTableRefUriList[i].length()-1) == '/') {
925 queryNetworkTableRefAAIRequest = "${aai_endpoint}" + networkTableRefUriList[i].substring(0, networkTableRefUriList[i].length()-1) + "?depth=all"
927 queryNetworkTableRefAAIRequest = "${aai_endpoint}" + networkTableRefUriList[i] + "?depth=all"
930 // using uri value in URN mapping
931 String networkTableRefId = networkTableRefUriList[i].substring(networkTableRefUriList[i].indexOf("/route-table-reference/")+23, networkTableRefUriList[i].length())
933 if (networkTableRefId.charAt(networkTableRefId.length()-1) == '/') {
934 networkTableRefId = networkTableRefId.substring(0, networkTableRefId.length()-1)
936 queryNetworkTableRefAAIRequest = "${aai_endpoint}${aai_uri}/" + networkTableRefId + "?depth=all"
941 execution.setVariable(Prefix + "queryNetworkTableRefAAIRequest", queryNetworkTableRefAAIRequest)
942 msoLogger.debug(Prefix + "queryNetworkTableRefAAIRequest, , NetworkTableRef #" + counting + " : " + "\n" + queryNetworkTableRefAAIRequest)
944 APIResponse response = aaiUriUtil.executeAAIGetCall(execution, queryNetworkTableRefAAIRequest)
945 String returnCode = response.getStatusCode()
946 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", returnCode)
947 msoLogger.debug(" ***** AAI query network Table Reference Response Code, NetworkTableRef #" + counting + " : " + returnCode)
949 String aaiResponseAsString = response.getResponseBodyAsString()
951 if (returnCode=='200') {
952 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiResponseAsString)
953 msoLogger.debug(" QueryAAINetworkTableRef Success REST Response, , NetworkTableRef #" + counting + " : " + "\n" + aaiResponseAsString)
955 String networkTableRef = ""
956 if (utils.nodeExists(aaiResponseAsString, "route-table-reference-fqdn")) {
957 networkTableRef = utils.getNodeText(aaiResponseAsString, "route-table-reference-fqdn")
958 networkTableRefs += "<routeTableFqdns>" + networkTableRef + "</routeTableFqdns>" + '\n'
962 if (returnCode=='404') {
963 String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
964 msoLogger.debug(dataErrorMessage)
965 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
968 if (aaiResponseAsString.contains("RESTFault")) {
969 WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
970 execution.setVariable("WorkflowException", exceptionObject)
971 throw new BpmnError("MSOWorkflowException")
975 String dataErrorMessage = "Unexpected Response from QueryAAINetworkTableRef - " + returnCode
976 msoLogger.debug(dataErrorMessage)
977 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
985 execution.setVariable(Prefix + "tableRefCollection", networkTableRefs)
986 msoLogger.debug(Prefix + "tableRefCollection - " + '\n' + networkTableRefs)
989 // reset return code to success
990 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
991 String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution)
992 String schemaVersion = aaiUriUtil.getNamespaceFromUri(execution, aai_uri)
993 String aaiStubResponse =
994 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
995 <route-table-references xmlns="${schemaVersion}">
996 <route-table-reference-fqdn/>
997 </route-table-references>
999 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
1000 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiStubResponseAsXml)
1001 execution.setVariable(Prefix + "tableRefCollection", "<routeTableFqdns/>")
1002 msoLogger.debug(" No net table references, using this stub as response - " + '\n' + aaiStubResponseAsXml)
1006 } catch (BpmnError e) {
1009 } catch (Exception ex) {
1010 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
1011 msoLogger.debug(exceptionMessage)
1012 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1019 public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
1021 execution.setVariable("prefix",Prefix)
1023 msoLogger.debug(" ***** Inside callRESTUpdateContrailAAINetwork() of DoCreateNetworkInstance ***** " )
1027 String networkId = execution.getVariable(Prefix + "networkId")
1028 networkId = UriUtils.encode(networkId,"UTF-8")
1029 String requeryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
1030 String createNetworkResponse = execution.getVariable(Prefix + "createNetworkResponse")
1033 String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
1034 AaiUtil aaiUriUtil = new AaiUtil(this)
1035 String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution)
1036 String updateContrailAAIUrlRequest = "${aai_endpoint}${aai_uri}/" + networkId + "?depth=all"
1038 execution.setVariable(Prefix + "updateContrailAAIUrlRequest", updateContrailAAIUrlRequest)
1039 msoLogger.debug(Prefix + "updateContrailAAIUrlRequest - " + "\n" + updateContrailAAIUrlRequest)
1041 //Prepare payload (PUT)
1042 String schemaVersion = aaiUriUtil.getNamespaceFromUri(execution, aai_uri)
1043 String payload = networkUtils.ContrailNetworkCreatedUpdate(requeryIdAAIResponse, createNetworkResponse, schemaVersion)
1044 String payloadXml = utils.formatXml(payload)
1045 execution.setVariable(Prefix + "updateContrailAAIPayloadRequest", payloadXml)
1046 msoLogger.debug(" 'payload' to Update Contrail - " + "\n" + payloadXml)
1048 APIResponse response = aaiUriUtil.executeAAIPutCall(execution, updateContrailAAIUrlRequest, payloadXml)
1050 String returnCode = response.getStatusCode()
1051 execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", returnCode)
1052 msoLogger.debug(" ***** AAI Update Contrail Response Code : " + returnCode)
1053 String aaiUpdateContrailResponseAsString = response.getResponseBodyAsString()
1054 if (returnCode=='200') {
1055 execution.setVariable(Prefix + "updateContrailAAIResponse", aaiUpdateContrailResponseAsString)
1056 msoLogger.debug(" AAI Update Contrail Success REST Response - " + "\n" + aaiUpdateContrailResponseAsString)
1057 // Point-of-no-return is set to false, rollback not needed.
1058 String rollbackEnabled = execution.getVariable(Prefix + "rollbackEnabled")
1059 if (rollbackEnabled == "true") {
1060 execution.setVariable(Prefix + "isPONR", false)
1062 execution.setVariable(Prefix + "isPONR", true)
1064 msoLogger.debug(Prefix + "isPONR" + ": " + execution.getVariable(Prefix + "isPONR"))
1066 if (returnCode=='404') {
1067 String dataErrorMessage = " Response Error from UpdateContrailAAINetwork is 404 (Not Found)."
1068 msoLogger.debug(dataErrorMessage)
1069 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
1072 if (aaiUpdateContrailResponseAsString.contains("RESTFault")) {
1073 WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiUpdateContrailResponseAsString, execution)
1074 execution.setVariable("WorkflowException", exceptionObject)
1075 throw new BpmnError("MSOWorkflowException")
1079 String errorMessage = "Unexpected Response from UpdateContrailAAINetwork - " + returnCode
1080 msoLogger.debug(errorMessage)
1081 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
1086 } catch (BpmnError e) {
1089 } catch (Exception ex) {
1090 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTUpdateContrailAAINetwork() - " + ex.getMessage()
1091 msoLogger.debug(exceptionMessage)
1092 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1098 public void prepareCreateNetworkRequest (DelegateExecution execution) {
1100 execution.setVariable("prefix",Prefix)
1102 msoLogger.trace("Inside prepareCreateNetworkRequest() of DoCreateNetworkInstance")
1107 String requestId = execution.getVariable("msoRequestId")
1108 if (requestId == null) {
1109 requestId = execution.getVariable("mso-request-id")
1111 String messageId = execution.getVariable(Prefix + "messageId")
1112 String source = execution.getVariable(Prefix + "source")
1114 String requestInput = execution.getVariable(Prefix + "networkRequest")
1115 String queryIdResponse = execution.getVariable(Prefix + "queryIdAAIResponse")
1116 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
1117 String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
1119 // Prepare Network request
1120 String routeCollection = execution.getVariable(Prefix + "routeCollection")
1121 String policyCollection = execution.getVariable(Prefix + "networkCollection")
1122 String tableCollection = execution.getVariable(Prefix + "tableRefCollection")
1123 String createNetworkRequest = networkUtils.CreateNetworkRequestV2(execution, requestId, messageId, requestInput, queryIdResponse, routeCollection, policyCollection, tableCollection, cloudRegionId, backoutOnFailure, source )
1125 String buildDeleteNetworkRequestAsString = utils.formatXml(createNetworkRequest)
1126 buildDeleteNetworkRequestAsString = buildDeleteNetworkRequestAsString.replace(":w1aac13n0", "").replace("w1aac13n0:", "")
1128 execution.setVariable(Prefix + "createNetworkRequest", buildDeleteNetworkRequestAsString)
1129 msoLogger.debug(Prefix + "createNetworkRequest - " + "\n" + buildDeleteNetworkRequestAsString)
1131 } catch (Exception ex) {
1132 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareCreateNetworkRequest() - " + ex.getMessage()
1133 msoLogger.debug(exceptionMessage)
1134 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1140 public void prepareSDNCRequest (DelegateExecution execution) {
1142 execution.setVariable("prefix",Prefix)
1144 msoLogger.trace("Inside prepareSDNCRequest() of DoCreateNetworkInstance")
1148 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1149 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1150 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1152 String networkId = execution.getVariable(Prefix + "networkId")
1153 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1155 // get/set 'msoRequestId' and 'mso-request-id'
1156 String requestId = execution.getVariable("msoRequestId")
1157 if (requestId != null) {
1158 execution.setVariable("mso-request-id", requestId)
1160 requestId = execution.getVariable("mso-request-id")
1162 execution.setVariable(Prefix + "requestId", requestId)
1164 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
1165 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
1167 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
1168 execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
1169 msoLogger.debug(Prefix + "assignSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
1172 } catch (Exception ex) {
1173 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRequest() - " + ex.getMessage()
1174 msoLogger.debug(exceptionMessage)
1175 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1181 public void prepareRpcSDNCRequest (DelegateExecution execution) {
1183 execution.setVariable("prefix",Prefix)
1185 msoLogger.trace("Inside prepareRpcSDNCRequest() of DoCreateNetworkInstance")
1190 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1191 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1192 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1194 String networkId = execution.getVariable(Prefix + "networkId")
1195 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1197 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
1198 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
1200 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
1201 execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
1202 msoLogger.debug(Prefix + "assignSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
1204 } catch (Exception ex) {
1205 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRequest() - " + ex.getMessage()
1206 msoLogger.debug(exceptionMessage)
1207 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1213 public void prepareRpcSDNCActivateRequest (DelegateExecution execution) {
1215 execution.setVariable("prefix",Prefix)
1217 msoLogger.trace("Inside prepareRpcSDNCActivateRequest() of DoCreateNetworkInstance")
1221 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1222 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1223 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1224 String networkId = execution.getVariable(Prefix + "networkId")
1225 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1227 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
1228 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
1230 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
1231 execution.setVariable(Prefix + "activateSDNCRequest", sndcTopologyCreateRequesAsString)
1232 msoLogger.debug(Prefix + "activateSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
1235 } catch (Exception ex) {
1236 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRequest() - " + ex.getMessage()
1237 msoLogger.debug(exceptionMessage)
1238 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1247 // **************************************************
1248 // Post or Validate Response Section
1249 // **************************************************
1251 public void validateCreateNetworkResponse (DelegateExecution execution) {
1253 execution.setVariable("prefix",Prefix)
1255 msoLogger.trace("Inside validateNetworkResponse() of DoCreateNetworkInstance")
1258 String returnCode = execution.getVariable(Prefix + "networkReturnCode")
1259 String networkResponse = execution.getVariable(Prefix + "createNetworkResponse")
1260 if (networkResponse==null) {
1261 networkResponse="" // reset
1264 msoLogger.debug(" Network Adapter create responseCode: " + returnCode)
1266 String errorMessage = ""
1267 if (returnCode == "200") {
1268 execution.setVariable(Prefix + "isNetworkRollbackNeeded", true)
1269 execution.setVariable(Prefix + "createNetworkResponse", networkResponse)
1270 msoLogger.debug(" Network Adapter create Success Response - " + "\n" + networkResponse)
1272 // prepare rollback data
1273 String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
1274 rollbackData = rollbackData.replace("rollback>", "networkRollback>")
1275 String rollbackNetwork =
1276 """<rollbackNetworkRequest>
1278 </rollbackNetworkRequest>"""
1279 String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
1280 execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
1281 msoLogger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
1283 } else { // network error
1284 if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) { //4xx, 5xx
1285 if (networkResponse.contains("createNetworkError")) {
1286 networkResponse = networkResponse.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '')
1287 errorMessage = utils.getNodeText(networkResponse, "message")
1288 errorMessage = "Received error from Network Adapter: " + errorMessage
1289 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
1291 } else { // CatchAll exception
1292 if (returnCode == "500") {
1293 errorMessage = "JBWEB000065: HTTP Status 500."
1295 errorMessage = "Return code is " + returnCode
1297 errorMessage = "Received error from Network Adapter: " + errorMessage
1298 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
1302 } else { // CatchAll exception
1303 String dataErrorMessage = "Received error from Network Adapter. Return code is: " + returnCode
1304 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
1310 } catch (BpmnError e) {
1313 } catch (Exception ex) {
1314 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. validateCreateNetworkResponse() - " + ex.getMessage()
1315 msoLogger.debug(exceptionMessage)
1316 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1323 public void validateSDNCResponse (DelegateExecution execution) {
1325 execution.setVariable("prefix",Prefix)
1327 msoLogger.trace("Inside validateSDNCResponse() of DoCreateNetworkInstance")
1329 String response = execution.getVariable(Prefix + "assignSDNCResponse")
1330 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1331 WorkflowException workflowException = execution.getVariable("WorkflowException")
1333 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
1334 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1336 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "assignSDNCResponse")
1337 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1338 execution.setVariable(Prefix + "assignSDNCResponse", assignSDNCResponseDecodeXml)
1340 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
1341 execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
1342 msoLogger.debug("Successfully Validated SDNC Response")
1345 msoLogger.debug("Did NOT Successfully Validated SDNC Response")
1346 throw new BpmnError("MSOWorkflowException")
1351 public void validateRpcSDNCActivateResponse (DelegateExecution execution) {
1353 execution.setVariable("prefix",Prefix)
1355 msoLogger.trace("Inside validateRpcSDNCActivateResponse() of DoCreateNetworkInstance")
1357 String response = execution.getVariable(Prefix + "activateSDNCResponse")
1358 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1359 WorkflowException workflowException = execution.getVariable("WorkflowException")
1361 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
1362 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1364 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "activateSDNCResponse")
1365 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1366 execution.setVariable(Prefix + "activateSDNCResponse", assignSDNCResponseDecodeXml)
1368 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
1369 execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", true)
1370 msoLogger.debug("Successfully Validated Rpc SDNC Activate Response")
1373 msoLogger.debug("Did NOT Successfully Validated Rpc SDNC Activate Response")
1374 throw new BpmnError("MSOWorkflowException")
1380 public void prepareSDNCRollbackRequest (DelegateExecution execution) {
1382 execution.setVariable("prefix",Prefix)
1384 msoLogger.trace("Inside prepareSDNCRollbackRequest() of DoCreateNetworkInstance")
1388 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1389 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1390 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1391 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1392 String networkId = execution.getVariable(Prefix + "networkId")
1393 if (networkId == 'null') {networkId = ""}
1394 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1396 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1397 String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
1398 String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
1399 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
1400 msoLogger.debug(" Preparing request for SDNC Topology 'rollback-NetworkActivateRequest' rollback . . . - " + "\n" + sndcTopologyRollbackRequestAsString)
1403 } catch (Exception ex) {
1404 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
1405 msoLogger.debug(exceptionMessage)
1406 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1412 public void prepareRpcSDNCRollbackRequest (DelegateExecution execution) {
1414 execution.setVariable("prefix",Prefix)
1416 msoLogger.trace("Inside prepareRpcSDNCRollbackRequest() of DoCreateNetworkInstance")
1420 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1421 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1422 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1423 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1424 String networkId = execution.getVariable(Prefix + "networkId")
1425 if (networkId == 'null') {networkId = ""}
1426 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1428 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1429 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1430 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1431 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1432 msoLogger.debug(" Preparing request for SDNC Topology 'unassign-DeleteNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
1435 } catch (Exception ex) {
1436 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRollbackRequest() - " + ex.getMessage()
1437 msoLogger.debug(exceptionMessage)
1438 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1444 public void prepareRpcSDNCActivateRollback(DelegateExecution execution) {
1446 execution.setVariable("prefix",Prefix)
1448 msoLogger.trace("Inside prepareRpcSDNCActivateRollback() of DoCreateNetworkInstance")
1453 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1454 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1455 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1456 String activateSDNCResponse = execution.getVariable(Prefix + "activateSDNCResponse")
1457 String networkId = execution.getVariable(Prefix + "networkId")
1458 if (networkId == 'null') {networkId = ""}
1459 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1461 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1462 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1463 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1464 execution.setVariable(Prefix + "rollbackActivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1465 msoLogger.debug(" Preparing request for RPC SDNC Topology 'deactivate-DeleteNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
1468 } catch (Exception ex) {
1469 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
1470 msoLogger.debug(exceptionMessage)
1471 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1477 public void prepareRollbackData(DelegateExecution execution) {
1479 execution.setVariable("prefix",Prefix)
1481 msoLogger.trace("Inside prepareRollbackData() of DoCreateNetworkInstance")
1485 Map<String, String> rollbackData = new HashMap<String, String>();
1486 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1487 if (rollbackSDNCRequest != null) {
1488 if (rollbackSDNCRequest != "") {
1489 rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
1492 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1493 if (rollbackNetworkRequest != null) {
1494 if (rollbackNetworkRequest != "") {
1495 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
1498 String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1499 if (rollbackActivateSDNCRequest != null) {
1500 if (rollbackActivateSDNCRequest != "") {
1501 rollbackData.put("rollbackActivateSDNCRequest", execution.getVariable(Prefix + "rollbackActivateSDNCRequest"))
1504 execution.setVariable("rollbackData", rollbackData)
1505 msoLogger.debug("** rollbackData : " + rollbackData)
1507 execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
1508 msoLogger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
1510 } catch (Exception ex) {
1511 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
1512 msoLogger.debug(exceptionMessage)
1513 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1519 public void postProcessResponse(DelegateExecution execution) {
1521 execution.setVariable("prefix",Prefix)
1523 msoLogger.trace("Inside postProcessResponse() of DoCreateNetworkInstance")
1528 // 1. Silent Success: execution.getVariable("CRENWKI_orchestrationStatus") == "ACTIVE"
1529 // 2. Success: execution.getVariable("WorkflowException") == null (NULL)
1530 // 3. WorkflowException: execution.getVariable("WorkflowException") != null (NOT NULL)
1532 msoLogger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
1534 if (execution.getVariable(Prefix + "isException") == false) {
1535 // set rollback data
1536 execution.setVariable("orchestrationStatus", "")
1537 execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
1538 execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
1539 prepareSuccessRollbackData(execution) // populate rollbackData
1540 execution.setVariable("WorkflowException", null)
1541 execution.setVariable(Prefix + "Success", true)
1542 msoLogger.debug(" ***** postProcessResponse(), GOOD !!!")
1544 // inside sub-flow logic
1545 execution.setVariable(Prefix + "Success", false)
1546 execution.setVariable("rollbackData", null)
1547 String exceptionMessage = " Exception encountered in MSO Bpmn. "
1548 if (execution.getVariable("workflowException") != null) { // Output of Rollback flow.
1549 msoLogger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
1550 WorkflowException wfex = execution.getVariable("workflowException")
1551 exceptionMessage = wfex.getErrorMessage()
1553 if (execution.getVariable(Prefix + "WorkflowException") != null) {
1554 WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
1555 exceptionMessage = pwfex.getErrorMessage()
1558 // going to the Main flow: a-la-carte or macro
1559 msoLogger.debug(" ***** postProcessResponse(), BAD !!!")
1560 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1561 throw new BpmnError("MSOWorkflowException")
1564 } catch(BpmnError b){
1565 msoLogger.debug("Rethrowing MSOWorkflowException")
1568 } catch (Exception ex) {
1569 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
1570 msoLogger.debug(exceptionMessage)
1571 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1572 throw new BpmnError("MSOWorkflowException")
1580 public void prepareSuccessRollbackData(DelegateExecution execution) {
1582 execution.setVariable("prefix",Prefix)
1584 msoLogger.trace("Inside prepareSuccessRollbackData() of DoCreateNetworkInstance")
1588 if (execution.getVariable("sdncVersion") != '1610') {
1589 prepareRpcSDNCRollbackRequest(execution)
1590 prepareRpcSDNCActivateRollback(execution)
1592 prepareSDNCRollbackRequest(execution)
1595 Map<String, String> rollbackData = new HashMap<String, String>();
1596 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1597 if (rollbackSDNCRequest != null) {
1598 if (rollbackSDNCRequest != "") {
1599 rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
1602 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1603 if (rollbackNetworkRequest != null) {
1604 if (rollbackNetworkRequest != "") {
1605 rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
1608 String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1609 if (rollbackActivateSDNCRequest != null) {
1610 if (rollbackActivateSDNCRequest != "") {
1611 rollbackData.put("rollbackActivateSDNCRequest", rollbackActivateSDNCRequest)
1614 execution.setVariable("rollbackData", rollbackData)
1616 msoLogger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
1617 execution.setVariable("WorkflowException", null)
1620 } catch (Exception ex) {
1621 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
1622 msoLogger.debug(exceptionMessage)
1623 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1629 public void setExceptionFlag(DelegateExecution execution){
1631 execution.setVariable("prefix",Prefix)
1633 msoLogger.trace("Inside setExceptionFlag() of DoCreateNetworkInstance")
1637 execution.setVariable(Prefix + "isException", true)
1639 if (execution.getVariable("SavedWorkflowException1") != null) {
1640 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1642 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1644 msoLogger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1646 } catch(Exception ex){
1647 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1648 msoLogger.debug(exceptionMessage)
1649 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1655 // *******************************
1656 // Build Error Section
1657 // *******************************
1661 public void processJavaException(DelegateExecution execution){
1663 execution.setVariable("prefix",Prefix)
1666 msoLogger.debug( "Caught a Java Exception in " + Prefix)
1667 msoLogger.debug("Started processJavaException Method")
1668 msoLogger.debug("Variables List: " + execution.getVariables())
1669 execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1670 exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1672 }catch(Exception e){
1673 msoLogger.debug("Caught Exception during processJavaException Method: " + e)
1674 execution.setVariable("UnexpectedError", "Exception in processJavaException method - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1675 exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method" + Prefix)
1677 msoLogger.debug( "Completed processJavaException Method in " + Prefix)