/* * Copyright (c) 2016 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.Snap; import com.emc.storageos.vnxe.models.SnapCreateParam; import com.emc.storageos.vnxe.models.VNXeCommandJob; import com.emc.storageos.vnxe.models.VNXeCommandResult; import com.emc.storageos.vnxe.models.VNXeSnapRestoreParam; /** * This is the Snap requests class for VNX Unity */ public class SnapRequests extends KHRequests<Snap> { private static final Logger _logger = LoggerFactory.getLogger(SnapRequests.class); private static final String URL = "/api/types/snap/instances"; private static final String URL_INSTANCE = "/api/instances/snap/"; private static final String URL_RESTORE = "/action/restore"; private static final String URL_ATTACH = "/action/attach"; private static final String URL_DETACH = "/action/detach"; private static final String FIELDS = "attachedWWN,isSystemSnap,size,lun,storageResource,name,snapGroup,parentSnap,description,creationTime," + "expirationTime,isModifiable,isReadOnly,lastWritableTime,isAutoDelete,state"; public SnapRequests(KHClient client) { super(client); _url = URL; _fields = FIELDS; } /** * create snap in async mode * * @param param: SnapCreateParam * @return VNXeCommandJob * @throws VNXeException */ public VNXeCommandJob createSnap(SnapCreateParam param) throws VNXeException { return postRequestAsync(param); } /** * Delete lun snap * * @param snapId * @return * @throws VNXeException */ public VNXeCommandResult deleteSnap(String snapId) throws VNXeException { _url = URL_INSTANCE + snapId; setQueryParameters(null); deleteRequest(null); VNXeCommandResult result = new VNXeCommandResult(); result.setSuccess(true); return result; } /** * Restore snapshot * * @param snapId snapshot VNXe Id * @param restoreParam * @return VNXeCommandJob * @throws VNXeException */ public VNXeCommandJob restoreSnap(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 snap * * @param snapId * @return VNXeCommandJob * @throws VNXeException */ public VNXeCommandJob attachSnap(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 attachSnapSync(String snapId) throws VNXeException { StringBuilder urlBuilder = new StringBuilder(URL_INSTANCE); urlBuilder.append(snapId); urlBuilder.append(URL_ATTACH); _url = urlBuilder.toString(); return postRequestSync(null); } /** * detach snap * * @param snapId * @return VNXeCommandJob * @throws VNXeException */ public VNXeCommandJob detachSnap(String snapId) throws VNXeException { StringBuilder urlBuilder = new StringBuilder(URL_INSTANCE); urlBuilder.append(snapId); urlBuilder.append(URL_DETACH); _url = urlBuilder.toString(); return postRequestAsync(null); } /** * detach snap synchronously * * @param snapId * @return VNXeCommandJob * @throws VNXeException */ public VNXeCommandResult detachSnapSync(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<Snap> getLunSnaps(String resourceId) { setFilter(VNXeConstants.LUN_FILTER + "\"" + resourceId + "\""); return getDataForObjects(Snap.class); } /** * Get snapshot details by its name * * @param name * @return */ public Snap getSnapByName(String name) { String filter = VNXeConstants.NAME_FILTER + "\"" + name + "\""; setFilter(filter); Snap result = null; List<Snap> snapList = getDataForObjects(Snap.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 Snap getSnap(String snapId) { _url = URL_INSTANCE + snapId; return getDataForOneObject(Snap.class); } public List<Snap> getSnapsBySnapGroupId(String snapGroupId) { String filter = VNXeConstants.SNAP_GROUP_FILTER + "\"" + snapGroupId + "\""; setFilter(filter); return getDataForObjects(Snap.class); } }