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)
},