Search in sources :

Example 1 with ScaleIOVolume

use of com.emc.storageos.scaleio.api.restapi.response.ScaleIOVolume in project coprhd-controller by CoprHD.

the class StorageSystemDataCollectionService method discoverScaleIO.

/**
 * Collect Data for ScaleIO system
 *
 * @param param ScaleIO discovery information
 * @return Data collected for ScaleIO system
 */
@POST
@Path("/scaleio")
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public ScaleIOSystemDataRestRep discoverScaleIO(ScaleIOCollectDataParam param) {
    log.debug("discovering ScaleIO: {}", param.getIPAddress());
    URI baseURI = URI.create(ScaleIOConstants.getAPIBaseURI(param.getIPAddress(), param.getPortNumber()));
    ScaleIORestClient client = (ScaleIORestClient) scaleIORestClientFactory.getRESTClient(baseURI, param.getUserName(), param.getPassword());
    ScaleIOSystemDataRestRep sio = null;
    try {
        // collect and map scaleIO system
        ScaleIOSystem system = client.getSystem();
        sio = ScaleIODataMapper.map(system);
        // collect sds,device,fault set, and protection domain data
        List<ScaleIOSDS> allSDS = client.queryAllSDS();
        Map<String, ScaleIOProtectionDomain> pdMap = null;
        List<ScaleIOProtectionDomain> pdList = client.getProtectionDomains();
        if (null != pdList) {
            pdMap = pdList.stream().collect(Collectors.toMap(ScaleIOProtectionDomain::getId, p -> p));
        }
        List<ScaleIOFaultSet> fsList = client.queryAllFaultSets();
        Map<String, ScaleIOFaultSet> fsMap = null;
        if (null != fsList) {
            fsMap = client.queryAllFaultSets().stream().collect(Collectors.toMap(ScaleIOFaultSet::getId, f -> f));
        }
        Map<String, ScaleIOStoragePool> spMap = client.queryAllStoragePools().stream().collect(Collectors.toMap(ScaleIOStoragePool::getId, s -> s));
        // map SDS data
        List<ScaleIOSDSDataRestRep> scaleIOSDSDataRestReps = new ArrayList<ScaleIOSDSDataRestRep>();
        for (ScaleIOSDS sds : allSDS) {
            ScaleIOSDSDataRestRep sdsData = ScaleIODataMapper.map(sds);
            // map device data
            List<ScaleIODevice> devices = client.getSdsDevices(sds.getId());
            List<ScaleIODeviceDataRestRep> scaleIODeviceDataRestReps = new ArrayList<ScaleIODeviceDataRestRep>();
            if (null != devices) {
                for (ScaleIODevice device : devices) {
                    ScaleIODeviceDataRestRep scaleIODeviceDataRestRep = ScaleIODataMapper.map(device);
                    // map storagepool data
                    scaleIODeviceDataRestRep.setStoragePool(ScaleIODataMapper.map(spMap.get(device.getStoragePoolId())));
                    scaleIODeviceDataRestReps.add(scaleIODeviceDataRestRep);
                }
                sdsData.setDevices(scaleIODeviceDataRestReps);
            }
            // map fault set data
            if (null != fsMap) {
                sdsData.setFaultSet(ScaleIODataMapper.map(fsMap.get(sds.getFaultSetId())));
            }
            // map protection domain and IP data
            if (null != pdMap) {
                sdsData.setProtectionDomain(ScaleIODataMapper.map(pdMap.get(sds.getProtectionDomainId())));
            }
            sdsData.setIpList(ScaleIODataMapper.mapIpList(sds.getIpList()));
            scaleIOSDSDataRestReps.add(sdsData);
        }
        sio.setSdsList(scaleIOSDSDataRestReps);
        // collect and map SDC data
        List<ScaleIOSDC> allSDC = client.queryAllSDC();
        List<ScaleIOSDCDataRestRep> scaleIOSDCDataRestReps = new ArrayList<ScaleIOSDCDataRestRep>();
        for (ScaleIOSDC sdc : allSDC) {
            ScaleIOSDCDataRestRep sdcData = ScaleIODataMapper.map(sdc);
            // map device data
            List<ScaleIOVolume> volumes = client.getSdcVolumes(sdc.getId());
            List<ScaleIOVolumeDataRestRep> scaleIOVolumeDataRestReps = new ArrayList<ScaleIOVolumeDataRestRep>();
            if (null != volumes) {
                for (ScaleIOVolume volume : volumes) {
                    ScaleIOVolumeDataRestRep scaleIOVolumeDataRestRep = ScaleIODataMapper.map(volume);
                    // map storagepool data
                    scaleIOVolumeDataRestRep.setStoragePool(ScaleIODataMapper.map(spMap.get(volume.getStoragePoolId())));
                    scaleIOVolumeDataRestReps.add(scaleIOVolumeDataRestRep);
                }
                sdcData.setVolumes(scaleIOVolumeDataRestReps);
            }
            scaleIOSDCDataRestReps.add(sdcData);
        }
        sio.setSdcList(scaleIOSDCDataRestReps);
    } catch (ScaleIOException e) {
        log.error(String.format("Exception was encountered in the ScaleIO client when connecting to instance %s", param.getIPAddress()), e);
        throw APIException.badRequests.storageSystemClientException(SCALEIO, e.getLocalizedMessage());
    } catch (JSONException e) {
        log.error(String.format("Exception was encountered when attempting to discover ScaleIO Instance %s", param.getIPAddress()), e);
        throw APIException.badRequests.cannotDiscoverStorageSystemUnexpectedResponse(SCALEIO);
    }
    return sio;
}
Also used : ScaleIOFaultSet(com.emc.storageos.scaleio.api.restapi.response.ScaleIOFaultSet) Role(com.emc.storageos.security.authorization.Role) Produces(javax.ws.rs.Produces) Path(javax.ws.rs.Path) LoggerFactory(org.slf4j.LoggerFactory) ScaleIOSDCDataRestRep(com.emc.storageos.model.collectdata.ScaleIOSDCDataRestRep) ScaleIOSystemDataRestRep(com.emc.storageos.model.collectdata.ScaleIOSystemDataRestRep) APIException(com.emc.storageos.svcs.errorhandling.resources.APIException) ScaleIOCollectDataParam(com.emc.storageos.model.collectdata.ScaleIOCollectDataParam) ArrayList(java.util.ArrayList) ScaleIOProtectionDomain(com.emc.storageos.scaleio.api.restapi.response.ScaleIOProtectionDomain) MediaType(javax.ws.rs.core.MediaType) Consumes(javax.ws.rs.Consumes) Map(java.util.Map) ScaleIORestClient(com.emc.storageos.scaleio.api.restapi.ScaleIORestClient) URI(java.net.URI) ScaleIOConstants(com.emc.storageos.scaleio.api.ScaleIOConstants) ScaleIOSDSDataRestRep(com.emc.storageos.model.collectdata.ScaleIOSDSDataRestRep) POST(javax.ws.rs.POST) Logger(org.slf4j.Logger) ScaleIODeviceDataRestRep(com.emc.storageos.model.collectdata.ScaleIODeviceDataRestRep) ScaleIOSDC(com.emc.storageos.scaleio.api.restapi.response.ScaleIOSDC) ScaleIOVolume(com.emc.storageos.scaleio.api.restapi.response.ScaleIOVolume) ScaleIODataMapper(com.emc.storageos.api.mapper.ScaleIODataMapper) Collectors(java.util.stream.Collectors) ScaleIORestClientFactory(com.emc.storageos.scaleio.api.restapi.ScaleIORestClientFactory) ScaleIODevice(com.emc.storageos.scaleio.api.restapi.response.ScaleIODevice) List(java.util.List) JSONException(org.codehaus.jettison.json.JSONException) DefaultPermissions(com.emc.storageos.security.authorization.DefaultPermissions) ScaleIOSDS(com.emc.storageos.scaleio.api.restapi.response.ScaleIOSDS) ScaleIOVolumeDataRestRep(com.emc.storageos.model.collectdata.ScaleIOVolumeDataRestRep) ScaleIOSystem(com.emc.storageos.scaleio.api.restapi.response.ScaleIOSystem) ScaleIOStoragePool(com.emc.storageos.scaleio.api.restapi.response.ScaleIOStoragePool) ScaleIOException(com.emc.storageos.scaleio.ScaleIOException) ArrayList(java.util.ArrayList) ScaleIOVolumeDataRestRep(com.emc.storageos.model.collectdata.ScaleIOVolumeDataRestRep) ScaleIOSystemDataRestRep(com.emc.storageos.model.collectdata.ScaleIOSystemDataRestRep) ScaleIOSystem(com.emc.storageos.scaleio.api.restapi.response.ScaleIOSystem) ScaleIOProtectionDomain(com.emc.storageos.scaleio.api.restapi.response.ScaleIOProtectionDomain) URI(java.net.URI) ScaleIODeviceDataRestRep(com.emc.storageos.model.collectdata.ScaleIODeviceDataRestRep) ScaleIOStoragePool(com.emc.storageos.scaleio.api.restapi.response.ScaleIOStoragePool) ScaleIOSDSDataRestRep(com.emc.storageos.model.collectdata.ScaleIOSDSDataRestRep) ScaleIOSDCDataRestRep(com.emc.storageos.model.collectdata.ScaleIOSDCDataRestRep) ScaleIODevice(com.emc.storageos.scaleio.api.restapi.response.ScaleIODevice) ScaleIOVolume(com.emc.storageos.scaleio.api.restapi.response.ScaleIOVolume) JSONException(org.codehaus.jettison.json.JSONException) ScaleIOSDS(com.emc.storageos.scaleio.api.restapi.response.ScaleIOSDS) ScaleIOException(com.emc.storageos.scaleio.ScaleIOException) ScaleIOFaultSet(com.emc.storageos.scaleio.api.restapi.response.ScaleIOFaultSet) ScaleIORestClient(com.emc.storageos.scaleio.api.restapi.ScaleIORestClient) ScaleIOSDC(com.emc.storageos.scaleio.api.restapi.response.ScaleIOSDC) Path(javax.ws.rs.Path) POST(javax.ws.rs.POST) Consumes(javax.ws.rs.Consumes) Produces(javax.ws.rs.Produces)

