mirror of https://github.com/apache/cloudstack.git
Fix vsphere storage policy when compute offering uses the disk offering attached to it (#9203)
This commit is contained in:
parent
acae5c5b9e
commit
6edcf32c5e
|
|
@ -3269,10 +3269,9 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||
|
||||
DiskOfferingVO diskOffering = null;
|
||||
if (diskOfferingId == null) {
|
||||
diskOffering = createDiskOfferingInternal(userId, isSystem, vmType,
|
||||
name, cpu, ramSize, speed, displayText, typedProvisioningType, localStorageRequired,
|
||||
offerHA, limitResourceUse, volatileVm, tags, domainIds, zoneIds, hostTag,
|
||||
networkRate, deploymentPlanner, details, rootDiskSizeInGiB, isCustomizedIops, minIops, maxIops,
|
||||
diskOffering = createDiskOfferingInternal(
|
||||
name, displayText, typedProvisioningType, localStorageRequired,
|
||||
tags, details, rootDiskSizeInGiB, isCustomizedIops, minIops, maxIops,
|
||||
bytesReadRate, bytesReadRateMax, bytesReadRateMaxLength,
|
||||
bytesWriteRate, bytesWriteRateMax, bytesWriteRateMaxLength,
|
||||
iopsReadRate, iopsReadRateMax, iopsReadRateMaxLength,
|
||||
|
|
@ -3280,6 +3279,10 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||
hypervisorSnapshotReserve, cacheMode, storagePolicyID, encryptRoot);
|
||||
} else {
|
||||
diskOffering = _diskOfferingDao.findById(diskOfferingId);
|
||||
String diskStoragePolicyId = diskOfferingDetailsDao.getDetail(diskOfferingId, ApiConstants.STORAGE_POLICY);
|
||||
if (storagePolicyID != null && diskStoragePolicyId != null) {
|
||||
throw new InvalidParameterValueException("Storage policy cannot be defined on both compute and disk offering");
|
||||
}
|
||||
}
|
||||
if (diskOffering != null) {
|
||||
serviceOffering.setDiskOfferingId(diskOffering.getId());
|
||||
|
|
@ -3319,10 +3322,8 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||
}
|
||||
}
|
||||
|
||||
private DiskOfferingVO createDiskOfferingInternal(final long userId, final boolean isSystem, final VirtualMachine.Type vmType,
|
||||
final String name, final Integer cpu, final Integer ramSize, final Integer speed, final String displayText, final ProvisioningType typedProvisioningType, final boolean localStorageRequired,
|
||||
final boolean offerHA, final boolean limitResourceUse, final boolean volatileVm, String tags, final List<Long> domainIds, List<Long> zoneIds, final String hostTag,
|
||||
final Integer networkRate, final String deploymentPlanner, final Map<String, String> details, Long rootDiskSizeInGiB, final Boolean isCustomizedIops, Long minIops, Long maxIops,
|
||||
private DiskOfferingVO createDiskOfferingInternal(final String name, final String displayText, final ProvisioningType typedProvisioningType, final boolean localStorageRequired,
|
||||
String tags, final Map<String, String> details, Long rootDiskSizeInGiB, final Boolean isCustomizedIops, Long minIops, Long maxIops,
|
||||
Long bytesReadRate, Long bytesReadRateMax, Long bytesReadRateMaxLength,
|
||||
Long bytesWriteRate, Long bytesWriteRateMax, Long bytesWriteRateMaxLength,
|
||||
Long iopsReadRate, Long iopsReadRateMax, Long iopsReadRateMaxLength,
|
||||
|
|
@ -3383,8 +3384,8 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||
diskOffering.setHypervisorSnapshotReserve(hypervisorSnapshotReserve);
|
||||
|
||||
if ((diskOffering = _diskOfferingDao.persist(diskOffering)) != null) {
|
||||
if (details != null && !details.isEmpty()) {
|
||||
List<DiskOfferingDetailVO> diskDetailsVO = new ArrayList<DiskOfferingDetailVO>();
|
||||
if ((details != null && !details.isEmpty()) || (storagePolicyID != null)) {
|
||||
List<DiskOfferingDetailVO> diskDetailsVO = new ArrayList<>();
|
||||
// Support disk offering details for below parameters
|
||||
if (details.containsKey(Volume.BANDWIDTH_LIMIT_IN_MBPS)) {
|
||||
diskDetailsVO.add(new DiskOfferingDetailVO(diskOffering.getId(), Volume.BANDWIDTH_LIMIT_IN_MBPS, details.get(Volume.BANDWIDTH_LIMIT_IN_MBPS), false));
|
||||
|
|
@ -3392,6 +3393,11 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||
if (details.containsKey(Volume.IOPS_LIMIT)) {
|
||||
diskDetailsVO.add(new DiskOfferingDetailVO(diskOffering.getId(), Volume.IOPS_LIMIT, details.get(Volume.IOPS_LIMIT), false));
|
||||
}
|
||||
|
||||
if (storagePolicyID != null) {
|
||||
diskDetailsVO.add(new DiskOfferingDetailVO(diskOffering.getId(), ApiConstants.STORAGE_POLICY, String.valueOf(storagePolicyID), false));
|
||||
}
|
||||
|
||||
if (!diskDetailsVO.isEmpty()) {
|
||||
diskOfferingDetailsDao.saveDetails(diskDetailsVO);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2824,18 +2824,9 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
|
|||
List<Pair<Volume, Answer>> answers = new ArrayList<Pair<Volume, Answer>>();
|
||||
|
||||
for (Pair<Volume, DiskProfile> volumeDiskProfilePair : volumes) {
|
||||
String storagePolicyId = null;
|
||||
Volume volume = volumeDiskProfilePair.first();
|
||||
DiskProfile diskProfile = volumeDiskProfilePair.second();
|
||||
if (volume.getVolumeType() == Type.ROOT) {
|
||||
Long vmId = volume.getInstanceId();
|
||||
if (vmId != null) {
|
||||
VMInstanceVO vm = _vmInstanceDao.findByIdIncludingRemoved(vmId);
|
||||
storagePolicyId = _serviceOfferingDetailsDao.getDetail(vm.getServiceOfferingId(), ApiConstants.STORAGE_POLICY);
|
||||
}
|
||||
} else {
|
||||
storagePolicyId = _diskOfferingDetailsDao.getDetail(diskProfile.getDiskOfferingId(), ApiConstants.STORAGE_POLICY);
|
||||
}
|
||||
String storagePolicyId = _diskOfferingDetailsDao.getDetail(diskProfile.getDiskOfferingId(), ApiConstants.STORAGE_POLICY);
|
||||
if (StringUtils.isNotEmpty(storagePolicyId)) {
|
||||
VsphereStoragePolicyVO storagePolicyVO = _vsphereStoragePolicyDao.findById(Long.parseLong(storagePolicyId));
|
||||
List<Long> hostIds = getUpHostsInPool(pool.getId());
|
||||
|
|
|
|||
Loading…
Reference in New Issue