Repository: cloudstack Updated Branches: refs/heads/master ee150aa63 -> 4480d0515
CLOUDSTACK-9211: Support passing vRAM size to support 3D GPU on Vmware Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/656ae109 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/656ae109 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/656ae109 Branch: refs/heads/master Commit: 656ae109377e7d4400d16f05cbb4096e20a8c05b Parents: ee2ccc4 Author: nvazquez <nicolas.m.vazq...@gmail.com> Authored: Tue Jan 5 10:45:01 2016 -0800 Committer: nvazquez <nicolas.m.vazq...@gmail.com> Committed: Tue Jan 5 10:45:01 2016 -0800 ---------------------------------------------------------------------- .../vmware/resource/VmwareResource.java | 42 ++++++++++++++++++++ 1 file changed, 42 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/656ae109/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index fdbc244..7248b08 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -94,6 +94,7 @@ import com.vmware.vim25.VirtualMachinePowerState; import com.vmware.vim25.VirtualMachineRelocateSpec; import com.vmware.vim25.VirtualMachineRelocateSpecDiskLocator; import com.vmware.vim25.VirtualMachineRuntimeInfo; +import com.vmware.vim25.VirtualMachineVideoCard; import com.vmware.vim25.VmwareDistributedVirtualSwitchVlanIdSpec; import org.apache.cloudstack.storage.command.StorageSubSystemCommand; @@ -1895,6 +1896,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa postDiskConfigBeforeStart(vmMo, vmSpec, sortedDisks, ideControllerKey, scsiControllerKey, iqnToPath, hyperHost, context); + //Sets video card memory to the one provided in detail svga.vramSize (if provided), 64MB was always set before + postVideoCardMemoryConfigBeforeStart(vmMo, vmSpec); + // // Power-on VM // @@ -1943,6 +1947,44 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } } + private void postVideoCardMemoryConfigBeforeStart(VirtualMachineMO vmMo, VirtualMachineTO vmSpec) { + String paramVRamSize = "svga.vramSize"; + if (vmSpec.getDetails().containsKey(paramVRamSize)){ + String value = vmSpec.getDetails().get(paramVRamSize); + try { + long svgaVmramSize = Long.parseLong(value); + for (VirtualDevice device : vmMo.getAllDeviceList()){ + if (device instanceof VirtualMachineVideoCard){ + VirtualMachineVideoCard videoCard = (VirtualMachineVideoCard) device; + if (videoCard.getVideoRamSizeInKB().longValue() != svgaVmramSize){ + s_logger.info("Video card memory was set " + videoCard.getVideoRamSizeInKB().longValue() + "kb instead of " + svgaVmramSize + "kb"); + videoCard.setVideoRamSizeInKB(svgaVmramSize); + videoCard.setUseAutoDetect(false); + + VirtualDeviceConfigSpec arrayVideoCardConfigSpecs = new VirtualDeviceConfigSpec(); + arrayVideoCardConfigSpecs.setDevice(videoCard); + arrayVideoCardConfigSpecs.setOperation(VirtualDeviceConfigSpecOperation.EDIT); + + VirtualMachineConfigSpec changeVideoCardSpecs = new VirtualMachineConfigSpec(); + changeVideoCardSpecs.getDeviceChange().add(arrayVideoCardConfigSpecs); + + boolean res = vmMo.configureVm(changeVideoCardSpecs); + if (res) { + s_logger.info("Video card memory successfully updated to " + svgaVmramSize + "kb"); + } + } + } + } + } + catch (NumberFormatException e){ + s_logger.error("Unexpected value, cannot parse " + value + " to long due to: " + e.getMessage()); + } + catch (Exception e){ + s_logger.error("Error while reconfiguring vm due to: " + e.getMessage()); + } + } + } + private void tearDownVm(VirtualMachineMO vmMo) throws Exception{ if(vmMo == null) return;