This is an automated email from the ASF dual-hosted git repository.

sureshanaparti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/main by this push:
     new 72a1c0e  [KVM] Add MV Settings for virtual GPU hardware type and 
memory (#5513)
72a1c0e is described below

commit 72a1c0e7f136795653fde45517b698ea8d1f2afb
Author: Leo (Hsueh Yu-Min) <[email protected]>
AuthorDate: Mon Oct 4 12:25:32 2021 +0800

    [KVM] Add MV Settings for virtual GPU hardware type and memory (#5513)
    
    * KVM: Add MV Settings for virtual GPU hardware type and memory
    
    * fix method createVideoDef argument in test package
    
    * add available options for KVM virtual GPU hardware VM setting
    
    * fix videoRam default value
    
    * fix _videoRam is 0, it will use default provided by libvirt
---
 api/src/main/java/com/cloud/vm/VmDetailConstants.java  |  4 ++++
 .../kvm/resource/LibvirtComputingResource.java         | 18 +++++++++++++++---
 .../cloud/hypervisor/kvm/resource/LibvirtVMDef.java    |  8 ++++++--
 .../kvm/resource/LibvirtComputingResourceTest.java     |  2 +-
 .../java/com/cloud/api/query/QueryManagerImpl.java     |  2 ++
 5 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/api/src/main/java/com/cloud/vm/VmDetailConstants.java 
b/api/src/main/java/com/cloud/vm/VmDetailConstants.java
index 512506e..bf43940 100644
--- a/api/src/main/java/com/cloud/vm/VmDetailConstants.java
+++ b/api/src/main/java/com/cloud/vm/VmDetailConstants.java
@@ -40,6 +40,10 @@ public interface VmDetailConstants {
     String KVM_VNC_PORT = "kvm.vnc.port";
     String KVM_VNC_ADDRESS = "kvm.vnc.address";
 
+    // KVM specific, custom virtual GPU hardware
+    String VIDEO_HARDWARE = "video.hardware";
+    String VIDEO_RAM = "video.ram";
+
     // Mac OSX guest specific (internal)
     String SMC_PRESENT = "smc.present";
     String FIRMWARE = "firmware";
diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 4b0b2b1..46763a1 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -2427,7 +2427,7 @@ public class LibvirtComputingResource extends 
ServerResourceBase implements Serv
 
         devices.addDevice(createChannelDef(vmTO));
         devices.addDevice(createWatchDogDef());
-        devices.addDevice(createVideoDef());
+        devices.addDevice(createVideoDef(vmTO));
         devices.addDevice(createConsoleDef());
         devices.addDevice(createGraphicDef(vmTO));
         devices.addDevice(createTabletInputDef());
@@ -2488,8 +2488,20 @@ public class LibvirtComputingResource extends 
ServerResourceBase implements Serv
         return new ConsoleDef(PTY, null, null, (short)0);
     }
 
-    protected VideoDef createVideoDef() {
-        return new VideoDef(_videoHw, _videoRam);
+    protected VideoDef createVideoDef(VirtualMachineTO vmTO) {
+        Map<String, String> details = vmTO.getDetails();
+        String videoHw = _videoHw;
+        int videoRam = _videoRam;
+        if (details != null) {
+            if (details.containsKey(VmDetailConstants.VIDEO_HARDWARE)) {
+                videoHw = details.get(VmDetailConstants.VIDEO_HARDWARE);
+            }
+            if (details.containsKey(VmDetailConstants.VIDEO_RAM)) {
+                String value = details.get(VmDetailConstants.VIDEO_RAM);
+                videoRam = NumbersUtil.parseInt(value, videoRam);
+            }
+        }
+        return new VideoDef(videoHw, videoRam);
     }
 
     protected RngDef createRngDef() {
diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
index 78d1744..d8b1d4e 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
@@ -1624,9 +1624,13 @@ public class LibvirtVMDef {
         @Override
         public String toString() {
             StringBuilder videoBuilder = new StringBuilder();
-            if (_videoModel != null && !_videoModel.isEmpty() && _videoRam != 
0){
+            if (_videoModel != null && !_videoModel.isEmpty()){
                 videoBuilder.append("<video>\n");
-                videoBuilder.append("<model type='" + _videoModel + "' vram='" 
+ _videoRam + "'/>\n");
+                if (_videoRam != 0) {
+                    videoBuilder.append("<model type='" + _videoModel + "' 
vram='" + _videoRam + "'/>\n");
+                } else {
+                    videoBuilder.append("<model type='" + _videoModel + 
"'/>\n");
+                }
                 videoBuilder.append("</video>\n");
                 return videoBuilder.toString();
             }
diff --git 
a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
 
b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
index 27399ea..c744299 100644
--- 
a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
+++ 
b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
@@ -627,7 +627,7 @@ public class LibvirtComputingResourceTest {
         libvirtComputingResourceSpy._videoRam = 200;
         libvirtComputingResourceSpy._videoHw = "vGPU";
 
-        VideoDef videoDef = libvirtComputingResourceSpy.createVideoDef();
+        VideoDef videoDef = libvirtComputingResourceSpy.createVideoDef(to);
         Document domainDoc = parse(videoDef.toString());
         assertXpath(domainDoc, "/video/model/@type", "vGPU");
         assertXpath(domainDoc, "/video/model/@vram", "200");
diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java 
b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
index 7c5a486..1a4446b 100644
--- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
@@ -3879,6 +3879,8 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
         if (HypervisorType.KVM.equals(hypervisorType)) {
             options.put(VmDetailConstants.ROOT_DISK_CONTROLLER, 
Arrays.asList("osdefault", "ide", "scsi", "virtio"));
+            options.put(VmDetailConstants.VIDEO_HARDWARE, 
Arrays.asList("cirrus", "vga", "qxl", "virtio"));
+            options.put(VmDetailConstants.VIDEO_RAM, Collections.emptyList());
         }
 
         if (HypervisorType.VMware.equals(hypervisorType)) {

Reply via email to