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.aaiclient.client.aai.AAIObjectPlurals
42 import org.onap.aaiclient.client.aai.AAIObjectType
43 import org.onap.aaiclient.client.aai.AAIResourcesClient
44 import org.onap.aaiclient.client.aai.entities.uri.AAIPluralResourceUri
45 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
46 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
47 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
48 import org.onap.aaiclient.client.aai.entities.Relationships
49 import org.onap.aaiclient.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 networkResponse = execution.getVariable(Prefix + "createNetworkResponse")
1011 if (networkResponse==null) {
1012 networkResponse="" // reset
1015 execution.setVariable(Prefix + "isNetworkRollbackNeeded", true)
1016 execution.setVariable(Prefix + "createNetworkResponse", networkResponse)
1017 logger.debug(" Network Adapter create Success Response - " + "\n" + networkResponse)
1019 // prepare rollback data
1020 String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
1021 rollbackData = rollbackData.replace("rollback>", "networkRollback>")
1022 String rollbackNetwork =
1023 """<rollbackNetworkRequest>
1025 </rollbackNetworkRequest>"""
1026 String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
1027 execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
1028 logger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
1030 } catch (BpmnError e) {
1033 } catch (Exception ex) {
1034 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. validateCreateNetworkResponse() - " + ex.getMessage()
1035 logger.debug(exceptionMessage)
1036 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1043 public void validateSDNCResponse (DelegateExecution execution) {
1045 execution.setVariable("prefix",Prefix)
1047 logger.trace("Inside validateSDNCResponse() of DoCreateNetworkInstance")
1049 String response = execution.getVariable(Prefix + "assignSDNCResponse")
1050 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1051 WorkflowException workflowException = execution.getVariable("WorkflowException")
1053 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
1054 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1056 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "assignSDNCResponse")
1057 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1058 execution.setVariable(Prefix + "assignSDNCResponse", assignSDNCResponseDecodeXml)
1060 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
1061 execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
1062 logger.debug("Successfully Validated SDNC Response")
1065 logger.debug("Did NOT Successfully Validated SDNC Response")
1066 throw new BpmnError("MSOWorkflowException")
1071 public void validateRpcSDNCActivateResponse (DelegateExecution execution) {
1073 execution.setVariable("prefix",Prefix)
1075 logger.trace("Inside validateRpcSDNCActivateResponse() of DoCreateNetworkInstance")
1077 String response = execution.getVariable(Prefix + "activateSDNCResponse")
1078 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1079 WorkflowException workflowException = execution.getVariable("WorkflowException")
1081 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
1082 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1084 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "activateSDNCResponse")
1085 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1086 execution.setVariable(Prefix + "activateSDNCResponse", assignSDNCResponseDecodeXml)
1088 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
1089 execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", true)
1090 logger.debug("Successfully Validated Rpc SDNC Activate Response")
1093 logger.debug("Did NOT Successfully Validated Rpc SDNC Activate Response")
1094 throw new BpmnError("MSOWorkflowException")
1100 public void prepareSDNCRollbackRequest (DelegateExecution execution) {
1102 execution.setVariable("prefix",Prefix)
1104 logger.trace("Inside prepareSDNCRollbackRequest() of DoCreateNetworkInstance")
1108 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1109 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1110 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1111 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1112 String networkId = execution.getVariable(Prefix + "networkId")
1113 if (networkId == 'null') {networkId = ""}
1114 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1116 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1117 String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
1118 String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
1119 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
1120 logger.debug(" Preparing request for SDNC Topology 'rollback-NetworkActivateRequest' rollback . . . - " + "\n" + sndcTopologyRollbackRequestAsString)
1123 } catch (Exception ex) {
1124 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
1125 logger.debug(exceptionMessage)
1126 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1132 public void prepareRpcSDNCRollbackRequest (DelegateExecution execution) {
1134 execution.setVariable("prefix",Prefix)
1136 logger.trace("Inside prepareRpcSDNCRollbackRequest() 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 sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1150 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1151 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1152 logger.debug(" Preparing request for SDNC Topology 'unassign-DeleteNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
1155 } catch (Exception ex) {
1156 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRollbackRequest() - " + ex.getMessage()
1157 logger.debug(exceptionMessage)
1158 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1164 public void prepareRpcSDNCActivateRollback(DelegateExecution execution) {
1166 execution.setVariable("prefix",Prefix)
1168 logger.trace("Inside prepareRpcSDNCActivateRollback() of DoCreateNetworkInstance")
1173 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1174 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1175 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1176 String activateSDNCResponse = execution.getVariable(Prefix + "activateSDNCResponse")
1177 String networkId = execution.getVariable(Prefix + "networkId")
1178 if (networkId == 'null') {networkId = ""}
1179 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1181 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1182 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1183 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1184 execution.setVariable(Prefix + "rollbackActivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1185 logger.debug(" Preparing request for RPC SDNC Topology 'deactivate-DeleteNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
1188 } catch (Exception ex) {
1189 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
1190 logger.debug(exceptionMessage)
1191 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1197 public void prepareRollbackData(DelegateExecution execution) {
1199 execution.setVariable("prefix",Prefix)
1201 logger.trace("Inside prepareRollbackData() of DoCreateNetworkInstance")
1205 Map<String, String> rollbackData = new HashMap<String, String>();
1206 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1207 if (rollbackSDNCRequest != null) {
1208 if (rollbackSDNCRequest != "") {
1209 rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
1212 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1213 if (rollbackNetworkRequest != null) {
1214 if (rollbackNetworkRequest != "") {
1215 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
1218 String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1219 if (rollbackActivateSDNCRequest != null) {
1220 if (rollbackActivateSDNCRequest != "") {
1221 rollbackData.put("rollbackActivateSDNCRequest", execution.getVariable(Prefix + "rollbackActivateSDNCRequest"))
1224 execution.setVariable("rollbackData", rollbackData)
1225 logger.debug("** rollbackData : " + rollbackData)
1227 execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
1228 logger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
1230 } catch (Exception ex) {
1231 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
1232 logger.debug(exceptionMessage)
1233 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1239 public void postProcessResponse(DelegateExecution execution) {
1241 execution.setVariable("prefix",Prefix)
1243 logger.trace("Inside postProcessResponse() of DoCreateNetworkInstance")
1248 // 1. Silent Success: execution.getVariable("CRENWKI_orchestrationStatus") == "ACTIVE"
1249 // 2. Success: execution.getVariable("WorkflowException") == null (NULL)
1250 // 3. WorkflowException: execution.getVariable("WorkflowException") != null (NOT NULL)
1252 logger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
1254 if (execution.getVariable(Prefix + "isException") == false) {
1255 // set rollback data
1256 execution.setVariable("orchestrationStatus", "")
1257 execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
1258 execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
1259 prepareSuccessRollbackData(execution) // populate rollbackData
1260 execution.setVariable("WorkflowException", null)
1261 execution.setVariable(Prefix + "Success", true)
1262 logger.debug(" ***** postProcessResponse(), GOOD !!!")
1264 // inside sub-flow logic
1265 execution.setVariable(Prefix + "Success", false)
1266 execution.setVariable("rollbackData", null)
1267 String exceptionMessage = " Exception encountered in MSO Bpmn. "
1268 if (execution.getVariable("workflowException") != null) { // Output of Rollback flow.
1269 logger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
1270 WorkflowException wfex = execution.getVariable("workflowException")
1271 exceptionMessage = wfex.getErrorMessage()
1273 if (execution.getVariable(Prefix + "WorkflowException") != null) {
1274 WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
1275 exceptionMessage = pwfex.getErrorMessage()
1278 // going to the Main flow: a-la-carte or macro
1279 logger.debug(" ***** postProcessResponse(), BAD !!!")
1280 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1281 throw new BpmnError("MSOWorkflowException")
1284 } catch(BpmnError b){
1285 logger.debug("Rethrowing MSOWorkflowException")
1288 } catch (Exception ex) {
1289 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
1290 logger.debug(exceptionMessage)
1291 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1292 throw new BpmnError("MSOWorkflowException")
1300 public void prepareSuccessRollbackData(DelegateExecution execution) {
1302 execution.setVariable("prefix",Prefix)
1304 logger.trace("Inside prepareSuccessRollbackData() of DoCreateNetworkInstance")
1308 if (execution.getVariable("sdncVersion") != '1610') {
1309 prepareRpcSDNCRollbackRequest(execution)
1310 prepareRpcSDNCActivateRollback(execution)
1312 prepareSDNCRollbackRequest(execution)
1315 Map<String, String> rollbackData = new HashMap<String, String>();
1316 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1317 if (rollbackSDNCRequest != null) {
1318 if (rollbackSDNCRequest != "") {
1319 rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
1322 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1323 if (rollbackNetworkRequest != null) {
1324 if (rollbackNetworkRequest != "") {
1325 rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
1328 String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1329 if (rollbackActivateSDNCRequest != null) {
1330 if (rollbackActivateSDNCRequest != "") {
1331 rollbackData.put("rollbackActivateSDNCRequest", rollbackActivateSDNCRequest)
1334 execution.setVariable("rollbackData", rollbackData)
1336 logger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
1337 execution.setVariable("WorkflowException", null)
1340 } catch (Exception ex) {
1341 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
1342 logger.debug(exceptionMessage)
1343 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1349 public void setExceptionFlag(DelegateExecution execution){
1351 execution.setVariable("prefix",Prefix)
1353 logger.trace("Inside setExceptionFlag() of DoCreateNetworkInstance")
1357 execution.setVariable(Prefix + "isException", true)
1359 if (execution.getVariable("SavedWorkflowException1") != null) {
1360 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1362 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1364 logger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1366 } catch(Exception ex){
1367 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1368 logger.debug(exceptionMessage)
1369 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1375 // *******************************
1376 // Build Error Section
1377 // *******************************
1381 public void processJavaException(DelegateExecution execution){
1383 execution.setVariable("prefix",Prefix)
1386 logger.debug( "Caught a Java Exception in " + Prefix)
1387 logger.debug("Started processJavaException Method")
1388 logger.debug("Variables List: " + execution.getVariables())
1389 execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1390 exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1392 }catch(Exception e){
1393 logger.debug("Caught Exception during processJavaException Method: " + e)
1394 execution.setVariable("UnexpectedError", "Exception in processJavaException method - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1395 exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method" + Prefix)
1397 logger.debug( "Completed processJavaException Method in " + Prefix)