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.NotFoundException
26 import org.apache.commons.lang3.*
27 import org.camunda.bpm.engine.delegate.BpmnError
28 import org.camunda.bpm.engine.delegate.DelegateExecution
29 import org.onap.aai.domain.yang.L3Network
30 import org.onap.aai.domain.yang.L3Networks
31 import org.onap.aai.domain.yang.NetworkPolicy
32 import org.onap.aai.domain.yang.RouteTableReference
33 import org.onap.aai.domain.yang.RouteTarget
34 import org.onap.aai.domain.yang.Subnet
35 import org.onap.aai.domain.yang.VpnBinding
36 import org.onap.aaiclient.client.aai.AAIObjectType
37 import org.onap.aaiclient.client.aai.AAIResourcesClient
38 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
39 import org.onap.aaiclient.client.aai.entities.Relationships
40 import org.onap.aaiclient.client.aai.entities.uri.AAIPluralResourceUri
41 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
42 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
43 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
44 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.Types
45 import org.onap.aaiclient.client.graphinventory.entities.uri.Depth
46 import org.onap.so.bpmn.common.scripts.AaiUtil
47 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
48 import org.onap.so.bpmn.common.scripts.ExceptionUtil
49 import org.onap.so.bpmn.common.scripts.MsoUtils
50 import org.onap.so.bpmn.common.scripts.NetworkUtils
51 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
52 import org.onap.so.bpmn.common.scripts.VidUtils
53 import org.onap.so.bpmn.core.UrnPropertiesReader
54 import org.onap.so.bpmn.core.WorkflowException
55 import org.onap.so.bpmn.core.json.JsonUtils
56 import org.onap.so.constants.Defaults
57 import org.slf4j.Logger
58 import org.slf4j.LoggerFactory
62 * This groovy class supports the <class>DoCreateNetworkInstance.bpmn</class> process.
65 public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor {
66 private static final Logger logger = LoggerFactory.getLogger( DoCreateNetworkInstance.class);
68 String Prefix="CRENWKI_"
69 ExceptionUtil exceptionUtil = new ExceptionUtil()
70 JsonUtils jsonUtil = new JsonUtils()
71 VidUtils vidUtils = new VidUtils(this)
72 NetworkUtils networkUtils = new NetworkUtils()
73 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
75 def className = getClass().getSimpleName()
78 * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstance.bpmn</class> process.
81 public InitializeProcessVariables(DelegateExecution execution){
82 /* Initialize all the process variables in this block */
84 execution.setVariable(Prefix + "networkRequest", "")
85 execution.setVariable(Prefix + "rollbackEnabled", null)
86 execution.setVariable(Prefix + "networkInputs", "")
87 //execution.setVariable(Prefix + "requestId", "")
88 execution.setVariable(Prefix + "messageId", "")
89 execution.setVariable(Prefix + "source", "")
90 execution.setVariable("BasicAuthHeaderValuePO", "")
91 execution.setVariable("BasicAuthHeaderValueSDNC", "")
92 execution.setVariable(Prefix + "serviceInstanceId","")
93 execution.setVariable("GENGS_type", "")
94 execution.setVariable(Prefix + "rsrc_endpoint", null)
95 execution.setVariable(Prefix + "networkOutputs", "")
96 execution.setVariable(Prefix + "networkId","")
97 execution.setVariable(Prefix + "networkName","")
100 execution.setVariable(Prefix + "queryNameAAIRequest","")
101 execution.setVariable(Prefix + "queryNameAAIResponse", "")
102 execution.setVariable(Prefix + "aaiNameReturnCode", "")
103 execution.setVariable(Prefix + "isAAIqueryNameGood", false)
105 // AAI query Cloud Region
106 execution.setVariable(Prefix + "queryCloudRegionRequest","")
107 execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
108 execution.setVariable(Prefix + "queryCloudRegionResponse","")
109 execution.setVariable(Prefix + "cloudRegionPo","")
110 execution.setVariable(Prefix + "cloudRegionSdnc","")
111 execution.setVariable(Prefix + "isCloudRegionGood", false)
114 execution.setVariable(Prefix + "queryIdAAIRequest","")
115 execution.setVariable(Prefix + "queryIdAAIResponse", "")
116 execution.setVariable(Prefix + "aaiIdReturnCode", "")
118 // AAI query vpn binding
119 execution.setVariable(Prefix + "queryVpnBindingAAIRequest","")
120 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", "")
121 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "")
122 execution.setVariable(Prefix + "vpnBindings", null)
123 execution.setVariable(Prefix + "vpnCount", 0)
124 execution.setVariable(Prefix + "routeCollection", "")
126 // AAI query network policy
127 execution.setVariable(Prefix + "queryNetworkPolicyAAIRequest","")
128 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", "")
129 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "")
130 execution.setVariable(Prefix + "networkPolicyUriList", null)
131 execution.setVariable(Prefix + "networkPolicyCount", 0)
132 execution.setVariable(Prefix + "networkCollection", "")
134 // AAI query route table reference
135 execution.setVariable(Prefix + "queryNetworkTableRefAAIRequest","")
136 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", "")
137 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "")
138 execution.setVariable(Prefix + "networkTableRefUriList", null)
139 execution.setVariable(Prefix + "networkTableRefCount", 0)
140 execution.setVariable(Prefix + "tableRefCollection", "")
143 execution.setVariable(Prefix + "requeryIdAAIRequest","")
144 execution.setVariable(Prefix + "requeryIdAAIResponse", "")
145 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "")
147 // AAI update contrail
148 execution.setVariable(Prefix + "updateContrailAAIUrlRequest","")
149 execution.setVariable(Prefix + "updateContrailAAIPayloadRequest","")
150 execution.setVariable(Prefix + "updateContrailAAIResponse", "")
151 execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", "")
153 execution.setVariable(Prefix + "createNetworkRequest", "")
154 execution.setVariable(Prefix + "createNetworkResponse", "")
155 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
156 //execution.setVariable(Prefix + "rollbackNetworkResponse", "")
157 execution.setVariable(Prefix + "networkReturnCode", "")
158 //execution.setVariable(Prefix + "rollbackNetworkReturnCode", "")
159 execution.setVariable(Prefix + "isNetworkRollbackNeeded", false)
161 execution.setVariable(Prefix + "assignSDNCRequest", "")
162 execution.setVariable(Prefix + "assignSDNCResponse", "")
163 execution.setVariable(Prefix + "rollbackSDNCRequest", "")
164 //execution.setVariable(Prefix + "rollbackSDNCResponse", "")
165 execution.setVariable(Prefix + "sdncReturnCode", "")
166 //execution.setVariable(Prefix + "rollbackSDNCReturnCode", "")
167 execution.setVariable(Prefix + "isSdncRollbackNeeded", false)
168 execution.setVariable(Prefix + "sdncResponseSuccess", false)
170 execution.setVariable(Prefix + "activateSDNCRequest", "")
171 execution.setVariable(Prefix + "activateSDNCResponse", "")
172 execution.setVariable(Prefix + "rollbackActivateSDNCRequest", "")
173 //execution.setVariable(Prefix + "rollbackActivateSDNCResponse", "")
174 execution.setVariable(Prefix + "sdncActivateReturnCode", "")
175 //execution.setVariable(Prefix + "rollbackActivateSDNCReturnCode", "")
176 execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", false)
177 execution.setVariable(Prefix + "sdncActivateResponseSuccess", false)
179 execution.setVariable(Prefix + "orchestrationStatus", "")
180 execution.setVariable(Prefix + "isVnfBindingPresent", false)
181 execution.setVariable(Prefix + "Success", false)
183 execution.setVariable(Prefix + "isException", false)
187 // **************************************************
188 // Pre or Prepare Request Section
189 // **************************************************
191 * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstance.bpmn</class> process.
194 public void preProcessRequest (DelegateExecution execution) {
196 execution.setVariable("prefix",Prefix)
197 logger.trace("Inside preProcessRequest() of " + className + ".groovy")
200 // initialize flow variables
201 InitializeProcessVariables(execution)
203 // GET Incoming request & validate 3 kinds of format.
204 execution.setVariable("action", "CREATE")
205 String networkRequest = execution.getVariable("bpmnRequest")
206 if (networkRequest != null) {
207 if (networkRequest.contains("requestDetails")) {
208 // JSON format request is sent, create xml
210 def prettyJson = JsonOutput.prettyPrint(networkRequest.toString())
211 logger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
212 networkRequest = vidUtils.createXmlNetworkRequestInfra(execution, networkRequest)
214 } catch (Exception ex) {
215 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
216 logger.debug(dataErrorMessage)
217 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
220 // XML format request is sent
224 // vIPR format request is sent, create xml from individual variables
225 networkRequest = vidUtils.createXmlNetworkRequestInstance(execution)
228 networkRequest = utils.formatXml(networkRequest)
229 execution.setVariable(Prefix + "networkRequest", networkRequest)
230 logger.debug(Prefix + "networkRequest - " + '\n' + networkRequest)
232 // validate 'backout-on-failure' to override 'mso.rollback'
233 boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, networkRequest)
234 execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
235 logger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
237 String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
238 execution.setVariable(Prefix + "networkInputs", networkInputs)
239 logger.debug(Prefix + "networkInputs - " + '\n' + networkInputs)
242 String messageId = execution.getVariable("testMessageId") // for testing
243 if (messageId == null || messageId == "") {
244 messageId = UUID.randomUUID()
245 logger.debug(Prefix + "messageId, random generated: " + messageId)
247 logger.debug(Prefix + "messageId, pre-assigned: " + messageId)
249 execution.setVariable(Prefix + "messageId", messageId)
251 String source = utils.getNodeText(networkRequest, "source")
252 execution.setVariable(Prefix + "source", source)
253 logger.debug(Prefix + "source - " + source)
255 // validate cloud region
256 String lcpCloudRegionId = utils.getNodeText(networkRequest, "aic-cloud-region")
257 if ((lcpCloudRegionId == null) || (lcpCloudRegionId == "") || (lcpCloudRegionId == "null")) {
258 String dataErrorMessage = "Missing value/element: 'lcpCloudRegionId' or 'cloudConfiguration' or 'aic-cloud-region'."
259 logger.debug(" Invalid Request - " + dataErrorMessage)
260 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
263 // validate service instance id
264 String serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id")
265 if ((serviceInstanceId == null) || (serviceInstanceId == "") || (serviceInstanceId == "null")) {
266 String dataErrorMessage = "Missing value/element: 'serviceInstanceId'."
267 logger.debug(" Invalid Request - " + dataErrorMessage)
268 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
271 // PO Authorization Info / headers Authorization=
272 String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
275 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey",execution))
276 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
277 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
279 } catch (IOException ex) {
280 String exceptionMessage = "Exception Encountered in DoCreateNetworkInstance, PreProcessRequest() - "
281 String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
282 logger.debug(dataErrorMessage)
283 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
286 // Set variables for Generic Get Sub Flow use
287 execution.setVariable(Prefix + "serviceInstanceId", serviceInstanceId)
288 logger.debug(Prefix + "serviceInstanceId - " + serviceInstanceId)
290 execution.setVariable("GENGS_type", "service-instance")
291 logger.debug("GENGS_type - " + "service-instance")
292 logger.debug(" Url for SDNC adapter: " + UrnPropertiesReader.getVariable("mso.adapters.sdnc.endpoint",execution))
294 String sdncVersion = execution.getVariable("sdncVersion")
295 logger.debug("sdncVersion? : " + sdncVersion)
297 // build 'networkOutputs'
298 String networkId = utils.getNodeText(networkRequest, "network-id")
299 if ((networkId == null) || (networkId == "null")) {
302 String networkName = utils.getNodeText(networkRequest, "network-name")
303 if ((networkName == null) || (networkName == "null")) {
306 String networkOutputs =
308 <network-id>${MsoUtils.xmlEscape(networkId)}</network-id>
309 <network-name>${MsoUtils.xmlEscape(networkName)}</network-name>
310 </network-outputs>"""
311 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
312 logger.debug(Prefix + "networkOutputs - " + '\n' + networkOutputs)
313 execution.setVariable(Prefix + "networkId", networkId)
314 execution.setVariable(Prefix + "networkName", networkName)
316 } catch (BpmnError e) {
319 } catch (Exception ex) {
320 sendSyncError(execution)
322 String exceptionMessage = "Exception Encountered in PreProcessRequest() of " + className + ".groovy ***** : " + ex.getMessage()
323 logger.debug(exceptionMessage)
324 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
331 * Gets the service instance uri from aai
333 public void getServiceInstance(DelegateExecution execution) {
335 String serviceInstanceId = execution.getVariable('CRENWKI_serviceInstanceId')
337 AAIResourcesClient resourceClient = new AAIResourcesClient()
338 AAIResourceUri uri = AAIUriFactory.createResourceUri(Types.SERVICE_INSTANCE.getFragment(serviceInstanceId))
340 if(!resourceClient.exists(uri)){
341 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service instance was not found in aai")
343 Map<String, String> keys = uri.getURIKeys()
344 execution.setVariable("serviceType", keys.get(AAIFluentTypeBuilder.Types.SERVICE_SUBSCRIPTION.getUriParams().serviceType))
345 execution.setVariable("subscriberName", keys.get(AAIFluentTypeBuilder.Types.CUSTOMER.getUriParams().globalCustomerId))
348 }catch(BpmnError e) {
350 }catch (Exception ex){
351 String msg = "Exception in getServiceInstance. " + ex.getMessage()
353 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
358 public void callRESTQueryAAINetworkName (DelegateExecution execution) {
360 execution.setVariable("prefix",Prefix)
362 logger.debug(" ***** Inside callRESTQueryAAINetworkName() of DoCreateNetworkInstance ***** " )
366 String networkInputs = execution.getVariable(Prefix + "networkInputs")
367 String networkName = utils.getNodeText(networkInputs, "network-name")
369 AAIResourcesClient client = new AAIResourcesClient()
370 AAIPluralResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().l3Networks()).queryParam("network-name", networkName)
371 L3Networks networks = client.get(uri, NotFoundException.class).asBean(L3Networks.class).get()
372 L3Network network = networks.getL3Network().get(0)
374 execution.setVariable(Prefix + "isAAIqueryNameGood", true)
375 String orchestrationStatus = network.getOrchestrationStatus()
376 execution.setVariable(Prefix + "orchestrationStatus", orchestrationStatus.toUpperCase())
377 logger.debug(Prefix + "orchestrationStatus - " + orchestrationStatus.toUpperCase())
378 execution.setVariable("orchestrationStatus", orchestrationStatus)
380 logger.debug(Prefix + "isAAIqueryNameGood? : " + execution.getVariable(Prefix + "isAAIqueryNameGood"))
382 } catch (NotFoundException e) {
383 logger.debug(" QueryAAINetworkName return code = '404' (Not Found). Proceed with the Create !!! ")
385 } catch (Exception ex) {
387 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow - callRESTQueryAAINetworkName() - " + ex.getMessage()
388 logger.debug(exceptionMessage)
389 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
395 public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
397 execution.setVariable("prefix",Prefix)
399 logger.debug(" ***** Inside callRESTQueryAAICloudRegion() of DoCreateNetworkInstance ***** " )
402 String networkInputs = execution.getVariable(Prefix + "networkInputs")
403 String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
406 AaiUtil aaiUtil = new AaiUtil(this)
408 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.cloudInfrastructure().cloudRegion(Defaults.CLOUD_OWNER.toString(), cloudRegion))
409 def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
411 execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
413 String cloudRegionPo = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
414 String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "SDNC", cloudRegion)
416 if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
417 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
418 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
419 execution.setVariable(Prefix + "isCloudRegionGood", true)
422 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
423 logger.debug(dataErrorMessage)
424 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
428 logger.debug(" is Cloud Region Good: " + execution.getVariable(Prefix + "isCloudRegionGood"))
430 } catch (BpmnError e) {
433 } catch (Exception ex) {
435 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow - callRESTQueryAAICloudRegion() - " + ex.getMessage()
436 logger.debug(exceptionMessage)
437 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
443 public void callRESTQueryAAINetworkId(DelegateExecution execution) {
445 execution.setVariable("prefix",Prefix)
447 logger.debug(" ***** Inside callRESTQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
451 String networkId = ""
452 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
453 if (execution.getVariable("sdncVersion") != "1610") {
454 String networkResponseInformation = ""
456 networkResponseInformation = utils.getNodeXml(assignSDNCResponse, "network-response-information", false).replace("tag0:","").replace(":tag0","")
457 networkId = utils.getNodeText(networkResponseInformation, "instance-id")
458 } catch (Exception ex) {
459 String dataErrorMessage = " SNDC Response network validation for 'instance-id' (network-id) failed: Empty <network-response-information>"
460 logger.debug(dataErrorMessage)
461 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
465 networkId = utils.getNodeText(assignSDNCResponse, "network-id")
467 if (networkId == null || networkId == "null") {
468 String dataErrorMessage = "SNDC Response did not contains 'instance-id' or 'network-id' element, or the value is null."
469 logger.debug(dataErrorMessage)
470 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
472 logger.debug(" SNDC Response network validation for 'instance-id' (network-id)' is good: " + networkId)
476 execution.setVariable(Prefix + "networkId", networkId)
477 String networkName = utils.getNodeText(assignSDNCResponse, "network-name")
478 execution.setVariable(Prefix + "networkName", networkName)
480 AAIResourcesClient client = new AAIResourcesClient()
481 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().l3Network(networkId)).depth(Depth.ONE)
482 L3Network network = client.get(uri, NotFoundException.class).asBean(L3Network.class).get()
484 execution.setVariable(Prefix + "queryIdAAIResponse", network)
486 String netId = network.getNetworkId()
487 execution.setVariable(Prefix + "networkId", netId)
488 String netName = network.getNetworkName()
489 execution.setVariable(Prefix + "networkName", netName)
491 } catch (NotFoundException e) {
492 String dataErrorMessage = "Response Error from QueryAAINetworkId is 404 (Not Found)."
493 logger.debug(" AAI Query Failed. " + dataErrorMessage)
494 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
496 } catch (Exception ex) {
497 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkId() - " + ex.getMessage()
498 logger.debug(exceptionMessage)
499 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
505 public void callRESTReQueryAAINetworkId(DelegateExecution execution) {
507 execution.setVariable("prefix",Prefix)
509 logger.debug(" ***** Inside callRESTReQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
513 String networkId = execution.getVariable(Prefix + "networkId")
514 String netId = networkId
516 AAIResourcesClient client = new AAIResourcesClient()
517 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().l3Network(networkId)).depth(Depth.ONE)
518 L3Network network = client.get(uri, NotFoundException.class).asBean(L3Network.class).get()
520 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "200")
521 execution.setVariable(Prefix + "requeryIdAAIResponse", network)
523 String netName = network.getNetworkName()
524 String networkOutputs =
526 <network-id>${MsoUtils.xmlEscape(netId)}</network-id>
527 <network-name>${MsoUtils.xmlEscape(netName)}</network-name>
528 </network-outputs>"""
529 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
530 logger.debug(" networkOutputs - " + '\n' + networkOutputs)
533 } catch (NotFoundException e) {
534 String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
535 logger.debug(" AAI ReQuery Failed. - " + dataErrorMessage)
536 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
538 } catch (Exception ex) {
539 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTReQueryAAINetworkId() - " + ex.getMessage()
540 logger.debug(exceptionMessage)
541 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
547 public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
549 execution.setVariable("prefix",Prefix)
551 logger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding() of DoCreateNetworkInstance ***** " )
555 AAIResourcesClient client = new AAIResourcesClient()
556 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().l3Network(execution.getVariable(Prefix + "networkId")))
557 Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
558 if(relationships.isPresent()){
559 List<AAIResourceUri> uris = relationships.get().getRelatedUris(Types.VPN_BINDING)
561 logger.debug(Prefix + "vpnCount - " + uris.size())
563 if (uris.size() > 0) {
564 String routeTargets = ""
565 for(AAIResourceUri u : uris) {
567 AAIResultWrapper wrapper = client.get(u.depth(Depth.TWO), NotFoundException.class)
568 Optional<VpnBinding> binding = wrapper.asBean(VpnBinding.class)
570 String routeTarget = ""
571 String routeRole = ""
572 if(binding.get().getRouteTargets() != null) {
573 List<RouteTarget> targets = binding.get().getRouteTargets().getRouteTarget()
574 for(RouteTarget target : targets) {
575 routeTarget = target.getGlobalRouteTarget()
576 routeRole = target.getRouteTargetRole()
577 routeTargets += "<routeTargets>" + '\n' +
578 " <routeTarget>" + routeTarget + "</routeTarget>" + '\n' +
579 " <routeTargetRole>" + routeRole + "</routeTargetRole>" + '\n' +
580 "</routeTargets>" + '\n'
586 execution.setVariable(Prefix + "routeCollection", routeTargets)
587 logger.debug(Prefix + "routeCollection - " + '\n' + routeTargets)
590 // reset return code to success
591 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
592 AaiUtil aaiUriUtil = new AaiUtil(this)
593 String schemaVersion = aaiUriUtil.getNamespace()
594 String aaiStubResponse =
595 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
596 <vpn-binding xmlns="${schemaVersion}">
597 <global-route-target/>
600 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
601 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiStubResponseAsXml)
602 execution.setVariable(Prefix + "routeCollection", "<routeTargets/>")
603 logger.debug(" No vpnBinding, using this stub as response - " + '\n' + aaiStubResponseAsXml)
608 } catch (NotFoundException e) {
609 logger.debug("Response Error from AAINetworkVpnBinding is 404 (Not Found).")
610 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Response Error from AAINetworkVpnBinding is 404 (Not Found).")
611 } catch (Exception ex) {
612 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkVpnBinding() - " + ex.getMessage()
613 logger.debug(exceptionMessage)
614 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
620 public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
622 execution.setVariable("prefix",Prefix)
624 logger.debug(" ***** Inside callRESTQueryAAINetworkPolicy() of DoCreateNetworkInstance ***** " )
627 AAIResourcesClient client = new AAIResourcesClient()
628 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().l3Network(execution.getVariable(Prefix + "networkId")))
629 Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
630 if(relationships.isPresent()){
631 List<AAIResourceUri> uris = relationships.get().getRelatedUris(Types.NETWORK_POLICY)
633 execution.setVariable(Prefix + "networkPolicyCount", uris.size())
634 logger.debug(Prefix + "networkPolicyCount - " + uris.size())
636 if (uris.size() > 0) {
638 String networkPolicies = ""
639 // AII loop call using list vpnBindings
640 for(AAIResourceUri u : uris) {
642 NetworkPolicy p = client.get(u, NotFoundException.class).asBean(NetworkPolicy.class).get()
644 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
646 String networkPolicy = p.getNetworkPolicyFqdn()
647 networkPolicies += "<policyFqdns>" + networkPolicy + "</policyFqdns>" + '\n'
651 execution.setVariable(Prefix + "networkCollection", networkPolicies)
652 logger.debug(Prefix + "networkCollection - " + '\n' + networkPolicies)
655 // reset return code to success
656 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
657 AaiUtil aaiUriUtil = new AaiUtil(this)
658 String schemaVersion = aaiUriUtil.getNamespace()
659 String aaiStubResponse =
660 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
661 <network-policy xmlns="${schemaVersion}">
662 <network-policy-fqdn/>
665 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
666 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiStubResponseAsXml)
667 execution.setVariable(Prefix + "networkCollection", "<policyFqdns/>")
668 logger.debug(" No net policies, using this stub as response - " + '\n' + aaiStubResponseAsXml)
672 } catch (NotFoundException e) {
673 String dataErrorMessage = "Response Error from QueryAAINetworkPolicy is 404 (Not Found)."
674 logger.debug(dataErrorMessage)
675 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
677 } catch (Exception ex) {
678 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkPolicy() - " + ex.getMessage()
679 logger.debug(exceptionMessage)
680 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
686 public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
688 execution.setVariable("prefix",Prefix)
690 logger.debug(" ***** Inside callRESTQueryAAINetworkTableRef() of DoCreateNetworkInstance ***** " )
694 AAIResourcesClient client = new AAIResourcesClient()
695 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().l3Network(execution.getVariable(Prefix + "networkId")))
696 Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
697 if(relationships.isPresent()){
698 List<AAIResourceUri> uris = relationships.get().getRelatedUris(Types.ROUTE_TABLE_REFERENCE)
700 execution.setVariable(Prefix + "networkTableRefCount", uris.size())
701 logger.debug(Prefix + "networkTableRefCount - " + uris.size())
704 if (uris.size() > 0) {
706 // AII loop call using list vpnBindings
707 String networkTableRefs = ""
708 for(AAIResourceUri u : uris) {
710 RouteTableReference rt = client.get(u, NotFoundException.class).asBean(RouteTableReference.class).get()
712 String networkTableRef = rt.getRouteTableReferenceFqdn()
713 networkTableRefs += "<routeTableFqdns>" + networkTableRef + "</routeTableFqdns>" + '\n'
718 execution.setVariable(Prefix + "tableRefCollection", networkTableRefs)
719 logger.debug(Prefix + "tableRefCollection - " + '\n' + networkTableRefs)
722 // reset return code to success
723 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
724 AaiUtil aaiUriUtil = new AaiUtil(this)
725 String schemaVersion = aaiUriUtil.getNamespace()
726 String aaiStubResponse =
727 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
728 <route-table-references xmlns="${schemaVersion}">
729 <route-table-reference-fqdn/>
730 </route-table-references>
732 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
733 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiStubResponseAsXml)
734 execution.setVariable(Prefix + "tableRefCollection", "<routeTableFqdns/>")
735 logger.debug(" No net table references, using this stub as response - " + '\n' + aaiStubResponseAsXml)
740 } catch (NotFoundException e) {
741 String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
742 logger.debug(dataErrorMessage)
743 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
745 } catch (Exception ex) {
746 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
747 logger.debug(exceptionMessage)
748 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
755 public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
757 execution.setVariable("prefix",Prefix)
759 logger.trace(" ***** Inside callRESTUpdateContrailAAINetwork() of DoCreateNetworkInstance ***** " )
763 String networkId = execution.getVariable(Prefix + "networkId")
764 L3Network requeryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
765 String createNetworkResponse = execution.getVariable(Prefix + "createNetworkResponse")
767 L3Network l3Network = new L3Network()
768 if (StringUtils.isBlank(requeryIdAAIResponse.getHeatStackId())) {
769 if (utils.nodeExists(createNetworkResponse, 'networkStackId')) {
770 l3Network.setHeatStackId(utils.getNodeText(createNetworkResponse, 'networkStackId'))
773 if (StringUtils.isBlank(requeryIdAAIResponse.getNeutronNetworkId())) {
774 if (utils.nodeExists(createNetworkResponse, 'neutronNetworkId')) {
775 l3Network.setNeutronNetworkId(utils.getNodeText(createNetworkResponse, 'neutronNetworkId'))
778 if (StringUtils.isBlank(requeryIdAAIResponse.getContrailNetworkFqdn())) {
779 if (utils.nodeExists(createNetworkResponse, 'networkFqdn')) {
780 l3Network.setContrailNetworkFqdn(utils.getNodeText(createNetworkResponse, 'networkFqdn'))
784 String status = utils.getNodeText(createNetworkResponse, 'orchestration-status')
785 if(status.equals("pending-create") || status.equals("PendingCreate")){
786 l3Network.setOrchestrationStatus("Created")
788 l3Network.setOrchestrationStatus("Active")
791 logger.debug("Updating l3-network in AAI" )
793 AAIResourcesClient client = new AAIResourcesClient()
794 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().l3Network(networkId))
795 client.update(uri, l3Network)
797 if(requeryIdAAIResponse.getSubnets() != null){
798 for(Subnet s:requeryIdAAIResponse.getSubnets().getSubnet()){
799 String subnetOrchStatus = s.getOrchestrationStatus()
800 String subnetId = s.getSubnetId()
801 Subnet subnet = new Subnet()
802 subnet.setNeutronSubnetId(networkUtils.extractNeutSubId(createNetworkResponse, subnetId))
803 if(subnetOrchStatus.equals("pending-create") || subnetOrchStatus.equals("PendingCreate") ){
804 subnet.setOrchestrationStatus("Created")
806 subnet.setOrchestrationStatus("Active")
809 logger.debug("Updating subnet in AAI" )
810 AAIResourceUri subUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().l3Network(networkId).subnet(subnetId))
811 client.update(subUri, subnet)
816 String rollbackEnabled = execution.getVariable(Prefix + "rollbackEnabled")
817 if (rollbackEnabled == "true") {
818 execution.setVariable(Prefix + "isPONR", false)
820 execution.setVariable(Prefix + "isPONR", true)
822 logger.debug(Prefix + "isPONR" + ": " + execution.getVariable(Prefix + "isPONR"))
824 } catch (BpmnError e) {
826 } catch (NotFoundException e) {
827 String dataErrorMessage = " Response Error from UpdateContrailAAINetwork is 404 (Not Found)."
828 logger.debug(dataErrorMessage)
829 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
830 } catch (Exception ex) {
831 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTUpdateContrailAAINetwork() - " + ex.getMessage()
832 logger.debug(exceptionMessage)
833 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
837 public void prepareCreateNetworkRequest (DelegateExecution execution) {
839 execution.setVariable("prefix",Prefix)
841 logger.trace("Inside prepareCreateNetworkRequest() of DoCreateNetworkInstance")
846 String requestId = execution.getVariable("msoRequestId")
847 if (requestId == null) {
848 requestId = execution.getVariable("mso-request-id")
850 String messageId = execution.getVariable(Prefix + "messageId")
851 String source = execution.getVariable(Prefix + "source")
853 String requestInput = execution.getVariable(Prefix + "networkRequest")
854 L3Network queryIdResponse = execution.getVariable(Prefix + "queryIdAAIResponse")
855 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
856 String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
858 // Prepare Network request
859 String routeCollection = execution.getVariable(Prefix + "routeCollection")
860 String policyCollection = execution.getVariable(Prefix + "networkCollection")
861 String tableCollection = execution.getVariable(Prefix + "tableRefCollection")
862 String createNetworkRequest = networkUtils.CreateNetworkRequestV2(execution, requestId, messageId, requestInput, queryIdResponse, routeCollection, policyCollection, tableCollection, cloudRegionId, backoutOnFailure, source )
864 String buildDeleteNetworkRequestAsString = utils.formatXml(createNetworkRequest)
865 buildDeleteNetworkRequestAsString = buildDeleteNetworkRequestAsString.replace(":w1aac13n0", "").replace("w1aac13n0:", "")
867 execution.setVariable(Prefix + "createNetworkRequest", buildDeleteNetworkRequestAsString)
868 logger.debug(Prefix + "createNetworkRequest - " + "\n" + buildDeleteNetworkRequestAsString)
870 } catch (Exception ex) {
871 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareCreateNetworkRequest() - " + ex.getMessage()
872 logger.debug(exceptionMessage)
873 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
879 public void prepareSDNCRequest (DelegateExecution execution) {
881 execution.setVariable("prefix",Prefix)
883 logger.trace("Inside prepareSDNCRequest() of DoCreateNetworkInstance")
887 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
888 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
889 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
891 String networkId = execution.getVariable(Prefix + "networkId")
892 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
894 // get/set 'msoRequestId' and 'mso-request-id'
895 String requestId = execution.getVariable("msoRequestId")
896 if (requestId != null) {
897 execution.setVariable("mso-request-id", requestId)
899 requestId = execution.getVariable("mso-request-id")
901 execution.setVariable(Prefix + "requestId", requestId)
903 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
904 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
906 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
907 execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
908 logger.debug(Prefix + "assignSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
911 } catch (Exception ex) {
912 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRequest() - " + ex.getMessage()
913 logger.debug(exceptionMessage)
914 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
920 public void prepareRpcSDNCRequest (DelegateExecution execution) {
922 execution.setVariable("prefix",Prefix)
924 logger.trace("Inside prepareRpcSDNCRequest() of DoCreateNetworkInstance")
929 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
930 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
931 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
933 String networkId = execution.getVariable(Prefix + "networkId")
934 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
936 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
937 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
939 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
940 execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
941 logger.debug(Prefix + "assignSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
943 } catch (Exception ex) {
944 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRequest() - " + ex.getMessage()
945 logger.debug(exceptionMessage)
946 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
952 public void prepareRpcSDNCActivateRequest (DelegateExecution execution) {
954 execution.setVariable("prefix",Prefix)
956 logger.trace("Inside prepareRpcSDNCActivateRequest() of DoCreateNetworkInstance")
960 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
961 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
962 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
963 String networkId = execution.getVariable(Prefix + "networkId")
964 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
966 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
967 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
969 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
970 execution.setVariable(Prefix + "activateSDNCRequest", sndcTopologyCreateRequesAsString)
971 logger.debug(Prefix + "activateSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
974 } catch (Exception ex) {
975 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRequest() - " + ex.getMessage()
976 logger.debug(exceptionMessage)
977 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
986 // **************************************************
987 // Post or Validate Response Section
988 // **************************************************
990 public void validateCreateNetworkResponse (DelegateExecution execution) {
992 execution.setVariable("prefix",Prefix)
994 logger.trace("Inside validateNetworkResponse() of DoCreateNetworkInstance")
997 String networkResponse = execution.getVariable(Prefix + "createNetworkResponse")
998 if (networkResponse==null) {
999 networkResponse="" // reset
1002 execution.setVariable(Prefix + "isNetworkRollbackNeeded", true)
1003 execution.setVariable(Prefix + "createNetworkResponse", networkResponse)
1004 logger.debug(" Network Adapter create Success Response - " + "\n" + networkResponse)
1006 // prepare rollback data
1007 String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
1008 rollbackData = rollbackData.replace("rollback>", "networkRollback>")
1009 String rollbackNetwork =
1010 """<rollbackNetworkRequest>
1012 </rollbackNetworkRequest>"""
1013 String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
1014 execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
1015 logger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
1017 } catch (BpmnError e) {
1020 } catch (Exception ex) {
1021 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. validateCreateNetworkResponse() - " + ex.getMessage()
1022 logger.debug(exceptionMessage)
1023 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1030 public void validateSDNCResponse (DelegateExecution execution) {
1032 execution.setVariable("prefix",Prefix)
1034 logger.trace("Inside validateSDNCResponse() of DoCreateNetworkInstance")
1036 String response = execution.getVariable(Prefix + "assignSDNCResponse")
1037 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1038 WorkflowException workflowException = execution.getVariable("WorkflowException")
1040 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
1041 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1043 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "assignSDNCResponse")
1044 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1045 execution.setVariable(Prefix + "assignSDNCResponse", assignSDNCResponseDecodeXml)
1047 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
1048 execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
1049 logger.debug("Successfully Validated SDNC Response")
1052 logger.debug("Did NOT Successfully Validated SDNC Response")
1053 throw new BpmnError("MSOWorkflowException")
1058 public void validateRpcSDNCActivateResponse (DelegateExecution execution) {
1060 execution.setVariable("prefix",Prefix)
1062 logger.trace("Inside validateRpcSDNCActivateResponse() of DoCreateNetworkInstance")
1064 String response = execution.getVariable(Prefix + "activateSDNCResponse")
1065 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1066 WorkflowException workflowException = execution.getVariable("WorkflowException")
1068 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
1069 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1071 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "activateSDNCResponse")
1072 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1073 execution.setVariable(Prefix + "activateSDNCResponse", assignSDNCResponseDecodeXml)
1075 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
1076 execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", true)
1077 logger.debug("Successfully Validated Rpc SDNC Activate Response")
1080 logger.debug("Did NOT Successfully Validated Rpc SDNC Activate Response")
1081 throw new BpmnError("MSOWorkflowException")
1087 public void prepareSDNCRollbackRequest (DelegateExecution execution) {
1089 execution.setVariable("prefix",Prefix)
1091 logger.trace("Inside prepareSDNCRollbackRequest() of DoCreateNetworkInstance")
1095 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1096 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1097 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1098 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1099 String networkId = execution.getVariable(Prefix + "networkId")
1100 if (networkId == 'null') {networkId = ""}
1101 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1103 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1104 String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
1105 String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
1106 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
1107 logger.debug(" Preparing request for SDNC Topology 'rollback-NetworkActivateRequest' rollback . . . - " + "\n" + sndcTopologyRollbackRequestAsString)
1110 } catch (Exception ex) {
1111 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
1112 logger.debug(exceptionMessage)
1113 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1119 public void prepareRpcSDNCRollbackRequest (DelegateExecution execution) {
1121 execution.setVariable("prefix",Prefix)
1123 logger.trace("Inside prepareRpcSDNCRollbackRequest() of DoCreateNetworkInstance")
1127 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1128 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1129 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1130 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1131 String networkId = execution.getVariable(Prefix + "networkId")
1132 if (networkId == 'null') {networkId = ""}
1133 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1135 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1136 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1137 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1138 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1139 logger.debug(" Preparing request for SDNC Topology 'unassign-DeleteNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
1142 } catch (Exception ex) {
1143 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRollbackRequest() - " + ex.getMessage()
1144 logger.debug(exceptionMessage)
1145 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1151 public void prepareRpcSDNCActivateRollback(DelegateExecution execution) {
1153 execution.setVariable("prefix",Prefix)
1155 logger.trace("Inside prepareRpcSDNCActivateRollback() of DoCreateNetworkInstance")
1160 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1161 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1162 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1163 String activateSDNCResponse = execution.getVariable(Prefix + "activateSDNCResponse")
1164 String networkId = execution.getVariable(Prefix + "networkId")
1165 if (networkId == 'null') {networkId = ""}
1166 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1168 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1169 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1170 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1171 execution.setVariable(Prefix + "rollbackActivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1172 logger.debug(" Preparing request for RPC SDNC Topology 'deactivate-DeleteNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
1175 } catch (Exception ex) {
1176 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
1177 logger.debug(exceptionMessage)
1178 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1184 public void prepareRollbackData(DelegateExecution execution) {
1186 execution.setVariable("prefix",Prefix)
1188 logger.trace("Inside prepareRollbackData() of DoCreateNetworkInstance")
1192 Map<String, String> rollbackData = new HashMap<String, String>();
1193 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1194 if (rollbackSDNCRequest != null) {
1195 if (rollbackSDNCRequest != "") {
1196 rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
1199 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1200 if (rollbackNetworkRequest != null) {
1201 if (rollbackNetworkRequest != "") {
1202 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
1205 String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1206 if (rollbackActivateSDNCRequest != null) {
1207 if (rollbackActivateSDNCRequest != "") {
1208 rollbackData.put("rollbackActivateSDNCRequest", execution.getVariable(Prefix + "rollbackActivateSDNCRequest"))
1211 execution.setVariable("rollbackData", rollbackData)
1212 logger.debug("** rollbackData : " + rollbackData)
1214 execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
1215 logger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
1217 } catch (Exception ex) {
1218 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
1219 logger.debug(exceptionMessage)
1220 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1226 public void postProcessResponse(DelegateExecution execution) {
1228 execution.setVariable("prefix",Prefix)
1230 logger.trace("Inside postProcessResponse() of DoCreateNetworkInstance")
1235 // 1. Silent Success: execution.getVariable("CRENWKI_orchestrationStatus") == "ACTIVE"
1236 // 2. Success: execution.getVariable("WorkflowException") == null (NULL)
1237 // 3. WorkflowException: execution.getVariable("WorkflowException") != null (NOT NULL)
1239 logger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
1241 if (execution.getVariable(Prefix + "isException") == false) {
1242 // set rollback data
1243 execution.setVariable("orchestrationStatus", "")
1244 execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
1245 execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
1246 prepareSuccessRollbackData(execution) // populate rollbackData
1247 execution.setVariable("WorkflowException", null)
1248 execution.setVariable(Prefix + "Success", true)
1249 logger.debug(" ***** postProcessResponse(), GOOD !!!")
1251 // inside sub-flow logic
1252 execution.setVariable(Prefix + "Success", false)
1253 execution.setVariable("rollbackData", null)
1254 String exceptionMessage = " Exception encountered in MSO Bpmn. "
1255 if (execution.getVariable("workflowException") != null) { // Output of Rollback flow.
1256 logger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
1257 WorkflowException wfex = execution.getVariable("workflowException")
1258 exceptionMessage = wfex.getErrorMessage()
1260 if (execution.getVariable(Prefix + "WorkflowException") != null) {
1261 WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
1262 exceptionMessage = pwfex.getErrorMessage()
1265 // going to the Main flow: a-la-carte or macro
1266 logger.debug(" ***** postProcessResponse(), BAD !!!")
1267 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1268 throw new BpmnError("MSOWorkflowException")
1271 } catch(BpmnError b){
1272 logger.debug("Rethrowing MSOWorkflowException")
1275 } catch (Exception ex) {
1276 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
1277 logger.debug(exceptionMessage)
1278 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1279 throw new BpmnError("MSOWorkflowException")
1287 public void prepareSuccessRollbackData(DelegateExecution execution) {
1289 execution.setVariable("prefix",Prefix)
1291 logger.trace("Inside prepareSuccessRollbackData() of DoCreateNetworkInstance")
1295 if (execution.getVariable("sdncVersion") != '1610') {
1296 prepareRpcSDNCRollbackRequest(execution)
1297 prepareRpcSDNCActivateRollback(execution)
1299 prepareSDNCRollbackRequest(execution)
1302 Map<String, String> rollbackData = new HashMap<String, String>();
1303 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1304 if (rollbackSDNCRequest != null) {
1305 if (rollbackSDNCRequest != "") {
1306 rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
1309 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1310 if (rollbackNetworkRequest != null) {
1311 if (rollbackNetworkRequest != "") {
1312 rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
1315 String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1316 if (rollbackActivateSDNCRequest != null) {
1317 if (rollbackActivateSDNCRequest != "") {
1318 rollbackData.put("rollbackActivateSDNCRequest", rollbackActivateSDNCRequest)
1321 execution.setVariable("rollbackData", rollbackData)
1323 logger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
1324 execution.setVariable("WorkflowException", null)
1327 } catch (Exception ex) {
1328 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
1329 logger.debug(exceptionMessage)
1330 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1336 public void setExceptionFlag(DelegateExecution execution){
1338 execution.setVariable("prefix",Prefix)
1340 logger.trace("Inside setExceptionFlag() of DoCreateNetworkInstance")
1344 execution.setVariable(Prefix + "isException", true)
1346 if (execution.getVariable("SavedWorkflowException1") != null) {
1347 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1349 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1351 logger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1353 } catch(Exception ex){
1354 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1355 logger.debug(exceptionMessage)
1356 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1362 // *******************************
1363 // Build Error Section
1364 // *******************************
1368 public void processJavaException(DelegateExecution execution){
1370 execution.setVariable("prefix",Prefix)
1373 logger.debug( "Caught a Java Exception in " + Prefix)
1374 logger.debug("Started processJavaException Method")
1375 logger.debug("Variables List: " + execution.getVariables())
1376 execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1377 exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1379 }catch(Exception e){
1380 logger.debug("Caught Exception during processJavaException Method: " + e)
1381 execution.setVariable("UnexpectedError", "Exception in processJavaException method - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1382 exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method" + Prefix)
1384 logger.debug( "Completed processJavaException Method in " + Prefix)