2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (c) 2019 Samsung
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.so.bpmn.infrastructure.scripts;
25 import javax.ws.rs.core.UriBuilder
26 import javax.xml.parsers.DocumentBuilder
27 import javax.xml.parsers.DocumentBuilderFactory
28 import org.apache.commons.lang3.*
29 import org.camunda.bpm.engine.delegate.BpmnError
30 import org.camunda.bpm.engine.delegate.DelegateExecution
31 import org.onap.so.bpmn.common.scripts.AaiUtil
32 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
33 import org.onap.so.bpmn.common.scripts.ExceptionUtil
34 import org.onap.so.bpmn.common.scripts.MsoUtils
35 import org.onap.so.bpmn.common.scripts.NetworkUtils
36 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
37 import org.onap.so.bpmn.common.scripts.VidUtils
38 import org.onap.so.bpmn.core.UrnPropertiesReader
39 import org.onap.so.bpmn.core.WorkflowException
40 import org.onap.so.bpmn.core.json.JsonUtils
41 import org.onap.so.client.aai.AAIObjectPlurals
42 import org.onap.so.client.aai.AAIObjectType
43 import org.onap.so.client.aai.AAIResourcesClient
44 import org.onap.so.client.aai.entities.uri.AAIResourceUri
45 import org.onap.so.client.aai.entities.uri.AAIUriFactory
46 import org.onap.so.client.aai.entities.AAIResultWrapper
47 import org.onap.so.client.aai.entities.Relationships
48 import org.onap.so.client.graphinventory.entities.uri.Depth
49 import org.onap.so.constants.Defaults
50 import org.slf4j.Logger
51 import org.slf4j.LoggerFactory
52 import org.springframework.web.util.UriUtils
53 import org.w3c.dom.Document
54 import org.w3c.dom.Element
55 import org.w3c.dom.NamedNodeMap
56 import org.w3c.dom.Node
57 import org.w3c.dom.NodeList;
58 import org.xml.sax.InputSource
59 import org.onap.aai.domain.yang.VpnBinding
60 import org.onap.aai.domain.yang.L3Network
61 import org.onap.aai.domain.yang.L3Networks
62 import org.onap.aai.domain.yang.NetworkPolicy
63 import org.onap.aai.domain.yang.RouteTableReference
64 import org.onap.aai.domain.yang.RouteTarget
65 import org.onap.aai.domain.yang.Subnet
66 import com.fasterxml.jackson.jaxrs.util.EndpointAsBeanProperty
68 import javax.ws.rs.NotFoundException
71 import groovy.xml.XmlUtil
74 * This groovy class supports the <class>DoCreateNetworkInstance.bpmn</class> process.
77 public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor {
78 private static final Logger logger = LoggerFactory.getLogger( DoCreateNetworkInstance.class);
80 String Prefix="CRENWKI_"
81 ExceptionUtil exceptionUtil = new ExceptionUtil()
82 JsonUtils jsonUtil = new JsonUtils()
83 VidUtils vidUtils = new VidUtils(this)
84 NetworkUtils networkUtils = new NetworkUtils()
85 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
87 def className = getClass().getSimpleName()
90 * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstance.bpmn</class> process.
93 public InitializeProcessVariables(DelegateExecution execution){
94 /* Initialize all the process variables in this block */
96 execution.setVariable(Prefix + "networkRequest", "")
97 execution.setVariable(Prefix + "rollbackEnabled", null)
98 execution.setVariable(Prefix + "networkInputs", "")
99 //execution.setVariable(Prefix + "requestId", "")
100 execution.setVariable(Prefix + "messageId", "")
101 execution.setVariable(Prefix + "source", "")
102 execution.setVariable("BasicAuthHeaderValuePO", "")
103 execution.setVariable("BasicAuthHeaderValueSDNC", "")
104 execution.setVariable(Prefix + "serviceInstanceId","")
105 execution.setVariable("GENGS_type", "")
106 execution.setVariable(Prefix + "rsrc_endpoint", null)
107 execution.setVariable(Prefix + "networkOutputs", "")
108 execution.setVariable(Prefix + "networkId","")
109 execution.setVariable(Prefix + "networkName","")
112 execution.setVariable(Prefix + "queryNameAAIRequest","")
113 execution.setVariable(Prefix + "queryNameAAIResponse", "")
114 execution.setVariable(Prefix + "aaiNameReturnCode", "")
115 execution.setVariable(Prefix + "isAAIqueryNameGood", false)
117 // AAI query Cloud Region
118 execution.setVariable(Prefix + "queryCloudRegionRequest","")
119 execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
120 execution.setVariable(Prefix + "queryCloudRegionResponse","")
121 execution.setVariable(Prefix + "cloudRegionPo","")
122 execution.setVariable(Prefix + "cloudRegionSdnc","")
123 execution.setVariable(Prefix + "isCloudRegionGood", false)
126 execution.setVariable(Prefix + "queryIdAAIRequest","")
127 execution.setVariable(Prefix + "queryIdAAIResponse", "")
128 execution.setVariable(Prefix + "aaiIdReturnCode", "")
130 // AAI query vpn binding
131 execution.setVariable(Prefix + "queryVpnBindingAAIRequest","")
132 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", "")
133 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "")
134 execution.setVariable(Prefix + "vpnBindings", null)
135 execution.setVariable(Prefix + "vpnCount", 0)
136 execution.setVariable(Prefix + "routeCollection", "")
138 // AAI query network policy
139 execution.setVariable(Prefix + "queryNetworkPolicyAAIRequest","")
140 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", "")
141 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "")
142 execution.setVariable(Prefix + "networkPolicyUriList", null)
143 execution.setVariable(Prefix + "networkPolicyCount", 0)
144 execution.setVariable(Prefix + "networkCollection", "")
146 // AAI query route table reference
147 execution.setVariable(Prefix + "queryNetworkTableRefAAIRequest","")
148 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", "")
149 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "")
150 execution.setVariable(Prefix + "networkTableRefUriList", null)
151 execution.setVariable(Prefix + "networkTableRefCount", 0)
152 execution.setVariable(Prefix + "tableRefCollection", "")
155 execution.setVariable(Prefix + "requeryIdAAIRequest","")
156 execution.setVariable(Prefix + "requeryIdAAIResponse", "")
157 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "")
159 // AAI update contrail
160 execution.setVariable(Prefix + "updateContrailAAIUrlRequest","")
161 execution.setVariable(Prefix + "updateContrailAAIPayloadRequest","")
162 execution.setVariable(Prefix + "updateContrailAAIResponse", "")
163 execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", "")
165 execution.setVariable(Prefix + "createNetworkRequest", "")
166 execution.setVariable(Prefix + "createNetworkResponse", "")
167 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
168 //execution.setVariable(Prefix + "rollbackNetworkResponse", "")
169 execution.setVariable(Prefix + "networkReturnCode", "")
170 //execution.setVariable(Prefix + "rollbackNetworkReturnCode", "")
171 execution.setVariable(Prefix + "isNetworkRollbackNeeded", false)
173 execution.setVariable(Prefix + "assignSDNCRequest", "")
174 execution.setVariable(Prefix + "assignSDNCResponse", "")
175 execution.setVariable(Prefix + "rollbackSDNCRequest", "")
176 //execution.setVariable(Prefix + "rollbackSDNCResponse", "")
177 execution.setVariable(Prefix + "sdncReturnCode", "")
178 //execution.setVariable(Prefix + "rollbackSDNCReturnCode", "")
179 execution.setVariable(Prefix + "isSdncRollbackNeeded", false)
180 execution.setVariable(Prefix + "sdncResponseSuccess", false)
182 execution.setVariable(Prefix + "activateSDNCRequest", "")
183 execution.setVariable(Prefix + "activateSDNCResponse", "")
184 execution.setVariable(Prefix + "rollbackActivateSDNCRequest", "")
185 //execution.setVariable(Prefix + "rollbackActivateSDNCResponse", "")
186 execution.setVariable(Prefix + "sdncActivateReturnCode", "")
187 //execution.setVariable(Prefix + "rollbackActivateSDNCReturnCode", "")
188 execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", false)
189 execution.setVariable(Prefix + "sdncActivateResponseSuccess", false)
191 execution.setVariable(Prefix + "orchestrationStatus", "")
192 execution.setVariable(Prefix + "isVnfBindingPresent", false)
193 execution.setVariable(Prefix + "Success", false)
195 execution.setVariable(Prefix + "isException", false)
199 // **************************************************
200 // Pre or Prepare Request Section
201 // **************************************************
203 * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstance.bpmn</class> process.
206 public void preProcessRequest (DelegateExecution execution) {
208 execution.setVariable("prefix",Prefix)
209 logger.trace("Inside preProcessRequest() of " + className + ".groovy")
212 // initialize flow variables
213 InitializeProcessVariables(execution)
215 // GET Incoming request & validate 3 kinds of format.
216 execution.setVariable("action", "CREATE")
217 String networkRequest = execution.getVariable("bpmnRequest")
218 if (networkRequest != null) {
219 if (networkRequest.contains("requestDetails")) {
220 // JSON format request is sent, create xml
222 def prettyJson = JsonOutput.prettyPrint(networkRequest.toString())
223 logger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
224 networkRequest = vidUtils.createXmlNetworkRequestInfra(execution, networkRequest)
226 } catch (Exception ex) {
227 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
228 logger.debug(dataErrorMessage)
229 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
232 // XML format request is sent
236 // vIPR format request is sent, create xml from individual variables
237 networkRequest = vidUtils.createXmlNetworkRequestInstance(execution)
240 networkRequest = utils.formatXml(networkRequest)
241 execution.setVariable(Prefix + "networkRequest", networkRequest)
242 logger.debug(Prefix + "networkRequest - " + '\n' + networkRequest)
244 // validate 'backout-on-failure' to override 'mso.rollback'
245 boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, networkRequest)
246 execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
247 logger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
249 String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
250 execution.setVariable(Prefix + "networkInputs", networkInputs)
251 logger.debug(Prefix + "networkInputs - " + '\n' + networkInputs)
254 String messageId = execution.getVariable("testMessageId") // for testing
255 if (messageId == null || messageId == "") {
256 messageId = UUID.randomUUID()
257 logger.debug(Prefix + "messageId, random generated: " + messageId)
259 logger.debug(Prefix + "messageId, pre-assigned: " + messageId)
261 execution.setVariable(Prefix + "messageId", messageId)
263 String source = utils.getNodeText(networkRequest, "source")
264 execution.setVariable(Prefix + "source", source)
265 logger.debug(Prefix + "source - " + source)
267 // validate cloud region
268 String lcpCloudRegionId = utils.getNodeText(networkRequest, "aic-cloud-region")
269 if ((lcpCloudRegionId == null) || (lcpCloudRegionId == "") || (lcpCloudRegionId == "null")) {
270 String dataErrorMessage = "Missing value/element: 'lcpCloudRegionId' or 'cloudConfiguration' or 'aic-cloud-region'."
271 logger.debug(" Invalid Request - " + dataErrorMessage)
272 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
275 // validate service instance id
276 String serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id")
277 if ((serviceInstanceId == null) || (serviceInstanceId == "") || (serviceInstanceId == "null")) {
278 String dataErrorMessage = "Missing value/element: 'serviceInstanceId'."
279 logger.debug(" Invalid Request - " + dataErrorMessage)
280 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
283 // PO Authorization Info / headers Authorization=
284 String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
287 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey",execution))
288 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
289 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
291 } catch (IOException ex) {
292 String exceptionMessage = "Exception Encountered in DoCreateNetworkInstance, PreProcessRequest() - "
293 String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
294 logger.debug(dataErrorMessage)
295 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
298 // Set variables for Generic Get Sub Flow use
299 execution.setVariable(Prefix + "serviceInstanceId", serviceInstanceId)
300 logger.debug(Prefix + "serviceInstanceId - " + serviceInstanceId)
302 execution.setVariable("GENGS_type", "service-instance")
303 logger.debug("GENGS_type - " + "service-instance")
304 logger.debug(" Url for SDNC adapter: " + UrnPropertiesReader.getVariable("mso.adapters.sdnc.endpoint",execution))
306 String sdncVersion = execution.getVariable("sdncVersion")
307 logger.debug("sdncVersion? : " + sdncVersion)
309 // build 'networkOutputs'
310 String networkId = utils.getNodeText(networkRequest, "network-id")
311 if ((networkId == null) || (networkId == "null")) {
314 String networkName = utils.getNodeText(networkRequest, "network-name")
315 if ((networkName == null) || (networkName == "null")) {
318 String networkOutputs =
320 <network-id>${MsoUtils.xmlEscape(networkId)}</network-id>
321 <network-name>${MsoUtils.xmlEscape(networkName)}</network-name>
322 </network-outputs>"""
323 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
324 logger.debug(Prefix + "networkOutputs - " + '\n' + networkOutputs)
325 execution.setVariable(Prefix + "networkId", networkId)
326 execution.setVariable(Prefix + "networkName", networkName)
328 } catch (BpmnError e) {
331 } catch (Exception ex) {
332 sendSyncError(execution)
334 String exceptionMessage = "Exception Encountered in PreProcessRequest() of " + className + ".groovy ***** : " + ex.getMessage()
335 logger.debug(exceptionMessage)
336 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
343 * Gets the service instance uri from aai
345 public void getServiceInstance(DelegateExecution execution) {
347 String serviceInstanceId = execution.getVariable('CRENWKI_serviceInstanceId')
349 AAIResourcesClient resourceClient = new AAIResourcesClient()
350 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
352 if(!resourceClient.exists(uri)){
353 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service instance was not found in aai")
355 Map<String, String> keys = uri.getURIKeys()
356 execution.setVariable("serviceType", keys.get("service-type"))
357 execution.setVariable("subscriberName", keys.get("global-customer-id"))
360 }catch(BpmnError e) {
362 }catch (Exception ex){
363 String msg = "Exception in getServiceInstance. " + ex.getMessage()
365 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
370 public void callRESTQueryAAINetworkName (DelegateExecution execution) {
372 execution.setVariable("prefix",Prefix)
374 logger.debug(" ***** Inside callRESTQueryAAINetworkName() of DoCreateNetworkInstance ***** " )
378 String networkInputs = execution.getVariable(Prefix + "networkInputs")
379 String networkName = utils.getNodeText(networkInputs, "network-name")
381 AAIResourcesClient client = new AAIResourcesClient()
382 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L3_NETWORK).queryParam("network-name", networkName)
383 L3Networks networks = client.get(uri, NotFoundException.class).asBean(L3Networks.class).get()
384 L3Network network = networks.getL3Network().get(0)
386 execution.setVariable(Prefix + "isAAIqueryNameGood", true)
387 String orchestrationStatus = network.getOrchestrationStatus()
388 execution.setVariable(Prefix + "orchestrationStatus", orchestrationStatus.toUpperCase())
389 logger.debug(Prefix + "orchestrationStatus - " + orchestrationStatus.toUpperCase())
390 execution.setVariable("orchestrationStatus", orchestrationStatus)
392 logger.debug(Prefix + "isAAIqueryNameGood? : " + execution.getVariable(Prefix + "isAAIqueryNameGood"))
394 } catch (NotFoundException e) {
395 logger.debug(" QueryAAINetworkName return code = '404' (Not Found). Proceed with the Create !!! ")
397 } catch (Exception ex) {
399 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow - callRESTQueryAAINetworkName() - " + ex.getMessage()
400 logger.debug(exceptionMessage)
401 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
407 public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
409 execution.setVariable("prefix",Prefix)
411 logger.debug(" ***** Inside callRESTQueryAAICloudRegion() of DoCreateNetworkInstance ***** " )
414 String networkInputs = execution.getVariable(Prefix + "networkInputs")
415 String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
418 AaiUtil aaiUtil = new AaiUtil(this)
420 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, Defaults.CLOUD_OWNER.toString(), cloudRegion)
421 def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
423 execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
425 String cloudRegionPo = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
426 String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "SDNC", cloudRegion)
428 if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
429 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
430 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
431 execution.setVariable(Prefix + "isCloudRegionGood", true)
434 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
435 logger.debug(dataErrorMessage)
436 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
440 logger.debug(" is Cloud Region Good: " + execution.getVariable(Prefix + "isCloudRegionGood"))
442 } catch (BpmnError e) {
445 } catch (Exception ex) {
447 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow - callRESTQueryAAICloudRegion() - " + ex.getMessage()
448 logger.debug(exceptionMessage)
449 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
455 public void callRESTQueryAAINetworkId(DelegateExecution execution) {
457 execution.setVariable("prefix",Prefix)
459 logger.debug(" ***** Inside callRESTQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
463 String networkId = ""
464 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
465 if (execution.getVariable("sdncVersion") != "1610") {
466 String networkResponseInformation = ""
468 networkResponseInformation = utils.getNodeXml(assignSDNCResponse, "network-response-information", false).replace("tag0:","").replace(":tag0","")
469 networkId = utils.getNodeText(networkResponseInformation, "instance-id")
470 } catch (Exception ex) {
471 String dataErrorMessage = " SNDC Response network validation for 'instance-id' (network-id) failed: Empty <network-response-information>"
472 logger.debug(dataErrorMessage)
473 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
477 networkId = utils.getNodeText(assignSDNCResponse, "network-id")
479 if (networkId == null || networkId == "null") {
480 String dataErrorMessage = "SNDC Response did not contains 'instance-id' or 'network-id' element, or the value is null."
481 logger.debug(dataErrorMessage)
482 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
484 logger.debug(" SNDC Response network validation for 'instance-id' (network-id)' is good: " + networkId)
488 execution.setVariable(Prefix + "networkId", networkId)
489 String networkName = utils.getNodeText(assignSDNCResponse, "network-name")
490 execution.setVariable(Prefix + "networkName", networkName)
492 AAIResourcesClient client = new AAIResourcesClient()
493 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
494 L3Network network = client.get(uri, NotFoundException.class).asBean(L3Network.class).get()
496 execution.setVariable(Prefix + "queryIdAAIResponse", network)
498 String netId = network.getNetworkId()
499 execution.setVariable(Prefix + "networkId", netId)
500 String netName = network.getNetworkName()
501 execution.setVariable(Prefix + "networkName", netName)
503 } catch (NotFoundException e) {
504 String dataErrorMessage = "Response Error from QueryAAINetworkId is 404 (Not Found)."
505 logger.debug(" AAI Query Failed. " + dataErrorMessage)
506 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
508 } catch (Exception ex) {
509 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkId() - " + ex.getMessage()
510 logger.debug(exceptionMessage)
511 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
517 public void callRESTReQueryAAINetworkId(DelegateExecution execution) {
519 execution.setVariable("prefix",Prefix)
521 logger.debug(" ***** Inside callRESTReQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
525 String networkId = execution.getVariable(Prefix + "networkId")
526 String netId = networkId
528 AAIResourcesClient client = new AAIResourcesClient()
529 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
530 L3Network network = client.get(uri, NotFoundException.class).asBean(L3Network.class).get()
532 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "200")
533 execution.setVariable(Prefix + "requeryIdAAIResponse", network)
535 String netName = network.getNetworkName()
536 String networkOutputs =
538 <network-id>${MsoUtils.xmlEscape(netId)}</network-id>
539 <network-name>${MsoUtils.xmlEscape(netName)}</network-name>
540 </network-outputs>"""
541 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
542 logger.debug(" networkOutputs - " + '\n' + networkOutputs)
545 } catch (NotFoundException e) {
546 String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
547 logger.debug(" AAI ReQuery Failed. - " + dataErrorMessage)
548 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
550 } catch (Exception ex) {
551 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTReQueryAAINetworkId() - " + ex.getMessage()
552 logger.debug(exceptionMessage)
553 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
559 public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
561 execution.setVariable("prefix",Prefix)
563 logger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding() of DoCreateNetworkInstance ***** " )
567 AAIResourcesClient client = new AAIResourcesClient()
568 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
569 Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
570 if(relationships.isPresent()){
571 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.VPN_BINDING)
573 logger.debug(Prefix + "vpnCount - " + uris.size())
575 if (uris.size() > 0) {
576 String routeTargets = ""
577 for(AAIResourceUri u : uris) {
579 AAIResultWrapper wrapper = client.get(u.depth(Depth.TWO), NotFoundException.class)
580 Optional<VpnBinding> binding = wrapper.asBean(VpnBinding.class)
582 String routeTarget = ""
583 String routeRole = ""
584 if(binding.get().getRouteTargets() != null) {
585 List<RouteTarget> targets = binding.get().getRouteTargets().getRouteTarget()
586 for(RouteTarget target : targets) {
587 routeTarget = target.getGlobalRouteTarget()
588 routeRole = target.getRouteTargetRole()
589 routeTargets += "<routeTargets>" + '\n' +
590 " <routeTarget>" + routeTarget + "</routeTarget>" + '\n' +
591 " <routeTargetRole>" + routeRole + "</routeTargetRole>" + '\n' +
592 "</routeTargets>" + '\n'
598 execution.setVariable(Prefix + "routeCollection", routeTargets)
599 logger.debug(Prefix + "routeCollection - " + '\n' + routeTargets)
602 // reset return code to success
603 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
604 AaiUtil aaiUriUtil = new AaiUtil(this)
605 String schemaVersion = aaiUriUtil.getNamespace()
606 String aaiStubResponse =
607 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
608 <vpn-binding xmlns="${schemaVersion}">
609 <global-route-target/>
612 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
613 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiStubResponseAsXml)
614 execution.setVariable(Prefix + "routeCollection", "<routeTargets/>")
615 logger.debug(" No vpnBinding, using this stub as response - " + '\n' + aaiStubResponseAsXml)
620 } catch (NotFoundException e) {
621 logger.debug("Response Error from AAINetworkVpnBinding is 404 (Not Found).")
622 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Response Error from AAINetworkVpnBinding is 404 (Not Found).")
623 } catch (Exception ex) {
624 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkVpnBinding() - " + ex.getMessage()
625 logger.debug(exceptionMessage)
626 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
632 public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
634 execution.setVariable("prefix",Prefix)
636 logger.debug(" ***** Inside callRESTQueryAAINetworkPolicy() of DoCreateNetworkInstance ***** " )
639 AAIResourcesClient client = new AAIResourcesClient()
640 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
641 Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
642 if(relationships.isPresent()){
643 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.NETWORK_POLICY)
645 execution.setVariable(Prefix + "networkPolicyCount", uris.size())
646 logger.debug(Prefix + "networkPolicyCount - " + uris.size())
648 if (uris.size() > 0) {
650 String networkPolicies = ""
651 // AII loop call using list vpnBindings
652 for(AAIResourceUri u : uris) {
654 NetworkPolicy p = client.get(u, NotFoundException.class).asBean(NetworkPolicy.class).get()
656 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
658 String networkPolicy = p.getNetworkPolicyFqdn()
659 networkPolicies += "<policyFqdns>" + networkPolicy + "</policyFqdns>" + '\n'
663 execution.setVariable(Prefix + "networkCollection", networkPolicies)
664 logger.debug(Prefix + "networkCollection - " + '\n' + networkPolicies)
667 // reset return code to success
668 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
669 AaiUtil aaiUriUtil = new AaiUtil(this)
670 String schemaVersion = aaiUriUtil.getNamespace()
671 String aaiStubResponse =
672 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
673 <network-policy xmlns="${schemaVersion}">
674 <network-policy-fqdn/>
677 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
678 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiStubResponseAsXml)
679 execution.setVariable(Prefix + "networkCollection", "<policyFqdns/>")
680 logger.debug(" No net policies, using this stub as response - " + '\n' + aaiStubResponseAsXml)
684 } catch (NotFoundException e) {
685 String dataErrorMessage = "Response Error from QueryAAINetworkPolicy is 404 (Not Found)."
686 logger.debug(dataErrorMessage)
687 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
689 } catch (Exception ex) {
690 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkPolicy() - " + ex.getMessage()
691 logger.debug(exceptionMessage)
692 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
698 public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
700 execution.setVariable("prefix",Prefix)
702 logger.debug(" ***** Inside callRESTQueryAAINetworkTableRef() of DoCreateNetworkInstance ***** " )
706 AAIResourcesClient client = new AAIResourcesClient()
707 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
708 Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
709 if(relationships.isPresent()){
710 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.ROUTE_TABLE_REFERENCE)
712 execution.setVariable(Prefix + "networkTableRefCount", uris.size())
713 logger.debug(Prefix + "networkTableRefCount - " + uris.size())
716 if (uris.size() > 0) {
718 // AII loop call using list vpnBindings
719 String networkTableRefs = ""
720 for(AAIResourceUri u : uris) {
722 RouteTableReference rt = client.get(u, NotFoundException.class).asBean(RouteTableReference.class).get()
724 String networkTableRef = rt.getRouteTableReferenceFqdn()
725 networkTableRefs += "<routeTableFqdns>" + networkTableRef + "</routeTableFqdns>" + '\n'
730 execution.setVariable(Prefix + "tableRefCollection", networkTableRefs)
731 logger.debug(Prefix + "tableRefCollection - " + '\n' + networkTableRefs)
734 // reset return code to success
735 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
736 AaiUtil aaiUriUtil = new AaiUtil(this)
737 String schemaVersion = aaiUriUtil.getNamespace()
738 String aaiStubResponse =
739 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
740 <route-table-references xmlns="${schemaVersion}">
741 <route-table-reference-fqdn/>
742 </route-table-references>
744 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
745 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiStubResponseAsXml)
746 execution.setVariable(Prefix + "tableRefCollection", "<routeTableFqdns/>")
747 logger.debug(" No net table references, using this stub as response - " + '\n' + aaiStubResponseAsXml)
752 } catch (NotFoundException e) {
753 String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
754 logger.debug(dataErrorMessage)
755 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
757 } catch (Exception ex) {
758 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
759 logger.debug(exceptionMessage)
760 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
767 public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
769 execution.setVariable("prefix",Prefix)
771 logger.trace(" ***** Inside callRESTUpdateContrailAAINetwork() of DoCreateNetworkInstance ***** " )
775 String networkId = execution.getVariable(Prefix + "networkId")
776 L3Network requeryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
777 String createNetworkResponse = execution.getVariable(Prefix + "createNetworkResponse")
779 L3Network l3Network = new L3Network()
780 if (StringUtils.isBlank(requeryIdAAIResponse.getHeatStackId())) {
781 if (utils.nodeExists(createNetworkResponse, 'networkStackId')) {
782 l3Network.setHeatStackId(utils.getNodeText(createNetworkResponse, 'networkStackId'))
785 if (StringUtils.isBlank(requeryIdAAIResponse.getNeutronNetworkId())) {
786 if (utils.nodeExists(createNetworkResponse, 'neutronNetworkId')) {
787 l3Network.setNeutronNetworkId(utils.getNodeText(createNetworkResponse, 'neutronNetworkId'))
790 if (StringUtils.isBlank(requeryIdAAIResponse.getContrailNetworkFqdn())) {
791 if (utils.nodeExists(createNetworkResponse, 'networkFqdn')) {
792 l3Network.setContrailNetworkFqdn(utils.getNodeText(createNetworkResponse, 'networkFqdn'))
796 String status = utils.getNodeText(createNetworkResponse, 'orchestration-status')
797 if(status.equals("pending-create") || status.equals("PendingCreate")){
798 l3Network.setOrchestrationStatus("Created")
800 l3Network.setOrchestrationStatus("Active")
803 logger.debug("Updating l3-network in AAI" )
805 AAIResourcesClient client = new AAIResourcesClient()
806 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId)
807 client.update(uri, l3Network)
809 if(requeryIdAAIResponse.getSubnets() != null){
810 for(Subnet s:requeryIdAAIResponse.getSubnets().getSubnet()){
811 String subnetOrchStatus = s.getOrchestrationStatus()
812 String subnetId = s.getSubnetId()
813 Subnet subnet = new Subnet()
814 subnet.setNeutronSubnetId(networkUtils.extractNeutSubId(createNetworkResponse, subnetId))
815 if(subnetOrchStatus.equals("pending-create") || subnetOrchStatus.equals("PendingCreate") ){
816 subnet.setOrchestrationStatus("Created")
818 subnet.setOrchestrationStatus("Active")
821 logger.debug("Updating subnet in AAI" )
822 AAIResourceUri subUri = AAIUriFactory.createResourceUri(AAIObjectType.SUBNET, networkId, subnetId)
823 client.update(subUri, subnet)
828 String rollbackEnabled = execution.getVariable(Prefix + "rollbackEnabled")
829 if (rollbackEnabled == "true") {
830 execution.setVariable(Prefix + "isPONR", false)
832 execution.setVariable(Prefix + "isPONR", true)
834 logger.debug(Prefix + "isPONR" + ": " + execution.getVariable(Prefix + "isPONR"))
836 } catch (BpmnError e) {
838 } catch (NotFoundException e) {
839 String dataErrorMessage = " Response Error from UpdateContrailAAINetwork is 404 (Not Found)."
840 logger.debug(dataErrorMessage)
841 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
842 } catch (Exception ex) {
843 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTUpdateContrailAAINetwork() - " + ex.getMessage()
844 logger.debug(exceptionMessage)
845 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
849 public void prepareCreateNetworkRequest (DelegateExecution execution) {
851 execution.setVariable("prefix",Prefix)
853 logger.trace("Inside prepareCreateNetworkRequest() of DoCreateNetworkInstance")
858 String requestId = execution.getVariable("msoRequestId")
859 if (requestId == null) {
860 requestId = execution.getVariable("mso-request-id")
862 String messageId = execution.getVariable(Prefix + "messageId")
863 String source = execution.getVariable(Prefix + "source")
865 String requestInput = execution.getVariable(Prefix + "networkRequest")
866 L3Network queryIdResponse = execution.getVariable(Prefix + "queryIdAAIResponse")
867 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
868 String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
870 // Prepare Network request
871 String routeCollection = execution.getVariable(Prefix + "routeCollection")
872 String policyCollection = execution.getVariable(Prefix + "networkCollection")
873 String tableCollection = execution.getVariable(Prefix + "tableRefCollection")
874 String createNetworkRequest = networkUtils.CreateNetworkRequestV2(execution, requestId, messageId, requestInput, queryIdResponse, routeCollection, policyCollection, tableCollection, cloudRegionId, backoutOnFailure, source )
876 String buildDeleteNetworkRequestAsString = utils.formatXml(createNetworkRequest)
877 buildDeleteNetworkRequestAsString = buildDeleteNetworkRequestAsString.replace(":w1aac13n0", "").replace("w1aac13n0:", "")
879 execution.setVariable(Prefix + "createNetworkRequest", buildDeleteNetworkRequestAsString)
880 logger.debug(Prefix + "createNetworkRequest - " + "\n" + buildDeleteNetworkRequestAsString)
882 } catch (Exception ex) {
883 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareCreateNetworkRequest() - " + ex.getMessage()
884 logger.debug(exceptionMessage)
885 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
891 public void prepareSDNCRequest (DelegateExecution execution) {
893 execution.setVariable("prefix",Prefix)
895 logger.trace("Inside prepareSDNCRequest() of DoCreateNetworkInstance")
899 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
900 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
901 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
903 String networkId = execution.getVariable(Prefix + "networkId")
904 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
906 // get/set 'msoRequestId' and 'mso-request-id'
907 String requestId = execution.getVariable("msoRequestId")
908 if (requestId != null) {
909 execution.setVariable("mso-request-id", requestId)
911 requestId = execution.getVariable("mso-request-id")
913 execution.setVariable(Prefix + "requestId", requestId)
915 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
916 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
918 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
919 execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
920 logger.debug(Prefix + "assignSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
923 } catch (Exception ex) {
924 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRequest() - " + ex.getMessage()
925 logger.debug(exceptionMessage)
926 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
932 public void prepareRpcSDNCRequest (DelegateExecution execution) {
934 execution.setVariable("prefix",Prefix)
936 logger.trace("Inside prepareRpcSDNCRequest() of DoCreateNetworkInstance")
941 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
942 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
943 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
945 String networkId = execution.getVariable(Prefix + "networkId")
946 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
948 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
949 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
951 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
952 execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
953 logger.debug(Prefix + "assignSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
955 } catch (Exception ex) {
956 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRequest() - " + ex.getMessage()
957 logger.debug(exceptionMessage)
958 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
964 public void prepareRpcSDNCActivateRequest (DelegateExecution execution) {
966 execution.setVariable("prefix",Prefix)
968 logger.trace("Inside prepareRpcSDNCActivateRequest() of DoCreateNetworkInstance")
972 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
973 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
974 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
975 String networkId = execution.getVariable(Prefix + "networkId")
976 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
978 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
979 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
981 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
982 execution.setVariable(Prefix + "activateSDNCRequest", sndcTopologyCreateRequesAsString)
983 logger.debug(Prefix + "activateSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
986 } catch (Exception ex) {
987 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRequest() - " + ex.getMessage()
988 logger.debug(exceptionMessage)
989 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
998 // **************************************************
999 // Post or Validate Response Section
1000 // **************************************************
1002 public void validateCreateNetworkResponse (DelegateExecution execution) {
1004 execution.setVariable("prefix",Prefix)
1006 logger.trace("Inside validateNetworkResponse() of DoCreateNetworkInstance")
1009 String returnCode = execution.getVariable(Prefix + "networkReturnCode")
1010 String networkResponse = execution.getVariable(Prefix + "createNetworkResponse")
1011 if (networkResponse==null) {
1012 networkResponse="" // reset
1015 logger.debug(" Network Adapter create responseCode: " + returnCode)
1017 String errorMessage = ""
1018 if (returnCode == "200") {
1019 execution.setVariable(Prefix + "isNetworkRollbackNeeded", true)
1020 execution.setVariable(Prefix + "createNetworkResponse", networkResponse)
1021 logger.debug(" Network Adapter create Success Response - " + "\n" + networkResponse)
1023 // prepare rollback data
1024 String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
1025 rollbackData = rollbackData.replace("rollback>", "networkRollback>")
1026 String rollbackNetwork =
1027 """<rollbackNetworkRequest>
1029 </rollbackNetworkRequest>"""
1030 String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
1031 execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
1032 logger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
1034 } else { // network error
1035 if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) { //4xx, 5xx
1036 if (networkResponse.contains("createNetworkError")) {
1037 networkResponse = networkResponse.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '')
1038 errorMessage = utils.getNodeText(networkResponse, "message")
1039 errorMessage = "Received error from Network Adapter: " + errorMessage
1040 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
1042 } else { // CatchAll exception
1043 if (returnCode == "500") {
1044 errorMessage = "JBWEB000065: HTTP Status 500."
1046 errorMessage = "Return code is " + returnCode
1048 errorMessage = "Received error from Network Adapter: " + errorMessage
1049 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
1053 } else { // CatchAll exception
1054 String dataErrorMessage = "Received error from Network Adapter. Return code is: " + returnCode
1055 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
1061 } catch (BpmnError e) {
1064 } catch (Exception ex) {
1065 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. validateCreateNetworkResponse() - " + ex.getMessage()
1066 logger.debug(exceptionMessage)
1067 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1074 public void validateSDNCResponse (DelegateExecution execution) {
1076 execution.setVariable("prefix",Prefix)
1078 logger.trace("Inside validateSDNCResponse() of DoCreateNetworkInstance")
1080 String response = execution.getVariable(Prefix + "assignSDNCResponse")
1081 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1082 WorkflowException workflowException = execution.getVariable("WorkflowException")
1084 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
1085 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1087 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "assignSDNCResponse")
1088 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1089 execution.setVariable(Prefix + "assignSDNCResponse", assignSDNCResponseDecodeXml)
1091 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
1092 execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
1093 logger.debug("Successfully Validated SDNC Response")
1096 logger.debug("Did NOT Successfully Validated SDNC Response")
1097 throw new BpmnError("MSOWorkflowException")
1102 public void validateRpcSDNCActivateResponse (DelegateExecution execution) {
1104 execution.setVariable("prefix",Prefix)
1106 logger.trace("Inside validateRpcSDNCActivateResponse() of DoCreateNetworkInstance")
1108 String response = execution.getVariable(Prefix + "activateSDNCResponse")
1109 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1110 WorkflowException workflowException = execution.getVariable("WorkflowException")
1112 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
1113 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1115 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "activateSDNCResponse")
1116 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1117 execution.setVariable(Prefix + "activateSDNCResponse", assignSDNCResponseDecodeXml)
1119 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
1120 execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", true)
1121 logger.debug("Successfully Validated Rpc SDNC Activate Response")
1124 logger.debug("Did NOT Successfully Validated Rpc SDNC Activate Response")
1125 throw new BpmnError("MSOWorkflowException")
1131 public void prepareSDNCRollbackRequest (DelegateExecution execution) {
1133 execution.setVariable("prefix",Prefix)
1135 logger.trace("Inside prepareSDNCRollbackRequest() of DoCreateNetworkInstance")
1139 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1140 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1141 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1142 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1143 String networkId = execution.getVariable(Prefix + "networkId")
1144 if (networkId == 'null') {networkId = ""}
1145 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1147 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1148 String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
1149 String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
1150 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
1151 logger.debug(" Preparing request for SDNC Topology 'rollback-NetworkActivateRequest' rollback . . . - " + "\n" + sndcTopologyRollbackRequestAsString)
1154 } catch (Exception ex) {
1155 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
1156 logger.debug(exceptionMessage)
1157 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1163 public void prepareRpcSDNCRollbackRequest (DelegateExecution execution) {
1165 execution.setVariable("prefix",Prefix)
1167 logger.trace("Inside prepareRpcSDNCRollbackRequest() of DoCreateNetworkInstance")
1171 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1172 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1173 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1174 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1175 String networkId = execution.getVariable(Prefix + "networkId")
1176 if (networkId == 'null') {networkId = ""}
1177 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1179 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1180 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1181 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1182 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1183 logger.debug(" Preparing request for SDNC Topology 'unassign-DeleteNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
1186 } catch (Exception ex) {
1187 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRollbackRequest() - " + ex.getMessage()
1188 logger.debug(exceptionMessage)
1189 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1195 public void prepareRpcSDNCActivateRollback(DelegateExecution execution) {
1197 execution.setVariable("prefix",Prefix)
1199 logger.trace("Inside prepareRpcSDNCActivateRollback() of DoCreateNetworkInstance")
1204 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1205 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1206 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1207 String activateSDNCResponse = execution.getVariable(Prefix + "activateSDNCResponse")
1208 String networkId = execution.getVariable(Prefix + "networkId")
1209 if (networkId == 'null') {networkId = ""}
1210 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1212 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1213 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1214 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1215 execution.setVariable(Prefix + "rollbackActivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1216 logger.debug(" Preparing request for RPC SDNC Topology 'deactivate-DeleteNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
1219 } catch (Exception ex) {
1220 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
1221 logger.debug(exceptionMessage)
1222 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1228 public void prepareRollbackData(DelegateExecution execution) {
1230 execution.setVariable("prefix",Prefix)
1232 logger.trace("Inside prepareRollbackData() of DoCreateNetworkInstance")
1236 Map<String, String> rollbackData = new HashMap<String, String>();
1237 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1238 if (rollbackSDNCRequest != null) {
1239 if (rollbackSDNCRequest != "") {
1240 rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
1243 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1244 if (rollbackNetworkRequest != null) {
1245 if (rollbackNetworkRequest != "") {
1246 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
1249 String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1250 if (rollbackActivateSDNCRequest != null) {
1251 if (rollbackActivateSDNCRequest != "") {
1252 rollbackData.put("rollbackActivateSDNCRequest", execution.getVariable(Prefix + "rollbackActivateSDNCRequest"))
1255 execution.setVariable("rollbackData", rollbackData)
1256 logger.debug("** rollbackData : " + rollbackData)
1258 execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
1259 logger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
1261 } catch (Exception ex) {
1262 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
1263 logger.debug(exceptionMessage)
1264 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1270 public void postProcessResponse(DelegateExecution execution) {
1272 execution.setVariable("prefix",Prefix)
1274 logger.trace("Inside postProcessResponse() of DoCreateNetworkInstance")
1279 // 1. Silent Success: execution.getVariable("CRENWKI_orchestrationStatus") == "ACTIVE"
1280 // 2. Success: execution.getVariable("WorkflowException") == null (NULL)
1281 // 3. WorkflowException: execution.getVariable("WorkflowException") != null (NOT NULL)
1283 logger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
1285 if (execution.getVariable(Prefix + "isException") == false) {
1286 // set rollback data
1287 execution.setVariable("orchestrationStatus", "")
1288 execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
1289 execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
1290 prepareSuccessRollbackData(execution) // populate rollbackData
1291 execution.setVariable("WorkflowException", null)
1292 execution.setVariable(Prefix + "Success", true)
1293 logger.debug(" ***** postProcessResponse(), GOOD !!!")
1295 // inside sub-flow logic
1296 execution.setVariable(Prefix + "Success", false)
1297 execution.setVariable("rollbackData", null)
1298 String exceptionMessage = " Exception encountered in MSO Bpmn. "
1299 if (execution.getVariable("workflowException") != null) { // Output of Rollback flow.
1300 logger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
1301 WorkflowException wfex = execution.getVariable("workflowException")
1302 exceptionMessage = wfex.getErrorMessage()
1304 if (execution.getVariable(Prefix + "WorkflowException") != null) {
1305 WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
1306 exceptionMessage = pwfex.getErrorMessage()
1309 // going to the Main flow: a-la-carte or macro
1310 logger.debug(" ***** postProcessResponse(), BAD !!!")
1311 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1312 throw new BpmnError("MSOWorkflowException")
1315 } catch(BpmnError b){
1316 logger.debug("Rethrowing MSOWorkflowException")
1319 } catch (Exception ex) {
1320 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
1321 logger.debug(exceptionMessage)
1322 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1323 throw new BpmnError("MSOWorkflowException")
1331 public void prepareSuccessRollbackData(DelegateExecution execution) {
1333 execution.setVariable("prefix",Prefix)
1335 logger.trace("Inside prepareSuccessRollbackData() of DoCreateNetworkInstance")
1339 if (execution.getVariable("sdncVersion") != '1610') {
1340 prepareRpcSDNCRollbackRequest(execution)
1341 prepareRpcSDNCActivateRollback(execution)
1343 prepareSDNCRollbackRequest(execution)
1346 Map<String, String> rollbackData = new HashMap<String, String>();
1347 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1348 if (rollbackSDNCRequest != null) {
1349 if (rollbackSDNCRequest != "") {
1350 rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
1353 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1354 if (rollbackNetworkRequest != null) {
1355 if (rollbackNetworkRequest != "") {
1356 rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
1359 String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1360 if (rollbackActivateSDNCRequest != null) {
1361 if (rollbackActivateSDNCRequest != "") {
1362 rollbackData.put("rollbackActivateSDNCRequest", rollbackActivateSDNCRequest)
1365 execution.setVariable("rollbackData", rollbackData)
1367 logger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
1368 execution.setVariable("WorkflowException", null)
1371 } catch (Exception ex) {
1372 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
1373 logger.debug(exceptionMessage)
1374 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1380 public void setExceptionFlag(DelegateExecution execution){
1382 execution.setVariable("prefix",Prefix)
1384 logger.trace("Inside setExceptionFlag() of DoCreateNetworkInstance")
1388 execution.setVariable(Prefix + "isException", true)
1390 if (execution.getVariable("SavedWorkflowException1") != null) {
1391 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1393 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1395 logger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1397 } catch(Exception ex){
1398 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1399 logger.debug(exceptionMessage)
1400 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1406 // *******************************
1407 // Build Error Section
1408 // *******************************
1412 public void processJavaException(DelegateExecution execution){
1414 execution.setVariable("prefix",Prefix)
1417 logger.debug( "Caught a Java Exception in " + Prefix)
1418 logger.debug("Started processJavaException Method")
1419 logger.debug("Variables List: " + execution.getVariables())
1420 execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1421 exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1423 }catch(Exception e){
1424 logger.debug("Caught Exception during processJavaException Method: " + e)
1425 execution.setVariable("UnexpectedError", "Exception in processJavaException method - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1426 exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method" + Prefix)
1428 logger.debug( "Completed processJavaException Method in " + Prefix)