diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index a9d9ad09095..c924a124fa1 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -8115,17 +8115,25 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir private void updateVolume(Volume vol, VMTemplateVO template, UserVmVO userVm, DiskOffering diskOffering, Map details) { VolumeVO resizedVolume = (VolumeVO) vol; - if (userVmDetailsDao.findDetail(userVm.getId(), VmDetailConstants.ROOT_DISK_SIZE) == null && !vol.getSize().equals(template.getSize())) { - if (template.getSize() != null) { + if (template != null && template.getSize() != null) { + UserVmDetailVO vmRootDiskSizeDetail = userVmDetailsDao.findDetail(userVm.getId(), VmDetailConstants.ROOT_DISK_SIZE); + if (vmRootDiskSizeDetail == null) { resizedVolume.setSize(template.getSize()); + } else { + long rootDiskSize = Long.parseLong(vmRootDiskSizeDetail.getValue()) * GiB_TO_BYTES; + if (template.getSize() >= rootDiskSize) { + resizedVolume.setSize(template.getSize()); + userVmDetailsDao.remove(vmRootDiskSizeDetail.getId()); + } else { + resizedVolume.setSize(rootDiskSize); + } } } if (diskOffering != null) { resizedVolume.setDiskOfferingId(diskOffering.getId()); - resizedVolume.setSize(diskOffering.getDiskSize()); - if (diskOffering.isCustomized()) { - resizedVolume.setSize(vol.getSize()); + if (!diskOffering.isCustomized()) { + resizedVolume.setSize(diskOffering.getDiskSize()); } if (diskOffering.getMinIops() != null) { resizedVolume.setMinIops(diskOffering.getMinIops()); @@ -8139,6 +8147,14 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir if (StringUtils.isNumeric(details.get(VmDetailConstants.ROOT_DISK_SIZE))) { Long rootDiskSize = Long.parseLong(details.get(VmDetailConstants.ROOT_DISK_SIZE)) * GiB_TO_BYTES; resizedVolume.setSize(rootDiskSize); + UserVmDetailVO vmRootDiskSizeDetail = userVmDetailsDao.findDetail(userVm.getId(), VmDetailConstants.ROOT_DISK_SIZE); + if (vmRootDiskSizeDetail != null) { + vmRootDiskSizeDetail.setValue(details.get(VmDetailConstants.ROOT_DISK_SIZE)); + userVmDetailsDao.update(vmRootDiskSizeDetail.getId(), vmRootDiskSizeDetail); + } else { + userVmDetailsDao.persist(new UserVmDetailVO(userVm.getId(), VmDetailConstants.ROOT_DISK_SIZE, + details.get(VmDetailConstants.ROOT_DISK_SIZE), true)); + } } String minIops = details.get(MIN_IOPS); diff --git a/ui/src/config/section/compute.js b/ui/src/config/section/compute.js index db17b20ef9d..7a0644ba98f 100644 --- a/ui/src/config/section/compute.js +++ b/ui/src/config/section/compute.js @@ -612,6 +612,9 @@ export default { groupAction: true, popup: true, args: (record, store, group) => { + if (record.clustertype === 'CloudManaged') { + return [] + } return (['Admin'].includes(store.userInfo.roletype) || store.features.allowuserexpungerecovervm) ? ['cleanup', 'expunge'] : ['cleanup'] },