Example 2 with ScaleIOVolume

use of com.emc.storageos.scaleio.api.restapi.response.ScaleIOVolume in project coprhd-controller by CoprHD.

the class ScaleIOCloneOperations method createGroupClone.

@Override
public void createGroupClone(StorageSystem storage, List<URI> cloneList, Boolean createInactive, TaskCompleter taskCompleter) {
    try {
        ScaleIORestClient scaleIOHandle = scaleIOHandleFactory.using(dbClient).getClientHandle(storage);
        List<Volume> clones = dbClient.queryObject(Volume.class, cloneList);
        Map<String, String> parent2snap = new HashMap<>();
        Set<URI> poolsToUpdate = new HashSet<>();
        for (Volume clone : clones) {
            Volume parent = dbClient.queryObject(Volume.class, clone.getAssociatedSourceVolume());
            parent2snap.put(parent.getNativeId(), clone.getLabel());
            poolsToUpdate.add(parent.getPool());
        }
        String systemId = scaleIOHandle.getSystemId();
        ScaleIOSnapshotVolumeResponse result = scaleIOHandle.snapshotMultiVolume(parent2snap, systemId);
        List<String> nativeIds = result.getVolumeIdList();
        Map<String, ScaleIOVolume> cloneNameMap = scaleIOHandle.getVolumeNameMap(nativeIds);
        Multimap<URI, String> poolToVolumesMap = ArrayListMultimap.create();
        for (Volume clone : clones) {
            String name = clone.getLabel();
            ScaleIOVolume sioVolume = cloneNameMap.get(name);
            ScaleIOHelper.updateSnapshotWithSnapshotVolumeResult(dbClient, clone, systemId, sioVolume.getId(), storage);
            clone.setAllocatedCapacity(Long.parseLong(sioVolume.getSizeInKb()) * 1024L);
            clone.setProvisionedCapacity(clone.getAllocatedCapacity());
            clone.setCapacity(clone.getAllocatedCapacity());
            clone.setReplicationGroupInstance(result.getSnapshotGroupId());
            poolToVolumesMap.put(clone.getPool(), clone.getId().toString());
        }
        dbClient.updateObject(clones);
        List<StoragePool> pools = dbClient.queryObject(StoragePool.class, Lists.newArrayList(poolsToUpdate));
        for (StoragePool pool : pools) {
            pool.removeReservedCapacityForVolumes(poolToVolumesMap.get(pool.getId()));
            ScaleIOHelper.updateStoragePoolCapacity(dbClient, scaleIOHandle, pool, storage);
        }
        taskCompleter.ready(dbClient);
    } catch (Exception e) {
        log.error("Encountered an exception", e);
        ServiceCoded code = DeviceControllerErrors.scaleio.encounteredAnExceptionFromScaleIOOperation("createGroupClone", e.getMessage());
        taskCompleter.error(dbClient, code);
    }
}
Also used : StoragePool(com.emc.storageos.db.client.model.StoragePool) HashMap(java.util.HashMap) ScaleIOVolume(com.emc.storageos.scaleio.api.restapi.response.ScaleIOVolume) URI(java.net.URI) Volume(com.emc.storageos.db.client.model.Volume) ScaleIOVolume(com.emc.storageos.scaleio.api.restapi.response.ScaleIOVolume) ScaleIOSnapshotVolumeResponse(com.emc.storageos.scaleio.api.restapi.response.ScaleIOSnapshotVolumeResponse) ServiceCoded(com.emc.storageos.svcs.errorhandling.model.ServiceCoded) ScaleIORestClient(com.emc.storageos.scaleio.api.restapi.ScaleIORestClient) HashSet(java.util.HashSet)

