From 849049a2f0eac8f889dbb96bd77ea569e8901a48 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Fri, 18 Jul 2014 16:40:09 -0600 Subject: [PATCH] KVM: Allow changing VM video card via agent.properties. This change in LibvirtVMDef can also be leveraged to add the option to service offering or template hardware selection (as nic and disk types do). --- .../resource/LibvirtComputingResource.java | 10 +++++++++ .../hypervisor/kvm/resource/LibvirtVMDef.java | 22 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 2ebab780931..627c1fdac6a 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -230,6 +230,7 @@ import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.InterfaceDef.guestNetType; import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.SerialDef; import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.TermPolicy; import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.VirtioSerialDef; +import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.VideoDef; import com.cloud.hypervisor.kvm.storage.KVMPhysicalDisk; import com.cloud.hypervisor.kvm.storage.KVMStoragePool; import com.cloud.hypervisor.kvm.storage.KVMStoragePoolManager; @@ -450,6 +451,8 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv protected String _guestCpuMode; protected String _guestCpuModel; protected boolean _noKvmClock; + protected String _videoHw; + protected int _videoRam; private final Map _pifs = new HashMap(); private final Map _vmStats = new ConcurrentHashMap(); @@ -800,6 +803,10 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv _noMemBalloon = true; } + _videoHw = (String) params.get("vm.video.hardware"); + value = (String) params.get("vm.video.ram"); + _videoRam = NumbersUtil.parseInt(value, 0); + value = (String)params.get("host.reserved.mem.mb"); _dom0MinMem = NumbersUtil.parseInt(value, 0) * 1024 * 1024; @@ -3747,6 +3754,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv devices.addDevice(vserial); } + VideoDef videoCard = new VideoDef(_videoHw, _videoRam); + devices.addDevice(videoCard); + ConsoleDef console = new ConsoleDef("pty", null, null, (short)0); devices.addDevice(console); diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java index 8084035d84e..6b29e9cf943 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java @@ -1060,6 +1060,28 @@ public class LibvirtVMDef { } } + public static class VideoDef { + private String _videoModel; + private int _videoRam; + + public VideoDef(String videoModel, int videoRam) { + _videoModel = videoModel; + _videoRam = videoRam; + } + + @Override + public String toString() { + StringBuilder videoBuilder = new StringBuilder(); + if (_videoModel != null && !_videoModel.isEmpty() && _videoRam != 0){ + videoBuilder.append("\n"); + return videoBuilder.toString(); + } + return ""; + } + } + public static class VirtioSerialDef { private final String _name; private String _path;