2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.bpmn.infrastructure.scripts;
23 import javax.ws.rs.core.UriBuilder
24 import javax.xml.parsers.DocumentBuilder
25 import javax.xml.parsers.DocumentBuilderFactory
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.so.bpmn.common.scripts.AaiUtil
30 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
31 import org.onap.so.bpmn.common.scripts.ExceptionUtil
32 import org.onap.so.bpmn.common.scripts.MsoUtils
33 import org.onap.so.bpmn.common.scripts.NetworkUtils
34 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
35 import org.onap.so.bpmn.common.scripts.VidUtils
36 import org.onap.so.bpmn.core.UrnPropertiesReader
37 import org.onap.so.bpmn.core.WorkflowException
38 import org.onap.so.bpmn.core.json.JsonUtils
39 import org.onap.so.client.aai.AAIObjectPlurals
40 import org.onap.so.client.aai.AAIObjectType
41 import org.onap.so.client.aai.AAIResourcesClient
42 import org.onap.so.client.aai.entities.uri.AAIResourceUri
43 import org.onap.so.client.aai.entities.uri.AAIUriFactory
44 import org.onap.so.client.aai.entities.AAIResultWrapper
45 import org.onap.so.client.aai.entities.Relationships
46 import org.onap.so.client.graphinventory.entities.uri.Depth
47 import org.onap.so.constants.Defaults
48 import org.onap.so.logger.MsoLogger
49 import org.springframework.web.util.UriUtils
50 import org.w3c.dom.Document
51 import org.w3c.dom.Element
52 import org.w3c.dom.NamedNodeMap
53 import org.w3c.dom.Node
54 import org.w3c.dom.NodeList;
55 import org.xml.sax.InputSource
56 import org.onap.aai.domain.yang.VpnBinding
57 import org.onap.aai.domain.yang.L3Network
58 import org.onap.aai.domain.yang.L3Networks
59 import org.onap.aai.domain.yang.NetworkPolicy
60 import org.onap.aai.domain.yang.RouteTableReference
61 import org.onap.aai.domain.yang.RouteTarget
62 import org.onap.aai.domain.yang.Subnet
63 import com.fasterxml.jackson.jaxrs.util.EndpointAsBeanProperty
65 import javax.ws.rs.NotFoundException
68 import groovy.xml.XmlUtil
71 * This groovy class supports the <class>DoCreateNetworkInstance.bpmn</class> process.
74 public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor {
75 private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, DoCreateNetworkInstance.class);
77 String Prefix="CRENWKI_"
78 ExceptionUtil exceptionUtil = new ExceptionUtil()
79 JsonUtils jsonUtil = new JsonUtils()
80 VidUtils vidUtils = new VidUtils(this)
81 NetworkUtils networkUtils = new NetworkUtils()
82 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
84 def className = getClass().getSimpleName()
87 * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstance.bpmn</class> process.
90 public InitializeProcessVariables(DelegateExecution execution){
91 /* Initialize all the process variables in this block */
93 execution.setVariable(Prefix + "networkRequest", "")
94 execution.setVariable(Prefix + "rollbackEnabled", null)
95 execution.setVariable(Prefix + "networkInputs", "")
96 //execution.setVariable(Prefix + "requestId", "")
97 execution.setVariable(Prefix + "messageId", "")
98 execution.setVariable(Prefix + "source", "")
99 execution.setVariable("BasicAuthHeaderValuePO", "")
100 execution.setVariable("BasicAuthHeaderValueSDNC", "")
101 execution.setVariable(Prefix + "serviceInstanceId","")
102 execution.setVariable("GENGS_type", "")
103 execution.setVariable(Prefix + "rsrc_endpoint", null)
104 execution.setVariable(Prefix + "networkOutputs", "")
105 execution.setVariable(Prefix + "networkId","")
106 execution.setVariable(Prefix + "networkName","")
109 execution.setVariable(Prefix + "queryNameAAIRequest","")
110 execution.setVariable(Prefix + "queryNameAAIResponse", "")
111 execution.setVariable(Prefix + "aaiNameReturnCode", "")
112 execution.setVariable(Prefix + "isAAIqueryNameGood", false)
114 // AAI query Cloud Region
115 execution.setVariable(Prefix + "queryCloudRegionRequest","")
116 execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
117 execution.setVariable(Prefix + "queryCloudRegionResponse","")
118 execution.setVariable(Prefix + "cloudRegionPo","")
119 execution.setVariable(Prefix + "cloudRegionSdnc","")
120 execution.setVariable(Prefix + "isCloudRegionGood", false)
123 execution.setVariable(Prefix + "queryIdAAIRequest","")
124 execution.setVariable(Prefix + "queryIdAAIResponse", "")
125 execution.setVariable(Prefix + "aaiIdReturnCode", "")
127 // AAI query vpn binding
128 execution.setVariable(Prefix + "queryVpnBindingAAIRequest","")
129 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", "")
130 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "")
131 execution.setVariable(Prefix + "vpnBindings", null)
132 execution.setVariable(Prefix + "vpnCount", 0)
133 execution.setVariable(Prefix + "routeCollection", "")
135 // AAI query network policy
136 execution.setVariable(Prefix + "queryNetworkPolicyAAIRequest","")
137 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", "")
138 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "")
139 execution.setVariable(Prefix + "networkPolicyUriList", null)
140 execution.setVariable(Prefix + "networkPolicyCount", 0)
141 execution.setVariable(Prefix + "networkCollection", "")
143 // AAI query route table reference
144 execution.setVariable(Prefix + "queryNetworkTableRefAAIRequest","")
145 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", "")
146 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "")
147 execution.setVariable(Prefix + "networkTableRefUriList", null)
148 execution.setVariable(Prefix + "networkTableRefCount", 0)
149 execution.setVariable(Prefix + "tableRefCollection", "")
152 execution.setVariable(Prefix + "requeryIdAAIRequest","")
153 execution.setVariable(Prefix + "requeryIdAAIResponse", "")
154 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "")
156 // AAI update contrail
157 execution.setVariable(Prefix + "updateContrailAAIUrlRequest","")
158 execution.setVariable(Prefix + "updateContrailAAIPayloadRequest","")
159 execution.setVariable(Prefix + "updateContrailAAIResponse", "")
160 execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", "")
162 execution.setVariable(Prefix + "createNetworkRequest", "")
163 execution.setVariable(Prefix + "createNetworkResponse", "")
164 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
165 //execution.setVariable(Prefix + "rollbackNetworkResponse", "")
166 execution.setVariable(Prefix + "networkReturnCode", "")
167 //execution.setVariable(Prefix + "rollbackNetworkReturnCode", "")
168 execution.setVariable(Prefix + "isNetworkRollbackNeeded", false)
170 execution.setVariable(Prefix + "assignSDNCRequest", "")
171 execution.setVariable(Prefix + "assignSDNCResponse", "")
172 execution.setVariable(Prefix + "rollbackSDNCRequest", "")
173 //execution.setVariable(Prefix + "rollbackSDNCResponse", "")
174 execution.setVariable(Prefix + "sdncReturnCode", "")
175 //execution.setVariable(Prefix + "rollbackSDNCReturnCode", "")
176 execution.setVariable(Prefix + "isSdncRollbackNeeded", false)
177 execution.setVariable(Prefix + "sdncResponseSuccess", false)
179 execution.setVariable(Prefix + "activateSDNCRequest", "")
180 execution.setVariable(Prefix + "activateSDNCResponse", "")
181 execution.setVariable(Prefix + "rollbackActivateSDNCRequest", "")
182 //execution.setVariable(Prefix + "rollbackActivateSDNCResponse", "")
183 execution.setVariable(Prefix + "sdncActivateReturnCode", "")
184 //execution.setVariable(Prefix + "rollbackActivateSDNCReturnCode", "")
185 execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", false)
186 execution.setVariable(Prefix + "sdncActivateResponseSuccess", false)
188 execution.setVariable(Prefix + "orchestrationStatus", "")
189 execution.setVariable(Prefix + "isVnfBindingPresent", false)
190 execution.setVariable(Prefix + "Success", false)
192 execution.setVariable(Prefix + "isException", false)
196 // **************************************************
197 // Pre or Prepare Request Section
198 // **************************************************
200 * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstance.bpmn</class> process.
203 public void preProcessRequest (DelegateExecution execution) {
205 execution.setVariable("prefix",Prefix)
206 msoLogger.trace("Inside preProcessRequest() of " + className + ".groovy")
209 // initialize flow variables
210 InitializeProcessVariables(execution)
212 // GET Incoming request & validate 3 kinds of format.
213 execution.setVariable("action", "CREATE")
214 String networkRequest = execution.getVariable("bpmnRequest")
215 if (networkRequest != null) {
216 if (networkRequest.contains("requestDetails")) {
217 // JSON format request is sent, create xml
219 def prettyJson = JsonOutput.prettyPrint(networkRequest.toString())
220 msoLogger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
221 networkRequest = vidUtils.createXmlNetworkRequestInfra(execution, networkRequest)
223 } catch (Exception ex) {
224 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
225 msoLogger.debug(dataErrorMessage)
226 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
229 // XML format request is sent
233 // vIPR format request is sent, create xml from individual variables
234 networkRequest = vidUtils.createXmlNetworkRequestInstance(execution)
237 networkRequest = utils.formatXml(networkRequest)
238 execution.setVariable(Prefix + "networkRequest", networkRequest)
239 msoLogger.debug(Prefix + "networkRequest - " + '\n' + networkRequest)
241 // validate 'backout-on-failure' to override 'mso.rollback'
242 boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, networkRequest)
243 execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
244 msoLogger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
246 String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
247 execution.setVariable(Prefix + "networkInputs", networkInputs)
248 msoLogger.debug(Prefix + "networkInputs - " + '\n' + networkInputs)
251 String messageId = execution.getVariable("testMessageId") // for testing
252 if (messageId == null || messageId == "") {
253 messageId = UUID.randomUUID()
254 msoLogger.debug(Prefix + "messageId, random generated: " + messageId)
256 msoLogger.debug(Prefix + "messageId, pre-assigned: " + messageId)
258 execution.setVariable(Prefix + "messageId", messageId)
260 String source = utils.getNodeText(networkRequest, "source")
261 execution.setVariable(Prefix + "source", source)
262 msoLogger.debug(Prefix + "source - " + source)
264 // validate cloud region
265 String lcpCloudRegionId = utils.getNodeText(networkRequest, "aic-cloud-region")
266 if ((lcpCloudRegionId == null) || (lcpCloudRegionId == "") || (lcpCloudRegionId == "null")) {
267 String dataErrorMessage = "Missing value/element: 'lcpCloudRegionId' or 'cloudConfiguration' or 'aic-cloud-region'."
268 msoLogger.debug(" Invalid Request - " + dataErrorMessage)
269 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
272 // validate service instance id
273 String serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id")
274 if ((serviceInstanceId == null) || (serviceInstanceId == "") || (serviceInstanceId == "null")) {
275 String dataErrorMessage = "Missing value/element: 'serviceInstanceId'."
276 msoLogger.debug(" Invalid Request - " + dataErrorMessage)
277 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
280 // PO Authorization Info / headers Authorization=
281 String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
284 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey",execution))
285 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
286 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
288 } catch (IOException ex) {
289 String exceptionMessage = "Exception Encountered in DoCreateNetworkInstance, PreProcessRequest() - "
290 String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
291 msoLogger.debug(dataErrorMessage)
292 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
295 // Set variables for Generic Get Sub Flow use
296 execution.setVariable(Prefix + "serviceInstanceId", serviceInstanceId)
297 msoLogger.debug(Prefix + "serviceInstanceId - " + serviceInstanceId)
299 execution.setVariable("GENGS_type", "service-instance")
300 msoLogger.debug("GENGS_type - " + "service-instance")
301 msoLogger.debug(" Url for SDNC adapter: " + UrnPropertiesReader.getVariable("mso.adapters.sdnc.endpoint",execution))
303 String sdncVersion = execution.getVariable("sdncVersion")
304 msoLogger.debug("sdncVersion? : " + sdncVersion)
306 // build 'networkOutputs'
307 String networkId = utils.getNodeText(networkRequest, "network-id")
308 if ((networkId == null) || (networkId == "null")) {
311 String networkName = utils.getNodeText(networkRequest, "network-name")
312 if ((networkName == null) || (networkName == "null")) {
315 String networkOutputs =
317 <network-id>${MsoUtils.xmlEscape(networkId)}</network-id>
318 <network-name>${MsoUtils.xmlEscape(networkName)}</network-name>
319 </network-outputs>"""
320 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
321 msoLogger.debug(Prefix + "networkOutputs - " + '\n' + networkOutputs)
322 execution.setVariable(Prefix + "networkId", networkId)
323 execution.setVariable(Prefix + "networkName", networkName)
325 } catch (BpmnError e) {
328 } catch (Exception ex) {
329 sendSyncError(execution)
331 String exceptionMessage = "Exception Encountered in PreProcessRequest() of " + className + ".groovy ***** : " + ex.getMessage()
332 msoLogger.debug(exceptionMessage)
333 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
340 * Gets the service instance uri from aai
342 public void getServiceInstance(DelegateExecution execution) {
344 String serviceInstanceId = execution.getVariable('CRENWKI_serviceInstanceId')
346 AAIResourcesClient resourceClient = new AAIResourcesClient()
347 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
349 if(!resourceClient.exists(uri)){
350 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service instance was not found in aai")
352 Map<String, String> keys = uri.getURIKeys()
353 execution.setVariable("serviceType", keys.get("service-type"))
354 execution.setVariable("subscriberName", keys.get("global-customer-id"))
357 }catch(BpmnError e) {
359 }catch (Exception ex){
360 String msg = "Exception in getServiceInstance. " + ex.getMessage()
362 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
367 public void callRESTQueryAAINetworkName (DelegateExecution execution) {
369 execution.setVariable("prefix",Prefix)
371 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkName() of DoCreateNetworkInstance ***** " )
375 String networkInputs = execution.getVariable(Prefix + "networkInputs")
376 String networkName = utils.getNodeText(networkInputs, "network-name")
378 AAIResourcesClient client = new AAIResourcesClient()
379 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L3_NETWORK).queryParam("network-name", networkName)
380 L3Networks networks = client.get(uri, NotFoundException.class).asBean(L3Networks.class).get()
381 L3Network network = networks.getL3Network().get(0)
383 execution.setVariable(Prefix + "isAAIqueryNameGood", true)
384 String orchestrationStatus = network.getOrchestrationStatus()
385 execution.setVariable(Prefix + "orchestrationStatus", orchestrationStatus.toUpperCase())
386 msoLogger.debug(Prefix + "orchestrationStatus - " + orchestrationStatus.toUpperCase())
387 execution.setVariable("orchestrationStatus", orchestrationStatus)
389 msoLogger.debug(Prefix + "isAAIqueryNameGood? : " + execution.getVariable(Prefix + "isAAIqueryNameGood"))
391 } catch (NotFoundException e) {
392 msoLogger.debug(" QueryAAINetworkName return code = '404' (Not Found). Proceed with the Create !!! ")
394 } catch (Exception ex) {
396 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow - callRESTQueryAAINetworkName() - " + ex.getMessage()
397 msoLogger.debug(exceptionMessage)
398 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
404 public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
406 execution.setVariable("prefix",Prefix)
408 msoLogger.debug(" ***** Inside callRESTQueryAAICloudRegion() of DoCreateNetworkInstance ***** " )
411 String networkInputs = execution.getVariable(Prefix + "networkInputs")
412 String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
415 AaiUtil aaiUtil = new AaiUtil(this)
417 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, Defaults.CLOUD_OWNER.toString(), cloudRegion)
418 def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
420 execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
422 String cloudRegionPo = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
423 String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "SDNC", cloudRegion)
425 if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
426 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
427 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
428 execution.setVariable(Prefix + "isCloudRegionGood", true)
431 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
432 msoLogger.debug(dataErrorMessage)
433 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
437 msoLogger.debug(" is Cloud Region Good: " + execution.getVariable(Prefix + "isCloudRegionGood"))
439 } catch (BpmnError e) {
442 } catch (Exception ex) {
444 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow - callRESTQueryAAICloudRegion() - " + ex.getMessage()
445 msoLogger.debug(exceptionMessage)
446 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
452 public void callRESTQueryAAINetworkId(DelegateExecution execution) {
454 execution.setVariable("prefix",Prefix)
456 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
460 String networkId = ""
461 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
462 if (execution.getVariable("sdncVersion") != "1610") {
463 String networkResponseInformation = ""
465 networkResponseInformation = utils.getNodeXml(assignSDNCResponse, "network-response-information", false).replace("tag0:","").replace(":tag0","")
466 networkId = utils.getNodeText(networkResponseInformation, "instance-id")
467 } catch (Exception ex) {
468 String dataErrorMessage = " SNDC Response network validation for 'instance-id' (network-id) failed: Empty <network-response-information>"
469 msoLogger.debug(dataErrorMessage)
470 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
474 networkId = utils.getNodeText(assignSDNCResponse, "network-id")
476 if (networkId == null || networkId == "null") {
477 String dataErrorMessage = "SNDC Response did not contains 'instance-id' or 'network-id' element, or the value is null."
478 msoLogger.debug(dataErrorMessage)
479 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
481 msoLogger.debug(" SNDC Response network validation for 'instance-id' (network-id)' is good: " + networkId)
485 execution.setVariable(Prefix + "networkId", networkId)
486 String networkName = utils.getNodeText(assignSDNCResponse, "network-name")
487 execution.setVariable(Prefix + "networkName", networkName)
489 AAIResourcesClient client = new AAIResourcesClient()
490 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
491 L3Network network = client.get(uri, NotFoundException.class).asBean(L3Network.class).get()
493 execution.setVariable(Prefix + "queryIdAAIResponse", network)
495 String netId = network.getNetworkId()
496 execution.setVariable(Prefix + "networkId", netId)
497 String netName = network.getNetworkName()
498 execution.setVariable(Prefix + "networkName", netName)
500 } catch (NotFoundException e) {
501 String dataErrorMessage = "Response Error from QueryAAINetworkId is 404 (Not Found)."
502 msoLogger.debug(" AAI Query Failed. " + dataErrorMessage)
503 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
505 } catch (Exception ex) {
506 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkId() - " + ex.getMessage()
507 msoLogger.debug(exceptionMessage)
508 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
514 public void callRESTReQueryAAINetworkId(DelegateExecution execution) {
516 execution.setVariable("prefix",Prefix)
518 msoLogger.debug(" ***** Inside callRESTReQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
522 String networkId = execution.getVariable(Prefix + "networkId")
523 String netId = networkId
525 AAIResourcesClient client = new AAIResourcesClient()
526 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
527 L3Network network = client.get(uri, NotFoundException.class).asBean(L3Network.class).get()
529 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "200")
530 execution.setVariable(Prefix + "requeryIdAAIResponse", network)
532 String netName = network.getNetworkName()
533 String networkOutputs =
535 <network-id>${MsoUtils.xmlEscape(netId)}</network-id>
536 <network-name>${MsoUtils.xmlEscape(netName)}</network-name>
537 </network-outputs>"""
538 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
539 msoLogger.debug(" networkOutputs - " + '\n' + networkOutputs)
542 } catch (NotFoundException e) {
543 String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
544 msoLogger.debug(" AAI ReQuery Failed. - " + dataErrorMessage)
545 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
547 } catch (Exception ex) {
548 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTReQueryAAINetworkId() - " + ex.getMessage()
549 msoLogger.debug(exceptionMessage)
550 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
556 public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
558 execution.setVariable("prefix",Prefix)
560 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding() of DoCreateNetworkInstance ***** " )
564 AAIResourcesClient client = new AAIResourcesClient()
565 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
566 Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
567 if(relationships.isPresent()){
568 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.VPN_BINDING)
570 msoLogger.debug(Prefix + "vpnCount - " + uris.size())
572 if (uris.size() > 0) {
573 String routeTargets = ""
574 for(AAIResourceUri u : uris) {
576 AAIResultWrapper wrapper = client.get(u.depth(Depth.TWO), NotFoundException.class)
577 Optional<VpnBinding> binding = wrapper.asBean(VpnBinding.class)
579 String routeTarget = ""
580 String routeRole = ""
581 if(binding.get().getRouteTargets() != null) {
582 List<RouteTarget> targets = binding.get().getRouteTargets().getRouteTarget()
583 for(RouteTarget target : targets) {
584 routeTarget = target.getGlobalRouteTarget()
585 routeRole = target.getRouteTargetRole()
586 routeTargets += "<routeTargets>" + '\n' +
587 " <routeTarget>" + routeTarget + "</routeTarget>" + '\n' +
588 " <routeTargetRole>" + routeRole + "</routeTargetRole>" + '\n' +
589 "</routeTargets>" + '\n'
595 execution.setVariable(Prefix + "routeCollection", routeTargets)
596 msoLogger.debug(Prefix + "routeCollection - " + '\n' + routeTargets)
599 // reset return code to success
600 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
601 AaiUtil aaiUriUtil = new AaiUtil(this)
602 String schemaVersion = aaiUriUtil.getNamespace()
603 String aaiStubResponse =
604 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
605 <vpn-binding xmlns="${schemaVersion}">
606 <global-route-target/>
609 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
610 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiStubResponseAsXml)
611 execution.setVariable(Prefix + "routeCollection", "<routeTargets/>")
612 msoLogger.debug(" No vpnBinding, using this stub as response - " + '\n' + aaiStubResponseAsXml)
617 } catch (NotFoundException e) {
618 msoLogger.debug("Response Error from AAINetworkVpnBinding is 404 (Not Found).")
619 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Response Error from AAINetworkVpnBinding is 404 (Not Found).")
620 } catch (Exception ex) {
621 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkVpnBinding() - " + ex.getMessage()
622 msoLogger.debug(exceptionMessage)
623 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
629 public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
631 execution.setVariable("prefix",Prefix)
633 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkPolicy() of DoCreateNetworkInstance ***** " )
636 AAIResourcesClient client = new AAIResourcesClient()
637 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
638 Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
639 if(relationships.isPresent()){
640 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.NETWORK_POLICY)
642 execution.setVariable(Prefix + "networkPolicyCount", uris.size())
643 msoLogger.debug(Prefix + "networkPolicyCount - " + uris.size())
645 if (uris.size() > 0) {
647 String networkPolicies = ""
648 // AII loop call using list vpnBindings
649 for(AAIResourceUri u : uris) {
651 NetworkPolicy p = client.get(u, NotFoundException.class).asBean(NetworkPolicy.class).get()
653 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
655 String networkPolicy = p.getNetworkPolicyFqdn()
656 networkPolicies += "<policyFqdns>" + networkPolicy + "</policyFqdns>" + '\n'
660 execution.setVariable(Prefix + "networkCollection", networkPolicies)
661 msoLogger.debug(Prefix + "networkCollection - " + '\n' + networkPolicies)
664 // reset return code to success
665 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
666 AaiUtil aaiUriUtil = new AaiUtil(this)
667 String schemaVersion = aaiUriUtil.getNamespace()
668 String aaiStubResponse =
669 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
670 <network-policy xmlns="${schemaVersion}">
671 <network-policy-fqdn/>
674 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
675 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiStubResponseAsXml)
676 execution.setVariable(Prefix + "networkCollection", "<policyFqdns/>")
677 msoLogger.debug(" No net policies, using this stub as response - " + '\n' + aaiStubResponseAsXml)
681 } catch (NotFoundException e) {
682 String dataErrorMessage = "Response Error from QueryAAINetworkPolicy is 404 (Not Found)."
683 msoLogger.debug(dataErrorMessage)
684 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
686 } catch (Exception ex) {
687 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkPolicy() - " + ex.getMessage()
688 msoLogger.debug(exceptionMessage)
689 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
695 public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
697 execution.setVariable("prefix",Prefix)
699 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkTableRef() of DoCreateNetworkInstance ***** " )
703 AAIResourcesClient client = new AAIResourcesClient()
704 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
705 Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
706 if(relationships.isPresent()){
707 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.ROUTE_TABLE_REFERENCE)
709 execution.setVariable(Prefix + "networkTableRefCount", uris.size())
710 msoLogger.debug(Prefix + "networkTableRefCount - " + uris.size())
713 if (uris.size() > 0) {
715 // AII loop call using list vpnBindings
716 String networkTableRefs = ""
717 for(AAIResourceUri u : uris) {
719 RouteTableReference rt = client.get(u, NotFoundException.class).asBean(RouteTableReference.class).get()
721 String networkTableRef = rt.getRouteTableReferenceFqdn()
722 networkTableRefs += "<routeTableFqdns>" + networkTableRef + "</routeTableFqdns>" + '\n'
727 execution.setVariable(Prefix + "tableRefCollection", networkTableRefs)
728 msoLogger.debug(Prefix + "tableRefCollection - " + '\n' + networkTableRefs)
731 // reset return code to success
732 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
733 AaiUtil aaiUriUtil = new AaiUtil(this)
734 String schemaVersion = aaiUriUtil.getNamespace()
735 String aaiStubResponse =
736 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
737 <route-table-references xmlns="${schemaVersion}">
738 <route-table-reference-fqdn/>
739 </route-table-references>
741 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
742 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiStubResponseAsXml)
743 execution.setVariable(Prefix + "tableRefCollection", "<routeTableFqdns/>")
744 msoLogger.debug(" No net table references, using this stub as response - " + '\n' + aaiStubResponseAsXml)
749 } catch (NotFoundException e) {
750 String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
751 msoLogger.debug(dataErrorMessage)
752 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
754 } catch (Exception ex) {
755 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
756 msoLogger.debug(exceptionMessage)
757 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
764 public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
766 execution.setVariable("prefix",Prefix)
768 msoLogger.trace(" ***** Inside callRESTUpdateContrailAAINetwork() of DoCreateNetworkInstance ***** " )
772 String networkId = execution.getVariable(Prefix + "networkId")
773 L3Network requeryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
774 String createNetworkResponse = execution.getVariable(Prefix + "createNetworkResponse")
776 L3Network l3Network = new L3Network()
777 if (StringUtils.isBlank(requeryIdAAIResponse.getHeatStackId())) {
778 if (utils.nodeExists(createNetworkResponse, 'networkStackId')) {
779 l3Network.setHeatStackId(utils.getNodeText(createNetworkResponse, 'networkStackId'))
782 if (StringUtils.isBlank(requeryIdAAIResponse.getNeutronNetworkId())) {
783 if (utils.nodeExists(createNetworkResponse, 'neutronNetworkId')) {
784 l3Network.setNeutronNetworkId(utils.getNodeText(createNetworkResponse, 'neutronNetworkId'))
787 if (StringUtils.isBlank(requeryIdAAIResponse.getContrailNetworkFqdn())) {
788 if (utils.nodeExists(createNetworkResponse, 'networkFqdn')) {
789 l3Network.setContrailNetworkFqdn(utils.getNodeText(createNetworkResponse, 'networkFqdn'))
793 String status = utils.getNodeText(createNetworkResponse, 'orchestration-status')
794 if(status.equals("pending-create") || status.equals("PendingCreate")){
795 l3Network.setOrchestrationStatus("Created")
797 l3Network.setOrchestrationStatus("Active")
800 msoLogger.debug("Updating l3-network in AAI" )
802 AAIResourcesClient client = new AAIResourcesClient()
803 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId)
804 client.update(uri, l3Network)
806 if(requeryIdAAIResponse.getSubnets() != null){
807 for(Subnet s:requeryIdAAIResponse.getSubnets().getSubnet()){
808 String subnetOrchStatus = s.getOrchestrationStatus()
809 String subnetId = s.getSubnetId()
810 Subnet subnet = new Subnet()
811 subnet.setNeutronSubnetId(networkUtils.extractNeutSubId(createNetworkResponse, subnetId))
812 if(subnetOrchStatus.equals("pending-create") || subnetOrchStatus.equals("PendingCreate") ){
813 subnet.setOrchestrationStatus("Created")
815 subnet.setOrchestrationStatus("Active")
818 msoLogger.debug("Updating subnet in AAI" )
819 AAIResourceUri subUri = AAIUriFactory.createResourceUri(AAIObjectType.SUBNET, networkId, subnetId)
820 client.update(subUri, subnet)
825 String rollbackEnabled = execution.getVariable(Prefix + "rollbackEnabled")
826 if (rollbackEnabled == "true") {
827 execution.setVariable(Prefix + "isPONR", false)
829 execution.setVariable(Prefix + "isPONR", true)
831 msoLogger.debug(Prefix + "isPONR" + ": " + execution.getVariable(Prefix + "isPONR"))
833 } catch (BpmnError e) {
835 } catch (NotFoundException e) {
836 String dataErrorMessage = " Response Error from UpdateContrailAAINetwork is 404 (Not Found)."
837 msoLogger.debug(dataErrorMessage)
838 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
839 } catch (Exception ex) {
840 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTUpdateContrailAAINetwork() - " + ex.getMessage()
841 msoLogger.debug(exceptionMessage)
842 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
846 public void prepareCreateNetworkRequest (DelegateExecution execution) {
848 execution.setVariable("prefix",Prefix)
850 msoLogger.trace("Inside prepareCreateNetworkRequest() of DoCreateNetworkInstance")
855 String requestId = execution.getVariable("msoRequestId")
856 if (requestId == null) {
857 requestId = execution.getVariable("mso-request-id")
859 String messageId = execution.getVariable(Prefix + "messageId")
860 String source = execution.getVariable(Prefix + "source")
862 String requestInput = execution.getVariable(Prefix + "networkRequest")
863 L3Network queryIdResponse = execution.getVariable(Prefix + "queryIdAAIResponse")
864 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
865 String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
867 // Prepare Network request
868 String routeCollection = execution.getVariable(Prefix + "routeCollection")
869 String policyCollection = execution.getVariable(Prefix + "networkCollection")
870 String tableCollection = execution.getVariable(Prefix + "tableRefCollection")
871 String createNetworkRequest = networkUtils.CreateNetworkRequestV2(execution, requestId, messageId, requestInput, queryIdResponse, routeCollection, policyCollection, tableCollection, cloudRegionId, backoutOnFailure, source )
873 String buildDeleteNetworkRequestAsString = utils.formatXml(createNetworkRequest)
874 buildDeleteNetworkRequestAsString = buildDeleteNetworkRequestAsString.replace(":w1aac13n0", "").replace("w1aac13n0:", "")
876 execution.setVariable(Prefix + "createNetworkRequest", buildDeleteNetworkRequestAsString)
877 msoLogger.debug(Prefix + "createNetworkRequest - " + "\n" + buildDeleteNetworkRequestAsString)
879 } catch (Exception ex) {
880 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareCreateNetworkRequest() - " + ex.getMessage()
881 msoLogger.debug(exceptionMessage)
882 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
888 public void prepareSDNCRequest (DelegateExecution execution) {
890 execution.setVariable("prefix",Prefix)
892 msoLogger.trace("Inside prepareSDNCRequest() of DoCreateNetworkInstance")
896 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
897 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
898 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
900 String networkId = execution.getVariable(Prefix + "networkId")
901 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
903 // get/set 'msoRequestId' and 'mso-request-id'
904 String requestId = execution.getVariable("msoRequestId")
905 if (requestId != null) {
906 execution.setVariable("mso-request-id", requestId)
908 requestId = execution.getVariable("mso-request-id")
910 execution.setVariable(Prefix + "requestId", requestId)
912 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
913 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
915 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
916 execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
917 msoLogger.debug(Prefix + "assignSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
920 } catch (Exception ex) {
921 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRequest() - " + ex.getMessage()
922 msoLogger.debug(exceptionMessage)
923 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
929 public void prepareRpcSDNCRequest (DelegateExecution execution) {
931 execution.setVariable("prefix",Prefix)
933 msoLogger.trace("Inside prepareRpcSDNCRequest() of DoCreateNetworkInstance")
938 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
939 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
940 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
942 String networkId = execution.getVariable(Prefix + "networkId")
943 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
945 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
946 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
948 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
949 execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
950 msoLogger.debug(Prefix + "assignSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
952 } catch (Exception ex) {
953 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRequest() - " + ex.getMessage()
954 msoLogger.debug(exceptionMessage)
955 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
961 public void prepareRpcSDNCActivateRequest (DelegateExecution execution) {
963 execution.setVariable("prefix",Prefix)
965 msoLogger.trace("Inside prepareRpcSDNCActivateRequest() of DoCreateNetworkInstance")
969 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
970 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
971 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
972 String networkId = execution.getVariable(Prefix + "networkId")
973 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
975 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
976 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
978 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
979 execution.setVariable(Prefix + "activateSDNCRequest", sndcTopologyCreateRequesAsString)
980 msoLogger.debug(Prefix + "activateSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
983 } catch (Exception ex) {
984 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRequest() - " + ex.getMessage()
985 msoLogger.debug(exceptionMessage)
986 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
995 // **************************************************
996 // Post or Validate Response Section
997 // **************************************************
999 public void validateCreateNetworkResponse (DelegateExecution execution) {
1001 execution.setVariable("prefix",Prefix)
1003 msoLogger.trace("Inside validateNetworkResponse() of DoCreateNetworkInstance")
1006 String returnCode = execution.getVariable(Prefix + "networkReturnCode")
1007 String networkResponse = execution.getVariable(Prefix + "createNetworkResponse")
1008 if (networkResponse==null) {
1009 networkResponse="" // reset
1012 msoLogger.debug(" Network Adapter create responseCode: " + returnCode)
1014 String errorMessage = ""
1015 if (returnCode == "200") {
1016 execution.setVariable(Prefix + "isNetworkRollbackNeeded", true)
1017 execution.setVariable(Prefix + "createNetworkResponse", networkResponse)
1018 msoLogger.debug(" Network Adapter create Success Response - " + "\n" + networkResponse)
1020 // prepare rollback data
1021 String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
1022 rollbackData = rollbackData.replace("rollback>", "networkRollback>")
1023 String rollbackNetwork =
1024 """<rollbackNetworkRequest>
1026 </rollbackNetworkRequest>"""
1027 String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
1028 execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
1029 msoLogger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
1031 } else { // network error
1032 if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) { //4xx, 5xx
1033 if (networkResponse.contains("createNetworkError")) {
1034 networkResponse = networkResponse.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '')
1035 errorMessage = utils.getNodeText(networkResponse, "message")
1036 errorMessage = "Received error from Network Adapter: " + errorMessage
1037 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
1039 } else { // CatchAll exception
1040 if (returnCode == "500") {
1041 errorMessage = "JBWEB000065: HTTP Status 500."
1043 errorMessage = "Return code is " + returnCode
1045 errorMessage = "Received error from Network Adapter: " + errorMessage
1046 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
1050 } else { // CatchAll exception
1051 String dataErrorMessage = "Received error from Network Adapter. Return code is: " + returnCode
1052 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
1058 } catch (BpmnError e) {
1061 } catch (Exception ex) {
1062 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. validateCreateNetworkResponse() - " + ex.getMessage()
1063 msoLogger.debug(exceptionMessage)
1064 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1071 public void validateSDNCResponse (DelegateExecution execution) {
1073 execution.setVariable("prefix",Prefix)
1075 msoLogger.trace("Inside validateSDNCResponse() of DoCreateNetworkInstance")
1077 String response = execution.getVariable(Prefix + "assignSDNCResponse")
1078 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1079 WorkflowException workflowException = execution.getVariable("WorkflowException")
1081 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
1082 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1084 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "assignSDNCResponse")
1085 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1086 execution.setVariable(Prefix + "assignSDNCResponse", assignSDNCResponseDecodeXml)
1088 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
1089 execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
1090 msoLogger.debug("Successfully Validated SDNC Response")
1093 msoLogger.debug("Did NOT Successfully Validated SDNC Response")
1094 throw new BpmnError("MSOWorkflowException")
1099 public void validateRpcSDNCActivateResponse (DelegateExecution execution) {
1101 execution.setVariable("prefix",Prefix)
1103 msoLogger.trace("Inside validateRpcSDNCActivateResponse() of DoCreateNetworkInstance")
1105 String response = execution.getVariable(Prefix + "activateSDNCResponse")
1106 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1107 WorkflowException workflowException = execution.getVariable("WorkflowException")
1109 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
1110 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1112 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "activateSDNCResponse")
1113 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1114 execution.setVariable(Prefix + "activateSDNCResponse", assignSDNCResponseDecodeXml)
1116 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
1117 execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", true)
1118 msoLogger.debug("Successfully Validated Rpc SDNC Activate Response")
1121 msoLogger.debug("Did NOT Successfully Validated Rpc SDNC Activate Response")
1122 throw new BpmnError("MSOWorkflowException")
1128 public void prepareSDNCRollbackRequest (DelegateExecution execution) {
1130 execution.setVariable("prefix",Prefix)
1132 msoLogger.trace("Inside prepareSDNCRollbackRequest() of DoCreateNetworkInstance")
1136 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1137 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1138 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1139 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1140 String networkId = execution.getVariable(Prefix + "networkId")
1141 if (networkId == 'null') {networkId = ""}
1142 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1144 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1145 String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
1146 String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
1147 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
1148 msoLogger.debug(" Preparing request for SDNC Topology 'rollback-NetworkActivateRequest' rollback . . . - " + "\n" + sndcTopologyRollbackRequestAsString)
1151 } catch (Exception ex) {
1152 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
1153 msoLogger.debug(exceptionMessage)
1154 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1160 public void prepareRpcSDNCRollbackRequest (DelegateExecution execution) {
1162 execution.setVariable("prefix",Prefix)
1164 msoLogger.trace("Inside prepareRpcSDNCRollbackRequest() of DoCreateNetworkInstance")
1168 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1169 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1170 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1171 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1172 String networkId = execution.getVariable(Prefix + "networkId")
1173 if (networkId == 'null') {networkId = ""}
1174 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1176 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1177 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1178 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1179 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1180 msoLogger.debug(" Preparing request for SDNC Topology 'unassign-DeleteNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
1183 } catch (Exception ex) {
1184 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRollbackRequest() - " + ex.getMessage()
1185 msoLogger.debug(exceptionMessage)
1186 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1192 public void prepareRpcSDNCActivateRollback(DelegateExecution execution) {
1194 execution.setVariable("prefix",Prefix)
1196 msoLogger.trace("Inside prepareRpcSDNCActivateRollback() of DoCreateNetworkInstance")
1201 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1202 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1203 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1204 String activateSDNCResponse = execution.getVariable(Prefix + "activateSDNCResponse")
1205 String networkId = execution.getVariable(Prefix + "networkId")
1206 if (networkId == 'null') {networkId = ""}
1207 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1209 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1210 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1211 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1212 execution.setVariable(Prefix + "rollbackActivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1213 msoLogger.debug(" Preparing request for RPC SDNC Topology 'deactivate-DeleteNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
1216 } catch (Exception ex) {
1217 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
1218 msoLogger.debug(exceptionMessage)
1219 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1225 public void prepareRollbackData(DelegateExecution execution) {
1227 execution.setVariable("prefix",Prefix)
1229 msoLogger.trace("Inside prepareRollbackData() of DoCreateNetworkInstance")
1233 Map<String, String> rollbackData = new HashMap<String, String>();
1234 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1235 if (rollbackSDNCRequest != null) {
1236 if (rollbackSDNCRequest != "") {
1237 rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
1240 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1241 if (rollbackNetworkRequest != null) {
1242 if (rollbackNetworkRequest != "") {
1243 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
1246 String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1247 if (rollbackActivateSDNCRequest != null) {
1248 if (rollbackActivateSDNCRequest != "") {
1249 rollbackData.put("rollbackActivateSDNCRequest", execution.getVariable(Prefix + "rollbackActivateSDNCRequest"))
1252 execution.setVariable("rollbackData", rollbackData)
1253 msoLogger.debug("** rollbackData : " + rollbackData)
1255 execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
1256 msoLogger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
1258 } catch (Exception ex) {
1259 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
1260 msoLogger.debug(exceptionMessage)
1261 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1267 public void postProcessResponse(DelegateExecution execution) {
1269 execution.setVariable("prefix",Prefix)
1271 msoLogger.trace("Inside postProcessResponse() of DoCreateNetworkInstance")
1276 // 1. Silent Success: execution.getVariable("CRENWKI_orchestrationStatus") == "ACTIVE"
1277 // 2. Success: execution.getVariable("WorkflowException") == null (NULL)
1278 // 3. WorkflowException: execution.getVariable("WorkflowException") != null (NOT NULL)
1280 msoLogger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
1282 if (execution.getVariable(Prefix + "isException") == false) {
1283 // set rollback data
1284 execution.setVariable("orchestrationStatus", "")
1285 execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
1286 execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
1287 prepareSuccessRollbackData(execution) // populate rollbackData
1288 execution.setVariable("WorkflowException", null)
1289 execution.setVariable(Prefix + "Success", true)
1290 msoLogger.debug(" ***** postProcessResponse(), GOOD !!!")
1292 // inside sub-flow logic
1293 execution.setVariable(Prefix + "Success", false)
1294 execution.setVariable("rollbackData", null)
1295 String exceptionMessage = " Exception encountered in MSO Bpmn. "
1296 if (execution.getVariable("workflowException") != null) { // Output of Rollback flow.
1297 msoLogger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
1298 WorkflowException wfex = execution.getVariable("workflowException")
1299 exceptionMessage = wfex.getErrorMessage()
1301 if (execution.getVariable(Prefix + "WorkflowException") != null) {
1302 WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
1303 exceptionMessage = pwfex.getErrorMessage()
1306 // going to the Main flow: a-la-carte or macro
1307 msoLogger.debug(" ***** postProcessResponse(), BAD !!!")
1308 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1309 throw new BpmnError("MSOWorkflowException")
1312 } catch(BpmnError b){
1313 msoLogger.debug("Rethrowing MSOWorkflowException")
1316 } catch (Exception ex) {
1317 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
1318 msoLogger.debug(exceptionMessage)
1319 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1320 throw new BpmnError("MSOWorkflowException")
1328 public void prepareSuccessRollbackData(DelegateExecution execution) {
1330 execution.setVariable("prefix",Prefix)
1332 msoLogger.trace("Inside prepareSuccessRollbackData() of DoCreateNetworkInstance")
1336 if (execution.getVariable("sdncVersion") != '1610') {
1337 prepareRpcSDNCRollbackRequest(execution)
1338 prepareRpcSDNCActivateRollback(execution)
1340 prepareSDNCRollbackRequest(execution)
1343 Map<String, String> rollbackData = new HashMap<String, String>();
1344 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1345 if (rollbackSDNCRequest != null) {
1346 if (rollbackSDNCRequest != "") {
1347 rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
1350 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1351 if (rollbackNetworkRequest != null) {
1352 if (rollbackNetworkRequest != "") {
1353 rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
1356 String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1357 if (rollbackActivateSDNCRequest != null) {
1358 if (rollbackActivateSDNCRequest != "") {
1359 rollbackData.put("rollbackActivateSDNCRequest", rollbackActivateSDNCRequest)
1362 execution.setVariable("rollbackData", rollbackData)
1364 msoLogger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
1365 execution.setVariable("WorkflowException", null)
1368 } catch (Exception ex) {
1369 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
1370 msoLogger.debug(exceptionMessage)
1371 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1377 public void setExceptionFlag(DelegateExecution execution){
1379 execution.setVariable("prefix",Prefix)
1381 msoLogger.trace("Inside setExceptionFlag() of DoCreateNetworkInstance")
1385 execution.setVariable(Prefix + "isException", true)
1387 if (execution.getVariable("SavedWorkflowException1") != null) {
1388 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1390 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1392 msoLogger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1394 } catch(Exception ex){
1395 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1396 msoLogger.debug(exceptionMessage)
1397 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1403 // *******************************
1404 // Build Error Section
1405 // *******************************
1409 public void processJavaException(DelegateExecution execution){
1411 execution.setVariable("prefix",Prefix)
1414 msoLogger.debug( "Caught a Java Exception in " + Prefix)
1415 msoLogger.debug("Started processJavaException Method")
1416 msoLogger.debug("Variables List: " + execution.getVariables())
1417 execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1418 exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1420 }catch(Exception e){
1421 msoLogger.debug("Caught Exception during processJavaException Method: " + e)
1422 execution.setVariable("UnexpectedError", "Exception in processJavaException method - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1423 exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method" + Prefix)
1425 msoLogger.debug( "Completed processJavaException Method in " + Prefix)