Example 3 with ScaleIOVolume

use of com.emc.storageos.scaleio.api.restapi.response.ScaleIOVolume in project coprhd-controller by CoprHD.

the class ScaleIORestClient method addVolume.

/**
 * Create a volume
 *
 * @param protectionDomainId The protection domain ID
 * @param storagePoolId The storage pool ID
 * @param volumeName The volume name
 * @param volumeSize The volume Size
 * @param thinProvisioned true for thinProvisioned, false for thickProvisioned
 * @return
 * @throws Exception
 */
public ScaleIOVolume addVolume(String protectionDomainId, String storagePoolId, String volumeName, String volumeSize, boolean thinProvisioned) throws Exception {
    ScaleIOCreateVolume volume = new ScaleIOCreateVolume();
    Long sizeInKb = Long.parseLong(volumeSize) / 1024L;
    volume.setVolumeSizeInKb(sizeInKb.toString());
    volume.setStoragePoolId(storagePoolId);
    volume.setName(volumeName);
    volume.setProtectionDomainId(protectionDomainId);
    if (thinProvisioned) {
        volume.setVolumeType(ScaleIOConstants.THIN_PROVISIONED);
    } else {
        volume.setVolumeType(ScaleIOConstants.THICK_PROVISIONED);
    }
    ClientResponse response = post(URI.create(ScaleIOConstants.VOLUMES_URI), getJsonForEntity(volume));
    ScaleIOVolume createdVol = getResponseObject(ScaleIOVolume.class, response);
    return queryVolume(createdVol.getId());
}
Also used : ClientResponse(com.sun.jersey.api.client.ClientResponse) ScaleIOVolume(com.emc.storageos.scaleio.api.restapi.response.ScaleIOVolume) ScaleIOCreateVolume(com.emc.storageos.scaleio.api.restapi.request.ScaleIOCreateVolume)

