/*- * ============LICENSE_START======================================================= * OPENECOMP - MSO * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * ================================================================================ * 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. * See the License for the specific language governing permissions and * limitations under the License. * ============LICENSE_END========================================================= */ package com.att.bpm.scripts; import org.camunda.bpm.engine.delegate.BpmnError import org.camunda.bpm.engine.runtime.Execution import org.apache.commons.lang3.* import javax.xml.parsers.DocumentBuilder import javax.xml.parsers.DocumentBuilderFactory import org.apache.commons.codec.binary.Base64 import org.springframework.web.util.UriUtils import org.openecomp.mso.bpmn.core.RollbackData import org.openecomp.mso.bpmn.core.WorkflowException import org.openecomp.mso.rest.APIResponse import org.openecomp.mso.rest.RESTClient import org.openecomp.mso.rest.RESTConfig import org.w3c.dom.Document import org.w3c.dom.Element import org.w3c.dom.NamedNodeMap import org.w3c.dom.Node import org.w3c.dom.NodeList; import org.xml.sax.InputSource public class DoCreateVfModule extends VfModuleBase { String Prefix="DCVFM_" ExceptionUtil exceptionUtil = new ExceptionUtil() /** * Validates the request message and sets up the workflow. * @param execution the execution */ public void preProcessRequest(Execution execution) { def method = getClass().getSimpleName() + '.preProcessRequest(' + 'execution=' + execution.getId() + ')' def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') logDebug('Entered ' + method, isDebugLogEnabled) execution.setVariable('prefix', Prefix) try{ String request = execution.getVariable("DoCreateVfModuleRequest") utils.logAudit("DoCreateVfModule request: " + request) def rollbackData = execution.getVariable("RollbackData") if (rollbackData == null) { rollbackData = new RollbackData() } execution.setVariable ("CreateAAIVfModuleRequest", request) execution.setVariable("DCVFM_vnfParamsExistFlag", false) //tenantId def tenantId = "" if (utils.nodeExists(request, "tenant-id")) { tenantId = utils.getNodeText(request, "tenant-id") } execution.setVariable("DCVFM_tenantId", tenantId) rollbackData.put("VFMODULE", "tenantid", tenantId) //volumeGroupId def volumeGroupId = "" if (utils.nodeExists(request, "volume-group-id")) { volumeGroupId = utils.getNodeText(request, "volume-group-id") } execution.setVariable("DCVFM_volumeGroupId", volumeGroupId) //volumeGroupId def volumeGroupName = "" if (utils.nodeExists(request, "volume-group-name")) { volumeGroupName = utils.getNodeText(request, "volume-group-name") } execution.setVariable("DCVFM_volumeGroupName", volumeGroupName) //cloudSiteId def cloudSiteId = "" if (utils.nodeExists(request, "aic-cloud-region")) { cloudSiteId = utils.getNodeText(request, "aic-cloud-region") } execution.setVariable("DCVFM_cloudSiteId", cloudSiteId) rollbackData.put("VFMODULE", "aiccloudregion", cloudSiteId) logDebug("cloudSiteId: " + cloudSiteId, isDebugLogEnabled) //vnfType def vnfType = "" if (utils.nodeExists(request, "vnf-type")) { vnfType = utils.getNodeText(request, "vnf-type") } execution.setVariable("DCVFM_vnfType", vnfType) rollbackData.put("VFMODULE", "vnftype", vnfType) logDebug("vnfType: " + vnfType, isDebugLogEnabled) //vnfName def vnfName = "" if (utils.nodeExists(request, "vnf-name")) { vnfName = utils.getNodeText(request, "vnf-name") } execution.setVariable("DCVFM_vnfName", vnfName) rollbackData.put("VFMODULE", "vnfname", vnfName) logDebug("vnfName: " + vnfName, isDebugLogEnabled) //vnfId def vnfId = "" if (utils.nodeExists(request, "vnf-id")) { vnfId = utils.getNodeText(request, "vnf-id") } execution.setVariable("DCVFM_vnfId", vnfId) rollbackData.put("VFMODULE", "vnfid", vnfId) logDebug("vnfId: " + vnfId, isDebugLogEnabled) //vfModuleName def vfModuleName = "" if (utils.nodeExists(request, "vf-module-name")) { vfModuleName = utils.getNodeText(request, "vf-module-name") } execution.setVariable("DCVFM_vfModuleName", vfModuleName) rollbackData.put("VFMODULE", "vfmodulename", vfModuleName) logDebug("vfModuleName: " + vfModuleName, isDebugLogEnabled) //vfModuleModelName def vfModuleModelName = "" if (utils.nodeExists(request, "vf-module-model-name")) { vfModuleModelName = utils.getNodeText(request, "vf-module-model-name") } execution.setVariable("DCVFM_vfModuleModelName", vfModuleModelName) rollbackData.put("VFMODULE", "vfmodulemodelname", vfModuleModelName) logDebug("vfModuleModelName: " + vfModuleModelName, isDebugLogEnabled) //vfModuleId def vfModuleId = "" if (utils.nodeExists(request, "vf-module-id")) { vfModuleId = utils.getNodeText(request, "vf-module-id") } execution.setVariable("DCVFM_vfModuleId", vfModuleId) logDebug("vfModuleId: " + vfModuleId, isDebugLogEnabled) def requestId = "" if (utils.nodeExists(request, "request-id")) { requestId = utils.getNodeText(request, "request-id") } execution.setVariable("DCVFM_requestId", requestId) logDebug("requestId: " + requestId, isDebugLogEnabled) //serviceId def serviceId = "" if (utils.nodeExists(request, "service-id")) { serviceId = utils.getNodeText(request, "service-id") } execution.setVariable("DCVFM_serviceId", serviceId) logDebug("serviceId: " + serviceId, isDebugLogEnabled) //serviceInstanceId def serviceInstanceId = "" if (utils.nodeExists(request, "service-instance-id")) { serviceInstanceId = utils.getNodeText(request, "service-instance-id") } execution.setVariable("DCVFM_serviceInstanceId", serviceInstanceId) rollbackData.put("VFMODULE", "serviceInstanceId", serviceInstanceId) logDebug("serviceInstanceId: " + serviceInstanceId, isDebugLogEnabled) //source def source = "" if (utils.nodeExists(request, "source")) { source = utils.getNodeText(request, "source") } execution.setVariable("DCVFM_source", source) rollbackData.put("VFMODULE", "source", source) logDebug("source: " + source, isDebugLogEnabled) //backoutOnFailure NetworkUtils networkUtils = new NetworkUtils() def backoutOnFailure = networkUtils.isRollbackEnabled(execution,request) execution.setVariable("DCVFM_backoutOnFailure", backoutOnFailure) logDebug("backoutOnFailure: " + backoutOnFailure, isDebugLogEnabled) //isBaseVfModule def isBaseVfModule = "false" if (utils.nodeExists(request, "is-base-vf-module")) { isBaseVfModule = utils.getNodeText(request, "is-base-vf-module") } execution.setVariable("DCVFM_isBaseVfModule", isBaseVfModule) logDebug("isBaseVfModule: " + isBaseVfModule, isDebugLogEnabled) //asdcServiceModelVersion def asdcServiceModelVersion = "" if (utils.nodeExists(request, "asdc-service-model-version")) { asdcServiceModelVersion = utils.getNodeText(request, "asdc-service-model-version") } execution.setVariable("DCVFM_asdcServiceModelVersion", asdcServiceModelVersion) logDebug("asdcServiceModelVersion: " + asdcServiceModelVersion, isDebugLogEnabled) //Get or Generate UUID String uuid = execution.getVariable("DCVFM_uuid") if(uuid == null){ uuid = UUID.randomUUID() logDebug("Generated messageId (UUID) is: " + uuid, isDebugLogEnabled) }else{ logDebug("Found messageId (UUID) is: " + uuid, isDebugLogEnabled) } execution.setVariable("DCVFM_uuid", uuid) execution.setVariable("DCVFM_baseVfModuleId", "") execution.setVariable("DCVFM_baseVfModuleHeatStackId", "") execution.setVariable("DCVFM_heatStackId", "") execution.setVariable("DCVFM_contrailServiceInstanceFqdn", "") execution.setVariable("DCVFM_volumeGroupStackId", "") execution.setVariable("DCVFM_cloudRegionForVolume", "") rollbackData.put("VFMODULE", "rollbackPrepareUpdateVfModule", "false") rollbackData.put("VFMODULE", "rollbackUpdateAAIVfModule", "false") rollbackData.put("VFMODULE", "rollbackVnfAdapterCreate", "false") rollbackData.put("VFMODULE", "rollbackSDNCRequestActivate", "false") rollbackData.put("VFMODULE", "rollbackSDNCRequestAssign", "false") rollbackData.put("VFMODULE", "rollbackCreateAAIVfModule", "false") String sdncCallbackUrl = (String) execution.getVariable('URN_mso_workflow_sdncadapter_callback') if (sdncCallbackUrl == null || sdncCallbackUrl.trim().isEmpty()) { def msg = 'Required variable \'URN_mso_workflow_sdncadapter_callback\' is missing' logError(msg) exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg) } execution.setVariable("DCVFM_sdncCallbackUrl", sdncCallbackUrl) utils.logAudit("SDNC Callback URL: " + sdncCallbackUrl) logDebug("SDNC Callback URL is: " + sdncCallbackUrl, isDebugLogEnabled) String vnfCallbackUrl = (String) execution.getVariable('URN_mso_workflow_vnfadapter_rest_callback') if (vnfCallbackUrl == null || vnfCallbackUrl.trim().isEmpty()) { def msg = 'Required variable \'URN_mso_workflow_vnfadapter_rest_callback\' is missing' logError(msg) exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg) } // Process the parameters String vnfParamsChildNodes = utils.getChildNodes(request, "vnf-params") if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){ utils.log("DEBUG", "Request contains NO VNF Params", isDebugLogEnabled) }else{ utils.log("DEBUG", "Request does contain VNF Params", isDebugLogEnabled) execution.setVariable("DCVFM_vnfParamsExistFlag", true) InputSource xmlSource = new InputSource(new StringReader(request)); DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); docFactory.setNamespaceAware(true) DocumentBuilder docBuilder = docFactory.newDocumentBuilder() Document xml = docBuilder.parse(xmlSource) //Get params, build map Map paramsMap = new HashMap() NodeList paramsList = xml.getElementsByTagNameNS("*", "param") for (int z = 0; z < paramsList.getLength(); z++) { Node node = paramsList.item(z) String paramValue = node.getTextContent() NamedNodeMap e = node.getAttributes() String paramName = e.getNamedItem("name").getTextContent() paramsMap.put(paramName, paramValue) } execution.setVariable("DCVFM_vnfParamsMap", paramsMap) } execution.setVariable("RollbackData", rollbackData) }catch(BpmnError b){ throw b }catch(Exception e){ exceptionUtil.buildAndThrowWorkflowException(execution, 2000, "Internal Error encountered in PreProcess method!") } logDebug('Exited ' + method, isDebugLogEnabled) } /** * Validates a workflow response. * @param execution the execution * @param responseVar the execution variable in which the response is stored * @param responseCodeVar the execution variable in which the response code is stored * @param errorResponseVar the execution variable in which the error response is stored */ public void validateWorkflowResponse(Execution execution, String responseVar, String responseCodeVar, String errorResponseVar) { SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this) sdncAdapterUtils.validateSDNCResponse(execution, responseVar, responseCodeVar, errorResponseVar) } /** * Sends the empty, synchronous response back to the API Handler. * @param execution the execution */ public void sendResponse(Execution execution) { def method = getClass().getSimpleName() + '.sendResponse(' + 'execution=' + execution.getId() + ')' def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') logDebug('Entered ' + method, isDebugLogEnabled) try { buildResponse(execution, "", 200) logDebug('Exited ' + method, isDebugLogEnabled) } catch (BpmnError e) { throw e; } catch (Exception e) { logError('Caught exception in ' + method, e) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Internal Error') } } /** * Using the received vnfId and vfModuleId, query AAI to get the corresponding VNF info. * A 200 response is expected with the VNF info in the response body. Will find out the base module info * and existing VNF's name for add-on modules * * @param execution The flow's execution instance. */ public void postProcessCreateAAIVfModule(Execution execution) { def method = getClass().getSimpleName() + '.getVfModule(' + 'execution=' + execution.getId() + ')' def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') logDebug('Entered ' + method, isDebugLogEnabled) try { def createResponse = execution.getVariable('DCVFM_createVfModuleResponse') utils.logAudit("createVfModule Response: " + createResponse) def rollbackData = execution.getVariable("RollbackData") String vnfName = utils.getNodeText1(createResponse, 'vnf-name') if (vnfName != null) { execution.setVariable('DCVFM_vnfName', vnfName) logDebug("vnfName retrieved from AAI is: " + vnfName, isDebugLogEnabled) rollbackData.put("VFMODULE", "vnfname", vnfName) } String vnfId = utils.getNodeText1(createResponse, 'vnf-id') execution.setVariable('DCVFM_vnfId', vnfId) logDebug("vnfId is: " + vnfId, isDebugLogEnabled) String vfModuleId = utils.getNodeText1(createResponse, 'vf-module-id') execution.setVariable('DCVFM_vfModuleId', vfModuleId) logDebug("vfModuleId is: " + vfModuleId, isDebugLogEnabled) rollbackData.put("VFMODULE", "vnfid", vnfId) rollbackData.put("VFMODULE", "vfmoduleid", vfModuleId) rollbackData.put("VFMODULE", "rollbackCreateAAIVfModule", "true") rollbackData.put("VFMODULE", "rollbackPrepareUpdateVfModule", "true") execution.setVariable("RollbackData", rollbackData) } catch (Exception ex) { ex.printStackTrace() logDebug('Exception occurred while postProcessing CreateAAIVfModule request:' + ex.getMessage(),isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Bad response from CreateAAIVfModule' + ex.getMessage()) } logDebug('Exited ' + method, isDebugLogEnabled) } /** * Using the received vnfId and vfModuleId, query AAI to get the corresponding VNF info. * A 200 response is expected with the VNF info in the response body. Will find out the base module info. * * @param execution The flow's execution instance. */ public void queryAAIVfModule(Execution execution) { def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled") def method = getClass().getSimpleName() + '.getVfModule(' + 'execution=' + execution.getId() + ')' logDebug('Entered ' + method, isDebugLogEnabled) try { def vnfId = execution.getVariable('DCVFM_vnfId') def vfModuleId = execution.getVariable('DCVFM_vfModuleId') AaiUtil aaiUriUtil = new AaiUtil(this) String aai_uri = aaiUriUtil.getNetworkGenericVnfUri(execution) logDebug('AAI URI is: ' + aai_uri, isDebugLogEnabled) String endPoint = execution.getVariable("URN_aai_endpoint") + "${aai_uri}/" + UriUtils.encode(vnfId, "UTF-8") utils.logAudit("AAI endPoint: " + endPoint) String basicAuthCred = utils.getBasicAuth(execution.getVariable("URN_aai_auth"),execution.getVariable("URN_mso_msoKey")) try { RESTConfig config = new RESTConfig(endPoint); def responseData = '' def aaiRequestId = UUID.randomUUID().toString() RESTClient client = new RESTClient(config). addHeader('X-TransactionId', aaiRequestId). addHeader('X-FromAppId', 'MSO'). addHeader('Content-Type', 'application/xml'). addHeader('Accept','application/xml'); if (basicAuthCred != null && !"".equals(basicAuthCred)) { client.addAuthorizationHeader(basicAuthCred) } logDebug('sending GET to AAI endpoint \'' + endPoint + '\'', isDebugLogEnabled) APIResponse response = client.httpGet() utils.logAudit("createVfModule - invoking httpGet() to AAI") responseData = response.getResponseBodyAsString() if (responseData != null) { logDebug("Received generic VNF data: " + responseData, isDebugLogEnabled) } utils.logAudit("createVfModule - queryAAIVfModule Response: " + responseData) utils.logAudit("createVfModule - queryAAIVfModule ResponseCode: " + response.getStatusCode()) execution.setVariable('DCVFM_queryAAIVfModuleResponseCode', response.getStatusCode()) execution.setVariable('DCVFM_queryAAIVfModuleResponse', responseData) logDebug('Response code:' + response.getStatusCode(), isDebugLogEnabled) logDebug('Response:' + System.lineSeparator() + responseData, isDebugLogEnabled) if (response.getStatusCode() == 200) { // Parse the VNF record from A&AI to find base module info logDebug('Parsing the VNF data to find base module info', isDebugLogEnabled) if (responseData != null) { def vfModulesText = utils.getNodeXml(responseData, "vf-modules") def xmlVfModules= new XmlSlurper().parseText(vfModulesText) def vfModules = xmlVfModules.'**'.findAll {it.name() == "vf-module"} int vfModulesSize = 0 for (i in 0..vfModules.size()-1) { def vfModuleXml = groovy.xml.XmlUtil.serialize(vfModules[i]) def isBaseVfModule = utils.getNodeText(vfModuleXml, "is-base-vf-module") if (isBaseVfModule == "true") { String baseModuleId = utils.getNodeText1(vfModuleXml, "vf-module-id") execution.setVariable("DCVFM_baseVfModuleId", baseModuleId) logDebug('Received baseVfModuleId: ' + baseModuleId, isDebugLogEnabled) String baseModuleHeatStackId = utils.getNodeText1(vfModuleXml, "heat-stack-id") execution.setVariable("DCVFM_baseVfModuleHeatStackId", baseModuleHeatStackId) logDebug('Received baseVfModuleHeatStackId: ' + baseModuleHeatStackId, isDebugLogEnabled) } } } } } catch (Exception ex) { ex.printStackTrace() logDebug('Exception occurred while executing AAI GET:' + ex.getMessage(),isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'AAI GET Failed:' + ex.getMessage()) } logDebug('Exited ' + method, isDebugLogEnabled) } catch (BpmnError e) { throw e; } catch (Exception e) { logError('Caught exception in ' + method, e) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in queryAAIVfModule(): ' + e.getMessage()) } } public void preProcessSDNCAssignRequest(Execution execution){ def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) logDebug(" ======== STARTED preProcessSDNCAssignRequest ======== ", isDebugLogEnabled) def vnfId = execution.getVariable("DCVFM_vnfId") def vfModuleId = execution.getVariable("DCVFM_vfModuleId") def serviceInstanceId = execution.getVariable("DCVFM_serviceInstanceId") logDebug("NEW VNF ID: " + vnfId, isDebugLogEnabled) utils.logAudit("NEW VNF ID: " + vnfId) try{ //Build SDNC Request def svcInstId = "" if (serviceInstanceId == null || serviceInstanceId.isEmpty()) { svcInstId = vfModuleId } else { svcInstId = serviceInstanceId } String assignSDNCRequest = buildSDNCRequest(execution, svcInstId, "assign") assignSDNCRequest = utils.formatXml(assignSDNCRequest) execution.setVariable("DCVFM_assignSDNCRequest", assignSDNCRequest) logDebug("Outgoing AssignSDNCRequest is: \n" + assignSDNCRequest, isDebugLogEnabled) utils.logAudit("Outgoing AssignSDNCRequest is: \n" + assignSDNCRequest) }catch(Exception e){ utils.log("ERROR", "Exception Occured Processing preProcessSDNCAssignRequest. Exception is:\n" + e, isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during prepareProvision Method:\n" + e.getMessage()) } logDebug("======== COMPLETED preProcessSDNCAssignRequest ======== ", isDebugLogEnabled) } public void preProcessSDNCGetRequest(Execution execution){ def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) utils.log("DEBUG", " ======== STARTED preProcessSDNCGetRequest Process ======== ", isDebugLogEnabled) try{ String response = execution.getVariable("DCVFM_assignSDNCAdapterResponse") utils.logAudit("DCVFM_assignSDNCAdapterResponse is: \n" + response) String data = utils.getNodeXml(response, "response-data") data = data.replaceAll("<", "<") data = data.replaceAll(">", ">") String vnfId = utils.getNodeText1(data, "vnf-id") def vfModuleId = execution.getVariable('DCVFM_vfModuleId') def serviceInstanceId = execution.getVariable('DCVFM_serviceInstanceId') String uuid = execution.getVariable('testReqId') // for junits if(uuid==null){ uuid = execution.getVariable("att-mso-request-id") + "-" + System.currentTimeMillis() } String serviceOperation = "/VNF-API:vnfs/vnf-list/" + vfModuleId def callbackUrl = execution.getVariable("DCVFM_sdncCallbackUrl") utils.logAudit("callbackUrl:" + callbackUrl) def svcInstId = "" if (serviceInstanceId == null || serviceInstanceId.isEmpty()) { svcInstId = vfModuleId } else { svcInstId = serviceInstanceId } //!!!! TEMPORARY WORKAROUND FOR SDNC REPLICATION ISSUE sleep(5000) String SDNCGetRequest = """ ${uuid} ${svcInstId} query ${serviceOperation} ${callbackUrl} mobility """ utils.logAudit("SDNCGetRequest: \n" + SDNCGetRequest) execution.setVariable("DCVFM_getSDNCRequest", SDNCGetRequest) utils.log("DEBUG", "Outgoing GetSDNCRequest is: \n" + SDNCGetRequest, isDebugLogEnabled) }catch(Exception e){ utils.log("ERROR", "Exception Occurred Processing preProcessSDNCGetRequest. Exception is:\n" + e, isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occured during prepareProvision Method:\n" + e.getMessage()) } utils.log("DEBUG", "======== COMPLETED preProcessSDNCGetRequest Process ======== ", isDebugLogEnabled) } public void preProcessVNFAdapterRequest(Execution execution) { def method = getClass().getSimpleName() + '.VNFAdapterCreateVfModule(' + 'execution=' + execution.getId() + ')' def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') logDebug('Entered ' + method, isDebugLogEnabled) //def xml = execution.getVariable("DoCreateVfModuleRequest") //logDebug('VNF REQUEST is: ' + xml, isDebugLogEnabled) //Get variables //cloudSiteId def cloudSiteId = execution.getVariable("DCVFM_cloudSiteId") //tenantId def tenantId = execution.getVariable("DCVFM_tenantId") //vnfType def vnfType = execution.getVariable("DCVFM_vnfType") //vnfName def vnfName = execution.getVariable("DCVFM_vnfName") //vnfId def vnfId = execution.getVariable("DCVFM_vnfId") //vfModuleName def vfModuleName = execution.getVariable("DCVFM_vfModuleName") //vfModuleModelName def vfModuleModelName = execution.getVariable("DCVFM_vfModuleModelName") //vfModuleId def vfModuleId = execution.getVariable("DCVFM_vfModuleId") //requestId def requestId = execution.getVariable("DCVFM_requestId") //serviceId def serviceId = execution.getVariable("DCVFM_serviceId") //serviceInstanceId def serviceInstanceId = execution.getVariable("DCVFM_serviceInstanceId") //backoutOnFailure def backoutOnFailure = execution.getVariable("DCVFM_backoutOnFailure") //volumeGroupId def volumeGroupId = execution.getVariable("DCVFM_volumeGroupId") // baseVfModuleId def baseVfModuleId = execution.getVariable("DCVFM_baseVfModuleId") // baseVfModuleStackId def baseVfModuleStackId = execution.getVariable("DCVFM_baseVfModuleHeatStackId") // asdcServiceModelVersion def asdcServiceModelVersion = execution.getVariable("DCVFM_asdcServiceModelVersion") //volumeGroupStackId def volumeGroupStackId = execution.getVariable("DCVFM_volumeGroupStackId") def messageId = execution.getVariable('att-mso-request-id') + '-' + System.currentTimeMillis() def notificationUrl = execution.getVariable("URN_mso_workflow_vnfadapter_rest_callback") def useQualifiedHostName = execution.getVariable("URN_mso_use_qualified_host") utils.logAudit("notificationUrl: " + notificationUrl) utils.logAudit("QualifiedHostName: " + useQualifiedHostName) if ('true'.equals(useQualifiedHostName)) { notificationUrl = utils.getQualifiedHostNameForCallback(notificationUrl) } String vnfParams if(execution.getVariable("DCVFM_vnfParamsExistFlag") == true){ StringBuilder sbParams = new StringBuilder() Map paramsMap = execution.getVariable("DCVFM_vnfParamsMap") for (Map.Entry entry : paramsMap.entrySet()) { String paramsXml String paramName = entry.getKey(); String paramValue = entry.getValue() paramsXml = """ ${paramName} ${paramValue} """ vnfParams = sbParams.append(paramsXml) } }else{ vnfParams = "" } //Get SDNC Response Data for VnfSubCreate Request String sdncGetResponse = execution.getVariable('DCVFM_getSDNCAdapterResponse') utils.logAudit("sdncGetResponse: " + sdncGetResponse) String vfModuleParams = buildVfModuleParams(vnfParams, sdncGetResponse, vnfId, vnfName, vfModuleId, vfModuleName) def svcInstId = "" if (serviceInstanceId == null || serviceInstanceId.isEmpty()) { svcInstId = serviceId } else { svcInstId = serviceInstanceId } def createVnfARequest = """ ${cloudSiteId} ${tenantId} ${vnfId} ${vnfName} ${vfModuleName} ${vfModuleId} ${vnfType} ${vfModuleModelName} ${asdcServiceModelVersion} ${volumeGroupId} ${volumeGroupStackId} ${baseVfModuleId} ${baseVfModuleStackId} true ${backoutOnFailure} true ${vfModuleParams} ${requestId} ${svcInstId} ${messageId} ${notificationUrl} """ utils.logAudit("Create VfModule Request to VNF Adapter : " + createVnfARequest) logDebug("Create VfModule Request to VNF Adapter: " + createVnfARequest, isDebugLogEnabled) execution.setVariable("DCVFM_createVnfARequest", createVnfARequest) } /** * Validates the request, request id and service instance id. If a problem is found, * a WorkflowException is generated and an MSOWorkflowException event is thrown. This * method also sets up the log context for the workflow. * @param execution the execution * @return the validated request */ public String validateInfraRequest(Execution execution) { def method = getClass().getSimpleName() + '.validateInfraRequest(' + 'execution=' + execution.getId() + ')' def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') logDebug('Entered ' + method, isDebugLogEnabled) String processKey = getProcessKey(execution); def prefix = execution.getVariable("prefix") if (prefix == null) { exceptionUtil.buildAndThrowWorkflowException(execution, 1002, processKey + " prefix is null") } try { def request = execution.getVariable(prefix + 'Request') if (request == null) { request = execution.getVariable(processKey + 'Request') if (request == null) { request = execution.getVariable('bpmnRequest') } setVariable(execution, processKey + 'Request', null); setVariable(execution, 'bpmnRequest', null); setVariable(execution, prefix + 'Request', request); } if (request == null) { exceptionUtil.buildAndThrowWorkflowException(execution, 1002, processKey + " request is null") } utils.logAudit("DoCreateVfModule Request: " + request) /* def requestId = execution.getVariable("att-mso-request-id") if (requestId == null) { createWorkflowException(execution, 1002, processKey + " request has no att-mso-request-id") } def serviceInstanceId = execution.getVariable("att-mso-service-instance-id") if (serviceInstanceId == null) { createWorkflowException(execution, 1002, processKey + " request message has no att-mso-service-instance-id") } utils.logContext(requestId, serviceInstanceId) */ logDebug('Incoming message: ' + System.lineSeparator() + request, isDebugLogEnabled) logDebug('Exited ' + method, isDebugLogEnabled) return request } catch (BpmnError e) { throw e; } catch (Exception e) { logError('Caught exception in ' + method, e) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Invalid Message") } } public boolean isVolumeGroupIdPresent(Execution execution) { def method = getClass().getSimpleName() + '.isVolumeGroupIdPresent(' + 'execution=' + execution.getId() + ')' def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') logDebug('Entered ' + method, isDebugLogEnabled) def request = execution.getVariable('DoCreateVfModuleRequest') String volumeGroupId = utils.getNodeText1(request, "volume-group-id") if (volumeGroupId == null || volumeGroupId.isEmpty()) { logDebug('No volume group id is present', isDebugLogEnabled) return false } else { logDebug('Volume group id is present', isDebugLogEnabled) return true } } public boolean isVolumeGroupNamePresent(Execution execution) { def method = getClass().getSimpleName() + '.isVolumeGroupNamePresent(' + 'execution=' + execution.getId() + ')' def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') logDebug('Entered ' + method, isDebugLogEnabled) def request = execution.getVariable('DoCreateVfModuleRequest') String volumeGroupName = utils.getNodeText1(request, "volume-group-name") if (volumeGroupName == null || volumeGroupName.isEmpty()) { logDebug('No volume group name is present', isDebugLogEnabled) return false } else { logDebug('Volume group name is present', isDebugLogEnabled) return true } } public String buildSDNCRequest(Execution execution, String svcInstId, String action){ String uuid = execution.getVariable('testReqId') // for junits if(uuid==null){ uuid = execution.getVariable("att-mso-request-id") + "-" + System.currentTimeMillis() } def callbackURL = execution.getVariable("DCVFM_sdncCallbackUrl") def requestId = execution.getVariable("DCVFM_requestId") def serviceId = execution.getVariable("DCVFM_serviceId") def vnfType = execution.getVariable("DCVFM_vnfType") def vnfName = execution.getVariable("DCVFM_vnfName") def tenantId = execution.getVariable("DCVFM_tenantId") def source = execution.getVariable("DCVFM_source") def backoutOnFailure = execution.getVariable("DCVFM_backoutOnFailure") def vfModuleId = execution.getVariable("DCVFM_vfModuleId") def vfModuleName = execution.getVariable("DCVFM_vfModuleName") def vfModuleModelName = execution.getVariable("DCVFM_vfModuleModelName") def vnfId = execution.getVariable("DCVFM_vnfId") def cloudSiteId = execution.getVariable("DCVFM_cloudSiteId") String sdncVNFParamsXml = "" if(execution.getVariable("DCVFM_vnfParamsExistFlag") == true){ sdncVNFParamsXml = buildSDNCParamsXml(execution) }else{ sdncVNFParamsXml = "" } String sdncRequest = """ ${requestId} ${svcInstId} ${action} vnf-topology-operation ${callbackURL} ${requestId} VNFActivateRequest ${source} ${serviceId} ${serviceId} ${svcInstId} notsurewecare ${vfModuleId} ${vfModuleModelName} ${vfModuleName} ${vnfId} ${vnfName} ${vnfType} ${cloudSiteId} ${tenantId} ${sdncVNFParamsXml} """ utils.logAudit("sdncRequest: " + sdncRequest) return sdncRequest } public void preProcessSDNCActivateRequest(Execution execution) { def method = getClass().getSimpleName() + '.preProcessSDNCActivateRequest(' + 'execution=' + execution.getId() + ')' def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') logDebug('Entered ' + method, isDebugLogEnabled) execution.setVariable("prefix", Prefix) logDebug(" ======== STARTED preProcessSDNCActivateRequest Process ======== ", isDebugLogEnabled) try{ String vnfId = execution.getVariable("DCVFM_vnfId") String vfModuleId = execution.getVariable("DCVFM_vfModuleId") String serviceInstanceId = execution.getVariable("DCVFM_serviceInstanceId") def svcInstId = "" if (serviceInstanceId == null || serviceInstanceId.isEmpty()) { svcInstId = vfModuleId } else { svcInstId = serviceInstanceId } String activateSDNCRequest = buildSDNCRequest(execution, svcInstId, "activate") execution.setVariable("DCVFM_activateSDNCRequest", activateSDNCRequest) logDebug("Outgoing CommitSDNCRequest is: \n" + activateSDNCRequest, isDebugLogEnabled) utils.logAudit("Outgoing CommitSDNCRequest is: \n" + activateSDNCRequest) }catch(Exception e){ log.debug("Exception Occured Processing preProcessSDNCActivateRequest. Exception is:\n" + e, isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occured during preProcessSDNCActivateRequest Method:\n" + e.getMessage()) } logDebug("======== COMPLETED preProcessSDNCActivateRequest Process ======== ", isDebugLogEnabled) } public void postProcessVNFAdapterRequest(Execution execution) { def method = getClass().getSimpleName() + '.postProcessVNFAdapterRequest(' + 'execution=' + execution.getId() + ')' def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') logDebug('Entered ' + method, isDebugLogEnabled) execution.setVariable("prefix",Prefix) try{ logDebug(" *** STARTED postProcessVNFAdapterRequest Process*** ", isDebugLogEnabled) String vnfResponse = execution.getVariable("DCVFM_createVnfAResponse") logDebug("VNF Adapter Response is: " + vnfResponse, isDebugLogEnabled) utils.logAudit("createVnfAResponse is: \n" + vnfResponse) RollbackData rollbackData = execution.getVariable("RollbackData") if(vnfResponse != null){ if(vnfResponse.contains("createVfModuleResponse")){ logDebug("Received a Good Response from VNF Adapter for CREATE_VF_MODULE Call.", isDebugLogEnabled) execution.setVariable("DCVFM_vnfVfModuleCreateCompleted", true) String heatStackId = utils.getNodeText1(vnfResponse, "vfModuleStackId") execution.setVariable("DCVFM_heatStackId", heatStackId) logDebug("Received heat stack id from VNF Adapter: " + heatStackId, isDebugLogEnabled) rollbackData.put("VFMODULE", "heatstackid", heatStackId) // Parse vnfOutputs for network_fqdn if (vnfResponse.contains("vfModuleOutputs")) { def vfModuleOutputsXml = utils.getNodeXml(vnfResponse, "vfModuleOutputs") InputSource source = new InputSource(new StringReader(vfModuleOutputsXml)); DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); docFactory.setNamespaceAware(true) DocumentBuilder docBuilder = docFactory.newDocumentBuilder() Document outputsXml = docBuilder.parse(source) NodeList entries = outputsXml.getElementsByTagNameNS("*", "entry") for (int i = 0; i< entries.getLength(); i++) { Node node = entries.item(i) if (node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node String key = element.getElementsByTagNameNS("*", "key").item(0).getTextContent() if (key.equals("contrail-service-instance-fqdn")) { String contrailServiceInstanceFqdn = element.getElementsByTagNameNS("*", "value").item(0).getTextContent() logDebug("Obtained contrailServiceInstanceFqdn: " + contrailServiceInstanceFqdn, isDebugLogEnabled) execution.setVariable("DCVFM_contrailServiceInstanceFqdn", contrailServiceInstanceFqdn) } } } } }else{ logDebug("Received a BAD Response from VNF Adapter for CREATE_VF_MODULE Call.", isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "VNF Adapter Error") } }else{ logDebug("Response from VNF Adapter is Null for CREATE_VF_MODULE Call.", isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Empty response from VNF Adapter") } rollbackData.put("VFMODULE", "rollbackVnfAdapterCreate", "true") execution.setVariable("RollbackData", rollbackData) }catch(BpmnError b){ throw b }catch(Exception e){ logDebug("Internal Error Occured in PostProcess Method", isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Internal Error Occured in PostProcess Method") } logDebug(" *** COMPLETED postProcessVnfAdapterResponse Process*** ", isDebugLogEnabled) } public void preProcessUpdateAAIVfModuleRequestOrch(Execution execution) { def method = getClass().getSimpleName() + '.preProcessUpdateAAIVfModuleRequestOrch(' + 'execution=' + execution.getId() + ')' def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') logDebug('Entered ' + method, isDebugLogEnabled) execution.setVariable("prefix", Prefix) logDebug(" ======== STARTED preProcessUpdateAAIVfModuleRequestOrch ======== ", isDebugLogEnabled) try{ //Build UpdateAAIVfModule Request boolean setContrailServiceInstanceFqdn = false def contrailServiceInstanceFqdn = execution.getVariable("DCVFM_contrailServiceInstanceFqdn") if (!contrailServiceInstanceFqdn.equals("")) { setContrailServiceInstanceFqdn = true } String updateAAIVfModuleRequest = buildUpdateAAIVfModuleRequest(execution, false, true, true, setContrailServiceInstanceFqdn) updateAAIVfModuleRequest = utils.formatXml(updateAAIVfModuleRequest) execution.setVariable("DCVFM_updateAAIVfModuleRequest", updateAAIVfModuleRequest) logDebug("Outgoing UpdateAAIVfModuleRequest is: \n" + updateAAIVfModuleRequest, isDebugLogEnabled) utils.logAudit("Outgoing UpdateAAIVfModuleRequest is: \n" + updateAAIVfModuleRequest) }catch(Exception e){ utils.log("ERROR", "Exception Occured Processing preProcessUpdateAAIVfModuleRequestOrch. Exception is:\n" + e, isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occured during preProcessUpdateAAIVfModuleRequestOrch Method:\n" + e.getMessage()) } logDebug("======== COMPLETED preProcessUpdateAAIVfModuleRequestOrch ======== ", isDebugLogEnabled) } public void preProcessUpdateAAIVfModuleRequestGroup(Execution execution) { def method = getClass().getSimpleName() + '.preProcessUpdateAAIVfModuleRequestGroup(' + 'execution=' + execution.getId() + ')' def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') logDebug('Entered ' + method, isDebugLogEnabled) execution.setVariable("prefix", Prefix) logDebug(" ======== STARTED preProcessUpdateAAIVfModuleRequestGroup ======== ", isDebugLogEnabled) try{ //Build UpdateAAIVfModule Request String updateAAIVfModuleRequest = buildUpdateAAIVfModuleRequest(execution, true, false, false, false) updateAAIVfModuleRequest = utils.formatXml(updateAAIVfModuleRequest) execution.setVariable("DCVFM_updateAAIVfModuleRequest", updateAAIVfModuleRequest) logDebug("Outgoing UpdateAAIVfModuleRequest is: \n" + updateAAIVfModuleRequest, isDebugLogEnabled) utils.logAudit("Outgoing UpdateAAIVfModuleRequest is: \n" + updateAAIVfModuleRequest) }catch(Exception e){ utils.log("ERROR", "Exception Occured Processing preProcessUpdateAAIVfModuleRequestGroup. Exception is:\n" + e, isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occured during preProcessUpdateAAIVfModuleRequestGroup Method:\n" + e.getMessage()) } logDebug("======== COMPLETED preProcessUpdateAAIVfModuleRequestGroup ======== ", isDebugLogEnabled) } public void validateSDNCResponse(Execution execution, String response, String method){ def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix",Prefix) logDebug(" *** STARTED ValidateSDNCResponse Process*** ", isDebugLogEnabled) WorkflowException workflowException = execution.getVariable("WorkflowException") boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator") utils.logAudit("workflowException: " + workflowException) SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this) sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator) utils.logAudit("SDNCResponse: " + response) String sdncResponse = response if(execution.getVariable(Prefix + 'sdncResponseSuccess') == true){ logDebug("Received a Good Response from SDNC Adapter for " + method + " SDNC Call. Response is: \n" + sdncResponse, isDebugLogEnabled) RollbackData rollbackData = execution.getVariable("RollbackData") if(method.equals("assign")){ rollbackData.put("VFMODULE", "rollbackSDNCRequestAssign", "true") execution.setVariable("CRTGVNF_sdncAssignCompleted", true) } else if (method.equals("activate")) { rollbackData.put("VFMODULE", "rollbackSDNCRequestActivate", "true") } execution.setVariable("RollbackData", rollbackData) }else{ logDebug("Received a BAD Response from SDNC Adapter for " + method + " SDNC Call.", isDebugLogEnabled) throw new BpmnError("MSOWorkflowException") } logDebug(" *** COMPLETED ValidateSDNCResponse Process*** ", isDebugLogEnabled) } public void preProcessUpdateAfterCreateRequest(Execution execution){ def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) utils.log("DEBUG", " ======== STARTED preProcessRequest Process ======== ", isDebugLogEnabled) try{ String response = execution.getVariable("DCVFM_assignSDNCAdapterResponse") utils.logAudit("DCVFM_assignSDNCAdapterResponse: " + response) String data = utils.getNodeXml(response, "response-data") data = data.replaceAll("<", "<") data = data.replaceAll(">", ">") String vnfId = utils.getNodeText1(data, "vnf-id") String uuid = execution.getVariable('testReqId') // for junits if(uuid==null){ uuid = execution.getVariable("att-mso-request-id") + "-" + System.currentTimeMillis() } String serviceOperation = "/VNF-API:vnfs/vnf-list/" + vnfId def callbackUrl = execution.getVariable("DCVFM_sdncCallbackUrl") utils.logAudit("callbackUrl: " + callbackUrl) String SDNCGetRequest = """ ${uuid} query ${serviceOperation} ${callbackUrl} mobility """ execution.setVariable("DCVFM_getSDNCRequest", SDNCGetRequest) utils.log("DEBUG", "Outgoing GetSDNCRequest is: \n" + SDNCGetRequest, isDebugLogEnabled) utils.logAudit("Outgoing GetSDNCRequest: " + SDNCGetRequest) }catch(Exception e){ utils.log("ERROR", "Exception Occured Processing preProcessSDNCGetRequest. Exception is:\n" + e, isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occured during prepareProvision Method:\n" + e.getMessage()) } utils.log("DEBUG", "======== COMPLETED preProcessSDNCGetRequest Process ======== ", isDebugLogEnabled) } public String buildUpdateAAIVfModuleRequest(Execution execution, boolean updateVolumeGroupId, boolean updateOrchestrationStatus, boolean updateHeatStackId, boolean updateContrailFqdn){ def vnfId = execution.getVariable("DCVFM_vnfId") def vfModuleId = execution.getVariable("DCVFM_vfModuleId") def volumeGroupIdString = "" if (updateVolumeGroupId) { volumeGroupIdString = "" + execution.getVariable("DCVFM_volumeGroupId") + "" } def orchestrationStatusString = "" if (updateOrchestrationStatus) { orchestrationStatusString = "Created" } def heatStackIdString = "" if (updateHeatStackId) { heatStackIdString = "" + execution.getVariable("DCVFM_heatStackId") + "" } def contrailFqdnString = "" if (updateContrailFqdn) { contrailFqdnString = "" + execution.getVariable("DCVFM_contrailServiceInstanceFqdn") + "" } String updateAAIVfModuleRequest = """ ${vnfId} ${vfModuleId} ${heatStackIdString} ${orchestrationStatusString} ${volumeGroupIdString} ${contrailFqdnString} """ utils.logAudit("updateAAIVfModule Request: " + updateAAIVfModuleRequest) return updateAAIVfModuleRequest } public String buildSDNCParamsXml(Execution execution){ String params = "" StringBuilder sb = new StringBuilder() Map paramsMap = execution.getVariable("DCVFM_vnfParamsMap") for (Map.Entry entry : paramsMap.entrySet()) { String paramsXml String key = entry.getKey(); if(key.endsWith("_network")){ String requestKey = key.substring(0, key.indexOf("_network")) String requestValue = entry.getValue() paramsXml = """ { functx:substring-before-match(data($param/@name), '_network') } { $param/text() } """ }else{ paramsXml = "" } params = sb.append(paramsXml) } return params } public void queryCloudRegion (Execution execution) { def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) utils.log("DEBUG", " ======== STARTED queryCloudRegion ======== ", isDebugLogEnabled) try { String cloudRegion = execution.getVariable("DCVFM_cloudSiteId") // Prepare AA&I url String aai_endpoint = execution.getVariable("URN_aai_endpoint") AaiUtil aaiUtil = new AaiUtil(this) String aai_uri = aaiUtil.getCloudInfrastructureCloudRegionUri(execution) String queryCloudRegionRequest = "${aai_endpoint}${aai_uri}/" + cloudRegion utils.logAudit("CloudRegion Request: " + queryCloudRegionRequest) execution.setVariable("DCVFM_queryCloudRegionRequest", queryCloudRegionRequest) utils.log("DEBUG", "DCVFM_queryCloudRegionRequest - " + "\n" + queryCloudRegionRequest, isDebugLogEnabled) cloudRegion = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion) if ((cloudRegion != "ERROR")) { if(execution.getVariable("DCVFM_queryCloudRegionReturnCode") == "404"){ execution.setVariable("DCVFM_cloudRegionForVolume", "AAIAIC25") }else{ execution.setVariable("DCVFM_cloudRegionForVolume", cloudRegion) } execution.setVariable("DCVFM_isCloudRegionGood", true) } else { String errorMessage = "AAI Query Cloud Region Unsuccessful. AAI Response Code: " + execution.getVariable("DCVFM_queryCloudRegionReturnCode") utils.log("DEBUG", errorMessage, isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage) execution.setVariable("DCVFM_isCloudRegionGood", false) } utils.log("DEBUG", " is Cloud Region Good: " + execution.getVariable("DCVFM_isCloudRegionGood"), isDebugLogEnabled) } catch(BpmnError b){ utils.log("ERROR", "Rethrowing MSOWorkflowException", isDebugLogEnabled) throw b }catch (Exception ex) { // try error String errorMessage = "Bpmn error encountered in CreateVfModule flow. Unexpected Response from AAI - " + ex.getMessage() utils.log("ERROR", " AAI Query Cloud Region Failed. Exception - " + "\n" + errorMessage, isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Exception occured during queryCloudRegion method") } } /** *This method occurs when an MSOWorkflowException is caught. It logs the *variables and ensures that the "WorkflowException" Variable is set. * */ public void processBPMNException(Execution execution){ def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix",Prefix) try{ utils.log("DEBUG", "Caught a BPMN Exception", isDebugEnabled) utils.log("DEBUG", "Started processBPMNException Method", isDebugEnabled) utils.log("DEBUG", "Variables List: " + execution.getVariables(), isDebugEnabled) if(execution.getVariable("WorkflowException") == null){ exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Exception occured during DoCreateVfModule Sub Process") } }catch(Exception e){ utils.log("DEBUG", "Caught Exception during processBPMNException Method: " + e, isDebugEnabled) } utils.log("DEBUG", "Completed processBPMNException Method", isDebugEnabled) } public void prepareCreateAAIVfModuleVolumeGroupRequest(Execution execution) { def method = getClass().getSimpleName() + '.prepareCreateAAIVfModuleVolumeGroupRequest(' + 'execution=' + execution.getId() + ')' def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') logDebug('Entered ' + method, isDebugLogEnabled) execution.setVariable("prefix", Prefix) logDebug(" ======== STARTED prepareCreateAAIVfModuleVolumeGroupRequest ======== ", isDebugLogEnabled) try{ //Build CreateAAIVfModuleVolumeGroup Request def vnfId = execution.getVariable("DCVFM_vnfId") def vfModuleId = execution.getVariable("DCVFM_vfModuleId") def volumeGroupId = execution.getVariable("DCVFM_volumeGroupId") //def aicCloudRegion = execution.getVariable("DCVFM_cloudSiteId") def aicCloudRegion = execution.getVariable("DCVFM_cloudRegionForVolume") String createAAIVfModuleVolumeGroupRequest = """ ${vnfId} ${vfModuleId} ${volumeGroupId} ${aicCloudRegion} """ createAAIVfModuleVolumeGroupRequest = utils.formatXml(createAAIVfModuleVolumeGroupRequest) execution.setVariable("DCVFM_createAAIVfModuleVolumeGroupRequest", createAAIVfModuleVolumeGroupRequest) logDebug("Outgoing CreateAAIVfModuleVolumeGroupRequest is: \n" + createAAIVfModuleVolumeGroupRequest, isDebugLogEnabled) utils.logAudit("Outgoing CreateAAIVfModuleVolumeGroupRequest is: \n" + createAAIVfModuleVolumeGroupRequest) }catch(Exception e){ utils.log("ERROR", "Exception Occured Processing prepareCreateAAIVfModuleVolumeGroupRequest. Exception is:\n" + e, isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occured during prepareCreateAAIVfModuleVolumeGroupRequest Method:\n" + e.getMessage()) } logDebug("======== COMPLETED prepareCreateAAIVfModuleVolumeGroupRequest ======== ", isDebugLogEnabled) } }