Search in sources :

Example 11 with HypervisorCapabilitiesVO

use of com.cloud.hypervisor.HypervisorCapabilitiesVO in project cloudstack by apache.

the class VolumeApiServiceImpl method migrateVolume.

@DB
@Override
@ActionEvent(eventType = EventTypes.EVENT_VOLUME_MIGRATE, eventDescription = "migrating volume", async = true)
public Volume migrateVolume(MigrateVolumeCmd cmd) {
    Account caller = CallContext.current().getCallingAccount();
    Long volumeId = cmd.getVolumeId();
    Long storagePoolId = cmd.getStoragePoolId();
    VolumeVO vol = _volsDao.findById(volumeId);
    if (vol == null) {
        throw new InvalidParameterValueException("Failed to find the volume id: " + volumeId);
    }
    _accountMgr.checkAccess(caller, null, true, vol);
    if (vol.getState() != Volume.State.Ready) {
        throw new InvalidParameterValueException("Volume must be in ready state");
    }
    if (vol.getPoolId() == storagePoolId) {
        throw new InvalidParameterValueException("Volume " + vol + " is already on the destination storage pool");
    }
    boolean liveMigrateVolume = false;
    Long instanceId = vol.getInstanceId();
    Long srcClusterId = null;
    VMInstanceVO vm = null;
    if (instanceId != null) {
        vm = _vmInstanceDao.findById(instanceId);
    }
    // OfflineVmwareMigration: consider if this is needed and desirable
    if (vm != null && _vmSnapshotDao.findByVm(vm.getId()).size() > 0) {
        throw new InvalidParameterValueException("Volume cannot be migrated, please remove all VM snapshots for VM to which this volume is attached");
    }
    // OfflineVmwareMigration: extract this block as method and check if it is subject to regression
    if (vm != null && State.Running.equals(vm.getState())) {
        // Check if the VM is GPU enabled.
        if (_serviceOfferingDetailsDao.findDetail(vm.getServiceOfferingId(), GPU.Keys.pciDevice.toString()) != null) {
            throw new InvalidParameterValueException("Live Migration of GPU enabled VM is not supported");
        }
        StoragePoolVO storagePoolVO = _storagePoolDao.findById(vol.getPoolId());
        if (storagePoolVO.getPoolType() == Storage.StoragePoolType.PowerFlex) {
            throw new InvalidParameterValueException("Migrate volume of a running VM is unsupported on storage pool type " + storagePoolVO.getPoolType());
        }
        // Check if the underlying hypervisor supports storage motion.
        Long hostId = vm.getHostId();
        if (hostId != null) {
            HostVO host = _hostDao.findById(hostId);
            HypervisorCapabilitiesVO capabilities = null;
            if (host != null) {
                capabilities = _hypervisorCapabilitiesDao.findByHypervisorTypeAndVersion(host.getHypervisorType(), host.getHypervisorVersion());
                srcClusterId = host.getClusterId();
            }
            if (capabilities != null) {
                liveMigrateVolume = capabilities.isStorageMotionSupported();
            }
            if (liveMigrateVolume && HypervisorType.KVM.equals(host.getHypervisorType())) {
                throw new InvalidParameterValueException("KVM does not support volume live migration due to the limited possibility to refresh VM XML domain. " + "Therefore, to live migrate a volume between storage pools, one must migrate the VM to a different host as well to force the VM XML domain update. " + "Use 'migrateVirtualMachineWithVolumes' instead.");
            }
        }
        // If vm is running, and hypervisor doesn't support live migration, then return error
        if (!liveMigrateVolume) {
            throw new InvalidParameterValueException("Volume needs to be detached from VM");
        }
        if (!cmd.isLiveMigrate()) {
            throw new InvalidParameterValueException("The volume " + vol + "is attached to a vm and for migrating it " + "the parameter livemigrate should be specified");
        }
    }
    if (vm != null && HypervisorType.VMware.equals(vm.getHypervisorType()) && State.Stopped.equals(vm.getState())) {
        // For VMware, use liveMigrateVolume=true so that it follows VmwareStorageMotionStrategy
        liveMigrateVolume = true;
    }
    StoragePool destPool = (StoragePool) dataStoreMgr.getDataStore(storagePoolId, DataStoreRole.Primary);
    if (destPool == null) {
        throw new InvalidParameterValueException("Failed to find the destination storage pool: " + storagePoolId);
    } else if (destPool.isInMaintenance()) {
        throw new InvalidParameterValueException("Cannot migrate volume " + vol + "to the destination storage pool " + destPool.getName() + " as the storage pool is in maintenance mode.");
    }
    DiskOfferingVO diskOffering = _diskOfferingDao.findById(vol.getDiskOfferingId());
    if (diskOffering == null) {
        throw new CloudRuntimeException("volume '" + vol.getUuid() + "', has no diskoffering. Migration target cannot be checked.");
    }
    String poolUuid = destPool.getUuid();
    if (destPool.getPoolType() == Storage.StoragePoolType.DatastoreCluster) {
        DataCenter dc = _entityMgr.findById(DataCenter.class, vol.getDataCenterId());
        Pod destPoolPod = _entityMgr.findById(Pod.class, destPool.getPodId());
        destPool = _volumeMgr.findChildDataStoreInDataStoreCluster(dc, destPoolPod, destPool.getClusterId(), null, null, destPool.getId());
    }
    if (!storageMgr.storagePoolCompatibleWithVolumePool(destPool, (Volume) vol)) {
        throw new CloudRuntimeException("Storage pool " + destPool.getName() + " is not suitable to migrate volume " + vol.getName());
    }
    HypervisorType hypervisorType = _volsDao.getHypervisorType(volumeId);
    DiskProfile diskProfile = new DiskProfile(vol, diskOffering, hypervisorType);
    Pair<Volume, DiskProfile> volumeDiskProfilePair = new Pair<>(vol, diskProfile);
    if (!storageMgr.storagePoolHasEnoughSpace(Collections.singletonList(volumeDiskProfilePair), destPool)) {
        throw new CloudRuntimeException("Storage pool " + destPool.getName() + " does not have enough space to migrate volume " + vol.getName());
    }
    if (liveMigrateVolume && State.Running.equals(vm.getState()) && destPool.getClusterId() != null && srcClusterId != null) {
        if (!srcClusterId.equals(destPool.getClusterId())) {
            throw new InvalidParameterValueException("Cannot migrate a volume of a virtual machine to a storage pool in a different cluster");
        }
    }
    // In case of VMware, if ROOT volume is being cold-migrated, then ensure destination storage pool is in the same Datacenter as the VM.
    if (vm != null && vm.getHypervisorType().equals(HypervisorType.VMware)) {
        if (!liveMigrateVolume && vol.volumeType.equals(Volume.Type.ROOT)) {
            Long hostId = vm.getHostId() != null ? vm.getHostId() : vm.getLastHostId();
            HostVO host = _hostDao.findById(hostId);
            if (host != null) {
                srcClusterId = host.getClusterId();
            }
            if (srcClusterId != null && destPool.getClusterId() != null && !srcClusterId.equals(destPool.getClusterId())) {
                String srcDcName = _clusterDetailsDao.getVmwareDcName(srcClusterId);
                String destDcName = _clusterDetailsDao.getVmwareDcName(destPool.getClusterId());
                if (srcDcName != null && destDcName != null && !srcDcName.equals(destDcName)) {
                    throw new InvalidParameterValueException("Cannot migrate ROOT volume of a stopped VM to a storage pool in a different VMware datacenter");
                }
            }
            updateMissingRootDiskController(vm, vol.getChainInfo());
        }
    }
    if (hypervisorType.equals(HypervisorType.VMware)) {
        try {
            boolean isStoragePoolStoragepolicyComplaince = storageMgr.isStoragePoolCompliantWithStoragePolicy(Arrays.asList(volumeDiskProfilePair), destPool);
            if (!isStoragePoolStoragepolicyComplaince) {
                throw new CloudRuntimeException(String.format("Storage pool %s is not storage policy compliance with the volume %s", poolUuid, vol.getUuid()));
            }
        } catch (StorageUnavailableException e) {
            throw new CloudRuntimeException(String.format("Could not verify storage policy compliance against storage pool %s due to exception %s", destPool.getUuid(), e.getMessage()));
        }
    }
    DiskOfferingVO newDiskOffering = retrieveAndValidateNewDiskOffering(cmd);
    validateConditionsToReplaceDiskOfferingOfVolume(vol, newDiskOffering, destPool);
    if (vm != null) {
        // serialize VM operation
        AsyncJobExecutionContext jobContext = AsyncJobExecutionContext.getCurrentExecutionContext();
        if (jobContext.isJobDispatchedBy(VmWorkConstants.VM_WORK_JOB_DISPATCHER)) {
            // avoid re-entrance
            VmWorkJobVO placeHolder = null;
            placeHolder = createPlaceHolderWork(vm.getId());
            try {
                return orchestrateMigrateVolume(vol, destPool, liveMigrateVolume, newDiskOffering);
            } finally {
                _workJobDao.expunge(placeHolder.getId());
            }
        } else {
            Outcome<Volume> outcome = migrateVolumeThroughJobQueue(vm, vol, destPool, liveMigrateVolume, newDiskOffering);
            try {
                outcome.get();
            } catch (InterruptedException e) {
                throw new RuntimeException("Operation is interrupted", e);
            } catch (java.util.concurrent.ExecutionException e) {
                throw new RuntimeException("Execution excetion", e);
            }
            Object jobResult = _jobMgr.unmarshallResultObject(outcome.getJob());
            if (jobResult != null) {
                if (jobResult instanceof ConcurrentOperationException) {
                    throw (ConcurrentOperationException) jobResult;
                } else if (jobResult instanceof RuntimeException) {
                    throw (RuntimeException) jobResult;
                } else if (jobResult instanceof Throwable) {
                    throw new RuntimeException("Unexpected exception", (Throwable) jobResult);
                }
            }
            // retrieve the migrated new volume from job result
            if (jobResult != null && jobResult instanceof Long) {
                return _entityMgr.findById(VolumeVO.class, ((Long) jobResult));
            }
            return null;
        }
    }
    return orchestrateMigrateVolume(vol, destPool, liveMigrateVolume, newDiskOffering);
}
Also used : HypervisorCapabilitiesVO(com.cloud.hypervisor.HypervisorCapabilitiesVO) Account(com.cloud.user.Account) AsyncJobExecutionContext(org.apache.cloudstack.framework.jobs.AsyncJobExecutionContext) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) StorageUnavailableException(com.cloud.exception.StorageUnavailableException) InvalidParameterValueException(com.cloud.exception.InvalidParameterValueException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) StoragePoolVO(org.apache.cloudstack.storage.datastore.db.StoragePoolVO) Pair(com.cloud.utils.Pair) Pod(com.cloud.dc.Pod) VMInstanceVO(com.cloud.vm.VMInstanceVO) DiskProfile(com.cloud.vm.DiskProfile) ConcurrentOperationException(com.cloud.exception.ConcurrentOperationException) HostVO(com.cloud.host.HostVO) VmWorkJobVO(org.apache.cloudstack.framework.jobs.impl.VmWorkJobVO) HypervisorType(com.cloud.hypervisor.Hypervisor.HypervisorType) ExecutionException(java.util.concurrent.ExecutionException) DataCenter(com.cloud.dc.DataCenter) VmWorkDetachVolume(com.cloud.vm.VmWorkDetachVolume) VmWorkMigrateVolume(com.cloud.vm.VmWorkMigrateVolume) VmWorkResizeVolume(com.cloud.vm.VmWorkResizeVolume) VmWorkAttachVolume(com.cloud.vm.VmWorkAttachVolume) VmWorkExtractVolume(com.cloud.vm.VmWorkExtractVolume) DataObject(org.apache.cloudstack.engine.subsystem.api.storage.DataObject) ActionEvent(com.cloud.event.ActionEvent) DB(com.cloud.utils.db.DB)

