/* * Copyright (c) 2015 EMC * All Rights Reserved */ package com.emc.sa.service.vipr.block.tasks; import java.net.URI; import java.util.List; import java.util.Set; import com.emc.sa.asset.providers.BlockProviderUtils; import com.emc.sa.service.vipr.block.BlockStorageUtils; import com.emc.sa.service.vipr.tasks.ViPRExecutionTask; import com.emc.sa.util.ResourceType; import com.emc.storageos.model.NamedRelatedResourceRep; import com.emc.storageos.model.application.VolumeGroupRestRep; import com.emc.storageos.model.block.VolumeRestRep; import com.emc.storageos.model.block.export.ExportGroupRestRep; import com.emc.storageos.model.systems.StorageSystemRestRep; import com.google.common.collect.Sets; public class GetMobilityGroupVolumesByHost extends ViPRExecutionTask<Set<URI>> { private final VolumeGroupRestRep mobilityGroup; private final List<NamedRelatedResourceRep> hosts; public GetMobilityGroupVolumesByHost(VolumeGroupRestRep mobilityGroup, List<NamedRelatedResourceRep> hosts) { this.mobilityGroup = mobilityGroup; this.hosts = hosts; provideDetailArgs(mobilityGroup, hosts); } @Override public Set<URI> executeTask() throws Exception { Set<URI> mobilityGroupVolumes = Sets.newHashSet(); Set<URI> volumes = getHostExportedVolumes(); for (URI volume : volumes) { VolumeRestRep vol = getClient().blockVolumes().get(volume); StorageSystemRestRep storage = getClient().storageSystems().get(vol.getStorageController()); if (BlockStorageUtils.isVplexVolume(vol, storage.getSystemType())) { mobilityGroupVolumes.add(volume); } } return mobilityGroupVolumes; } private Set<URI> getHostExportedVolumes() { Set<URI> volumes = Sets.newHashSet(); for (NamedRelatedResourceRep host : hosts) { List<ExportGroupRestRep> exports = getClient().blockExports().findContainingHost(host.getId()); volumes.addAll(BlockProviderUtils.getExportedResourceIds(exports, ResourceType.VOLUME)); } return volumes; } }