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)) {