/* * Copyright (c) 2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.vnxe.requests; import java.util.List; import javax.ws.rs.core.MultivaluedMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.vnxe.VNXeConstants; import com.emc.storageos.vnxe.models.LunCreateParam; import com.emc.storageos.vnxe.models.LunModifyParam; import com.emc.storageos.vnxe.models.VNXeCommandJob; import com.emc.storageos.vnxe.models.VNXeCommandResult; import com.emc.storageos.vnxe.models.VNXeLun; import com.sun.jersey.core.util.MultivaluedMapImpl; public class BlockLunRequests extends KHRequests<VNXeLun> { private static final Logger _logger = LoggerFactory.getLogger(BlockLunRequests.class); private static final String URL_RESOURCE = "/api/instances/storageResource/"; private static final String URL_CREATE = "/api/types/storageResource/action/createLun"; private static final String URL_LUNS = "/api/types/lun/instances"; private static final String URL_LUN = "/api/instances/lun/"; private static final String URL_LUN_MODIFY_ACTION = "/action/modifyLun"; private static final String FIELDS = "name,wwn,pool,storageResource,health,sizeTotal,sizeAllocated,isThinEnabled,snapWwn," + "snapsSize,hostAccess,snapCount,type"; public BlockLunRequests(KHClient client) { super(client); _fields = FIELDS; } /** * Get all luns in the array * * @return */ public List<VNXeLun> get() { _url = URL_LUNS; return getDataForObjects(VNXeLun.class); } /** * Get a lun's detail using its lun id. * * @param lunId * @return */ public VNXeLun getLun(String lunId) { _url = URL_LUN + lunId; return getDataForOneObject(VNXeLun.class); } public List<VNXeLun> getByStorageResourceId(String storageResourceId) { _url = URL_LUNS; MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); queryParams.add(VNXeConstants.FILTER, VNXeConstants.STORAGE_RESOURCE_FILTER + storageResourceId); setQueryParameters(queryParams); List<VNXeLun> result = null; List<VNXeLun> lunList = getDataForObjects(VNXeLun.class); // it should just return 1 if (lunList != null && !lunList.isEmpty()) { result = lunList; } else { _logger.info("No lun found using the storage resource id: " + storageResourceId); } return result; } /** * get lun with lungroup Id and lun name * * @param lunGroupId * @param lunName * @return */ public VNXeLun getByLunGroup(String lunGroupId, String lunName) { _url = URL_LUNS; String filter = null; if (_client.isUnity()) { filter = VNXeConstants.STORAGE_RESOURCE_FILTER+"\""+lunGroupId+"\""; } else { filter = VNXeConstants.STORAGE_RESOURCE_FILTER + lunGroupId; } setFilter(filter); VNXeLun vnxeLun = null; List<VNXeLun> luns = getDataForObjects(VNXeLun.class); for (VNXeLun lun : luns) { String name = lun.getName(); if (name != null && name.equals(lunName)) { vnxeLun = lun; break; } } return vnxeLun; } /** * get all luns in the lun group * * @param lunGroupId * @return */ public List<VNXeLun> getLunsInLunGroup(String lunGroupId) { _url = URL_LUNS; String filter = null; if (_client.isUnity()) { filter = VNXeConstants.STORAGE_RESOURCE_FILTER+"\""+lunGroupId+"\""; } else { filter = VNXeConstants.STORAGE_RESOURCE_FILTER + lunGroupId; } setFilter(filter); return getDataForObjects(VNXeLun.class); } /** * Create a standalone lun * * @param param * @return */ public VNXeCommandJob createLun(LunCreateParam param) { _url = URL_CREATE; return postRequestAsync(param); } /** * modify lun (export/unexport/expand etc) in async mode * * @param param * @param resourceId * @return */ public VNXeCommandJob modifyLunAsync(LunModifyParam param, String resourceId) { StringBuilder urlBld = new StringBuilder(URL_RESOURCE); urlBld.append(resourceId); urlBld.append(URL_LUN_MODIFY_ACTION); _url = urlBld.toString(); return postRequestAsync(param); } /** * modify lun, export/unexport/expand, etc * * @param param * @param resourceId * @return */ public VNXeCommandResult modifyLunSync(LunModifyParam param, String resourceId) { StringBuilder urlBld = new StringBuilder(URL_RESOURCE); urlBld.append(resourceId); urlBld.append(URL_LUN_MODIFY_ACTION); _url = urlBld.toString(); VNXeCommandResult result = postRequestSync(param); result.setSuccess(true); return result; } /** * Check if lun exists in the array * * @param lunId * @return */ public boolean checkLunExists(String lunId) { _url = URL_LUNS; String filter = null; if (_client.isUnity()) { filter = VNXeConstants.ID_FILTER+"\""+lunId+"\""; } else { filter = VNXeConstants.ID_FILTER + lunId; } setFilter(filter); boolean found = false; List<VNXeLun> luns = getDataForObjects(VNXeLun.class); if (luns != null && !luns.isEmpty()) { found = true; } return found; } }