/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package util; import static com.emc.vipr.client.core.util.ResourceUtils.createNamedRef; import static com.emc.vipr.client.core.util.ResourceUtils.findRef; import static com.emc.vipr.client.core.util.ResourceUtils.id; import static com.emc.vipr.client.core.util.ResourceUtils.uri; import static util.BourneUtil.getViprClient; import java.net.URI; import java.util.Collection; import java.util.List; import models.HighAvailability; import com.emc.storageos.model.NamedRelatedResourceRep; import com.emc.storageos.model.RelatedResourceRep; import com.emc.storageos.model.auth.ACLAssignmentChanges; import com.emc.storageos.model.auth.ACLEntry; import com.emc.storageos.model.quota.QuotaInfo; import com.emc.storageos.model.quota.QuotaUpdateParam; import com.emc.storageos.model.vpool.BlockVirtualPoolParam; import com.emc.storageos.model.vpool.BlockVirtualPoolRestRep; import com.emc.storageos.model.vpool.BlockVirtualPoolUpdateParam; import com.emc.storageos.model.vpool.FileVirtualPoolParam; import com.emc.storageos.model.vpool.FileVirtualPoolRestRep; import com.emc.storageos.model.vpool.FileVirtualPoolUpdateParam; import com.emc.storageos.model.vpool.ObjectVirtualPoolParam; import com.emc.storageos.model.vpool.ObjectVirtualPoolRestRep; import com.emc.storageos.model.vpool.ObjectVirtualPoolUpdateParam; import com.emc.storageos.model.vpool.StoragePoolAssignmentChanges; import com.emc.storageos.model.vpool.StoragePoolAssignments; import com.emc.storageos.model.vpool.VirtualPoolCommonRestRep; import com.emc.storageos.model.vpool.VirtualPoolPoolUpdateParam; import com.emc.vipr.client.core.filters.ResourceFilter; import com.emc.vipr.client.core.util.CachedResources; import com.emc.vipr.client.exceptions.ServiceErrorException; import com.emc.vipr.client.exceptions.ViPRHttpException; import com.google.common.collect.Lists; import controllers.security.Security; public class VirtualPoolUtils { public static boolean canUpdateACLs() { return Security.hasAnyRole(Security.SECURITY_ADMIN, Security.SYSTEM_ADMIN, Security.RESTRICTED_SYSTEM_ADMIN); } public static CachedResources<BlockVirtualPoolRestRep> createBlockCache() { return new CachedResources<BlockVirtualPoolRestRep>(getViprClient().blockVpools()); } public static CachedResources<FileVirtualPoolRestRep> createFileCache() { return new CachedResources<FileVirtualPoolRestRep>(getViprClient().fileVpools()); } public static BlockVirtualPoolRestRep getBlockVirtualPool(String id) { return getBlockVirtualPool(uri(id)); } public static BlockVirtualPoolRestRep getBlockVirtualPool(URI id) { try { return getViprClient().blockVpools().get(id); } catch (ViPRHttpException e) { if (e.getHttpCode() == 404) { return null; } throw e; } } public static FileVirtualPoolRestRep getFileVirtualPool(String id) { return getFileVirtualPool(uri(id)); } public static FileVirtualPoolRestRep getFileVirtualPool(URI id) { try { return getViprClient().fileVpools().get(id); } catch (ViPRHttpException e) { if (e.getHttpCode() == 404) { return null; } throw e; } } public static ObjectVirtualPoolRestRep getObjectVirtualPool(String id) { return getObjectVirtualPool(uri(id)); } public static ObjectVirtualPoolRestRep getObjectVirtualPool(URI id) { try { return getViprClient().objectVpools().get(id); } catch (ViPRHttpException e) { if (e.getHttpCode() == 404) { return null; } throw e; } } public static NamedRelatedResourceRep getBlockVirtualPoolRef(RelatedResourceRep ref) { return getBlockVirtualPoolRef(id(ref)); } public static NamedRelatedResourceRep getBlockVirtualPoolRef(URI id) { if (Security.hasAnyRole(Security.SYSTEM_ADMIN, Security.SYSTEM_MONITOR)) { return createNamedRef(getViprClient().blockVpools().get(id)); } else { return findRef(getViprClient().blockVpools().list(), id); } } public static NamedRelatedResourceRep getObjectVirtualPoolRef(RelatedResourceRep ref) { return getObjectVirtualPoolRef(id(ref)); } public static NamedRelatedResourceRep getObjectVirtualPoolRef(URI id) { if (Security.hasAnyRole(Security.SYSTEM_ADMIN, Security.SYSTEM_MONITOR)) { return createNamedRef(getViprClient().objectVpools().get(id)); } else { return findRef(getViprClient().objectVpools().list(), id); } } public static NamedRelatedResourceRep getFileVirtualPoolRef(RelatedResourceRep ref) { return getFileVirtualPoolRef(id(ref)); } public static NamedRelatedResourceRep getFileVirtualPoolRef(URI id) { if (Security.hasAnyRole(Security.SYSTEM_ADMIN, Security.SYSTEM_MONITOR)) { return createNamedRef(getViprClient().fileVpools().get(id)); } else { return findRef(getViprClient().fileVpools().list(), id); } } public static List<BlockVirtualPoolRestRep> getBlockVirtualPools() { return getViprClient().blockVpools().getAll(); } public static List<BlockVirtualPoolRestRep> getBlockVirtualPools(ResourceFilter<BlockVirtualPoolRestRep> filter) { return getViprClient().blockVpools().getAll(filter); } public static List<BlockVirtualPoolRestRep> getBlockVirtualPools(Collection<URI> ids) { return getViprClient().blockVpools().getByIds(ids); } public static List<FileVirtualPoolRestRep> getFileVirtualPools() { return getViprClient().fileVpools().getAll(); } public static List<FileVirtualPoolRestRep> getFileVirtualPools(ResourceFilter<FileVirtualPoolRestRep> filter) { return getViprClient().fileVpools().getAll(filter); } public static List<ObjectVirtualPoolRestRep> getFileVirtualPools(Collection<URI> ids) { return getViprClient().objectVpools().getByIds(ids); } public static List<ObjectVirtualPoolRestRep> getObjectVirtualPools() { return getViprClient().objectVpools().getAll(); } public static List<ObjectVirtualPoolRestRep> getObjectVirtualPools(ResourceFilter<ObjectVirtualPoolRestRep> filter) { return getViprClient().objectVpools().getAll(filter); } public static List<FileVirtualPoolRestRep> getObjectVirtualPools(Collection<URI> ids) { return getViprClient().fileVpools().getByIds(ids); } public static VirtualPoolCommonRestRep getVirtualPool(String id) { try { BlockVirtualPoolRestRep virtualPool = getBlockVirtualPool(id); if (virtualPool != null) { return virtualPool; } } catch (ServiceErrorException e) { if (e.getServiceError().getCode() != 1008) { throw e; } } FileVirtualPoolRestRep virtualPool = getFileVirtualPool(id); if (virtualPool != null) { return virtualPool; } return null; } public static List<VirtualPoolCommonRestRep> getVirtualPools() { List<VirtualPoolCommonRestRep> virtualPools = Lists.newArrayList(); virtualPools.addAll(getBlockVirtualPools()); virtualPools.addAll(getFileVirtualPools()); return virtualPools; } public static List<VirtualPoolCommonRestRep> getVirtualPoolsForVirtualArray(URI virtualArray) { List<VirtualPoolCommonRestRep> virtualPools = Lists.newArrayList(); virtualPools.addAll(getViprClient().blockVpools().getByVirtualArray(virtualArray)); virtualPools.addAll(getViprClient().fileVpools().getByVirtualArray(virtualArray)); virtualPools.addAll(getViprClient().objectVpools().getByVirtualArray(virtualArray)); return virtualPools; } public static BlockVirtualPoolRestRep create(BlockVirtualPoolParam virtualPool) { return getViprClient().blockVpools().create(virtualPool); } public static FileVirtualPoolRestRep create(FileVirtualPoolParam virtualPool) { return getViprClient().fileVpools().create(virtualPool); } public static ObjectVirtualPoolRestRep create(ObjectVirtualPoolParam virtualPool) { return getViprClient().objectVpools().create(virtualPool); } public static BlockVirtualPoolRestRep update(String id, BlockVirtualPoolUpdateParam virtualPool) { return getViprClient().blockVpools().update(uri(id), virtualPool); } public static FileVirtualPoolRestRep update(String id, FileVirtualPoolUpdateParam virtualPool) { return getViprClient().fileVpools().update(uri(id), virtualPool); } public static ObjectVirtualPoolRestRep update(String id, ObjectVirtualPoolUpdateParam virtualPool) { return getViprClient().objectVpools().update(uri(id), virtualPool); } public static List<NamedRelatedResourceRep> refreshMatchingPools(BlockVirtualPoolRestRep virtualPool) { return getViprClient().blockVpools().refreshMatchingStoragePools(id(virtualPool)); } public static List<NamedRelatedResourceRep> refreshMatchingPools(FileVirtualPoolRestRep virtualPool) { return getViprClient().fileVpools().refreshMatchingStoragePools(id(virtualPool)); } public static List<NamedRelatedResourceRep> refreshMatchingPools(ObjectVirtualPoolRestRep virtualPool) { return getViprClient().objectVpools().refreshMatchingStoragePools(id(virtualPool)); } public static void deactivateBlock(URI id) { getViprClient().blockVpools().deactivate(id); } public static void deactivateFile(URI id) { getViprClient().fileVpools().deactivate(id); } public static void deactivateObject(URI id) { getViprClient().objectVpools().deactivate(id); } public static QuotaInfo getBlockQuota(String id) { return getViprClient().blockVpools().getQuota(uri(id)); } public static QuotaInfo getFileQuota(String id) { return getViprClient().fileVpools().getQuota(uri(id)); } public static QuotaInfo updateBlockQuota(String id, boolean enable, Long sizeInGB) { if (enable) { return enableBlockQuota(id, sizeInGB); } else { return disableBlockQuota(id); } } public static QuotaInfo updateFileQuota(String id, boolean enable, Long sizeInGB) { if (enable) { return enableFileQuota(id, sizeInGB); } else { return disableFileQuota(id); } } public static QuotaInfo enableBlockQuota(String id, Long sizeInGB) { return getViprClient().blockVpools().updateQuota(uri(id), new QuotaUpdateParam(true, sizeInGB)); } public static QuotaInfo enableFileQuota(String id, Long sizeInGB) { return getViprClient().fileVpools().updateQuota(uri(id), new QuotaUpdateParam(true, sizeInGB)); } public static QuotaInfo disableBlockQuota(String id) { return getViprClient().blockVpools().updateQuota(uri(id), new QuotaUpdateParam(false, null)); } public static QuotaInfo disableFileQuota(String id) { return getViprClient().fileVpools().updateQuota(uri(id), new QuotaUpdateParam(false, null)); } public static BlockVirtualPoolRestRep updateAssignedBlockPools(String id, Collection<String> addPools, Collection<String> removePools) { return getViprClient().blockVpools().assignStoragePools(uri(id), createPoolAssignments(addPools, removePools)); } public static FileVirtualPoolRestRep updateAssignedFilePools(String id, Collection<String> addPools, Collection<String> removePools) { return getViprClient().fileVpools().assignStoragePools(uri(id), createPoolAssignments(addPools, removePools)); } public static ObjectVirtualPoolRestRep updateAssignedObjectPools(String id, Collection<String> addPools, Collection<String> removePools) { return getViprClient().objectVpools().assignStoragePools(uri(id), createPoolAssignments(addPools, removePools)); } private static VirtualPoolPoolUpdateParam createPoolAssignments(Collection<String> addPools, Collection<String> removePools) { StoragePoolAssignmentChanges changes = new StoragePoolAssignmentChanges(); if (addPools != null && !addPools.isEmpty()) { StoragePoolAssignments add = new StoragePoolAssignments(); add.getStoragePools().addAll(addPools); changes.setAdd(add); } if (removePools != null && !removePools.isEmpty()) { StoragePoolAssignments remove = new StoragePoolAssignments(); remove.getStoragePools().addAll(removePools); changes.setRemove(remove); } return new VirtualPoolPoolUpdateParam(changes); } public static List<ACLEntry> getBlockACLs(String id) { return getViprClient().blockVpools().getACLs(uri(id)); } public static List<ACLEntry> getFileACLs(String id) { return getViprClient().fileVpools().getACLs(uri(id)); } public static List<ACLEntry> updateFileACLs(String id, ACLAssignmentChanges changes) { return getViprClient().fileVpools().updateACLs(uri(id), changes); } public static List<ACLEntry> updateBlockACLs(String id, ACLAssignmentChanges changes) { return getViprClient().blockVpools().updateACLs(uri(id), changes); } public static boolean isHighAvailability(BlockVirtualPoolRestRep vpool) { return (vpool.getHighAvailability() != null) && HighAvailability.isHighAvailability(vpool.getHighAvailability().getType()); } }