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.AAIPluralResourceUri
45 import org.onap.so.client.aai.entities.uri.AAIResourceUri
46 import org.onap.so.client.aai.entities.uri.AAIUriFactory
47 import org.onap.so.client.aai.entities.AAIResultWrapper
48 import org.onap.so.client.aai.entities.Relationships
49 import org.onap.so.client.graphinventory.entities.uri.Depth
50 import org.onap.so.constants.Defaults
51 import org.slf4j.Logger
52 import org.slf4j.LoggerFactory
53 import org.springframework.web.util.UriUtils
54 import org.w3c.dom.Document
55 import org.w3c.dom.Element
56 import org.w3c.dom.NamedNodeMap
57 import org.w3c.dom.Node
58 import org.w3c.dom.NodeList;
59 import org.xml.sax.InputSource
60 import org.onap.aai.domain.yang.VpnBinding
61 import org.onap.aai.domain.yang.L3Network
62 import org.onap.aai.domain.yang.L3Networks
63 import org.onap.aai.domain.yang.NetworkPolicy
64 import org.onap.aai.domain.yang.RouteTableReference
65 import org.onap.aai.domain.yang.RouteTarget
66 import org.onap.aai.domain.yang.Subnet
67 import com.fasterxml.jackson.jaxrs.util.EndpointAsBeanProperty
69 import javax.ws.rs.NotFoundException
72 import groovy.xml.XmlUtil
75 * This groovy class supports the <class>DoCreateNetworkInstance.bpmn</class> process.
78 public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor {
79 private static final Logger logger = LoggerFactory.getLogger( DoCreateNetworkInstance.class);
81 String Prefix="CRENWKI_"
82 ExceptionUtil exceptionUtil = new ExceptionUtil()
83 JsonUtils jsonUtil = new JsonUtils()
84 VidUtils vidUtils = new VidUtils(this)
85 NetworkUtils networkUtils = new NetworkUtils()
86 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
88 def className = getClass().getSimpleName()
91 * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstance.bpmn</class> process.
94 public InitializeProcessVariables(DelegateExecution execution){
95 /* Initialize all the process variables in this block */
97 execution.setVariable(Prefix + "networkRequest", "")
98 execution.setVariable(Prefix + "rollbackEnabled", null)
99 execution.setVariable(Prefix + "networkInputs", "")
100 //execution.setVariable(Prefix + "requestId", "")
101 execution.setVariable(Prefix + "messageId", "")
102 execution.setVariable(Prefix + "source", "")
103 execution.setVariable("BasicAuthHeaderValuePO", "")
104 execution.setVariable("BasicAuthHeaderValueSDNC", "")
105 execution.setVariable(Prefix + "serviceInstanceId","")
106 execution.setVariable("GENGS_type", "")
107 execution.setVariable(Prefix + "rsrc_endpoint", null)
108 execution.setVariable(Prefix + "networkOutputs", "")
109 execution.setVariable(Prefix + "networkId","")
110 execution.setVariable(Prefix + "networkName","")
113 execution.setVariable(Prefix + "queryNameAAIRequest","")
114 execution.setVariable(Prefix + "queryNameAAIResponse", "")
115 execution.setVariable(Prefix + "aaiNameReturnCode", "")
116 execution.setVariable(Prefix + "isAAIqueryNameGood", false)
118 // AAI query Cloud Region
119 execution.setVariable(Prefix + "queryCloudRegionRequest","")
120 execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
121 execution.setVariable(Prefix + "queryCloudRegionResponse","")
122 execution.setVariable(Prefix + "cloudRegionPo","")
123 execution.setVariable(Prefix + "cloudRegionSdnc","")
124 execution.setVariable(Prefix + "isCloudRegionGood", false)
127 execution.setVariable(Prefix + "queryIdAAIRequest","")
128 execution.setVariable(Prefix + "queryIdAAIResponse", "")
129 execution.setVariable(Prefix + "aaiIdReturnCode", "")
131 // AAI query vpn binding
132 execution.setVariable(Prefix + "queryVpnBindingAAIRequest","")
133 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", "")
134 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "")
135 execution.setVariable(Prefix + "vpnBindings", null)
136 execution.setVariable(Prefix + "vpnCount", 0)
137 execution.setVariable(Prefix + "routeCollection", "")
139 // AAI query network policy
140 execution.setVariable(Prefix + "queryNetworkPolicyAAIRequest","")
141 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", "")
142 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "")
143 execution.setVariable(Prefix + "networkPolicyUriList", null)
144 execution.setVariable(Prefix + "networkPolicyCount", 0)
145 execution.setVariable(Prefix + "networkCollection", "")
147 // AAI query route table reference
148 execution.setVariable(Prefix + "queryNetworkTableRefAAIRequest","")
149 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", "")
150 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "")
151 execution.setVariable(Prefix + "networkTableRefUriList", null)
152 execution.setVariable(Prefix + "networkTableRefCount", 0)
153 execution.setVariable(Prefix + "tableRefCollection", "")
156 execution.setVariable(Prefix + "requeryIdAAIRequest","")
157 execution.setVariable(Prefix + "requeryIdAAIResponse", "")
158 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "")
160 // AAI update contrail
161 execution.setVariable(Prefix + "updateContrailAAIUrlRequest","")
162 execution.setVariable(Prefix + "updateContrailAAIPayloadRequest","")
163 execution.setVariable(Prefix + "updateContrailAAIResponse", "")
164 execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", "")
166 execution.setVariable(Prefix + "createNetworkRequest", "")
167 execution.setVariable(Prefix + "createNetworkResponse", "")
168 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
169 //execution.setVariable(Prefix + "rollbackNetworkResponse", "")
170 execution.setVariable(Prefix + "networkReturnCode", "")
171 //execution.setVariable(Prefix + "rollbackNetworkReturnCode", "")
172 execution.setVariable(Prefix + "isNetworkRollbackNeeded", false)
174 execution.setVariable(Prefix + "assignSDNCRequest", "")
175 execution.setVariable(Prefix + "assignSDNCResponse", "")
176 execution.setVariable(Prefix + "rollbackSDNCRequest", "")
177 //execution.setVariable(Prefix + "rollbackSDNCResponse", "")
178 execution.setVariable(Prefix + "sdncReturnCode", "")
179 //execution.setVariable(Prefix + "rollbackSDNCReturnCode", "")
180 execution.setVariable(Prefix + "isSdncRollbackNeeded", false)
181 execution.setVariable(Prefix + "sdncResponseSuccess", false)
183 execution.setVariable(Prefix + "activateSDNCRequest", "")
184 execution.setVariable(Prefix + "activateSDNCResponse", "")
185 execution.setVariable(Prefix + "rollbackActivateSDNCRequest", "")
186 //execution.setVariable(Prefix + "rollbackActivateSDNCResponse", "")
187 execution.setVariable(Prefix + "sdncActivateReturnCode", "")
188 //execution.setVariable(Prefix + "rollbackActivateSDNCReturnCode", "")
189 execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", false)
190 execution.setVariable(Prefix + "sdncActivateResponseSuccess", false)
192 execution.setVariable(Prefix + "orchestrationStatus", "")
193 execution.setVariable(Prefix + "isVnfBindingPresent", false)
194 execution.setVariable(Prefix + "Success", false)
196 execution.setVariable(Prefix + "isException", false)
200 // **************************************************
201 // Pre or Prepare Request Section
202 // **************************************************
204 * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstance.bpmn</class> process.
207 public void preProcessRequest (DelegateExecution execution) {
209 execution.setVariable("prefix",Prefix)
210 logger.trace("Inside preProcessRequest() of " + className + ".groovy")
213 // initialize flow variables
214 InitializeProcessVariables(execution)
216 // GET Incoming request & validate 3 kinds of format.
217 execution.setVariable("action", "CREATE")
218 String networkRequest = execution.getVariable("bpmnRequest")
219 if (networkRequest != null) {
220 if (networkRequest.contains("requestDetails")) {
221 // JSON format request is sent, create xml
223 def prettyJson = JsonOutput.prettyPrint(networkRequest.toString())
224 logger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
225 networkRequest = vidUtils.createXmlNetworkRequestInfra(execution, networkRequest)
227 } catch (Exception ex) {
228 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
229 logger.debug(dataErrorMessage)
230 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
233 // XML format request is sent
237 // vIPR format request is sent, create xml from individual variables
238 networkRequest = vidUtils.createXmlNetworkRequestInstance(execution)
241 networkRequest = utils.formatXml(networkRequest)
242 execution.setVariable(Prefix + "networkRequest", networkRequest)
243 logger.debug(Prefix + "networkRequest - " + '\n' + networkRequest)
245 // validate 'backout-on-failure' to override 'mso.rollback'
246 boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, networkRequest)
247 execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
248 logger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
250 String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
251 execution.setVariable(Prefix + "networkInputs", networkInputs)
252 logger.debug(Prefix + "networkInputs - " + '\n' + networkInputs)
255 String messageId = execution.getVariable("testMessageId") // for testing
256 if (messageId == null || messageId == "") {
257 messageId = UUID.randomUUID()
258 logger.debug(Prefix + "messageId, random generated: " + messageId)
260 logger.debug(Prefix + "messageId, pre-assigned: " + messageId)
262 execution.setVariable(Prefix + "messageId", messageId)
264 String source = utils.getNodeText(networkRequest, "source")
265 execution.setVariable(Prefix + "source", source)
266 logger.debug(Prefix + "source - " + source)
268 // validate cloud region
269 String lcpCloudRegionId = utils.getNodeText(networkRequest, "aic-cloud-region")
270 if ((lcpCloudRegionId == null) || (lcpCloudRegionId == "") || (lcpCloudRegionId == "null")) {
271 String dataErrorMessage = "Missing value/element: 'lcpCloudRegionId' or 'cloudConfiguration' or 'aic-cloud-region'."
272 logger.debug(" Invalid Request - " + dataErrorMessage)
273 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
276 // validate service instance id
277 String serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id")
278 if ((serviceInstanceId == null) || (serviceInstanceId == "") || (serviceInstanceId == "null")) {
279 String dataErrorMessage = "Missing value/element: 'serviceInstanceId'."
280 logger.debug(" Invalid Request - " + dataErrorMessage)
281 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
284 // PO Authorization Info / headers Authorization=
285 String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
288 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey",execution))
289 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
290 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
292 } catch (IOException ex) {
293 String exceptionMessage = "Exception Encountered in DoCreateNetworkInstance, PreProcessRequest() - "
294 String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
295 logger.debug(dataErrorMessage)
296 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
299 // Set variables for Generic Get Sub Flow use
300 execution.setVariable(Prefix + "serviceInstanceId", serviceInstanceId)
301 logger.debug(Prefix + "serviceInstanceId - " + serviceInstanceId)
303 execution.setVariable("GENGS_type", "service-instance")
304 logger.debug("GENGS_type - " + "service-instance")
305 logger.debug(" Url for SDNC adapter: " + UrnPropertiesReader.getVariable("mso.adapters.sdnc.endpoint",execution))
307 String sdncVersion = execution.getVariable("sdncVersion")
308 logger.debug("sdncVersion? : " + sdncVersion)
310 // build 'networkOutputs'
311 String networkId = utils.getNodeText(networkRequest, "network-id")
312 if ((networkId == null) || (networkId == "null")) {
315 String networkName = utils.getNodeText(networkRequest, "network-name")
316 if ((networkName == null) || (networkName == "null")) {
319 String networkOutputs =
321 <network-id>${MsoUtils.xmlEscape(networkId)}</network-id>
322 <network-name>${MsoUtils.xmlEscape(networkName)}</network-name>
323 </network-outputs>"""
324 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
325 logger.debug(Prefix + "networkOutputs - " + '\n' + networkOutputs)
326 execution.setVariable(Prefix + "networkId", networkId)
327 execution.setVariable(Prefix + "networkName", networkName)
329 } catch (BpmnError e) {
332 } catch (Exception ex) {
333 sendSyncError(execution)
335 String exceptionMessage = "Exception Encountered in PreProcessRequest() of " + className + ".groovy ***** : " + ex.getMessage()
336 logger.debug(exceptionMessage)
337 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
344 * Gets the service instance uri from aai
346 public void getServiceInstance(DelegateExecution execution) {
348 String serviceInstanceId = execution.getVariable('CRENWKI_serviceInstanceId')
350 AAIResourcesClient resourceClient = new AAIResourcesClient()
351 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
353 if(!resourceClient.exists(uri)){
354 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service instance was not found in aai")
356 Map<String, String> keys = uri.getURIKeys()
357 execution.setVariable("serviceType", keys.get("service-type"))
358 execution.setVariable("subscriberName", keys.get("global-customer-id"))
361 }catch(BpmnError e) {
363 }catch (Exception ex){
364 String msg = "Exception in getServiceInstance. " + ex.getMessage()
366 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
371 public void callRESTQueryAAINetworkName (DelegateExecution execution) {
373 execution.setVariable("prefix",Prefix)
375 logger.debug(" ***** Inside callRESTQueryAAINetworkName() of DoCreateNetworkInstance ***** " )
379 String networkInputs = execution.getVariable(Prefix + "networkInputs")
380 String networkName = utils.getNodeText(networkInputs, "network-name")
382 AAIResourcesClient client = new AAIResourcesClient()
383 AAIPluralResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L3_NETWORK).queryParam("network-name", networkName)
384 L3Networks networks = client.get(uri, NotFoundException.class).asBean(L3Networks.class).get()
385 L3Network network = networks.getL3Network().get(0)
387 execution.setVariable(Prefix + "isAAIqueryNameGood", true)
388 String orchestrationStatus = network.getOrchestrationStatus()
389 execution.setVariable(Prefix + "orchestrationStatus", orchestrationStatus.toUpperCase())
390 logger.debug(Prefix + "orchestrationStatus - " + orchestrationStatus.toUpperCase())
391 execution.setVariable("orchestrationStatus", orchestrationStatus)
393 logger.debug(Prefix + "isAAIqueryNameGood? : " + execution.getVariable(Prefix + "isAAIqueryNameGood"))
395 } catch (NotFoundException e) {
396 logger.debug(" QueryAAINetworkName return code = '404' (Not Found). Proceed with the Create !!! ")
398 } catch (Exception ex) {
400 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow - callRESTQueryAAINetworkName() - " + ex.getMessage()
401 logger.debug(exceptionMessage)
402 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
408 public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
410 execution.setVariable("prefix",Prefix)
412 logger.debug(" ***** Inside callRESTQueryAAICloudRegion() of DoCreateNetworkInstance ***** " )
415 String networkInputs = execution.getVariable(Prefix + "networkInputs")
416 String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
419 AaiUtil aaiUtil = new AaiUtil(this)
421 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, Defaults.CLOUD_OWNER.toString(), cloudRegion)
422 def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
424 execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
426 String cloudRegionPo = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
427 String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "SDNC", cloudRegion)
429 if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
430 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
431 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
432 execution.setVariable(Prefix + "isCloudRegionGood", true)
435 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
436 logger.debug(dataErrorMessage)
437 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
441 logger.debug(" is Cloud Region Good: " + execution.getVariable(Prefix + "isCloudRegionGood"))
443 } catch (BpmnError e) {
446 } catch (Exception ex) {
448 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow - callRESTQueryAAICloudRegion() - " + ex.getMessage()
449 logger.debug(exceptionMessage)
450 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
456 public void callRESTQueryAAINetworkId(DelegateExecution execution) {
458 execution.setVariable("prefix",Prefix)
460 logger.debug(" ***** Inside callRESTQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
464 String networkId = ""
465 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
466 if (execution.getVariable("sdncVersion") != "1610") {
467 String networkResponseInformation = ""
469 networkResponseInformation = utils.getNodeXml(assignSDNCResponse, "network-response-information", false).replace("tag0:","").replace(":tag0","")
470 networkId = utils.getNodeText(networkResponseInformation, "instance-id")
471 } catch (Exception ex) {
472 String dataErrorMessage = " SNDC Response network validation for 'instance-id' (network-id) failed: Empty <network-response-information>"
473 logger.debug(dataErrorMessage)
474 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
478 networkId = utils.getNodeText(assignSDNCResponse, "network-id")
480 if (networkId == null || networkId == "null") {
481 String dataErrorMessage = "SNDC Response did not contains 'instance-id' or 'network-id' element, or the value is null."
482 logger.debug(dataErrorMessage)
483 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
485 logger.debug(" SNDC Response network validation for 'instance-id' (network-id)' is good: " + networkId)
489 execution.setVariable(Prefix + "networkId", networkId)
490 String networkName = utils.getNodeText(assignSDNCResponse, "network-name")
491 execution.setVariable(Prefix + "networkName", networkName)
493 AAIResourcesClient client = new AAIResourcesClient()
494 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
495 L3Network network = client.get(uri, NotFoundException.class).asBean(L3Network.class).get()
497 execution.setVariable(Prefix + "queryIdAAIResponse", network)
499 String netId = network.getNetworkId()
500 execution.setVariable(Prefix + "networkId", netId)
501 String netName = network.getNetworkName()
502 execution.setVariable(Prefix + "networkName", netName)
504 } catch (NotFoundException e) {
505 String dataErrorMessage = "Response Error from QueryAAINetworkId is 404 (Not Found)."
506 logger.debug(" AAI Query Failed. " + dataErrorMessage)
507 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
509 } catch (Exception ex) {
510 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkId() - " + ex.getMessage()
511 logger.debug(exceptionMessage)
512 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
518 public void callRESTReQueryAAINetworkId(DelegateExecution execution) {
520 execution.setVariable("prefix",Prefix)
522 logger.debug(" ***** Inside callRESTReQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
526 String networkId = execution.getVariable(Prefix + "networkId")
527 String netId = networkId
529 AAIResourcesClient client = new AAIResourcesClient()
530 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
531 L3Network network = client.get(uri, NotFoundException.class).asBean(L3Network.class).get()
533 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "200")
534 execution.setVariable(Prefix + "requeryIdAAIResponse", network)
536 String netName = network.getNetworkName()
537 String networkOutputs =
539 <network-id>${MsoUtils.xmlEscape(netId)}</network-id>
540 <network-name>${MsoUtils.xmlEscape(netName)}</network-name>
541 </network-outputs>"""
542 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
543 logger.debug(" networkOutputs - " + '\n' + networkOutputs)
546 } catch (NotFoundException e) {
547 String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
548 logger.debug(" AAI ReQuery Failed. - " + dataErrorMessage)
549 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
551 } catch (Exception ex) {
552 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTReQueryAAINetworkId() - " + ex.getMessage()
553 logger.debug(exceptionMessage)
554 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
560 public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
562 execution.setVariable("prefix",Prefix)
564 logger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding() of DoCreateNetworkInstance ***** " )
568 AAIResourcesClient client = new AAIResourcesClient()
569 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
570 Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
571 if(relationships.isPresent()){
572 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.VPN_BINDING)
574 logger.debug(Prefix + "vpnCount - " + uris.size())
576 if (uris.size() > 0) {
577 String routeTargets = ""
578 for(AAIResourceUri u : uris) {
580 AAIResultWrapper wrapper = client.get(u.depth(Depth.TWO), NotFoundException.class)
581 Optional<VpnBinding> binding = wrapper.asBean(VpnBinding.class)
583 String routeTarget = ""
584 String routeRole = ""
585 if(binding.get().getRouteTargets() != null) {
586 List<RouteTarget> targets = binding.get().getRouteTargets().getRouteTarget()
587 for(RouteTarget target : targets) {
588 routeTarget = target.getGlobalRouteTarget()
589 routeRole = target.getRouteTargetRole()
590 routeTargets += "<routeTargets>" + '\n' +
591 " <routeTarget>" + routeTarget + "</routeTarget>" + '\n' +
592 " <routeTargetRole>" + routeRole + "</routeTargetRole>" + '\n' +
593 "</routeTargets>" + '\n'
599 execution.setVariable(Prefix + "routeCollection", routeTargets)
600 logger.debug(Prefix + "routeCollection - " + '\n' + routeTargets)
603 // reset return code to success
604 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
605 AaiUtil aaiUriUtil = new AaiUtil(this)
606 String schemaVersion = aaiUriUtil.getNamespace()
607 String aaiStubResponse =
608 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
609 <vpn-binding xmlns="${schemaVersion}">
610 <global-route-target/>
613 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
614 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiStubResponseAsXml)
615 execution.setVariable(Prefix + "routeCollection", "<routeTargets/>")
616 logger.debug(" No vpnBinding, using this stub as response - " + '\n' + aaiStubResponseAsXml)
621 } catch (NotFoundException e) {
622 logger.debug("Response Error from AAINetworkVpnBinding is 404 (Not Found).")
623 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Response Error from AAINetworkVpnBinding is 404 (Not Found).")
624 } catch (Exception ex) {
625 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkVpnBinding() - " + ex.getMessage()
626 logger.debug(exceptionMessage)
627 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
633 public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
635 execution.setVariable("prefix",Prefix)
637 logger.debug(" ***** Inside callRESTQueryAAINetworkPolicy() of DoCreateNetworkInstance ***** " )
640 AAIResourcesClient client = new AAIResourcesClient()
641 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
642 Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
643 if(relationships.isPresent()){
644 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.NETWORK_POLICY)
646 execution.setVariable(Prefix + "networkPolicyCount", uris.size())
647 logger.debug(Prefix + "networkPolicyCount - " + uris.size())
649 if (uris.size() > 0) {
651 String networkPolicies = ""
652 // AII loop call using list vpnBindings
653 for(AAIResourceUri u : uris) {
655 NetworkPolicy p = client.get(u, NotFoundException.class).asBean(NetworkPolicy.class).get()
657 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
659 String networkPolicy = p.getNetworkPolicyFqdn()
660 networkPolicies += "<policyFqdns>" + networkPolicy + "</policyFqdns>" + '\n'
664 execution.setVariable(Prefix + "networkCollection", networkPolicies)
665 logger.debug(Prefix + "networkCollection - " + '\n' + networkPolicies)
668 // reset return code to success
669 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
670 AaiUtil aaiUriUtil = new AaiUtil(this)
671 String schemaVersion = aaiUriUtil.getNamespace()
672 String aaiStubResponse =
673 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
674 <network-policy xmlns="${schemaVersion}">
675 <network-policy-fqdn/>
678 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
679 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiStubResponseAsXml)
680 execution.setVariable(Prefix + "networkCollection", "<policyFqdns/>")
681 logger.debug(" No net policies, using this stub as response - " + '\n' + aaiStubResponseAsXml)
685 } catch (NotFoundException e) {
686 String dataErrorMessage = "Response Error from QueryAAINetworkPolicy is 404 (Not Found)."
687 logger.debug(dataErrorMessage)
688 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
690 } catch (Exception ex) {
691 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkPolicy() - " + ex.getMessage()
692 logger.debug(exceptionMessage)
693 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
699 public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
701 execution.setVariable("prefix",Prefix)
703 logger.debug(" ***** Inside callRESTQueryAAINetworkTableRef() of DoCreateNetworkInstance ***** " )
707 AAIResourcesClient client = new AAIResourcesClient()
708 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
709 Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
710 if(relationships.isPresent()){
711 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.ROUTE_TABLE_REFERENCE)
713 execution.setVariable(Prefix + "networkTableRefCount", uris.size())
714 logger.debug(Prefix + "networkTableRefCount - " + uris.size())
717 if (uris.size() > 0) {
719 // AII loop call using list vpnBindings
720 String networkTableRefs = ""
721 for(AAIResourceUri u : uris) {
723 RouteTableReference rt = client.get(u, NotFoundException.class).asBean(RouteTableReference.class).get()
725 String networkTableRef = rt.getRouteTableReferenceFqdn()
726 networkTableRefs += "<routeTableFqdns>" + networkTableRef + "</routeTableFqdns>" + '\n'
731 execution.setVariable(Prefix + "tableRefCollection", networkTableRefs)
732 logger.debug(Prefix + "tableRefCollection - " + '\n' + networkTableRefs)
735 // reset return code to success
736 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
737 AaiUtil aaiUriUtil = new AaiUtil(this)
738 String schemaVersion = aaiUriUtil.getNamespace()
739 String aaiStubResponse =
740 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
741 <route-table-references xmlns="${schemaVersion}">
742 <route-table-reference-fqdn/>
743 </route-table-references>
745 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
746 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiStubResponseAsXml)
747 execution.setVariable(Prefix + "tableRefCollection", "<routeTableFqdns/>")
748 logger.debug(" No net table references, using this stub as response - " + '\n' + aaiStubResponseAsXml)
753 } catch (NotFoundException e) {
754 String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
755 logger.debug(dataErrorMessage)
756 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
758 } catch (Exception ex) {
759 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
760 logger.debug(exceptionMessage)
761 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
768 public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
770 execution.setVariable("prefix",Prefix)
772 logger.trace(" ***** Inside callRESTUpdateContrailAAINetwork() of DoCreateNetworkInstance ***** " )
776 String networkId = execution.getVariable(Prefix + "networkId")
777 L3Network requeryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
778 String createNetworkResponse = execution.getVariable(Prefix + "createNetworkResponse")
780 L3Network l3Network = new L3Network()
781 if (StringUtils.isBlank(requeryIdAAIResponse.getHeatStackId())) {
782 if (utils.nodeExists(createNetworkResponse, 'networkStackId')) {
783 l3Network.setHeatStackId(utils.getNodeText(createNetworkResponse, 'networkStackId'))
786 if (StringUtils.isBlank(requeryIdAAIResponse.getNeutronNetworkId())) {
787 if (utils.nodeExists(createNetworkResponse, 'neutronNetworkId')) {
788 l3Network.setNeutronNetworkId(utils.getNodeText(createNetworkResponse, 'neutronNetworkId'))
791 if (StringUtils.isBlank(requeryIdAAIResponse.getContrailNetworkFqdn())) {
792 if (utils.nodeExists(createNetworkResponse, 'networkFqdn')) {
793 l3Network.setContrailNetworkFqdn(utils.getNodeText(createNetworkResponse, 'networkFqdn'))
797 String status = utils.getNodeText(createNetworkResponse, 'orchestration-status')
798 if(status.equals("pending-create") || status.equals("PendingCreate")){
799 l3Network.setOrchestrationStatus("Created")
801 l3Network.setOrchestrationStatus("Active")
804 logger.debug("Updating l3-network in AAI" )
806 AAIResourcesClient client = new AAIResourcesClient()
807 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId)
808 client.update(uri, l3Network)
810 if(requeryIdAAIResponse.getSubnets() != null){
811 for(Subnet s:requeryIdAAIResponse.getSubnets().getSubnet()){
812 String subnetOrchStatus = s.getOrchestrationStatus()
813 String subnetId = s.getSubnetId()
814 Subnet subnet = new Subnet()
815 subnet.setNeutronSubnetId(networkUtils.extractNeutSubId(createNetworkResponse, subnetId))
816 if(subnetOrchStatus.equals("pending-create") || subnetOrchStatus.equals("PendingCreate") ){
817 subnet.setOrchestrationStatus("Created")
819 subnet.setOrchestrationStatus("Active")
822 logger.debug("Updating subnet in AAI" )
823 AAIResourceUri subUri = AAIUriFactory.createResourceUri(AAIObjectType.SUBNET, networkId, subnetId)
824 client.update(subUri, subnet)
829 String rollbackEnabled = execution.getVariable(Prefix + "rollbackEnabled")
830 if (rollbackEnabled == "true") {
831 execution.setVariable(Prefix + "isPONR", false)
833 execution.setVariable(Prefix + "isPONR", true)
835 logger.debug(Prefix + "isPONR" + ": " + execution.getVariable(Prefix + "isPONR"))
837 } catch (BpmnError e) {
839 } catch (NotFoundException e) {
840 String dataErrorMessage = " Response Error from UpdateContrailAAINetwork is 404 (Not Found)."
841 logger.debug(dataErrorMessage)
842 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
843 } catch (Exception ex) {
844 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTUpdateContrailAAINetwork() - " + ex.getMessage()
845 logger.debug(exceptionMessage)
846 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
850 public void prepareCreateNetworkRequest (DelegateExecution execution) {
852 execution.setVariable("prefix",Prefix)
854 logger.trace("Inside prepareCreateNetworkRequest() of DoCreateNetworkInstance")
859 String requestId = execution.getVariable("msoRequestId")
860 if (requestId == null) {
861 requestId = execution.getVariable("mso-request-id")
863 String messageId = execution.getVariable(Prefix + "messageId")
864 String source = execution.getVariable(Prefix + "source")
866 String requestInput = execution.getVariable(Prefix + "networkRequest")
867 L3Network queryIdResponse = execution.getVariable(Prefix + "queryIdAAIResponse")
868 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
869 String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
871 // Prepare Network request
872 String routeCollection = execution.getVariable(Prefix + "routeCollection")
873 String policyCollection = execution.getVariable(Prefix + "networkCollection")
874 String tableCollection = execution.getVariable(Prefix + "tableRefCollection")
875 String createNetworkRequest = networkUtils.CreateNetworkRequestV2(execution, requestId, messageId, requestInput, queryIdResponse, routeCollection, policyCollection, tableCollection, cloudRegionId, backoutOnFailure, source )
877 String buildDeleteNetworkRequestAsString = utils.formatXml(createNetworkRequest)
878 buildDeleteNetworkRequestAsString = buildDeleteNetworkRequestAsString.replace(":w1aac13n0", "").replace("w1aac13n0:", "")
880 execution.setVariable(Prefix + "createNetworkRequest", buildDeleteNetworkRequestAsString)
881 logger.debug(Prefix + "createNetworkRequest - " + "\n" + buildDeleteNetworkRequestAsString)
883 } catch (Exception ex) {
884 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareCreateNetworkRequest() - " + ex.getMessage()
885 logger.debug(exceptionMessage)
886 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
892 public void prepareSDNCRequest (DelegateExecution execution) {
894 execution.setVariable("prefix",Prefix)
896 logger.trace("Inside prepareSDNCRequest() of DoCreateNetworkInstance")
900 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
901 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
902 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
904 String networkId = execution.getVariable(Prefix + "networkId")
905 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
907 // get/set 'msoRequestId' and 'mso-request-id'
908 String requestId = execution.getVariable("msoRequestId")
909 if (requestId != null) {
910 execution.setVariable("mso-request-id", requestId)
912 requestId = execution.getVariable("mso-request-id")
914 execution.setVariable(Prefix + "requestId", requestId)
916 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
917 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
919 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
920 execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
921 logger.debug(Prefix + "assignSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
924 } catch (Exception ex) {
925 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRequest() - " + ex.getMessage()
926 logger.debug(exceptionMessage)
927 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
933 public void prepareRpcSDNCRequest (DelegateExecution execution) {
935 execution.setVariable("prefix",Prefix)
937 logger.trace("Inside prepareRpcSDNCRequest() of DoCreateNetworkInstance")
942 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
943 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
944 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
946 String networkId = execution.getVariable(Prefix + "networkId")
947 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
949 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
950 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
952 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
953 execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
954 logger.debug(Prefix + "assignSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
956 } catch (Exception ex) {
957 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRequest() - " + ex.getMessage()
958 logger.debug(exceptionMessage)
959 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
965 public void prepareRpcSDNCActivateRequest (DelegateExecution execution) {
967 execution.setVariable("prefix",Prefix)
969 logger.trace("Inside prepareRpcSDNCActivateRequest() of DoCreateNetworkInstance")
973 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
974 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
975 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
976 String networkId = execution.getVariable(Prefix + "networkId")
977 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
979 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
980 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
982 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
983 execution.setVariable(Prefix + "activateSDNCRequest", sndcTopologyCreateRequesAsString)
984 logger.debug(Prefix + "activateSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
987 } catch (Exception ex) {
988 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRequest() - " + ex.getMessage()
989 logger.debug(exceptionMessage)
990 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
999 // **************************************************
1000 // Post or Validate Response Section
1001 // **************************************************
1003 public void validateCreateNetworkResponse (DelegateExecution execution) {
1005 execution.setVariable("prefix",Prefix)
1007 logger.trace("Inside validateNetworkResponse() of DoCreateNetworkInstance")
1010 String returnCode = execution.getVariable(Prefix + "networkReturnCode")
1011 String networkResponse = execution.getVariable(Prefix + "createNetworkResponse")
1012 if (networkResponse==null) {
1013 networkResponse="" // reset
1016 logger.debug(" Network Adapter create responseCode: " + returnCode)
1018 String errorMessage = ""
1019 if (returnCode == "200") {
1020 execution.setVariable(Prefix + "isNetworkRollbackNeeded", true)
1021 execution.setVariable(Prefix + "createNetworkResponse", networkResponse)
1022 logger.debug(" Network Adapter create Success Response - " + "\n" + networkResponse)
1024 // prepare rollback data
1025 String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
1026 rollbackData = rollbackData.replace("rollback>", "networkRollback>")
1027 String rollbackNetwork =
1028 """<rollbackNetworkRequest>
1030 </rollbackNetworkRequest>"""
1031 String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
1032 execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
1033 logger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
1035 } else { // network error
1036 if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) { //4xx, 5xx
1037 if (networkResponse.contains("createNetworkError")) {
1038 networkResponse = networkResponse.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '')
1039 errorMessage = utils.getNodeText(networkResponse, "message")
1040 errorMessage = "Received error from Network Adapter: " + errorMessage
1041 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
1043 } else { // CatchAll exception
1044 if (returnCode == "500") {
1045 errorMessage = "JBWEB000065: HTTP Status 500."
1047 errorMessage = "Return code is " + returnCode
1049 errorMessage = "Received error from Network Adapter: " + errorMessage
1050 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
1054 } else { // CatchAll exception
1055 String dataErrorMessage = "Received error from Network Adapter. Return code is: " + returnCode
1056 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
1062 } catch (BpmnError e) {
1065 } catch (Exception ex) {
1066 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. validateCreateNetworkResponse() - " + ex.getMessage()
1067 logger.debug(exceptionMessage)
1068 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1075 public void validateSDNCResponse (DelegateExecution execution) {
1077 execution.setVariable("prefix",Prefix)
1079 logger.trace("Inside validateSDNCResponse() of DoCreateNetworkInstance")
1081 String response = execution.getVariable(Prefix + "assignSDNCResponse")
1082 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1083 WorkflowException workflowException = execution.getVariable("WorkflowException")
1085 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
1086 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1088 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "assignSDNCResponse")
1089 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1090 execution.setVariable(Prefix + "assignSDNCResponse", assignSDNCResponseDecodeXml)
1092 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
1093 execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
1094 logger.debug("Successfully Validated SDNC Response")
1097 logger.debug("Did NOT Successfully Validated SDNC Response")
1098 throw new BpmnError("MSOWorkflowException")
1103 public void validateRpcSDNCActivateResponse (DelegateExecution execution) {
1105 execution.setVariable("prefix",Prefix)
1107 logger.trace("Inside validateRpcSDNCActivateResponse() of DoCreateNetworkInstance")
1109 String response = execution.getVariable(Prefix + "activateSDNCResponse")
1110 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1111 WorkflowException workflowException = execution.getVariable("WorkflowException")
1113 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
1114 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1116 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "activateSDNCResponse")
1117 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1118 execution.setVariable(Prefix + "activateSDNCResponse", assignSDNCResponseDecodeXml)
1120 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
1121 execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", true)
1122 logger.debug("Successfully Validated Rpc SDNC Activate Response")
1125 logger.debug("Did NOT Successfully Validated Rpc SDNC Activate Response")
1126 throw new BpmnError("MSOWorkflowException")
1132 public void prepareSDNCRollbackRequest (DelegateExecution execution) {
1134 execution.setVariable("prefix",Prefix)
1136 logger.trace("Inside prepareSDNCRollbackRequest() of DoCreateNetworkInstance")
1140 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1141 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1142 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1143 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1144 String networkId = execution.getVariable(Prefix + "networkId")
1145 if (networkId == 'null') {networkId = ""}
1146 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1148 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1149 String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
1150 String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
1151 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
1152 logger.debug(" Preparing request for SDNC Topology 'rollback-NetworkActivateRequest' rollback . . . - " + "\n" + sndcTopologyRollbackRequestAsString)
1155 } catch (Exception ex) {
1156 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
1157 logger.debug(exceptionMessage)
1158 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1164 public void prepareRpcSDNCRollbackRequest (DelegateExecution execution) {
1166 execution.setVariable("prefix",Prefix)
1168 logger.trace("Inside prepareRpcSDNCRollbackRequest() of DoCreateNetworkInstance")
1172 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1173 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1174 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1175 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1176 String networkId = execution.getVariable(Prefix + "networkId")
1177 if (networkId == 'null') {networkId = ""}
1178 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1180 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1181 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1182 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1183 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1184 logger.debug(" Preparing request for SDNC Topology 'unassign-DeleteNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
1187 } catch (Exception ex) {
1188 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRollbackRequest() - " + ex.getMessage()
1189 logger.debug(exceptionMessage)
1190 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1196 public void prepareRpcSDNCActivateRollback(DelegateExecution execution) {
1198 execution.setVariable("prefix",Prefix)
1200 logger.trace("Inside prepareRpcSDNCActivateRollback() of DoCreateNetworkInstance")
1205 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1206 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1207 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1208 String activateSDNCResponse = execution.getVariable(Prefix + "activateSDNCResponse")
1209 String networkId = execution.getVariable(Prefix + "networkId")
1210 if (networkId == 'null') {networkId = ""}
1211 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1213 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1214 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1215 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1216 execution.setVariable(Prefix + "rollbackActivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1217 logger.debug(" Preparing request for RPC SDNC Topology 'deactivate-DeleteNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
1220 } catch (Exception ex) {
1221 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
1222 logger.debug(exceptionMessage)
1223 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1229 public void prepareRollbackData(DelegateExecution execution) {
1231 execution.setVariable("prefix",Prefix)
1233 logger.trace("Inside prepareRollbackData() of DoCreateNetworkInstance")
1237 Map<String, String> rollbackData = new HashMap<String, String>();
1238 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1239 if (rollbackSDNCRequest != null) {
1240 if (rollbackSDNCRequest != "") {
1241 rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
1244 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1245 if (rollbackNetworkRequest != null) {
1246 if (rollbackNetworkRequest != "") {
1247 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
1250 String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1251 if (rollbackActivateSDNCRequest != null) {
1252 if (rollbackActivateSDNCRequest != "") {
1253 rollbackData.put("rollbackActivateSDNCRequest", execution.getVariable(Prefix + "rollbackActivateSDNCRequest"))
1256 execution.setVariable("rollbackData", rollbackData)
1257 logger.debug("** rollbackData : " + rollbackData)
1259 execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
1260 logger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
1262 } catch (Exception ex) {
1263 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
1264 logger.debug(exceptionMessage)
1265 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1271 public void postProcessResponse(DelegateExecution execution) {
1273 execution.setVariable("prefix",Prefix)
1275 logger.trace("Inside postProcessResponse() of DoCreateNetworkInstance")
1280 // 1. Silent Success: execution.getVariable("CRENWKI_orchestrationStatus") == "ACTIVE"
1281 // 2. Success: execution.getVariable("WorkflowException") == null (NULL)
1282 // 3. WorkflowException: execution.getVariable("WorkflowException") != null (NOT NULL)
1284 logger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
1286 if (execution.getVariable(Prefix + "isException") == false) {
1287 // set rollback data
1288 execution.setVariable("orchestrationStatus", "")
1289 execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
1290 execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
1291 prepareSuccessRollbackData(execution) // populate rollbackData
1292 execution.setVariable("WorkflowException", null)
1293 execution.setVariable(Prefix + "Success", true)
1294 logger.debug(" ***** postProcessResponse(), GOOD !!!")
1296 // inside sub-flow logic
1297 execution.setVariable(Prefix + "Success", false)
1298 execution.setVariable("rollbackData", null)
1299 String exceptionMessage = " Exception encountered in MSO Bpmn. "
1300 if (execution.getVariable("workflowException") != null) { // Output of Rollback flow.
1301 logger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
1302 WorkflowException wfex = execution.getVariable("workflowException")
1303 exceptionMessage = wfex.getErrorMessage()
1305 if (execution.getVariable(Prefix + "WorkflowException") != null) {
1306 WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
1307 exceptionMessage = pwfex.getErrorMessage()
1310 // going to the Main flow: a-la-carte or macro
1311 logger.debug(" ***** postProcessResponse(), BAD !!!")
1312 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1313 throw new BpmnError("MSOWorkflowException")
1316 } catch(BpmnError b){
1317 logger.debug("Rethrowing MSOWorkflowException")
1320 } catch (Exception ex) {
1321 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
1322 logger.debug(exceptionMessage)
1323 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1324 throw new BpmnError("MSOWorkflowException")
1332 public void prepareSuccessRollbackData(DelegateExecution execution) {
1334 execution.setVariable("prefix",Prefix)
1336 logger.trace("Inside prepareSuccessRollbackData() of DoCreateNetworkInstance")
1340 if (execution.getVariable("sdncVersion") != '1610') {
1341 prepareRpcSDNCRollbackRequest(execution)
1342 prepareRpcSDNCActivateRollback(execution)
1344 prepareSDNCRollbackRequest(execution)
1347 Map<String, String> rollbackData = new HashMap<String, String>();
1348 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1349 if (rollbackSDNCRequest != null) {
1350 if (rollbackSDNCRequest != "") {
1351 rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
1354 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1355 if (rollbackNetworkRequest != null) {
1356 if (rollbackNetworkRequest != "") {
1357 rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
1360 String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1361 if (rollbackActivateSDNCRequest != null) {
1362 if (rollbackActivateSDNCRequest != "") {
1363 rollbackData.put("rollbackActivateSDNCRequest", rollbackActivateSDNCRequest)
1366 execution.setVariable("rollbackData", rollbackData)
1368 logger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
1369 execution.setVariable("WorkflowException", null)
1372 } catch (Exception ex) {
1373 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
1374 logger.debug(exceptionMessage)
1375 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1381 public void setExceptionFlag(DelegateExecution execution){
1383 execution.setVariable("prefix",Prefix)
1385 logger.trace("Inside setExceptionFlag() of DoCreateNetworkInstance")
1389 execution.setVariable(Prefix + "isException", true)
1391 if (execution.getVariable("SavedWorkflowException1") != null) {
1392 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1394 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1396 logger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1398 } catch(Exception ex){
1399 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1400 logger.debug(exceptionMessage)
1401 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1407 // *******************************
1408 // Build Error Section
1409 // *******************************
1413 public void processJavaException(DelegateExecution execution){
1415 execution.setVariable("prefix",Prefix)
1418 logger.debug( "Caught a Java Exception in " + Prefix)
1419 logger.debug("Started processJavaException Method")
1420 logger.debug("Variables List: " + execution.getVariables())
1421 execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1422 exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1424 }catch(Exception e){
1425 logger.debug("Caught Exception during processJavaException Method: " + e)
1426 execution.setVariable("UnexpectedError", "Exception in processJavaException method - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1427 exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method" + Prefix)
1429 logger.debug( "Completed processJavaException Method in " + Prefix)