/*
* Copyright (c) 2014 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.vnxe.requests;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.vnxe.VNXeConstants;
import com.emc.storageos.vnxe.VNXeException;
import com.emc.storageos.vnxe.models.LunSnapCreateParam;
import com.emc.storageos.vnxe.models.VNXeCommandJob;
import com.emc.storageos.vnxe.models.VNXeCommandResult;
import com.emc.storageos.vnxe.models.VNXeLunSnap;
import com.emc.storageos.vnxe.models.VNXeSnapRestoreParam;
public class LunSnapRequests extends KHRequests<VNXeLunSnap> {
private static final Logger _logger = LoggerFactory.getLogger(LunSnapRequests.class);
private static final String URL = "/api/types/lunSnap/instances";
private static final String URL_INSTANCE = "/api/instances/lunSnap/";
private static final String URL_RESTORE = "/action/restore";
private static final String URL_ATTACH = "/action/attach";
private static final String URL_DETACH = "/action/detach";
public LunSnapRequests(KHClient client) {
super(client);
_url = URL;
}
/**
* create lun snap in async mode
*
* @param param: LunSnapCreateParam
* @return VNXeCommandJob
* @throws VNXeException
*/
public VNXeCommandJob createLunSnap(LunSnapCreateParam param) throws VNXeException {
return postRequestAsync(param);
}
/**
* Delete lun snap
*
* @param snapId
* @return
* @throws VNXeException
*/
public VNXeCommandJob deleteLunSnap(String snapId) throws VNXeException {
_url = URL_INSTANCE + snapId;
setQueryParameters(null);
if (getDataForOneObject(VNXeLunSnap.class) != null) {
return deleteRequestAsync(null);
} else {
throw VNXeException.exceptions.vnxeCommandFailed(String.format("No lun snap %s found",
snapId));
}
}
/**
* Restore lun snapshot
*
* @param snapId snapshot VNXe Id
* @param restoreParam
* @return VNXeCommandJob
* @throws VNXeException
*/
public VNXeCommandJob restoreLunSnap(String snapId, VNXeSnapRestoreParam restoreParam)
throws VNXeException {
StringBuilder urlBuilder = new StringBuilder(URL_INSTANCE);
urlBuilder.append(snapId);
urlBuilder.append(URL_RESTORE);
_url = urlBuilder.toString();
return postRequestAsync(restoreParam);
}
/**
* attach lun snap
*
* @param snapId
* @return VNXeCommandJob
* @throws VNXeException
*/
public VNXeCommandJob attachLunSnap(String snapId) throws VNXeException {
StringBuilder urlBuilder = new StringBuilder(URL_INSTANCE);
urlBuilder.append(snapId);
urlBuilder.append(URL_ATTACH);
_url = urlBuilder.toString();
return postRequestAsync(null);
}
public VNXeCommandResult attachLunSnapSync(String snapId) throws VNXeException {
StringBuilder urlBuilder = new StringBuilder(URL_INSTANCE);
urlBuilder.append(snapId);
urlBuilder.append(URL_ATTACH);
_url = urlBuilder.toString();
return postRequestSync(null);
}
/**
* detach lun snap
*
* @param snapId
* @return VNXeCommandJob
* @throws VNXeException
*/
public VNXeCommandJob detachLunSnap(String snapId) throws VNXeException {
StringBuilder urlBuilder = new StringBuilder(URL_INSTANCE);
urlBuilder.append(snapId);
urlBuilder.append(URL_DETACH);
_url = urlBuilder.toString();
return postRequestAsync(null);
}
/**
* detach lun snap synchronously
*
* @param snapId
* @return VNXeCommandJob
* @throws VNXeException
*/
public VNXeCommandResult detachLunSnapSync(String snapId) throws VNXeException {
StringBuilder urlBuilder = new StringBuilder(URL_INSTANCE);
urlBuilder.append(snapId);
urlBuilder.append(URL_DETACH);
_url = urlBuilder.toString();
return postRequestSync(null);
}
/**
* Get a lun's snaps by its storageResource id.
*
* @param resourceId lun Id
* @return list of VNXeLunSnap
*/
public List<VNXeLunSnap> getLunSnaps(String resourceId) {
setFilter(VNXeConstants.LUN_FILTER + resourceId);
return getDataForObjects(VNXeLunSnap.class);
}
/**
* Get snapshot details by its name
*
* @param name
* @return
*/
public VNXeLunSnap getLunSnapByName(String name) {
setFilter(VNXeConstants.NAME_FILTER + name);
VNXeLunSnap result = null;
List<VNXeLunSnap> snapList = getDataForObjects(VNXeLunSnap.class);
// it should just return 1
if (snapList != null && !snapList.isEmpty()) {
result = snapList.get(0);
} else {
_logger.info("No lun snapshot found using the name: " + name);
}
return result;
}
/**
* Get snapshot details by its id
*
* @param id
* @return
*/
public VNXeLunSnap getLunSnap(String snapId) {
_url = URL_INSTANCE + snapId;
return getDataForOneObject(VNXeLunSnap.class);
}
}