[
https://issues.apache.org/jira/browse/CLOUDSTACK-9604?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15890443#comment-15890443
]
ASF GitHub Bot commented on CLOUDSTACK-9604:
--------------------------------------------
Github user serg38 commented on a diff in the pull request:
https://github.com/apache/cloudstack/pull/1813#discussion_r103719599
--- Diff: server/src/com/cloud/vm/UserVmManagerImpl.java ---
@@ -3614,6 +3604,26 @@ public UserVmVO doInTransaction(TransactionStatus
status) throws InsufficientCap
});
}
+ public void validateRootDiskResize(final HypervisorType
hypervisorType, Long rootDiskSize, VMTemplateVO templateVO, UserVmVO vm, final
Map<String, String> customParameters) throws InvalidParameterValueException
+ {
+ // rootdisksize must be larger than template.
+ if ((rootDiskSize << 30) < templateVO.getSize()) {
+ Long templateVOSizeGB = templateVO.getSize() / 1024 / 1024 /
1024;
+ s_logger.error("unsupported: rootdisksize override is smaller
than template size " + templateVO.getSize() + "B (" + templateVOSizeGB + "GB)");
+ throw new InvalidParameterValueException("unsupported:
rootdisksize override is smaller than template size " + templateVO.getSize() +
"B (" + templateVOSizeGB + "GB)");
+ } else if ((rootDiskSize << 30) > templateVO.getSize()){
+ if (hypervisorType == HypervisorType.VMware &&
!vm.getDetails().get("rootDiskController").toLowerCase().contains("scsi")) {
+ s_logger.error("Found unsupported root disk controller : "
+ vm.getDetails().get("rootDiskController"));
--- End diff --
I think NPE on line 3615 is due to rootdiskcontroller might be not set for
VM. If template is imported without explicitly specifying root disk controller
than a global setting will be in effect.
> Root disk resize support for VMware and XenServer
> -------------------------------------------------
>
> Key: CLOUDSTACK-9604
> URL: https://issues.apache.org/jira/browse/CLOUDSTACK-9604
> Project: CloudStack
> Issue Type: Improvement
> Security Level: Public(Anyone can view this level - this is the
> default.)
> Reporter: Priyank Parihar
> Assignee: Priyank Parihar
> Attachments: 1.png, 2.png, 3.png
>
>
> Currently the root size of an instance is locked to that of the template.
> This creates unnecessary template duplicates, prevents the creation of a
> market place, wastes time and disk space and generally makes work more
> complicated.
> Real life example - a small VPS provider might want to offer the following
> sizes (in GB):
> 10,20,40,80,160,240,320,480,620
> That's 9 offerings.
> The template selection could look like this, including real disk space used:
> Windows 2008 ~10GB
> Windows 2008+Plesk ~15GB
> Windows 2008+MSSQL ~15GB
> Windows 2012 ~10GB
> Windows 2012+Plesk ~15GB
> Windows 2012+MSSQL ~15GB
> CentOS ~1GB
> CentOS+CPanel ~3GB
> CentOS+Virtualmin ~3GB
> CentOS+Zimbra ~3GB
> CentOS+Docker ~2GB
> Debian ~1GB
> Ubuntu LTS ~1GB
> In this case the total disk space used by templates will be 828 GB, that's
> almost 1 TB. If your storage is expensive and limited SSD this can get
> painful!
> If the root resize feature is enabled we can reduce this to under 100 GB.
> Specifications and Description
> Administrators don't want to deploy duplicate OS templates of differing
> sizes just to support different storage packages. Instead, the VM deployment
> can accept a size for the root disk and adjust the template clone
> accordingly. In addition, CloudStack already supports data disk resizing for
> existing volumes, we can extend that functionality to resize existing root
> disks.
> As mentioned, we can leverage the existing design for resizing an existing
> volume. The difference with root volumes is that we can't resize via disk
> offering, therefore we need to verify that no disk offering was passed, just
> a size. The existing enforcements of new size > existing size will still
> server their purpose.
> For deployment-based resize (ROOT volume size different from template
> size), we pass the rootdisksize parameter when the existing code allocates
> the root volume. In the process, we validate that the root disk size is >
> existing template size, and non-zero. This will persist the root volume as
> the desired size regardless of whether or not the VM is started on deploy.
> Then hypervisor specific code needs to be made to pay attention to the
> VolumeObjectTO's size attribute and use that when doing the work of cloning
> from template, rather than inheriting the template's size. This can be
> implemented one hypervisor at a time, and as such there needs to be a check
> in UserVmManagerImpl to fail unsupported hypervisors with
> InvalidParameterValueException when the rootdisksize is passed.
>
> Hypervisor specific changes
> XenServer
> Resize ROOT volume is only supported for stopped VMs
> Newly created ROOT volume will be resized after clone from template
> VMware
> Resize ROOT volume is only supported for stopped VMs.
> New size should be large then the previous size.
> Newly created ROOT volume will be resized after clone from template iff
> There is no root disk chaining.(means use Full clone)
> And Root Disk controller setting is not IDE.
> Previously created Root Volume could be resized iif
> There is no root disk chaining.
> And Root Disk controller setting is not IDE.
> Web Services APIs
> resizeVolume API call will not change, but it will accept volume UUIDs of
> root volumes in id parameter for resizing.
> deployVirtualMachine API call will allow new rootdisksize parameter to be
> passed. This parameter will be used as the disk size (in GB) when cloning
> from template.
> UI
> 1) (refer attached image 1) shows UI that resize volume option is added for
> ROOT disks.
> 2) (refer attached image 2) when user calls the resize volume on ROOT volume.
> Here only size option is shown. For DATADISK disk offerings are shown.
> 3) (refer attached image 3) when user deploys VM. New option for Root disk
> size is added.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)