Example 12 with HypervisorCapabilitiesVO

use of com.cloud.hypervisor.HypervisorCapabilitiesVO in project cloudstack by apache.

the class ManagementServerImpl method addGuestOsMapping.

@Override
@DB
@ActionEvent(eventType = EventTypes.EVENT_GUEST_OS_MAPPING_ADD, eventDescription = "Adding new guest OS to hypervisor name mapping", create = true)
public GuestOSHypervisor addGuestOsMapping(final AddGuestOsMappingCmd cmd) {
    final Long osTypeId = cmd.getOsTypeId();
    final String osStdName = cmd.getOsStdName();
    final String hypervisor = cmd.getHypervisor();
    final String hypervisorVersion = cmd.getHypervisorVersion();
    final String osNameForHypervisor = cmd.getOsNameForHypervisor();
    GuestOS guestOs = null;
    if (osTypeId == null && (osStdName == null || osStdName.isEmpty())) {
        throw new InvalidParameterValueException("Please specify either a guest OS name or UUID");
    }
    final HypervisorType hypervisorType = HypervisorType.getType(hypervisor);
    if (!(hypervisorType == HypervisorType.KVM || hypervisorType == HypervisorType.XenServer || hypervisorType == HypervisorType.VMware)) {
        throw new InvalidParameterValueException("Please specify a valid hypervisor : XenServer, KVM or VMware");
    }
    final HypervisorCapabilitiesVO hypervisorCapabilities = _hypervisorCapabilitiesDao.findByHypervisorTypeAndVersion(hypervisorType, hypervisorVersion);
    if (hypervisorCapabilities == null) {
        throw new InvalidParameterValueException("Please specify a valid hypervisor and supported version");
    }
    // by this point either osTypeId or osStdType is non-empty. Find by either of them. ID takes preference if both are specified
    if (osTypeId != null) {
        guestOs = ApiDBUtils.findGuestOSById(osTypeId);
    } else if (osStdName != null) {
        guestOs = ApiDBUtils.findGuestOSByDisplayName(osStdName);
    }
    if (guestOs == null) {
        throw new InvalidParameterValueException("Unable to find the guest OS by name or UUID");
    }
    // check for duplicates
    final GuestOSHypervisorVO duplicate = _guestOSHypervisorDao.findByOsIdAndHypervisorAndUserDefined(guestOs.getId(), hypervisorType.toString(), hypervisorVersion, true);
    if (duplicate != null) {
        throw new InvalidParameterValueException("Mapping from hypervisor : " + hypervisorType.toString() + ", version : " + hypervisorVersion + " and guest OS : " + guestOs.getDisplayName() + " already exists!");
    }
    final GuestOSHypervisorVO guestOsMapping = new GuestOSHypervisorVO();
    guestOsMapping.setGuestOsId(guestOs.getId());
    guestOsMapping.setGuestOsName(osNameForHypervisor);
    guestOsMapping.setHypervisorType(hypervisorType.toString());
    guestOsMapping.setHypervisorVersion(hypervisorVersion);
    guestOsMapping.setIsUserDefined(true);
    return _guestOSHypervisorDao.persist(guestOsMapping);
}
Also used : HypervisorType(com.cloud.hypervisor.Hypervisor.HypervisorType) HypervisorCapabilitiesVO(com.cloud.hypervisor.HypervisorCapabilitiesVO) GuestOSHypervisorVO(com.cloud.storage.GuestOSHypervisorVO) InvalidParameterValueException(com.cloud.exception.InvalidParameterValueException) GuestOS(com.cloud.storage.GuestOS) ActionEvent(com.cloud.event.ActionEvent) DB(com.cloud.utils.db.DB)

