/* * Copyright (c) 2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.vnxe.requests; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.vnxe.VNXeException; import com.emc.storageos.vnxe.models.DeleteStorageResourceParam; import com.emc.storageos.vnxe.models.StorageResource; import com.emc.storageos.vnxe.models.VNXeBase; import com.emc.storageos.vnxe.models.VNXeCommandJob; import com.emc.storageos.vnxe.models.VNXeCommandResult; import com.emc.storageos.vnxe.models.VNXeFileSystem; import com.emc.storageos.vnxe.models.VNXeLun; public class DeleteStorageResourceRequest extends KHRequests<StorageResource> { private static final Logger _logger = LoggerFactory.getLogger(DeleteStorageResourceRequest.class); private static final String URL = "/api/instances/storageResource/"; public DeleteStorageResourceRequest(KHClient client) { super(client); _url = URL; } /** * Delete file system in async mode * * @param fileSystemId * @param isForceSnapDeletion * @return * @throws VNXeException */ public VNXeCommandJob deleteFileSystemAsync(String fileSystemId, boolean isForceSnapDeletion) throws VNXeException { String resourceId = getStorageResourceId(fileSystemId); if (resourceId == null || resourceId.isEmpty()) { String error = "Could not find corresponding storage resource Id for the " + "file system Id:" + fileSystemId; _logger.error(error); throw VNXeException.exceptions.vnxeCommandFailed(error); } return deleteResourceAsync(resourceId, isForceSnapDeletion); } /** * Delete the file system in sync mode * * @param fileSystemId * @param isForceSnapDeletion * @return VNXeCommandResult * @throws VNXeException */ public VNXeCommandResult deleteFileSystemSync(String fileSystemId, boolean isForceSnapDeletion) throws VNXeException { String resourceId = getStorageResourceId(fileSystemId); if (resourceId == null || resourceId.isEmpty()) { String error = "Could not find corresponding storage resource Id for the " + "file system Id:" + fileSystemId; _logger.error(error); throw VNXeException.exceptions.vnxeCommandFailed(error); } return deleteResourceSync(resourceId, isForceSnapDeletion); } /** * Get storageResource Id using filesystem Id * * @param fsId fileSystem Id * @return storageResource Id */ private String getStorageResourceId(String fsId) { FileSystemRequest fsReq = new FileSystemRequest(_client, fsId); VNXeFileSystem fs = fsReq.get(); VNXeBase resource = fs.getStorageResource(); String result = null; if (resource != null) { result = resource.getId(); } return result; } public VNXeCommandResult deleteLunSync(String id, boolean isForceSnapDeletion) throws VNXeException { _logger.info("deleting lun : {}", id); BlockLunRequests req = new BlockLunRequests(_client); VNXeLun lun = req.getLun(id); if (lun == null) { String error = "Could not find lun: " + id; _logger.error(error); throw VNXeException.exceptions.vnxeCommandFailed(error); } return deleteResourceSync(id, isForceSnapDeletion); } /** * Delete lun in async mode * * @param lunId * @param isForceSnapDeletion * @return * @throws VNXeException */ public VNXeCommandJob deleteLunAsync(String lunId, boolean isForceSnapDeletion) throws VNXeException { BlockLunRequests req = new BlockLunRequests(_client); VNXeLun lun = req.getLun(lunId); if (lun == null) { String error = "Could not find lun: " + lunId; _logger.error(error); throw VNXeException.exceptions.vnxeCommandFailed(error); } return deleteResourceAsync(lunId, isForceSnapDeletion); } /** * Delete lun group * * @param groupId * @param isForceSnapDeletion * @return * @throws VNXeException */ public VNXeCommandResult deleteLunGroup(String groupId, boolean isForceSnapDeletion) throws VNXeException { StorageResourceRequest req = new StorageResourceRequest(_client); StorageResource group = req.get(groupId); if (group == null) { String error = "Could not find lun group: " + groupId; _logger.error(error); throw VNXeException.exceptions.vnxeCommandFailed(error); } return deleteResourceSync(groupId, isForceSnapDeletion); } private VNXeCommandJob deleteResourceAsync(String resourceId, boolean isForceSnapDeletion) { _url = URL + resourceId; DeleteStorageResourceParam parm = new DeleteStorageResourceParam(); parm.setForceSnapDeletion(isForceSnapDeletion); return deleteRequestAsync(parm); } private VNXeCommandResult deleteResourceSync(String resourceId, boolean isForceSnapDeletion) { _url = URL + resourceId; DeleteStorageResourceParam parm = new DeleteStorageResourceParam(); parm.setForceSnapDeletion(isForceSnapDeletion); deleteRequest(parm); VNXeCommandResult result = new VNXeCommandResult(); result.setSuccess(true); return result; } }