From cdebe25258767f1c334286a5f6d514c4e1ba09e4 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 25 Aug 2023 09:43:06 +0200 Subject: [PATCH 1/2] server: throw new exception when rootdisksize is required but not set --- .../api/command/user/vm/DeployVMCmd.java | 4 ++-- .../main/java/com/cloud/vm/UserVmManagerImpl.java | 15 +++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java index ef6dba63166d..107bd8175165 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java @@ -315,8 +315,8 @@ public Map getDetails() { customparameterMap.put(getBootType().toString(), getBootMode().toString()); } - if (rootdisksize != null && !customparameterMap.containsKey("rootdisksize")) { - customparameterMap.put("rootdisksize", rootdisksize.toString()); + if (rootdisksize != null && !customparameterMap.containsKey(VmDetailConstants.ROOT_DISK_SIZE)) { + customparameterMap.put(VmDetailConstants.ROOT_DISK_SIZE, rootdisksize.toString()); } IoDriverPolicy ioPolicy = getIoDriverPolicy(); diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index c1840065603a..b316bf9e7f63 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -4320,7 +4320,14 @@ public boolean checkIfDynamicScalingCanBeEnabled(VirtualMachine vm, ServiceOffer */ protected long configureCustomRootDiskSize(Map customParameters, VMTemplateVO template, HypervisorType hypervisorType, DiskOfferingVO rootDiskOffering) { verifyIfHypervisorSupportsRootdiskSizeOverride(hypervisorType); - long rootDiskSizeInBytes = verifyAndGetDiskSize(rootDiskOffering, NumbersUtil.parseLong(customParameters.get(VmDetailConstants.ROOT_DISK_SIZE), -1)); + Long rootDiskSizeCustomParam = null; + if (customParameters.containsKey(VmDetailConstants.ROOT_DISK_SIZE)) { + rootDiskSizeCustomParam = NumbersUtil.parseLong(customParameters.get(VmDetailConstants.ROOT_DISK_SIZE), -1); + if (rootDiskSizeCustomParam <= 0) { + throw new InvalidParameterValueException("Root disk size should be a positive number."); + } + } + long rootDiskSizeInBytes = verifyAndGetDiskSize(rootDiskOffering, rootDiskSizeCustomParam); if (rootDiskSizeInBytes > 0) { //if the size at DiskOffering is not zero then the Service Offering had it configured, it holds priority over the User custom size _volumeService.validateVolumeSizeInBytes(rootDiskSizeInBytes); long rootDiskSizeInGiB = rootDiskSizeInBytes / GiB_TO_BYTES; @@ -4329,11 +4336,7 @@ protected long configureCustomRootDiskSize(Map customParameters, } if (customParameters.containsKey(VmDetailConstants.ROOT_DISK_SIZE)) { - Long rootDiskSize = NumbersUtil.parseLong(customParameters.get(VmDetailConstants.ROOT_DISK_SIZE), -1); - if (rootDiskSize <= 0) { - throw new InvalidParameterValueException("Root disk size should be a positive number."); - } - rootDiskSize *= GiB_TO_BYTES; + Long rootDiskSize = rootDiskSizeCustomParam * GiB_TO_BYTES; _volumeService.validateVolumeSizeInBytes(rootDiskSize); return rootDiskSize; } else { From 3c60cc21deb4057a8a0a9db2e5544a0bc062b447 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Sun, 27 Aug 2023 09:04:48 +0200 Subject: [PATCH 2/2] PR7913: fix an issue with PR6441 --- server/src/main/java/com/cloud/vm/UserVmManagerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index b316bf9e7f63..c9085b385f5f 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -3933,7 +3933,7 @@ private UserVm createVirtualMachine(DataCenter zone, ServiceOffering serviceOffe rootDiskOfferingId = diskOfferingId; diskOfferingId = null; } - if (!customParameters.containsKey(VmDetailConstants.ROOT_DISK_SIZE)) { + if (!customParameters.containsKey(VmDetailConstants.ROOT_DISK_SIZE) && diskSize != null) { customParameters.put(VmDetailConstants.ROOT_DISK_SIZE, String.valueOf(diskSize)); } }