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")
531 String netName = network.getNetworkName()
532 String networkOutputs =
534 <network-id>${MsoUtils.xmlEscape(netId)}</network-id>
535 <network-name>${MsoUtils.xmlEscape(netName)}</network-name>
536 </network-outputs>"""
537 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
538 msoLogger.debug(" networkOutputs - " + '\n' + networkOutputs)
541 } catch (NotFoundException e) {
542 String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
543 msoLogger.debug(" AAI ReQuery Failed. - " + dataErrorMessage)
544 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
546 } catch (Exception ex) {
547 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTReQueryAAINetworkId() - " + ex.getMessage()
548 msoLogger.debug(exceptionMessage)
549 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
555 public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
557 execution.setVariable("prefix",Prefix)
559 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding() of DoCreateNetworkInstance ***** " )
563 AAIResourcesClient client = new AAIResourcesClient()
564 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
565 Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
566 if(relationships.isPresent()){
567 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.VPN_BINDING)
569 msoLogger.debug(Prefix + "vpnCount - " + uris.size())
571 if (uris.size() > 0) {
572 String routeTargets = ""
573 for(AAIResourceUri u : uris) {
575 AAIResultWrapper wrapper = client.get(u.depth(Depth.TWO), NotFoundException.class)
576 Optional<VpnBinding> binding = wrapper.asBean(VpnBinding.class)
578 String routeTarget = ""
579 String routeRole = ""
580 if(binding.get().getRouteTargets() != null) {
581 List<RouteTarget> targets = binding.get().getRouteTargets().getRouteTarget()
582 for(RouteTarget target : targets) {
583 routeTarget = target.getGlobalRouteTarget()
584 routeRole = target.getRouteTargetRole()
585 routeTargets += "<routeTargets>" + '\n' +
586 " <routeTarget>" + routeTarget + "</routeTarget>" + '\n' +
587 " <routeTargetRole>" + routeRole + "</routeTargetRole>" + '\n' +
588 "</routeTargets>" + '\n'
594 execution.setVariable(Prefix + "routeCollection", routeTargets)
595 msoLogger.debug(Prefix + "routeCollection - " + '\n' + routeTargets)
598 // reset return code to success
599 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
600 AaiUtil aaiUriUtil = new AaiUtil(this)
601 String schemaVersion = aaiUriUtil.getNamespace()
602 String aaiStubResponse =
603 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
604 <vpn-binding xmlns="${schemaVersion}">
605 <global-route-target/>
608 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
609 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiStubResponseAsXml)
610 execution.setVariable(Prefix + "routeCollection", "<routeTargets/>")
611 msoLogger.debug(" No vpnBinding, using this stub as response - " + '\n' + aaiStubResponseAsXml)
616 } catch (NotFoundException e) {
617 msoLogger.debug("Response Error from AAINetworkVpnBinding is 404 (Not Found).")
618 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Response Error from AAINetworkVpnBinding is 404 (Not Found).")
619 } catch (Exception ex) {
620 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkVpnBinding() - " + ex.getMessage()
621 msoLogger.debug(exceptionMessage)
622 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
628 public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
630 execution.setVariable("prefix",Prefix)
632 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkPolicy() of DoCreateNetworkInstance ***** " )
635 AAIResourcesClient client = new AAIResourcesClient()
636 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
637 Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
638 if(relationships.isPresent()){
639 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.NETWORK_POLICY)
641 execution.setVariable(Prefix + "networkPolicyCount", uris.size())
642 msoLogger.debug(Prefix + "networkPolicyCount - " + uris.size())
644 if (uris.size() > 0) {
646 String networkPolicies = ""
647 // AII loop call using list vpnBindings
648 for(AAIResourceUri u : uris) {
650 NetworkPolicy p = client.get(u, NotFoundException.class).asBean(NetworkPolicy.class).get()
652 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
654 String networkPolicy = p.getNetworkPolicyFqdn()
655 networkPolicies += "<policyFqdns>" + networkPolicy + "</policyFqdns>" + '\n'
659 execution.setVariable(Prefix + "networkCollection", networkPolicies)
660 msoLogger.debug(Prefix + "networkCollection - " + '\n' + networkPolicies)
663 // reset return code to success
664 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
665 AaiUtil aaiUriUtil = new AaiUtil(this)
666 String schemaVersion = aaiUriUtil.getNamespace()
667 String aaiStubResponse =
668 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
669 <network-policy xmlns="${schemaVersion}">
670 <network-policy-fqdn/>
673 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
674 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiStubResponseAsXml)
675 execution.setVariable(Prefix + "networkCollection", "<policyFqdns/>")
676 msoLogger.debug(" No net policies, using this stub as response - " + '\n' + aaiStubResponseAsXml)
680 } catch (NotFoundException e) {
681 String dataErrorMessage = "Response Error from QueryAAINetworkPolicy is 404 (Not Found)."
682 msoLogger.debug(dataErrorMessage)
683 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
685 } catch (Exception ex) {
686 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkPolicy() - " + ex.getMessage()
687 msoLogger.debug(exceptionMessage)
688 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
694 public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
696 execution.setVariable("prefix",Prefix)
698 msoLogger.debug(" ***** Inside callRESTQueryAAINetworkTableRef() of DoCreateNetworkInstance ***** " )
702 AAIResourcesClient client = new AAIResourcesClient()
703 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
704 Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
705 if(relationships.isPresent()){
706 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.ROUTE_TABLE_REFERENCE)
708 execution.setVariable(Prefix + "networkTableRefCount", uris.size())
709 msoLogger.debug(Prefix + "networkTableRefCount - " + uris.size())
712 if (uris.size() > 0) {
714 // AII loop call using list vpnBindings
715 String networkTableRefs = ""
716 for(AAIResourceUri u : uris) {
718 RouteTableReference rt = client.get(u, NotFoundException.class).asBean(RouteTableReference.class).get()
720 String networkTableRef = rt.getRouteTableReferenceFqdn()
721 networkTableRefs += "<routeTableFqdns>" + networkTableRef + "</routeTableFqdns>" + '\n'
726 execution.setVariable(Prefix + "tableRefCollection", networkTableRefs)
727 msoLogger.debug(Prefix + "tableRefCollection - " + '\n' + networkTableRefs)
730 // reset return code to success
731 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
732 AaiUtil aaiUriUtil = new AaiUtil(this)
733 String schemaVersion = aaiUriUtil.getNamespace()
734 String aaiStubResponse =
735 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
736 <route-table-references xmlns="${schemaVersion}">
737 <route-table-reference-fqdn/>
738 </route-table-references>
740 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
741 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiStubResponseAsXml)
742 execution.setVariable(Prefix + "tableRefCollection", "<routeTableFqdns/>")
743 msoLogger.debug(" No net table references, using this stub as response - " + '\n' + aaiStubResponseAsXml)
748 } catch (NotFoundException e) {
749 String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
750 msoLogger.debug(dataErrorMessage)
751 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
753 } catch (Exception ex) {
754 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
755 msoLogger.debug(exceptionMessage)
756 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
763 public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
765 execution.setVariable("prefix",Prefix)
767 msoLogger.debug(" ***** Inside callRESTUpdateContrailAAINetwork() of DoCreateNetworkInstance ***** " )
771 String networkId = execution.getVariable(Prefix + "networkId")
772 String requeryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
773 String createNetworkResponse = execution.getVariable(Prefix + "createNetworkResponse")
775 L3Network l3Network = new L3Network()
776 if (utils.nodeExists(requeryIdAAIResponse, 'heat-stack-id')) {
778 if (utils.nodeExists(createNetworkResponse, 'networkStackId')) {
779 l3Network.setHeatStackId(utils.getNodeText(createNetworkResponse, 'networkStackId'))
782 if (utils.nodeExists(requeryIdAAIResponse, 'neutron-network-id')) {
784 if (utils.nodeExists(createNetworkResponse, 'neutronNetworkId')) {
785 l3Network.setNeutronNetworkId(utils.getNodeText(createNetworkResponse, 'neutronNetworkId'))
788 if (utils.nodeExists(requeryIdAAIResponse, 'contrail-network-fqdn')) {
790 if (utils.nodeExists(createNetworkResponse, 'networkFqdn')) {
791 l3Network.setContrailNetworkFqdn(utils.getNodeText(createNetworkResponse, 'networkFqdn'))
795 String status = utils.getNodeText(createNetworkResponse, 'orchestration-status')
796 if(status.equals("pending-create") || status.equals("PendingCreate")){
797 l3Network.setOperationalStatus("Created")
799 l3Network.setOperationalStatus("Active")
802 AAIResourcesClient client = new AAIResourcesClient()
803 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId)
804 client.update(uri, l3Network)
806 String subnetsXml = utils.getNodeXml(requeryIdAAIResponse, "subnets")
807 InputSource source = new InputSource(new StringReader(subnetsXml));
808 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
809 docFactory.setNamespaceAware(true)
810 DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
811 Document xml = docBuilder.parse(source)
812 NodeList nodeList = xml.getElementsByTagNameNS("*", "subnet")
813 for (int x = 0; x < nodeList.getLength(); x++) {
814 Node node = nodeList.item(x)
815 if (node.getNodeType() == Node.ELEMENT_NODE) {
816 Element eElement = (Element) node
817 String subnetOrchStatus = eElement.getElementsByTagNameNS("*", "orchestration-status").item(0).getTextContent()
818 String subnetId = eElement.getElementsByTagNameNS("*", "subnet-id").item(0).getTextContent()
819 Subnet subnet = new Subnet()
820 String neutronSubnetId = networkUtils.extractNeutSubId(createNetworkResponse, subnetId)
821 subnet.setNeutronSubnetId(neutronSubnetId)
822 if(subnetOrchStatus.equals("pending-create") || subnetOrchStatus.equals("PendingCreate") ){
823 subnet.setOrchestrationStatus("Created")
825 subnet.setOrchestrationStatus("Active")
828 AAIResourceUri subUri = AAIUriFactory.createResourceUri(AAIObjectType.SUBNET, networkId, subnetId)
829 client.update(subUri, subnet)
833 String rollbackEnabled = execution.getVariable(Prefix + "rollbackEnabled")
834 if (rollbackEnabled == "true") {
835 execution.setVariable(Prefix + "isPONR", false)
837 execution.setVariable(Prefix + "isPONR", true)
839 msoLogger.debug(Prefix + "isPONR" + ": " + execution.getVariable(Prefix + "isPONR"))
841 } catch (BpmnError e) {
843 } catch (NotFoundException e) {
844 String dataErrorMessage = " Response Error from UpdateContrailAAINetwork is 404 (Not Found)."
845 msoLogger.debug(dataErrorMessage)
846 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
847 } catch (Exception ex) {
848 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTUpdateContrailAAINetwork() - " + ex.getMessage()
849 msoLogger.debug(exceptionMessage)
850 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
854 public void prepareCreateNetworkRequest (DelegateExecution execution) {
856 execution.setVariable("prefix",Prefix)
858 msoLogger.trace("Inside prepareCreateNetworkRequest() of DoCreateNetworkInstance")
863 String requestId = execution.getVariable("msoRequestId")
864 if (requestId == null) {
865 requestId = execution.getVariable("mso-request-id")
867 String messageId = execution.getVariable(Prefix + "messageId")
868 String source = execution.getVariable(Prefix + "source")
870 String requestInput = execution.getVariable(Prefix + "networkRequest")
871 L3Network queryIdResponse = execution.getVariable(Prefix + "queryIdAAIResponse")
872 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
873 String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
875 // Prepare Network request
876 String routeCollection = execution.getVariable(Prefix + "routeCollection")
877 String policyCollection = execution.getVariable(Prefix + "networkCollection")
878 String tableCollection = execution.getVariable(Prefix + "tableRefCollection")
879 String createNetworkRequest = networkUtils.CreateNetworkRequestV2(execution, requestId, messageId, requestInput, queryIdResponse, routeCollection, policyCollection, tableCollection, cloudRegionId, backoutOnFailure, source )
881 String buildDeleteNetworkRequestAsString = utils.formatXml(createNetworkRequest)
882 buildDeleteNetworkRequestAsString = buildDeleteNetworkRequestAsString.replace(":w1aac13n0", "").replace("w1aac13n0:", "")
884 execution.setVariable(Prefix + "createNetworkRequest", buildDeleteNetworkRequestAsString)
885 msoLogger.debug(Prefix + "createNetworkRequest - " + "\n" + buildDeleteNetworkRequestAsString)
887 } catch (Exception ex) {
888 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareCreateNetworkRequest() - " + ex.getMessage()
889 msoLogger.debug(exceptionMessage)
890 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
896 public void prepareSDNCRequest (DelegateExecution execution) {
898 execution.setVariable("prefix",Prefix)
900 msoLogger.trace("Inside prepareSDNCRequest() of DoCreateNetworkInstance")
904 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
905 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
906 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
908 String networkId = execution.getVariable(Prefix + "networkId")
909 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
911 // get/set 'msoRequestId' and 'mso-request-id'
912 String requestId = execution.getVariable("msoRequestId")
913 if (requestId != null) {
914 execution.setVariable("mso-request-id", requestId)
916 requestId = execution.getVariable("mso-request-id")
918 execution.setVariable(Prefix + "requestId", requestId)
920 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
921 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
923 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
924 execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
925 msoLogger.debug(Prefix + "assignSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
928 } catch (Exception ex) {
929 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRequest() - " + ex.getMessage()
930 msoLogger.debug(exceptionMessage)
931 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
937 public void prepareRpcSDNCRequest (DelegateExecution execution) {
939 execution.setVariable("prefix",Prefix)
941 msoLogger.trace("Inside prepareRpcSDNCRequest() of DoCreateNetworkInstance")
946 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
947 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
948 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
950 String networkId = execution.getVariable(Prefix + "networkId")
951 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
953 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
954 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
956 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
957 execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
958 msoLogger.debug(Prefix + "assignSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
960 } catch (Exception ex) {
961 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRequest() - " + ex.getMessage()
962 msoLogger.debug(exceptionMessage)
963 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
969 public void prepareRpcSDNCActivateRequest (DelegateExecution execution) {
971 execution.setVariable("prefix",Prefix)
973 msoLogger.trace("Inside prepareRpcSDNCActivateRequest() of DoCreateNetworkInstance")
977 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
978 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
979 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
980 String networkId = execution.getVariable(Prefix + "networkId")
981 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
983 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
984 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
986 String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
987 execution.setVariable(Prefix + "activateSDNCRequest", sndcTopologyCreateRequesAsString)
988 msoLogger.debug(Prefix + "activateSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
991 } catch (Exception ex) {
992 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRequest() - " + ex.getMessage()
993 msoLogger.debug(exceptionMessage)
994 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1003 // **************************************************
1004 // Post or Validate Response Section
1005 // **************************************************
1007 public void validateCreateNetworkResponse (DelegateExecution execution) {
1009 execution.setVariable("prefix",Prefix)
1011 msoLogger.trace("Inside validateNetworkResponse() of DoCreateNetworkInstance")
1014 String returnCode = execution.getVariable(Prefix + "networkReturnCode")
1015 String networkResponse = execution.getVariable(Prefix + "createNetworkResponse")
1016 if (networkResponse==null) {
1017 networkResponse="" // reset
1020 msoLogger.debug(" Network Adapter create responseCode: " + returnCode)
1022 String errorMessage = ""
1023 if (returnCode == "200") {
1024 execution.setVariable(Prefix + "isNetworkRollbackNeeded", true)
1025 execution.setVariable(Prefix + "createNetworkResponse", networkResponse)
1026 msoLogger.debug(" Network Adapter create Success Response - " + "\n" + networkResponse)
1028 // prepare rollback data
1029 String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
1030 rollbackData = rollbackData.replace("rollback>", "networkRollback>")
1031 String rollbackNetwork =
1032 """<rollbackNetworkRequest>
1034 </rollbackNetworkRequest>"""
1035 String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
1036 execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
1037 msoLogger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
1039 } else { // network error
1040 if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) { //4xx, 5xx
1041 if (networkResponse.contains("createNetworkError")) {
1042 networkResponse = networkResponse.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '')
1043 errorMessage = utils.getNodeText(networkResponse, "message")
1044 errorMessage = "Received error from Network Adapter: " + errorMessage
1045 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
1047 } else { // CatchAll exception
1048 if (returnCode == "500") {
1049 errorMessage = "JBWEB000065: HTTP Status 500."
1051 errorMessage = "Return code is " + returnCode
1053 errorMessage = "Received error from Network Adapter: " + errorMessage
1054 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
1058 } else { // CatchAll exception
1059 String dataErrorMessage = "Received error from Network Adapter. Return code is: " + returnCode
1060 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
1066 } catch (BpmnError e) {
1069 } catch (Exception ex) {
1070 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. validateCreateNetworkResponse() - " + ex.getMessage()
1071 msoLogger.debug(exceptionMessage)
1072 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1079 public void validateSDNCResponse (DelegateExecution execution) {
1081 execution.setVariable("prefix",Prefix)
1083 msoLogger.trace("Inside validateSDNCResponse() of DoCreateNetworkInstance")
1085 String response = execution.getVariable(Prefix + "assignSDNCResponse")
1086 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1087 WorkflowException workflowException = execution.getVariable("WorkflowException")
1089 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
1090 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1092 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "assignSDNCResponse")
1093 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1094 execution.setVariable(Prefix + "assignSDNCResponse", assignSDNCResponseDecodeXml)
1096 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
1097 execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
1098 msoLogger.debug("Successfully Validated SDNC Response")
1101 msoLogger.debug("Did NOT Successfully Validated SDNC Response")
1102 throw new BpmnError("MSOWorkflowException")
1107 public void validateRpcSDNCActivateResponse (DelegateExecution execution) {
1109 execution.setVariable("prefix",Prefix)
1111 msoLogger.trace("Inside validateRpcSDNCActivateResponse() of DoCreateNetworkInstance")
1113 String response = execution.getVariable(Prefix + "activateSDNCResponse")
1114 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
1115 WorkflowException workflowException = execution.getVariable("WorkflowException")
1117 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
1118 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
1120 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "activateSDNCResponse")
1121 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
1122 execution.setVariable(Prefix + "activateSDNCResponse", assignSDNCResponseDecodeXml)
1124 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
1125 execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", true)
1126 msoLogger.debug("Successfully Validated Rpc SDNC Activate Response")
1129 msoLogger.debug("Did NOT Successfully Validated Rpc SDNC Activate Response")
1130 throw new BpmnError("MSOWorkflowException")
1136 public void prepareSDNCRollbackRequest (DelegateExecution execution) {
1138 execution.setVariable("prefix",Prefix)
1140 msoLogger.trace("Inside prepareSDNCRollbackRequest() of DoCreateNetworkInstance")
1144 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1145 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1146 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1147 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1148 String networkId = execution.getVariable(Prefix + "networkId")
1149 if (networkId == 'null') {networkId = ""}
1150 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1152 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1153 String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
1154 String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
1155 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
1156 msoLogger.debug(" Preparing request for SDNC Topology 'rollback-NetworkActivateRequest' rollback . . . - " + "\n" + sndcTopologyRollbackRequestAsString)
1159 } catch (Exception ex) {
1160 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
1161 msoLogger.debug(exceptionMessage)
1162 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1168 public void prepareRpcSDNCRollbackRequest (DelegateExecution execution) {
1170 execution.setVariable("prefix",Prefix)
1172 msoLogger.trace("Inside prepareRpcSDNCRollbackRequest() of DoCreateNetworkInstance")
1176 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1177 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1178 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1179 String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
1180 String networkId = execution.getVariable(Prefix + "networkId")
1181 if (networkId == 'null') {networkId = ""}
1182 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1184 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1185 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1186 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1187 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1188 msoLogger.debug(" Preparing request for SDNC Topology 'unassign-DeleteNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
1191 } catch (Exception ex) {
1192 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRollbackRequest() - " + ex.getMessage()
1193 msoLogger.debug(exceptionMessage)
1194 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1200 public void prepareRpcSDNCActivateRollback(DelegateExecution execution) {
1202 execution.setVariable("prefix",Prefix)
1204 msoLogger.trace("Inside prepareRpcSDNCActivateRollback() of DoCreateNetworkInstance")
1209 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
1210 String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
1211 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1212 String activateSDNCResponse = execution.getVariable(Prefix + "activateSDNCResponse")
1213 String networkId = execution.getVariable(Prefix + "networkId")
1214 if (networkId == 'null') {networkId = ""}
1215 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
1217 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
1218 String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
1219 String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
1220 execution.setVariable(Prefix + "rollbackActivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
1221 msoLogger.debug(" Preparing request for RPC SDNC Topology 'deactivate-DeleteNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
1224 } catch (Exception ex) {
1225 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
1226 msoLogger.debug(exceptionMessage)
1227 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1233 public void prepareRollbackData(DelegateExecution execution) {
1235 execution.setVariable("prefix",Prefix)
1237 msoLogger.trace("Inside prepareRollbackData() of DoCreateNetworkInstance")
1241 Map<String, String> rollbackData = new HashMap<String, String>();
1242 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1243 if (rollbackSDNCRequest != null) {
1244 if (rollbackSDNCRequest != "") {
1245 rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
1248 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1249 if (rollbackNetworkRequest != null) {
1250 if (rollbackNetworkRequest != "") {
1251 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
1254 String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1255 if (rollbackActivateSDNCRequest != null) {
1256 if (rollbackActivateSDNCRequest != "") {
1257 rollbackData.put("rollbackActivateSDNCRequest", execution.getVariable(Prefix + "rollbackActivateSDNCRequest"))
1260 execution.setVariable("rollbackData", rollbackData)
1261 msoLogger.debug("** rollbackData : " + rollbackData)
1263 execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
1264 msoLogger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
1266 } catch (Exception ex) {
1267 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
1268 msoLogger.debug(exceptionMessage)
1269 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1275 public void postProcessResponse(DelegateExecution execution) {
1277 execution.setVariable("prefix",Prefix)
1279 msoLogger.trace("Inside postProcessResponse() of DoCreateNetworkInstance")
1284 // 1. Silent Success: execution.getVariable("CRENWKI_orchestrationStatus") == "ACTIVE"
1285 // 2. Success: execution.getVariable("WorkflowException") == null (NULL)
1286 // 3. WorkflowException: execution.getVariable("WorkflowException") != null (NOT NULL)
1288 msoLogger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
1290 if (execution.getVariable(Prefix + "isException") == false) {
1291 // set rollback data
1292 execution.setVariable("orchestrationStatus", "")
1293 execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
1294 execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
1295 prepareSuccessRollbackData(execution) // populate rollbackData
1296 execution.setVariable("WorkflowException", null)
1297 execution.setVariable(Prefix + "Success", true)
1298 msoLogger.debug(" ***** postProcessResponse(), GOOD !!!")
1300 // inside sub-flow logic
1301 execution.setVariable(Prefix + "Success", false)
1302 execution.setVariable("rollbackData", null)
1303 String exceptionMessage = " Exception encountered in MSO Bpmn. "
1304 if (execution.getVariable("workflowException") != null) { // Output of Rollback flow.
1305 msoLogger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
1306 WorkflowException wfex = execution.getVariable("workflowException")
1307 exceptionMessage = wfex.getErrorMessage()
1309 if (execution.getVariable(Prefix + "WorkflowException") != null) {
1310 WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
1311 exceptionMessage = pwfex.getErrorMessage()
1314 // going to the Main flow: a-la-carte or macro
1315 msoLogger.debug(" ***** postProcessResponse(), BAD !!!")
1316 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1317 throw new BpmnError("MSOWorkflowException")
1320 } catch(BpmnError b){
1321 msoLogger.debug("Rethrowing MSOWorkflowException")
1324 } catch (Exception ex) {
1325 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
1326 msoLogger.debug(exceptionMessage)
1327 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1328 throw new BpmnError("MSOWorkflowException")
1336 public void prepareSuccessRollbackData(DelegateExecution execution) {
1338 execution.setVariable("prefix",Prefix)
1340 msoLogger.trace("Inside prepareSuccessRollbackData() of DoCreateNetworkInstance")
1344 if (execution.getVariable("sdncVersion") != '1610') {
1345 prepareRpcSDNCRollbackRequest(execution)
1346 prepareRpcSDNCActivateRollback(execution)
1348 prepareSDNCRollbackRequest(execution)
1351 Map<String, String> rollbackData = new HashMap<String, String>();
1352 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1353 if (rollbackSDNCRequest != null) {
1354 if (rollbackSDNCRequest != "") {
1355 rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
1358 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1359 if (rollbackNetworkRequest != null) {
1360 if (rollbackNetworkRequest != "") {
1361 rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
1364 String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
1365 if (rollbackActivateSDNCRequest != null) {
1366 if (rollbackActivateSDNCRequest != "") {
1367 rollbackData.put("rollbackActivateSDNCRequest", rollbackActivateSDNCRequest)
1370 execution.setVariable("rollbackData", rollbackData)
1372 msoLogger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
1373 execution.setVariable("WorkflowException", null)
1376 } catch (Exception ex) {
1377 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
1378 msoLogger.debug(exceptionMessage)
1379 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1385 public void setExceptionFlag(DelegateExecution execution){
1387 execution.setVariable("prefix",Prefix)
1389 msoLogger.trace("Inside setExceptionFlag() of DoCreateNetworkInstance")
1393 execution.setVariable(Prefix + "isException", true)
1395 if (execution.getVariable("SavedWorkflowException1") != null) {
1396 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1398 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1400 msoLogger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1402 } catch(Exception ex){
1403 String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1404 msoLogger.debug(exceptionMessage)
1405 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1411 // *******************************
1412 // Build Error Section
1413 // *******************************
1417 public void processJavaException(DelegateExecution execution){
1419 execution.setVariable("prefix",Prefix)
1422 msoLogger.debug( "Caught a Java Exception in " + Prefix)
1423 msoLogger.debug("Started processJavaException Method")
1424 msoLogger.debug("Variables List: " + execution.getVariables())
1425 execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1426 exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1428 }catch(Exception e){
1429 msoLogger.debug("Caught Exception during processJavaException Method: " + e)
1430 execution.setVariable("UnexpectedError", "Exception in processJavaException method - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1431 exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method" + Prefix)
1433 msoLogger.debug( "Completed processJavaException Method in " + Prefix)