diff options
author | 2017-01-31 11:40:03 +0100 | |
---|---|---|
committer | 2017-01-31 12:59:33 +0100 | |
commit | 025301d08b061482c1f046d562bf017c8cbcfe8d (patch) | |
tree | 68a2a549736c9bf0f7cd4e71c76e40ef7e2606f2 /bpmn/MSOGammaBPMN/src/main/groovy/com/att/bpm/scripts/DoCreateVfModuleVolumeV1.groovy | |
parent | 2754ad52f833278a5c925bd788a16d1dce16a598 (diff) |
Initial OpenECOMP MSO commit
Change-Id: Ia6a7574859480717402cc2f22534d9973a78fa6d
Signed-off-by: ChrisC <cc697w@intl.att.com>
Diffstat (limited to 'bpmn/MSOGammaBPMN/src/main/groovy/com/att/bpm/scripts/DoCreateVfModuleVolumeV1.groovy')
-rw-r--r-- | bpmn/MSOGammaBPMN/src/main/groovy/com/att/bpm/scripts/DoCreateVfModuleVolumeV1.groovy | 654 |
1 files changed, 654 insertions, 0 deletions
diff --git a/bpmn/MSOGammaBPMN/src/main/groovy/com/att/bpm/scripts/DoCreateVfModuleVolumeV1.groovy b/bpmn/MSOGammaBPMN/src/main/groovy/com/att/bpm/scripts/DoCreateVfModuleVolumeV1.groovy new file mode 100644 index 0000000000..12a21c6eba --- /dev/null +++ b/bpmn/MSOGammaBPMN/src/main/groovy/com/att/bpm/scripts/DoCreateVfModuleVolumeV1.groovy @@ -0,0 +1,654 @@ +/*- + * ============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 static org.camunda.spin.Spin.XML; +import groovy.json.JsonSlurper +import groovy.lang.GroovyInterceptable; +import groovy.xml.XmlUtil +import org.springframework.web.util.UriUtils + +import org.openecomp.mso.rest.APIResponse +import org.openecomp.mso.rest.RESTClient +import org.openecomp.mso.rest.RESTConfig +import org.openecomp.mso.bpmn.core.WorkflowException + +import java.util.UUID; + +import org.camunda.bpm.engine.delegate.BpmnError +import org.camunda.bpm.engine.runtime.Execution +import org.apache.commons.lang3.* +import org.apache.commons.codec.binary.Base64; + +class DoCreateVfModuleVolumeV1 extends VfModuleBase { + + String prefix='DCVFMODVOLV1_' + + + /** + * Perform initial processing, such as request validation, initialization of variables, etc. + * * @param execution + */ + public void preProcessRequest (Execution execution) { + def isDebugEnabled=execution.getVariable("isDebugLogEnabled") + preProcessRequest(execution, isDebugEnabled) + } + + /** + * Perform initial processing, such as request validation, initialization of variables, etc. + * @param execution + * @param isDebugEnabled + */ + public void preProcessRequest (Execution execution, isDebugEnabled) { + + execution.setVariable("prefix",prefix) + execution.setVariable(prefix+'SuccessIndicator', false) + + + // INPUT: DoCreateVfModuleVolumeV1Request, att-mso-request-id, volume-group-id, vnf-id, is-vid-request + // OUTPUT: DCVFMODVOLV1_SuccessIndicator. WorkflowException + + def volumeRequest = getVariable(execution, 'DoCreateVfModuleVolumeV1Request') + if (volumeRequest != null) { + execution.setVariable(prefix+'Request', volumeRequest) + } else { + volumeRequest = getVariable(execution, prefix+'Request') + if (volumeRequest == null) { + (new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, 'DoCreateVfModuleVolumeV1 received null request.') + } + } + + def vnfId = execution.getVariable('vnf-id') + if (vnfId == null) { + (new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, 'DoCreateVfModuleVolumeV1 received null vnf-id.') + } + + def volumeGroupId = execution.getVariable('volume-group-id') + if (volumeGroupId == null) { + (new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, 'DoCreateVfModuleVolumeV1 received null volume-group-id.') + } + + def requestId = execution.getVariable("att-mso-request-id") + if (requestId == null || requestId == "") { + requestId = utils.getNodeText1(volumeRequest, "request-id") + } + + //def serviceId = execution.getVariable("att-mso-service-instance-id") + //if (serviceId == null || serviceId == "") { + def serviceId = utils.getNodeText1(volumeRequest, "service-id") + //} + + def source = utils.getNodeText1(volumeRequest, "source") + + execution.setVariable(prefix+'requestId', requestId) + execution.setVariable(prefix+'serviceId', serviceId) + execution.setVariable(prefix+'source', source) + + // @TODO: for better tracking of logs, should we strip all new lines in the log message? + utils.logAudit('Incoming request: ' + volumeRequest) + + // Rollback settings + NetworkUtils networkUtils = new NetworkUtils() + def rollbackEnabled = networkUtils.isRollbackEnabled(execution,volumeRequest) + execution.setVariable(prefix+"rollbackEnabled", rollbackEnabled) + utils.log("DEBUG", 'rollbackEnabled: ' + rollbackEnabled, isDebugEnabled) + + } + + + /** + * Get cloud region + * @param execution + * @param isDebugEnabled + */ + public void callRESTQueryAAICloudRegion (Execution execution, isDebugEnabled) { + + def request = execution.getVariable(prefix+'Request') + def cloudRegion = utils.getNodeText1(request, "aic-cloud-region") + utils.log("DEBUG", 'Request cloud region is: ' + cloudRegion, isDebugEnabled) + + AaiUtil aaiUtil = new AaiUtil(this) + String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution) + String queryCloudRegionRequest = aaiEndpoint + '/' + cloudRegion + + utils.logAudit(queryCloudRegionRequest) + + cloudRegion = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion) + + if ((cloudRegion != "ERROR")) { + if(execution.getVariable(prefix+"queryCloudRegionReturnCode") == "404"){ + cloudRegion = "AAIAIC25" + } + execution.setVariable(prefix+"aicCloudRegion", cloudRegion) + utils.log("DEBUG", "AIC Cloud Region: " + cloudRegion, isDebugEnabled) + } else { + String errorMessage = "AAI Query Cloud Region Unsuccessful. Return Code: " + execution.getVariable(prefix+"queryCloudRegionReturnCode") + utils.log("DEBUG", errorMessage, isDebugEnabled) + (new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, errorMessage) + } + } + + + /** + * Query AAI volume group by name + * @param execution + * @param isDebugEnabled + */ + public void callRESTQueryAAIVolGrpName(Execution execution, isDebugEnabled) { + + def volumeRequest = execution.getVariable(prefix+'Request') + def volumeGroupName = utils.getNodeText(volumeRequest, "volume-group-name") + def cloudRegion = execution.getVariable(prefix+"aicCloudRegion") + + // Save volume group name + execution.setVariable(prefix+'volumeGroupName', volumeGroupName) + + // This is for stub testing + def testVolumeGroupName = execution.getVariable('test-volume-group-name') + if (testVolumeGroupName != null && testVolumeGroupName.length() > 0) { + volumeGroupName = testVolumeGroupName + //reset to null + execution.setVariable('test-volume-group-name', null) + } + + AaiUtil aaiUtil = new AaiUtil(this) + String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution) + String queryAAIVolumeNameRequest = aaiEndpoint + '/' + cloudRegion + "/volume-groups" + "?volume-group-name=" + UriUtils.encode(volumeGroupName, 'UTF-8') + + utils.logAudit('Query AAI volume group by name: ' + queryAAIVolumeNameRequest) + + APIResponse response = aaiUtil.executeAAIGetCall(execution, queryAAIVolumeNameRequest) + + String returnCode = response.getStatusCode() + String aaiResponseAsString = response.getResponseBodyAsString() + aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString) + + utils.logAudit("AAI query volume group by name return code: " + returnCode) + utils.logAudit("AAI query volume group by name response: " + aaiResponseAsString) + + ExceptionUtil exceptionUtil = new ExceptionUtil() + + execution.setVariable(prefix+"queryAAIVolGrpNameResponse", aaiResponseAsString) + execution.setVariable(prefix+'AaiReturnCode', returnCode) + + if (returnCode=='200') { + // @TODO: verify error code + // @TODO: create class of literals representing error codes + execution.setVariable(prefix+'queryAAIVolGrpNameResponse', aaiResponseAsString) + utils.log("DEBUG", "Volume Group Name $volumeGroupName exists in AAI.", isDebugEnabled) + } else { + if (returnCode=='404') { + utils.log("DEBUG", "Volume Group Name $volumeGroupName does not exist in AAI.", isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Volume group $volumeGroupName not found in AAI. Response code: 404") + } else { + WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution) + throw new BpmnError("MSOWorkflowException") + } + } + } + + + /** + * Create a WorkflowException + * @param execution + * @param isDebugEnabled + */ + public void buildWorkflowException(Execution execution, int errorCode, errorMessage, isDebugEnabled) { + utils.log("DEBUG", errorMessage, isDebugEnabled) + (new ExceptionUtil()).buildWorkflowException(execution, 2500, errorMessage) + } + + + /** + * Create a WorkflowException + * @param execution + * @param isDebugEnabled + */ + public void handleError(Execution execution, isDebugEnabled) { + WorkflowException we = execution.getVariable('WorkflowException') + if (we == null) { + (new ExceptionUtil()).buildWorkflowException(execution, 2500, "Enexpected error encountered!") + } + throw new BpmnError("MSOWorkflowException") + } + + /** + * Create volume group in AAI + * @param execution + * @param isDebugEnabled + */ + public void callRESTCreateAAIVolGrpName(Execution execution, isDebugEnabled) { + + def volumeRequest = execution.getVariable(prefix+'Request') + def vnfId = execution.getVariable('vnf-id') + def volumeName = utils.getNodeText(volumeRequest, "volume-group-name") + + def cloudRegion = execution.getVariable(prefix+"aicCloudRegion") + def groupId = execution.getVariable('volume-group-id') + utils.log("DEBUG", "volume group id: " + groupId, isDebugEnabled) + + AaiUtil aaiUtil = new AaiUtil(this) + String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution) + String createAAIVolumeGrpNameUrlRequest = aaiEndpoint + '/' + cloudRegion + "/volume-groups/volume-group/" + UriUtils.encode(groupId, "UTF-8") + + String namespace = aaiUtil.getNamespaceFromUri(aaiUtil.getCloudInfrastructureCloudRegionUri(execution)) + utils.log("DEBUG", "AAI namespace is: " + namespace, isDebugEnabled) + + utils.logAudit(createAAIVolumeGrpNameUrlRequest) + + //Prepare payload (PUT) + def vnfType = utils.getNodeText(volumeRequest, "vnf-type") + def tenantId = utils.getNodeText(volumeRequest, "tenant-id") + + NetworkUtils networkUtils = new NetworkUtils() + String payload = networkUtils.createCloudRegionVolumeRequest(groupId, volumeName, vnfType, vnfId, tenantId, cloudRegion, namespace) + String payloadXml = utils.formatXml(payload) + utils.logAudit(payloadXml) + + APIResponse response = aaiUtil.executeAAIPutCall(execution, createAAIVolumeGrpNameUrlRequest, payloadXml) + + String returnCode = response.getStatusCode() + String aaiResponseAsString = response.getResponseBodyAsString() + aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString) + + utils.logAudit("AAI create volume group return code: " + returnCode) + utils.logAudit("AAI create volume group response: " + aaiResponseAsString) + + execution.setVariable(prefix+"createAAIVolumeGrpNameReturnCode", returnCode) + execution.setVariable(prefix+"createAAIVolumeGrpNameResponse", aaiResponseAsString) + + ExceptionUtil exceptionUtil = new ExceptionUtil() + + if (returnCode =='201') { + execution.setVariable(prefix+"isAAIRollbackNeeded", true) + } else { + execution.setVariable(prefix+"isErrorMessageException", true) + if (returnCode=='404') { + // @TODO: verify return code and make static LITERAL + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Unable to create volume group in AAI. Response code: 404") + } else { + WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution) + utils.log("DEBUG", " AAI Adapter Query Failed. WorkflowException - " + "\n" + aWorkflowException, isDebugEnabled) + throw new BpmnError("MSOWorkflowException") + } + } + } + + /** + * Prepare VNF adapter create request XML + * @param execution + */ + public void prepareVnfAdapterCreateRequest(Execution execution, isDebugEnabled) { + + + def volumeRequest = execution.getVariable(prefix+'Request') + def requestId = execution.getVariable(prefix+'requestId') + def serviceId = execution.getVariable(prefix+'serviceId') + + def aaiGenericVnfResponse = execution.getVariable(prefix+'AAIQueryGenericVfnResponse') + def vnfId = utils.getNodeText1(aaiGenericVnfResponse, 'vnf-id') + def vnfName = utils.getNodeText1(aaiGenericVnfResponse, 'vnf-name') + + String messageId = UUID.randomUUID() + utils.log("DEBUG", "messageId to be used is generated: " + messageId, isDebugEnabled) + + // prepare vnf request for vnfAdapterCreateV1 + def cloudSiteId = utils.getNodeText1(volumeRequest, 'aic-cloud-region') + def tenantId = utils.getNodeText1(volumeRequest, "tenant-id") + def vnfType = utils.getNodeText1(volumeRequest, "vnf-type") + def vnfVersion = utils.getNodeText1(volumeRequest, "asdc-service-model-version") + def vnfModuleType = utils.getNodeText1(volumeRequest, "vf-module-model-name") + def volumeGroupnName = utils.getNodeText1(volumeRequest, "volume-group-name") + + def volumeParamsXml = utils.getNodeXml(volumeRequest, 'volume-params') + def volumeGroupParams = transformVolumeParamsToEntries(volumeParamsXml) + + utils.log("DEBUG", "volumeGroupParams: "+ volumeGroupParams, isDebugEnabled) + + String volumeGroupId = execution.getVariable('volume-group-id') + def notificationUrl = execution.getVariable("URN_mso_workflow_vnfadapter_rest_callback") + def useQualifiedHostName = execution.getVariable("URN_mso_use_qualified_host") + if ('true'.equals(useQualifiedHostName)) { + notificationUrl = utils.getQualifiedHostNameForCallback(notificationUrl) + } + utils.log("DEBUG", "CreateVfModuleVolume - notificationUrl: "+ notificationUrl, isDebugEnabled) + + def backoutOnFailure = execution.getVariable("DCVFMODVOLV1_rollbackEnabled") + utils.log("DEBUG", "backoutOnFailure: "+ backoutOnFailure, isDebugEnabled) + + // build request + String vnfSubCreateWorkflowRequest = + """ + <createVolumeGroupRequest> + <cloudSiteId>${cloudSiteId}</cloudSiteId> + <tenantId>${tenantId}</tenantId> + <vnfId>${vnfId}</vnfId> + <vnfName>${vnfName}</vnfName> + <volumeGroupId>${volumeGroupId}</volumeGroupId> + <volumeGroupName>${volumeGroupnName}</volumeGroupName> + <vnfType>${vnfType}</vnfType> + <vnfVersion>${vnfVersion}</vnfVersion> + <vfModuleType>${vnfModuleType}</vfModuleType> + <volumeGroupParams> + <entry> + <key>vnf_id</key> + <value>${vnfId}</value> + </entry> + <entry> + <key>vnf_name</key> + <value>${vnfName}</value> + </entry> + <entry> + <key>vf_module_id</key> + <value>${volumeGroupId}</value> + </entry> + <entry> + <key>vf_module_name</key> + <value>${volumeGroupnName}</value> + </entry> + ${volumeGroupParams} + </volumeGroupParams> + <skipAAI>true</skipAAI> + <backout>${backoutOnFailure}</backout> + <failIfExists>true</failIfExists> + <msoRequest> + <requestId>${requestId}</requestId> + <serviceInstanceId>${serviceId}</serviceInstanceId> + </msoRequest> + <messageId>${messageId}</messageId> + <notificationUrl>${notificationUrl}</notificationUrl> + </createVolumeGroupRequest> + """ + + String vnfSubCreateWorkflowRequestAsString = utils.formatXml(vnfSubCreateWorkflowRequest) + utils.logAudit(vnfSubCreateWorkflowRequestAsString) + execution.setVariable(prefix+"createVnfARequest", vnfSubCreateWorkflowRequestAsString) + + // build rollback request for use later if needed + + String vnfSubRollbackWorkflowRequest = + """<rollbackVolumeGroupRequest> + <cloudSiteId>${cloudSiteId}</cloudSiteId> + <tenantId>${tenantId}</tenantId> + <volumeGroupId>${volumeGroupId}</volumeGroupId> + <skipAAI>true</skipAAI> + <volumeGroupCreated>true</volumeGroupCreated> + <msoRequest> + <requestId>${requestId}</requestId> + <serviceInstanceId>${serviceId}</serviceInstanceId> + </msoRequest> + <messageId>${messageId}</messageId> + <notificationUrl>${notificationUrl}</notificationUrl> + </rollbackVolumeGroupRequest>""" + + utils.log("DEBUG", "Sub Vnf flow rollback request: vnfSubRollbackWorkflowRequest " + "\n" + vnfSubRollbackWorkflowRequest, isDebugEnabled) + + String vnfSubRollbackWorkflowRequestAsString = utils.formatXml(vnfSubRollbackWorkflowRequest) + execution.setVariable(prefix+"rollbackVnfARequest", vnfSubRollbackWorkflowRequestAsString) + } + + + + /** + * Update voulume group in AAI + * @TODO: Can we re-use the create method?? + * @param execution + * @param isDebugEnabled + */ + public void callRESTUpdateCreatedVolGrpName(Execution execution, isDebugEnabled) { + + // get variables + String requeryAAIVolGrpNameResponse = execution.getVariable(prefix+"queryAAIVolGrpNameResponse") + String volumeGroupId = utils.getNodeText(requeryAAIVolGrpNameResponse, "volume-group-id") + String cloudRegion = execution.getVariable(prefix+"aicCloudRegion") + + AaiUtil aaiUtil = new AaiUtil(this) + String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution) + String updateAAIVolumeGroupUrlRequest = aaiEndpoint + '/' + cloudRegion + "/volume-groups/volume-group/" + UriUtils.encode(volumeGroupId, 'UTF-8') + + String namespace = aaiUtil.getNamespaceFromUri(aaiUtil.getCloudInfrastructureCloudRegionUri(execution)) + + utils.logAudit(updateAAIVolumeGroupUrlRequest) + + //Prepare payload (PUT) + String createVnfAResponse = execution.getVariable(prefix+"createVnfAResponse") + + // @TODO: revisit + // if VID request createVnfresponse will be null, use vnf from JSON request + def vnfId = "" + if(createVnfAResponse == null || createVnfAResponse == "") { + vnfId = execution.getVariable(prefix+'vnfId') + } + else { + vnfId = utils.getNodeText(createVnfAResponse, "volumeGroupStackId") + } + + NetworkUtils networkUtils = new NetworkUtils() + String payload = networkUtils.updateCloudRegionVolumeRequest(requeryAAIVolGrpNameResponse, vnfId, namespace) + String payloadXml = utils.formatXml(payload) + + //execution.setVariable(prefix+"updateCreatedAAIVolumeGrpNamePayloadRequest", payloadXml) + utils.logAudit(payload) + //utils.log("DEBUG", " 'payload' to Update Created VolumeGroupName - " + "\n" + payloadXml, isDebugEnabled) + + APIResponse response = aaiUtil.executeAAIPutCall(execution, updateAAIVolumeGroupUrlRequest, payloadXml) + + String returnCode = response.getStatusCode() + String aaiResponseAsString = response.getResponseBodyAsString() + aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString) + + utils.logAudit("AAI create volume group return code: " + returnCode) + utils.logAudit("AAI create volume group response: " + aaiResponseAsString) + + ExceptionUtil exceptionUtil = new ExceptionUtil() + + if (returnCode =='200') { + execution.setVariable(prefix+"updateCreatedAAIVolumeGrpNameResponse", aaiResponseAsString) + execution.setVariable(prefix+"isPONR", true) + } else { + execution.setVariable(prefix+"isErrorMessageException", true) + if (returnCode=='404') { + // @TODO: verify return code and make static LITERAL + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Unable to update volume group in AAI. Response code: 404") + } else { + WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution) + utils.log("DEBUG", " AAI Adapter Query Failed. WorkflowException - " + "\n" + aWorkflowException, isDebugEnabled) + throw new BpmnError("MSOWorkflowException") + } + } + } + + + /** + * Query AAI service instance + * @param execution + * @param isDebugEnabled + */ + public void callRESTQueryAAIGenericVnf(Execution execution, isDebugEnabled) { + + def request = execution.getVariable(prefix+"Request") + def vnfId = execution.getVariable('vnf-id') + + AaiUtil aaiUtil = new AaiUtil(this) + String aaiEndpoint = aaiUtil.getNetworkGenericVnfEndpoint(execution) + def String queryAAIRequest = aaiEndpoint + "/" + UriUtils.encode(vnfId, "UTF-8") + + utils.logAudit("AAI query generic vnf request: " + queryAAIRequest) + + APIResponse response = aaiUtil.executeAAIGetCall(execution, queryAAIRequest) + + String returnCode = response.getStatusCode() + String aaiResponseAsString = response.getResponseBodyAsString() + aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString) + + utils.logAudit("AAI query generic vnf return code: " + returnCode) + utils.logAudit("AAI query generic vnf response: " + aaiResponseAsString) + + ExceptionUtil exceptionUtil = new ExceptionUtil() + + if (returnCode=='200') { + utils.log("DEBUG", 'Generic vnf ' + vnfId + ' found in AAI.', isDebugEnabled) + execution.setVariable(prefix+'AAIQueryGenericVfnResponse', aaiResponseAsString) + } else { + if (returnCode=='404') { + def message = 'Generic vnf ' + vnfId + ' was not found in AAI. Return code: 404.' + utils.log("DEBUG", message, isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, message) + } else { + WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution) + throw new BpmnError("MSOWorkflowException") + } + } + } + + public void callRESTDeleteAAIVolumeGroup(Execution execution, isDebugEnabled) { + + callRESTQueryAAIVolGrpName(execution, isDebugEnabled) + + def queryAaiVolumeGroupResponse = execution.getVariable(prefix+'queryAAIVolGrpNameResponse') + + def volumeGroupId = utils.getNodeText(queryAaiVolumeGroupResponse, "volume-group-id") + def resourceVersion = utils.getNodeText(queryAaiVolumeGroupResponse, "resource-version") + + def cloudRegion = execution.getVariable(prefix+"aicCloudRegion") + + AaiUtil aaiUtil = new AaiUtil(this) + String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution) + String deleteAAIVolumeGrpIdRequest = aaiEndpoint + '/' + cloudRegion + "/volume-groups/volume-group" + '/' + volumeGroupId + "?resource-version=" + UriUtils.encode(resourceVersion, "UTF-8") + + utils.logAudit('Delete AAI volume group : ' + deleteAAIVolumeGrpIdRequest) + + APIResponse response = aaiUtil.executeAAIDeleteCall(execution, deleteAAIVolumeGrpIdRequest) + + String returnCode = response.getStatusCode() + String aaiResponseAsString = response.getResponseBodyAsString() + aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString) + + utils.logAudit("AAI delete volume group return code: " + returnCode) + utils.logAudit("AAI delete volume group response: " + aaiResponseAsString) + + ExceptionUtil exceptionUtil = new ExceptionUtil() + + def volumeGroupNameFound = prefix+'volumeGroupNameFound' + if (returnCode=='200' || returnCode=='204' ) { + utils.log("DEBUG", "Volume group $volumeGroupId deleted.", isDebugEnabled) + } else { + if (returnCode=='404') { + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Volume group $volumeGroupId not found for delete in AAI Response code: 404") + } else { + WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution) + throw new BpmnError("MSOWorkflowException") + } + } + } + + + + + + public void prepareSuccessDBRequest(Execution execution, isDebugEnabled) { + String requestId = execution.getVariable(prefix+'requestId') + String dbVnfOutputs = execution.getVariable(prefix+'volumeOutputs') + prepareDBRequest(execution, requestId, "VolumeGroup successfully created.", "COMPLETED", "100", dbVnfOutputs, isDebugEnabled) + } + + public void prepareFailDbRequest(Execution execution, isDebugEnabled) { + + WorkflowException we = execution.getVariable("WorkflowException") + + String requestId = execution.getVariable(prefix+'requestId') + String dbVnfOutputs = execution.getVariable(prefix+'volumeOutputs') + prepareDBRequest(execution, requestId, we.getErrorMessage(), "FAILURE", "", dbVnfOutputs, isDebugEnabled) + + } + + + /** + * Prepare Infra DB XML Request + * @param execution + */ + public void prepareDBRequest (Execution execution, String requestId, String statusMessage, String requestStatus, String progress, String dbVnfOutputs, isDebugEnabled) { + + String dbRequest = + """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> + <soapenv:Header/> + <soapenv:Body> + <ns:updateInfraRequest xmlns:ns="http://com.att.mso/requestsdb"> + <requestId>${requestId}</requestId> + <lastModifiedBy>BPMN</lastModifiedBy> + <statusMessage>${statusMessage}</statusMessage> + <responseBody></responseBody> + <requestStatus>${requestStatus}</requestStatus> + <progress>${progress}</progress> + <vnfOutputs>${dbVnfOutputs}</vnfOutputs> + </ns:updateInfraRequest> + </soapenv:Body> + </soapenv:Envelope>""" + + utils.log("DEBUG", " DB Adapter Request - " + "\n" + dbRequest, isDebugEnabled) + String buildDeleteDBRequestAsString = utils.formatXml(dbRequest) + + execution.setVariable(prefix+"createDBRequest", buildDeleteDBRequestAsString) + + utils.logAudit(buildDeleteDBRequestAsString) + } + + + + + public void postProcessResponse (Execution execution, isDebugEnabled) { + + String dbReturnCode = execution.getVariable(prefix+"dbReturnCode") + utils.log("DEBUG", "DB Update Response Code : " + dbReturnCode, isDebugEnabled) + + String createDBResponse = execution.getVariable(prefix+"createDBResponse") + utils.logAudit(createDBResponse) + + String source = execution.getVariable(prefix+"source") + String requestId = execution.getVariable(prefix+'requestId') + + String msoCompletionRequest = + """<aetgt:MsoCompletionRequest xmlns:aetgt="http://ecomp.att.com/mso/workflow/schema/v1" + xmlns:ns="http://ecomp.att.com/mso/request/types/v1"> + <request-info xmlns="http://ecomp.att.com/mso/infra/vnf-request/v1"> + <request-id>${requestId}</request-id> + <action>CREATE</action> + <source>${source}</source> + </request-info> + <aetgt:mso-bpel-name>BPEL Volume Group action: CREATE</aetgt:mso-bpel-name> + </aetgt:MsoCompletionRequest>""" + + // Format Response + String xmlMsoCompletionRequest = utils.formatXml(msoCompletionRequest) + utils.logAudit(xmlMsoCompletionRequest) + + // normal path + if (dbReturnCode == "200") { + execution.setVariable(prefix+"Success", true) + execution.setVariable(prefix+"CompleteMsoProcessRequest", xmlMsoCompletionRequest) + utils.log("DEBUG", " Overall SUCCESS Response going to CompleteMsoProcess - " + "\n" + xmlMsoCompletionRequest, isDebugEnabled) + } else { + execution.setVariable(prefix+"isErrorMessageException", true) + utils.log("DEBUG", " DB Update failed, code: " + dbReturnCode + ", going to Unexpected Error.", isDebugEnabled) + } + } + +} |