Example 13 with HypervisorCapabilitiesVO

use of com.cloud.hypervisor.HypervisorCapabilitiesVO in project cloudstack by apache.

the class ManagementServerImpl method updateHypervisorCapabilities.

@Override
public HypervisorCapabilities updateHypervisorCapabilities(UpdateHypervisorCapabilitiesCmd cmd) {
    final Long id = cmd.getId();
    final Boolean securityGroupEnabled = cmd.getSecurityGroupEnabled();
    final Long maxGuestsLimit = cmd.getMaxGuestsLimit();
    final Integer maxDataVolumesLimit = cmd.getMaxDataVolumesLimit();
    final Boolean storageMotionSupported = cmd.getStorageMotionSupported();
    final Integer maxHostsPerClusterLimit = cmd.getMaxHostsPerClusterLimit();
    final Boolean vmSnapshotEnabled = cmd.getVmSnapshotEnabled();
    HypervisorCapabilitiesVO hpvCapabilities = _hypervisorCapabilitiesDao.findById(id, true);
    if (hpvCapabilities == null) {
        final InvalidParameterValueException ex = new InvalidParameterValueException("unable to find the hypervisor capabilities for specified id");
        ex.addProxyObject(id.toString(), "Id");
        throw ex;
    }
    final boolean updateNeeded = securityGroupEnabled != null || maxGuestsLimit != null || maxDataVolumesLimit != null || storageMotionSupported != null || maxHostsPerClusterLimit != null || vmSnapshotEnabled != null;
    if (!updateNeeded) {
        return hpvCapabilities;
    }
    hpvCapabilities = _hypervisorCapabilitiesDao.createForUpdate(id);
    if (securityGroupEnabled != null) {
        hpvCapabilities.setSecurityGroupEnabled(securityGroupEnabled);
    }
    if (maxGuestsLimit != null) {
        hpvCapabilities.setMaxGuestsLimit(maxGuestsLimit);
    }
    if (maxDataVolumesLimit != null) {
        hpvCapabilities.setMaxDataVolumesLimit(maxDataVolumesLimit);
    }
    if (storageMotionSupported != null) {
        hpvCapabilities.setStorageMotionSupported(storageMotionSupported);
    }
    if (maxHostsPerClusterLimit != null) {
        hpvCapabilities.setMaxHostsPerCluster(maxHostsPerClusterLimit);
    }
    if (vmSnapshotEnabled != null) {
        hpvCapabilities.setVmSnapshotEnabled(vmSnapshotEnabled);
    }
    if (_hypervisorCapabilitiesDao.update(id, hpvCapabilities)) {
        hpvCapabilities = _hypervisorCapabilitiesDao.findById(id);
        CallContext.current().setEventDetails("Hypervisor Capabilities id=" + hpvCapabilities.getId());
        return hpvCapabilities;
    } else {
        return null;
    }
}
Also used : HypervisorCapabilitiesVO(com.cloud.hypervisor.HypervisorCapabilitiesVO) InvalidParameterValueException(com.cloud.exception.InvalidParameterValueException)

