/*
* ============LICENSE_START=======================================================
* ONAP - SO
* ================================================================================
* 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 org.openecomp.mso.bpmn.infrastructure.scripts;
import groovy.xml.XmlUtil
import groovy.json.*
import java.util.UUID;
import org.camunda.bpm.engine.delegate.BpmnError
import org.camunda.bpm.engine.delegate.DelegateExecution
import org.apache.commons.lang3.*
import org.apache.commons.codec.binary.Base64;
import org.openecomp.mso.bpmn.common.scripts.AaiUtil
import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor
import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
import org.openecomp.mso.bpmn.common.scripts.VidUtils
import org.openecomp.mso.bpmn.core.RollbackData
import org.openecomp.mso.bpmn.core.WorkflowException
import org.openecomp.mso.bpmn.core.json.JsonUtils
import org.openecomp.mso.rest.APIResponse
import org.springframework.web.util.UriUtils
public class DoCreateVfModuleVolumeRollback extends AbstractServiceTaskProcessor {
String Prefix="DCVFMODVOLRBK_"
ExceptionUtil exceptionUtil = new ExceptionUtil()
JsonUtils jsonUtil = new JsonUtils()
VidUtils vidUtils = new VidUtils(this)
def className = getClass().getSimpleName()
/**
* This method is executed during the preProcessRequest task of the DoCreateVfModuleVolumeRollback.bpmn process.
* @param execution
*/
public InitializeProcessVariables(DelegateExecution execution){
/* Initialize all the process variables in this block */
execution.setVariable(Prefix + "volumeGroupName", null)
execution.setVariable(Prefix + "lcpCloudRegionId", null)
execution.setVariable(Prefix + "rollbackVnfARequest", null)
}
// **************************************************
// Pre or Prepare Request Section
// **************************************************
/**
* This method is executed during the preProcessRequest task of the DoCreateVfModuleVolumeRollback.bpmn process.
* @param execution
*/
public void preProcessRequest (DelegateExecution execution) {
def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
InitializeProcessVariables(execution)
// rollbackData.put("DCVFMODULEVOL", "aiccloudregion", cloudSiteId)
RollbackData rollbackData = execution.getVariable("rollbackData")
// String vnfId = rollbackData.get("DCVFMODULEVOL", "vnfid")
// execution.setVariable("DCVFMODVOLRBK_vnfId", vnfId)
// String vfModuleId = rollbackData.get("DCVFMODULEVOL", "vfmoduleid")
// execution.setVariable("DCVFMODVOLRBK_vfModuleId", vfModuleId)
// String source = rollbackData.get("DCVFMODULEVOL", "source")
// execution.setVariable("DCVFMODVOLRBK_source", source)
// String serviceInstanceId = rollbackData.get("DCVFMODULEVOL", "serviceInstanceId")
// execution.setVariable("DCVFMODVOLRBK_serviceInstanceId", serviceInstanceId)
// String serviceId = rollbackData.get("DCVFMODULEVOL", "service-id")
// execution.setVariable("DCVFMODVOLRBK_serviceId", serviceId)
// String vnfType = rollbackData.get("DCVFMODULEVOL", "vnftype")
// execution.setVariable("DCVFMODVOLRBK_vnfType", vnfType)
// String vnfName = rollbackData.get("DCVFMODULEVOL", "vnfname")
// execution.setVariable("DCVFMODVOLRBK_vnfName", vnfName)
// String tenantId = rollbackData.get("DCVFMODULEVOL", "tenantid")
// execution.setVariable("DCVFMODVOLRBK_tenantId", tenantId)
// String vfModuleName = rollbackData.get("DCVFMODULEVOL", "vfmodulename")
// execution.setVariable("DCVFMODVOLRBK_vfModuleName", vfModuleName)
// String vfModuleModelName = rollbackData.get("DCVFMODULEVOL", "vfmodulemodelname")
// execution.setVariable("DCVFMODVOLRBK_vfModuleModelName", vfModuleModelName)
// String cloudSiteId = rollbackData.get("DCVFMODULEVOL", "aiccloudregion")
// execution.setVariable("DCVFMODVOLRBK_cloudSiteId", cloudSiteId)
// String heatStackId = rollbackData.get("DCVFMODULEVOL", "heatstackid")
// execution.setVariable("DCVFMODVOLRBK_heatStackId", heatStackId)
// String requestId = rollbackData.get("DCVFMODULEVOL", "msorequestid")
// execution.setVariable("DCVFMODVOLRBK_requestId", requestId)
String volumeGroupName = rollbackData.get("DCVFMODULEVOL", "volumeGroupName")
execution.setVariable("DCVFMODVOLRBK_volumeGroupName", volumeGroupName)
String lcpCloudRegionId = rollbackData.get("DCVFMODULEVOL", "aiccloudregion")
execution.setVariable("DCVFMODVOLRBK_lcpCloudRegionId", lcpCloudRegionId)
execution.setVariable("DCVFMODVOLRBK_rollbackVnfARequest", rollbackData.get("DCVFMODULEVOL", "rollbackVnfARequest"))
execution.setVariable("DCVFMODVOLRBK_backoutOnFailure", rollbackData.get("DCVFMODULEVOL", "backoutOnFailure"))
execution.setVariable("DCVFMODVOLRBK_isCreateVnfRollbackNeeded", rollbackData.get("DCVFMODULEVOL", "isCreateVnfRollbackNeeded"))
execution.setVariable("DCVFMODVOLRBK_isAAIRollbackNeeded", rollbackData.get("DCVFMODULEVOL", "isAAIRollbackNeeded"))
}
/**
* Query AAI volume group by name
* @param execution
* @param isDebugEnabled
*/
public void callRESTQueryAAIVolGrpName(DelegateExecution execution, isDebugEnabled) {
def volumeGroupName = execution.getVariable('DCVFMODVOLRBK_volumeGroupName')
def cloudRegion = execution.getVariable('DCVFMODVOLRBK_lcpCloudRegionId')
// This is for stub testing
def testVolumeGroupName = execution.getVariable('test-volume-group-name')
if (testVolumeGroupName != null && testVolumeGroupName.length() > 0) {
volumeGroupName = testVolumeGroupName
}
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")
}
}
}
public void callRESTDeleteAAIVolumeGroup(DelegateExecution 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("DCVFMODVOLRBK_lcpCloudRegionId")
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")
}
}
}
// *******************************
// Build Error Section
// *******************************
public void processJavaException(DelegateExecution execution){
def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
execution.setVariable("prefix",Prefix)
try{
utils.log("DEBUG", "Caught a Java Exception in " + Prefix, isDebugEnabled)
utils.log("DEBUG", "Started processJavaException Method", isDebugEnabled)
utils.log("DEBUG", "Variables List: " + execution.getVariables(), isDebugEnabled)
execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
}catch(Exception e){
utils.log("DEBUG", "Caught Exception during processJavaException Method: " + e, isDebugEnabled)
execution.setVariable("UnexpectedError", "Exception in processJavaException method - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method" + Prefix)
}
utils.log("DEBUG", "Completed processJavaException Method in " + Prefix, isDebugEnabled)
}
}