Example 4 with ScaleIOVolume

use of com.emc.storageos.scaleio.api.restapi.response.ScaleIOVolume in project coprhd-controller by CoprHD.

the class ScaleIORestClient method getVolumeNameMap.

/**
 * Get the volumes for the given volume Ids
 *
 * @param volumeIds The list of volume IDs
 * @return The map of the ScaleIO volume and volume ID
 * @throws Exception
 */
public Map<String, ScaleIOVolume> getVolumeNameMap(List<String> volumeIds) throws Exception {
    Map<String, ScaleIOVolume> result = new HashMap<String, ScaleIOVolume>();
    ScaleIOVolumeList parm = new ScaleIOVolumeList();
    parm.setIds(volumeIds);
    ClientResponse response = post(URI.create(ScaleIOConstants.GET_VOLUMES_BYIDS_URI), getJsonForEntity(parm));
    List<ScaleIOVolume> volumes = getResponseObjects(ScaleIOVolume.class, response);
    for (ScaleIOVolume volume : volumes) {
        result.put(volume.getName(), volume);
    }
    return result;
}
Also used : ClientResponse(com.sun.jersey.api.client.ClientResponse) HashMap(java.util.HashMap) ScaleIOVolumeList(com.emc.storageos.scaleio.api.restapi.request.ScaleIOVolumeList) ScaleIOVolume(com.emc.storageos.scaleio.api.restapi.response.ScaleIOVolume)