Example 14 with HypervisorCapabilitiesVO

use of com.cloud.hypervisor.HypervisorCapabilitiesVO in project cloudstack by apache.

the class ManagementServerImpl method listHypervisorCapabilities.

@Override
public Pair<List<? extends HypervisorCapabilities>, Integer> listHypervisorCapabilities(final Long id, final HypervisorType hypervisorType, final String keyword, final Long startIndex, final Long pageSizeVal) {
    final Filter searchFilter = new Filter(HypervisorCapabilitiesVO.class, "id", true, startIndex, pageSizeVal);
    final SearchCriteria<HypervisorCapabilitiesVO> sc = _hypervisorCapabilitiesDao.createSearchCriteria();
    if (id != null) {
        sc.addAnd("id", SearchCriteria.Op.EQ, id);
    }
    if (hypervisorType != null) {
        sc.addAnd("hypervisorType", SearchCriteria.Op.EQ, hypervisorType);
    }
    if (keyword != null) {
        final SearchCriteria<HypervisorCapabilitiesVO> ssc = _hypervisorCapabilitiesDao.createSearchCriteria();
        ssc.addOr("hypervisorType", SearchCriteria.Op.LIKE, "%" + keyword + "%");
        sc.addAnd("hypervisorType", SearchCriteria.Op.SC, ssc);
    }
    final Pair<List<HypervisorCapabilitiesVO>, Integer> result = _hypervisorCapabilitiesDao.searchAndCount(sc, searchFilter);
    return new Pair<List<? extends HypervisorCapabilities>, Integer>(result.first(), result.second());
}
Also used : HypervisorCapabilitiesVO(com.cloud.hypervisor.HypervisorCapabilitiesVO) Filter(com.cloud.utils.db.Filter) ArrayList(java.util.ArrayList) ExcludeList(com.cloud.deploy.DeploymentPlanner.ExcludeList) List(java.util.List) Pair(com.cloud.utils.Pair) SSHKeyPair(com.cloud.user.SSHKeyPair)

