diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ChangeOfferingForVolumeCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ChangeOfferingForVolumeCmd.java index 5a1d07ef2be..455e6cb828f 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ChangeOfferingForVolumeCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/volume/ChangeOfferingForVolumeCmd.java @@ -104,6 +104,10 @@ public class ChangeOfferingForVolumeCmd extends BaseAsyncCmd implements UserCmd return size; } + public void setSize(Long size) { + this.size = size; + } + public Long getMinIops() { return minIops; } diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 879b1e11c22..ad16555c7f5 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -2042,6 +2042,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir Long maxIopsInNewDiskOffering = null; boolean autoMigrate = false; boolean shrinkOk = false; + Long rootDiskSize = null; if (customParameters.containsKey(ApiConstants.MIN_IOPS)) { minIopsInNewDiskOffering = Long.parseLong(customParameters.get(ApiConstants.MIN_IOPS)); } @@ -2054,7 +2055,13 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir if (customParameters.containsKey(ApiConstants.SHRINK_OK)) { shrinkOk = Boolean.parseBoolean(customParameters.get(ApiConstants.SHRINK_OK)); } + if (customParameters.containsKey(ApiConstants.ROOT_DISK_SIZE)) { + rootDiskSize = Long.parseLong(customParameters.get(ApiConstants.ROOT_DISK_SIZE)); + } ChangeOfferingForVolumeCmd changeOfferingForVolumeCmd = new ChangeOfferingForVolumeCmd(rootVolumeOfVm.getId(), newDiskOffering.getId(), minIopsInNewDiskOffering, maxIopsInNewDiskOffering, autoMigrate, shrinkOk); + if (rootDiskSize != null) { + changeOfferingForVolumeCmd.setSize(rootDiskSize); + } Volume result = _volumeService.changeDiskOfferingForVolume(changeOfferingForVolumeCmd); if (result == null) { throw new CloudRuntimeException("Failed to change disk offering of the root volume"); diff --git a/ui/src/views/compute/ScaleVM.vue b/ui/src/views/compute/ScaleVM.vue index 0a0caa0cc54..235bfc97117 100644 --- a/ui/src/views/compute/ScaleVM.vue +++ b/ui/src/views/compute/ScaleVM.vue @@ -53,6 +53,16 @@ @update-compute-cpuspeed="updateFieldValue" @update-compute-memory="updateFieldValue" /> + + { + api('listTemplates', { + templatefilter: 'all', + id: this.resource.templateid + }).then(response => { + var template = response?.listtemplatesresponse?.template?.[0] || null + resolve(template) + }).catch(error => { + reject(error) + }) + }) + }, + async getMinDiskSize () { + const template = await this.getTemplate() + this.minDiskSize = Math.ceil(template?.size / (1024 * 1024 * 1024) || 0) + }, getMessage () { if (this.resource.hypervisor === 'VMware') { return this.$t('message.read.admin.guide.scaling.up') } return this.$t('message.change.offering.confirm') }, + updateIOPSValue (input, value) { + console.log(input) + const key = input === 'minIops' ? this.minIopsKey : this.maxIopsKey + this.params[key] = value + }, updateComputeOffering (id) { // Delete custom details delete this.params[this.cpuNumberKey] @@ -178,6 +218,16 @@ export default { this.params.serviceofferingid = id this.selectedOffering = this.offeringsMap[id] + api('listDiskOfferings', { + id: this.selectedOffering.diskofferingid + }).then(response => { + const diskOfferings = response.listdiskofferingsresponse.diskoffering || [] + if (this.offerings) { + this.selectedDiskOffering = diskOfferings[0] + } + }).catch(error => { + this.$notifyError(error) + }) this.params.automigrate = this.autoMigrate }, updateFieldValue (name, value) { @@ -186,6 +236,9 @@ export default { closeAction () { this.$emit('close-action') }, + handlerError (error) { + this.error = error + }, handleSubmit () { if (this.loading) return this.loading = true diff --git a/ui/src/views/compute/wizard/DiskSizeSelection.vue b/ui/src/views/compute/wizard/DiskSizeSelection.vue index a2c3695356f..9eae5d3353f 100644 --- a/ui/src/views/compute/wizard/DiskSizeSelection.vue +++ b/ui/src/views/compute/wizard/DiskSizeSelection.vue @@ -109,9 +109,9 @@ export default { fillValue () { this.inputValue = this.minDiskSize if (this.inputDecorator === 'rootdisksize') { - this.inputValue = this.preFillContent.rootdisksize ? this.preFillContent.rootdisksize : this.minDiskSize + this.inputValue = this.preFillContent?.rootdisksize ? this.preFillContent.rootdisksize : this.minDiskSize } else if (this.inputDecorator === 'size') { - this.inputValue = this.preFillContent.size ? this.preFillContent.size : this.minDiskSize + this.inputValue = this.preFillContent?.size ? this.preFillContent.size : this.minDiskSize } this.$emit('update-disk-size', this.inputDecorator, this.inputValue) },