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;

Reply via email to