Example 15 with HypervisorCapabilitiesVO

use of com.cloud.hypervisor.HypervisorCapabilitiesVO in project cloudstack by apache.

the class ManagementServerImpl method listStoragePoolsForMigrationOfVolumeInternal.

public Pair<List<? extends StoragePool>, List<? extends StoragePool>> listStoragePoolsForMigrationOfVolumeInternal(final Long volumeId, Long newDiskOfferingId, Long newSize, Long newMinIops, Long newMaxIops, boolean keepSourceStoragePool) {
    final Account caller = getCaller();
    if (!_accountMgr.isRootAdmin(caller.getId())) {
        if (s_logger.isDebugEnabled()) {
            s_logger.debug("Caller is not a root admin, permission denied to migrate the volume");
        }
        throw new PermissionDeniedException("No permission to migrate volume, only root admin can migrate a volume");
    }
    final VolumeVO volume = _volumeDao.findById(volumeId);
    if (volume == null) {
        final InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find volume with" + " specified id.");
        ex.addProxyObject(volumeId.toString(), "volumeId");
        throw ex;
    }
    Long diskOfferingId = volume.getDiskOfferingId();
    if (newDiskOfferingId != null) {
        diskOfferingId = newDiskOfferingId;
    }
    // Volume must be attached to an instance for live migration.
    List<? extends StoragePool> allPools = new ArrayList<StoragePool>();
    List<? extends StoragePool> suitablePools = new ArrayList<StoragePool>();
    // Volume must be in Ready state to be migrated.
    if (!Volume.State.Ready.equals(volume.getState())) {
        s_logger.info("Volume " + volume + " must be in ready state for migration.");
        return new Pair<List<? extends StoragePool>, List<? extends StoragePool>>(allPools, suitablePools);
    }
    final Long instanceId = volume.getInstanceId();
    VMInstanceVO vm = null;
    if (instanceId != null) {
        vm = _vmInstanceDao.findById(instanceId);
    }
    if (vm == null) {
        s_logger.info("Volume " + volume + " isn't attached to any vm. Looking for storage pools in the " + "zone to which this volumes can be migrated.");
    } else if (vm.getState() != State.Running) {
        s_logger.info("Volume " + volume + " isn't attached to any running vm. Looking for storage pools in the " + "cluster to which this volumes can be migrated.");
    } else {
        s_logger.info("Volume " + volume + " is attached to any running vm. Looking for storage pools in the " + "cluster to which this volumes can be migrated.");
        boolean storageMotionSupported = false;
        // Check if the underlying hypervisor supports storage motion.
        final Long hostId = vm.getHostId();
        if (hostId != null) {
            final HostVO host = _hostDao.findById(hostId);
            HypervisorCapabilitiesVO capabilities = null;
            if (host != null) {
                capabilities = _hypervisorCapabilitiesDao.findByHypervisorTypeAndVersion(host.getHypervisorType(), host.getHypervisorVersion());
            } else {
                s_logger.error("Details of the host on which the vm " + vm + ", to which volume " + volume + " is " + "attached, couldn't be retrieved.");
            }
            if (capabilities != null) {
                storageMotionSupported = capabilities.isStorageMotionSupported();
            } else {
                s_logger.error("Capabilities for host " + host + " couldn't be retrieved.");
            }
        }
        if (!storageMotionSupported) {
            s_logger.info("Volume " + volume + " is attached to a running vm and the hypervisor doesn't support" + " storage motion.");
            return new Pair<List<? extends StoragePool>, List<? extends StoragePool>>(allPools, suitablePools);
        }
    }
    StoragePool srcVolumePool = _poolDao.findById(volume.getPoolId());
    HypervisorType hypervisorType = getHypervisorType(vm, srcVolumePool);
    Pair<Host, List<Cluster>> hostClusterPair = getVolumeVmHostClusters(srcVolumePool, vm, hypervisorType);
    Host vmHost = hostClusterPair.first();
    List<Cluster> clusters = hostClusterPair.second();
    allPools = getAllStoragePoolCompatibleWithVolumeSourceStoragePool(srcVolumePool, hypervisorType, clusters);
    ExcludeList avoid = new ExcludeList();
    if (!keepSourceStoragePool) {
        allPools.remove(srcVolumePool);
        avoid.addPool(srcVolumePool.getId());
    }
    if (vm != null) {
        suitablePools = findAllSuitableStoragePoolsForVm(volume, diskOfferingId, newSize, newMinIops, newMaxIops, vm, vmHost, avoid, CollectionUtils.isNotEmpty(clusters) ? clusters.get(0) : null, hypervisorType);
    } else {
        suitablePools = findAllSuitableStoragePoolsForDetachedVolume(volume, diskOfferingId, allPools);
    }
    removeDataStoreClusterParents((List<StoragePool>) allPools);
    removeDataStoreClusterParents((List<StoragePool>) suitablePools);
    return new Pair<List<? extends StoragePool>, List<? extends StoragePool>>(allPools, suitablePools);
}
Also used : HypervisorCapabilitiesVO(com.cloud.hypervisor.HypervisorCapabilitiesVO) ExcludeList(com.cloud.deploy.DeploymentPlanner.ExcludeList) Account(com.cloud.user.Account) StoragePool(com.cloud.storage.StoragePool) ArrayList(java.util.ArrayList) VMInstanceVO(com.cloud.vm.VMInstanceVO) Cluster(com.cloud.org.Cluster) Host(com.cloud.host.Host) HostVO(com.cloud.host.HostVO) HypervisorType(com.cloud.hypervisor.Hypervisor.HypervisorType) VolumeVO(com.cloud.storage.VolumeVO) InvalidParameterValueException(com.cloud.exception.InvalidParameterValueException) PermissionDeniedException(com.cloud.exception.PermissionDeniedException) ArrayList(java.util.ArrayList) ExcludeList(com.cloud.deploy.DeploymentPlanner.ExcludeList) List(java.util.List) Pair(com.cloud.utils.Pair) SSHKeyPair(com.cloud.user.SSHKeyPair)

Aggregations

HypervisorCapabilitiesVO (com.cloud.hypervisor.HypervisorCapabilitiesVO)16 HostVO (com.cloud.host.HostVO)6 HypervisorType (com.cloud.hypervisor.Hypervisor.HypervisorType)6 Pair (com.cloud.utils.Pair)6 InvalidParameterValueException (com.cloud.utils.exception.InvalidParameterValueException)6 ArrayList (java.util.ArrayList)6 ExcludeList (com.cloud.deploy.DeploymentPlanner.ExcludeList)5 ActionEvent (com.cloud.event.ActionEvent)5 InvalidParameterValueException (com.cloud.exception.InvalidParameterValueException)5 Account (com.cloud.user.Account)5 SSHKeyPair (com.cloud.user.SSHKeyPair)5 VMInstanceVO (com.cloud.vm.VMInstanceVO)5 PermissionDeniedException (com.cloud.exception.PermissionDeniedException)4 VolumeVO (com.cloud.storage.VolumeVO)4 DB (com.cloud.utils.db.DB)4 List (java.util.List)4 Host (com.cloud.host.Host)3 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)3 DiskProfile (com.cloud.vm.DiskProfile)3 DataCenterDeployment (com.cloud.deploy.DataCenterDeployment)2