* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
import org.onap.so.bpmn.core.UrnPropertiesReader
import org.onap.so.bpmn.core.WorkflowException
import org.onap.so.bpmn.core.json.JsonUtils
+import org.onap.so.client.aai.AAIObjectType
+import org.onap.so.client.aai.entities.uri.AAIResourceUri
+import org.onap.so.client.aai.entities.uri.AAIUriFactory
+import org.onap.so.client.graphinventory.entities.uri.Depth
+import org.onap.so.constants.Defaults
import org.onap.so.logger.MessageEnum
import org.onap.so.logger.MsoLogger
import org.onap.so.rest.APIResponse;
public class DoDeleteNetworkInstance extends AbstractServiceTaskProcessor {
private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, DoDeleteNetworkInstance.class);
-
+
String Prefix= "DELNWKI_"
String groovyClassName = "DoDeleteNetworkInstance"
ExceptionUtil exceptionUtil = new ExceptionUtil()
execution.setVariable(Prefix + "deactivateSDNCResponse", "")
execution.setVariable(Prefix + "deactivateSdncReturnCode", "")
execution.setVariable(Prefix + "isSdncDeactivateRollbackNeeded", "")
-
+
execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", "")
execution.setVariable(Prefix + "isException", false)
-
+
}
-
+
// **************************************************
// Pre or Prepare Request Section
// **************************************************
// initialize flow variables
InitializeProcessVariables(execution)
-
+
try {
// get incoming message/input
execution.setVariable("action", "DELETE")
String deleteNetwork = execution.getVariable("bpmnRequest")
if (deleteNetwork != null) {
if (deleteNetwork.contains("requestDetails")) {
- // JSON format request is sent, create xml
+ // JSON format request is sent, create xml
try {
def prettyJson = JsonOutput.prettyPrint(deleteNetwork.toString())
msoLogger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
deleteNetwork = vidUtils.createXmlNetworkRequestInfra(execution, deleteNetwork)
-
+
} catch (Exception ex) {
String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
msoLogger.debug(dataErrorMessage)
}
} else {
// XML format request is sent
-
+
}
} else {
// vIPR format request is sent, create xml from individual variables
deleteNetwork = vidUtils.createXmlNetworkRequestInstance(execution)
}
-
+
deleteNetwork = utils.formatXml(deleteNetwork)
msoLogger.debug(deleteNetwork)
execution.setVariable(Prefix + "networkRequest", deleteNetwork)
msoLogger.debug(Prefix + "networkRequest - " + '\n' + deleteNetwork)
-
+
// validate 'backout-on-failure' to override 'mso.rollback'
boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, deleteNetwork)
execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
msoLogger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
-
+
String networkInputs = utils.getNodeXml(deleteNetwork, "network-inputs", false).replace("tag0:","").replace(":tag0","")
execution.setVariable(Prefix + "networkInputs", networkInputs)
-
+
// prepare messageId
String messageId = execution.getVariable("testMessageId") // for testing
if (messageId == null || messageId == "") {
msoLogger.debug(Prefix + "messageId, pre-assigned: " + messageId)
}
execution.setVariable(Prefix + "messageId", messageId)
-
+
String source = utils.getNodeText(deleteNetwork, "source")
execution.setVariable(Prefix + "source", source)
msoLogger.debug(Prefix + "source - " + source)
-
+
String networkId = ""
if (utils.nodeExists(networkInputs, "network-id")) {
networkId = utils.getNodeText(networkInputs, "network-id")
}
execution.setVariable(Prefix + "lcpCloudRegion", lcpCloudRegion)
msoLogger.debug("lcpCloudRegion : " + lcpCloudRegion)
-
+
String tenantId = null
if (utils.nodeExists(networkInputs, "tenant-id")) {
tenantId = utils.getNodeText(networkInputs, "tenant-id")
}
execution.setVariable(Prefix + "tenantId", tenantId)
msoLogger.debug("tenantId : " + tenantId)
-
+
String sdncVersion = execution.getVariable("sdncVersion")
msoLogger.debug("sdncVersion? : " + sdncVersion)
-
+
// PO Authorization Info / headers Authorization=
String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth", execution)
-
+
try {
def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey", execution))
execution.setVariable("BasicAuthHeaderValuePO",encodedString)
execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
-
+
} catch (IOException ex) {
String dataErrorMessage = " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
msoLogger.debug(dataErrorMessage )
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
-
+
}
networkId = UriUtils.encode(networkId,"UTF-8")
// Prepare AA&I url
- String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
AaiUtil aaiUriUtil = new AaiUtil(this)
- String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution)
- String queryAAIRequest = "${aai_endpoint}${aai_uri}/" + networkId + "?depth=all"
+ AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId)
+ uri.depth(Depth.ALL)
+
+ String queryAAIRequest = aaiUriUtil.createAaiUri(uri)
msoLogger.debug(queryAAIRequest)
execution.setVariable(Prefix + "queryAAIRequest", queryAAIRequest)
msoLogger.debug(Prefix + "AAIRequest - " + "\n" + queryAAIRequest)
exceptionUtil.buildWorkflowException(execution, 2500, relationshipMessage)
} else {
- // verify if lcpCloudRegion was sent as input, if not get value from AAI Response
+ // verify if lcpCloudRegion was sent as input, if not get value from AAI Response
if (execution.getVariable(Prefix + "lcpCloudRegion") == null ) {
String lcpCloudRegion = networkUtils.getCloudRegion(aaiResponseAsString)
execution.setVariable(Prefix + "lcpCloudRegion", lcpCloudRegion)
execution.setVariable(Prefix + "tenantId", tenantId)
msoLogger.debug(" Get AAI getTenantId() : " + tenantId)
}
-
+
}
}
msoLogger.debug(Prefix + "isVfRelationshipExist - " + isVfRelationshipExist)
String networkInputs = execution.getVariable(Prefix + "networkInputs")
// String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
String cloudRegion = execution.getVariable(Prefix + "lcpCloudRegion")
- cloudRegion = UriUtils.encode(cloudRegion,"UTF-8")
// Prepare AA&I url
- String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
AaiUtil aaiUtil = new AaiUtil(this)
- String aai_uri = aaiUtil.getCloudInfrastructureCloudRegionUri(execution)
- String queryCloudRegionRequest = "${aai_endpoint}${aai_uri}/" + cloudRegion
- msoLogger.debug(queryCloudRegionRequest)
+
+ AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, Defaults.CLOUD_OWNER.toString(), cloudRegion)
+ def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
+
execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
- msoLogger.debug(Prefix + "queryCloudRegionRequest - " + "\n" + queryCloudRegionRequest)
String cloudRegionPo = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "SDNC", cloudRegion)
String networkType = utils.getNodeText(queryAAIResponse, "network-type")
String networkId = utils.getNodeText(queryAAIResponse, "network-id")
String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
-
+
String networkStackId = ""
networkStackId = utils.getNodeText(queryAAIResponse, "heat-stack-id")
if (networkStackId == 'null' || networkStackId == "" || networkStackId == null) {
String notificationUrl = "" //TODO - is this coming from URN? What variable/value to use?
//String notificationUrl = execution.getVariable("URN_?????") //TODO - is this coming from URN? What variable/value to use?
- String modelCustomizationUuid = ""
+ String modelCustomizationUuid = ""
if (utils.nodeExists(networkRequest, "networkModelInfo")) {
String networkModelInfo = utils.getNodeXml(networkRequest, "networkModelInfo", false).replace("tag0:","").replace(":tag0","")
modelCustomizationUuid = utils.getNodeText(networkModelInfo, "modelCustomizationUuid")
} else {
modelCustomizationUuid = utils.getNodeText(networkRequest, "modelCustomizationId")
}
-
+
String deleteNetworkRequest = """
<deleteNetworkRequest>
<cloudSiteId>${MsoUtils.xmlEscape(cloudSiteId)}</cloudSiteId>
networkId = utils.getNodeText(deleteNetworkInput, "network-id")
}
if (networkId == 'null') {networkId = ""}
-
+
String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
// get/set 'msoRequestId' and 'mso-request-id'
execution.setVariable("mso-request-id", requestId)
} else {
requestId = execution.getVariable("mso-request-id")
- }
+ }
execution.setVariable(Prefix + "requestId", requestId)
msoLogger.debug(Prefix + "requestId " + requestId)
String queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse")
-
+
SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
// 1. prepare delete topology via SDNC Adapter SUBFLOW call
if (networkId == 'null') {networkId = ""}
String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
-
+
SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
// 1. prepare delete topology via SDNC Adapter SUBFLOW call
}
}
-
-
+
+
public void prepareRpcSDNCDeactivate(DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside prepareRpcSDNCDeactivate() of DoDeleteNetworkInstance ")
try {
-
+
// get variables
String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
}
if (networkId == 'null') {networkId = ""}
String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
-
+
String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
execution.setVariable(Prefix + "deactivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
}
}
-
+
// **************************************************
// Post or Validate Response Section
// **************************************************
msoLogger.debug(" Network Adapter responseCode: " + returnCode)
msoLogger.debug("Network Adapter Response - " + "\n" + networkResponse)
msoLogger.debug(networkResponse)
-
+
String errorMessage = ""
if (returnCode == "200") {
msoLogger.debug(" Network Adapter Response is successful - " + "\n" + networkResponse)
String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
msoLogger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
- }
-
-
+ }
+
+
} else { // network error
if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) { //4xx, 5xx
if (networkResponse.contains("deleteNetworkError") ) {
}
}
-
+
public void prepareRpcSDNCDeactivateRollback(DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside prepareRpcSDNCDeactivateRollback() of DoDeleteNetworkInstance ")
try {
-
+
// get variables
String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
}
}
-
+
public void prepareRollbackData(DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
-
+
msoLogger.trace("Inside prepareRollbackData() of DoDeleteNetworkInstance ")
-
+
try {
-
+
Map<String, String> rollbackData = new HashMap<String, String>();
String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
if (rollbackNetworkRequest != null) {
if (rollbackNetworkRequest != "") {
rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
}
- }
+ }
String rollbackDeactivateSDNCRequest = execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")
if (rollbackDeactivateSDNCRequest != null) {
if (rollbackDeactivateSDNCRequest != "") {
rollbackData.put("rollbackDeactivateSDNCRequest", execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest"))
}
- }
+ }
execution.setVariable("rollbackData", rollbackData)
msoLogger.debug("** rollbackData : " + rollbackData)
-
+
execution.setVariable("WorkflowException", execution.getVariable("WorkflowException"))
msoLogger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
-
+
} catch (Exception ex) {
String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
-
+
}
-
+
}
-
+
public void postProcessResponse (DelegateExecution execution) {
execution.setVariable("prefix", Prefix)
msoLogger.trace("Inside postProcessResponse of DoDeleteNetworkInstance ")
try {
-
+
msoLogger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
if (execution.getVariable(Prefix + "isException") == false) {
execution.setVariable(Prefix + "Success", true)
if (execution.getVariable(Prefix + "isSilentSuccess") == true) {
execution.setVariable("rolledBack", false)
} else {
- execution.setVariable("rolledBack", true)
+ execution.setVariable("rolledBack", true)
}
prepareSuccessRollbackData(execution) // populate rollbackData
-
+
} else {
execution.setVariable(Prefix + "Success", false)
execution.setVariable("rollbackData", null)
}
}
}
-
+
// going to the Main flow: a-la-carte or macro
msoLogger.debug(" ***** postProcessResponse(), BAD !!!")
exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
throw new BpmnError("MSOWorkflowException")
-
- }
-
+
+ }
+
} catch(BpmnError b){
msoLogger.debug("Rethrowing MSOWorkflowException")
throw b
-
+
} catch (Exception ex) {
// caught exception
String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, postProcessResponse() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
throw new BpmnError("MSOWorkflowException")
-
+
}
}
public void prepareSuccessRollbackData(DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
-
+
msoLogger.trace("Inside prepareSuccessRollbackData() of DoDeleteNetworkInstance ")
-
+
try {
-
+
if (execution.getVariable("sdncVersion") != '1610') {
prepareRpcSDNCDeactivateRollback(execution)
prepareRpcSDNCUnassignRollback(execution)
} else {
prepareSDNCRollback(execution)
- }
-
+ }
+
Map<String, String> rollbackData = new HashMap<String, String>();
String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
if (rollbackSDNCRequest != null) {
if (rollbackNetworkRequest != "") {
rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
}
- }
+ }
String rollbackDeactivateSDNCRequest = execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")
if (rollbackDeactivateSDNCRequest != null) {
if (rollbackDeactivateSDNCRequest != "") {
rollbackData.put("rollbackDeactivateSDNCRequest", execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest"))
}
- }
+ }
execution.setVariable("rollbackData", rollbackData)
-
+
msoLogger.debug("** rollbackData : " + rollbackData)
execution.setVariable("WorkflowException", null)
-
+
} catch (Exception ex) {
String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
-
+
}
-
+
}
public void prepareRpcSDNCUnassignRollback(DelegateExecution execution) {
msoLogger.trace("Inside prepareRpcSDNCUnassignRollbac() of DoDeleteNetworkInstance ")
try {
-
+
// get variables
String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
String networkId = utils.getNodeText(deleteSDNCResponse, "network-id")
if (networkId == 'null') {networkId = ""}
String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
-
+
SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
// 1. prepare delete topology via SDNC Adapter SUBFLOW call
execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyDeleteRequesAsString)
msoLogger.debug(Prefix + "rollbackSDNCRequest" + "\n" + sndcTopologyDeleteRequesAsString)
msoLogger.debug(" Preparing request for RPC SDNC Topology 'assign-CreateNetworkInstance' rollback . . . - " + "\n" + sndcTopologyDeleteRequesAsString)
-
+
} catch (Exception ex) {
String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCUnassignRollback() - " + ex.getMessage()
}
}
-
+
public void prepareSDNCRollback (DelegateExecution execution) {
execution.setVariable("prefix", Prefix)
msoLogger.trace("Inside prepareSDNCRollback of DoDeleteNetworkInstance ")
try {
-
+
// get variables
String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
networkId = utils.getNodeText(deleteNetworkInput, "network-id")
}
if (networkId == 'null') {networkId = ""}
-
+
String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
// get/set 'msoRequestId' and 'mso-request-id'
execution.setVariable("mso-request-id", requestId)
} else {
requestId = execution.getVariable("mso-request-id")
- }
+ }
execution.setVariable(Prefix + "requestId", requestId)
-
+
String queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse")
-
+
SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
// 1. prepare delete topology via SDNC Adapter SUBFLOW call
}
}
-
+
public void setExceptionFlag(DelegateExecution execution){
execution.setVariable("prefix",Prefix)
-
+
msoLogger.trace("Inside setExceptionFlag() of DoDeleteNetworkInstance ")
-
+
try {
execution.setVariable(Prefix + "isException", true)
-
+
if (execution.getVariable("SavedWorkflowException1") != null) {
execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
} else {
execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
}
msoLogger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
-
+
} catch(Exception ex){
String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
}
-
+
}
-
-
+
+
// *******************************
// Build Error Section
// *******************************
msoLogger.debug("Variables List: " + execution.getVariables())
execution.setVariable("UnexpectedError", "Caught a Java Lang Exception") // Adding this line temporarily until this flows error handling gets updated
exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
-
+
}catch(Exception e){
msoLogger.debug("Caught Exception during processJavaException Method: " + e)
execution.setVariable("UnexpectedError", "Exception in processJavaException method") // Adding this line temporarily until this flows error handling gets updated