Example 5 with ScaleIOVolume

use of com.emc.storageos.scaleio.api.restapi.response.ScaleIOVolume in project coprhd-controller by CoprHD.

the class ScaleIORestClient method getVolumes.

/**
 * Get the volume names for the given volume Ids
 *
 * @param volumeIds The list of volume IDs
 * @return The map of the volume name and volume ID
 * @throws Exception
 */
public Map<String, String> getVolumes(List<String> volumeIds) throws Exception {
    Map<String, String> result = new HashMap<String, String>();
    ScaleIOVolumeList parm = new ScaleIOVolumeList();
    parm.setIds(volumeIds);
    ClientResponse response = post(URI.create(ScaleIOConstants.GET_VOLUMES_BYIDS_URI), getJsonForEntity(parm));
    List<ScaleIOVolume> volumes = getResponseObjects(ScaleIOVolume.class, response);
    for (ScaleIOVolume volume : volumes) {
        result.put(volume.getName(), volume.getId());
    }
    return result;
}
Also used : ClientResponse(com.sun.jersey.api.client.ClientResponse) HashMap(java.util.HashMap) ScaleIOVolumeList(com.emc.storageos.scaleio.api.restapi.request.ScaleIOVolumeList) ScaleIOVolume(com.emc.storageos.scaleio.api.restapi.response.ScaleIOVolume)

Aggregations

ScaleIOVolume (com.emc.storageos.scaleio.api.restapi.response.ScaleIOVolume)11 ScaleIORestClient (com.emc.storageos.scaleio.api.restapi.ScaleIORestClient)4 ClientResponse (com.sun.jersey.api.client.ClientResponse)4 ScaleIOException (com.emc.storageos.scaleio.ScaleIOException)3 ServiceCoded (com.emc.storageos.svcs.errorhandling.model.ServiceCoded)3 URI (java.net.URI)3 HashMap (java.util.HashMap)3 StoragePool (com.emc.storageos.db.client.model.StoragePool)2 Volume (com.emc.storageos.db.client.model.Volume)2 DatabaseException (com.emc.storageos.db.exceptions.DatabaseException)2 DeviceControllerException (com.emc.storageos.exceptions.DeviceControllerException)2 ScaleIOCreateVolume (com.emc.storageos.scaleio.api.restapi.request.ScaleIOCreateVolume)2 ScaleIOVolumeList (com.emc.storageos.scaleio.api.restapi.request.ScaleIOVolumeList)2 HashSet (java.util.HashSet)2 ScaleIODataMapper (com.emc.storageos.api.mapper.ScaleIODataMapper)1 ScaleIOCollectDataParam (com.emc.storageos.model.collectdata.ScaleIOCollectDataParam)1 ScaleIODeviceDataRestRep (com.emc.storageos.model.collectdata.ScaleIODeviceDataRestRep)1 ScaleIOSDCDataRestRep (com.emc.storageos.model.collectdata.ScaleIOSDCDataRestRep)1 ScaleIOSDSDataRestRep (com.emc.storageos.model.collectdata.ScaleIOSDSDataRestRep)1 ScaleIOSystemDataRestRep (com.emc.storageos.model.collectdata.ScaleIOSystemDataRestRep)1