From bd0959517b5bdee3aaf42890faba586459528562 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 8 May 2018 15:56:49 +0530 Subject: [PATCH] hypervisor: allow Ubuntu 18.04 to be added as KVM host (#2626) This adds and allows Ubuntu 18.04 to be used as KVM host. In addition, on the UI when hypervisor version key is missing, this adds and display the host os and version detail which is useful to show the KVM host os and version. When cache mode 'none' is used for empty cdrom drives, systemvms and guest VMs fail to start on newer libvirtd such as Ubuntu bionic. The fix is ensure that cachemode is not declared when drives are empty upon starting of the VM. Similar issue logged at redhat here: https://bugzilla.redhat.com/show_bug.cgi?id=1342999 The workaround is to ensure that we don't configure cachemode for cdrom devices at all. This also fixes live VM migration issue. Signed-off-by: Rohit Yadav --- debian/control | 2 +- .../hypervisor/kvm/resource/LibvirtDomainXMLParser.java | 2 +- .../com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java | 8 ++++++-- .../kvm/resource/wrapper/LibvirtStopCommandWrapper.java | 2 +- ui/scripts/system.js | 4 ++++ 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/debian/control b/debian/control index 42d3e1a5fab..b444cfa4f44 100644 --- a/debian/control +++ b/debian/control @@ -22,7 +22,7 @@ Description: CloudStack server library Package: cloudstack-agent Architecture: all -Depends: ${python:Depends}, openjdk-8-jre-headless | java8-runtime-headless | java8-runtime, cloudstack-common (= ${source:Version}), lsb-base (>= 4.0), libcommons-daemon-java, openssh-client, qemu-kvm (>= 1.0), libvirt-bin (>= 1.2.2), uuid-runtime, iproute, ebtables, vlan, jsvc, ipset, python-libvirt, ethtool, iptables, lsb-release, init-system-helpers (>= 1.14~), aria2 +Depends: ${python:Depends}, openjdk-8-jre-headless | java8-runtime-headless | java8-runtime, cloudstack-common (= ${source:Version}), lsb-base (>= 4.0), libcommons-daemon-java, openssh-client, qemu-kvm (>= 1.0), libvirt-bin (>= 1.2.2), uuid-runtime, iproute2, ebtables, vlan, jsvc, ipset, python-libvirt, ethtool, iptables, lsb-release, init-system-helpers (>= 1.14~), aria2 Recommends: init-system-helpers Conflicts: cloud-agent, cloud-agent-libs, cloud-agent-deps, cloud-agent-scripts Description: CloudStack agent diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java index 5f2af5cbe72..2eeff88e081 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java @@ -121,7 +121,7 @@ public class LibvirtDomainXMLParser { def.defBlockBasedDisk(diskDev, diskLabel, DiskDef.DiskBus.valueOf(bus.toUpperCase())); } - if (diskCacheMode != null) { + if (StringUtils.isNotBlank(diskCacheMode)) { def.setCacheMode(DiskDef.DiskCacheMode.valueOf(diskCacheMode.toUpperCase())); } } 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 7c12c0713c5..08ece9a104e 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 @@ -819,8 +819,12 @@ public class LibvirtVMDef { diskBuilder.append(" type='" + _diskType + "'"); diskBuilder.append(">\n"); if(qemuDriver) { - diskBuilder.append(" ret = SshHelper.sshExecute(command.getControlIp(), 3922, "root", pemFile, null,"mv -f "+CMDLINE_PATH+" "+CMDLINE_BACKUP_PATH); + Pair ret = SshHelper.sshExecute(command.getControlIp(), 3922, "root", pemFile, null,"cp -f "+CMDLINE_PATH+" "+CMDLINE_BACKUP_PATH); if(!ret.first()){ s_logger.debug("Failed to backup cmdline file due to "+ret.second()); } diff --git a/ui/scripts/system.js b/ui/scripts/system.js index d5b997600dd..ef944d958db 100755 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -17484,6 +17484,10 @@ item.powerstate = item.outofbandmanagement.powerstate; } + if (!item.hypervisorversion && item.details && item.details["Host.OS"]) { + item.hypervisorversion = item.details["Host.OS"] + " " + item.details["Host.OS.Version"]; + } + if (item && item.hostha) { item.hastate = item.hostha.hastate; item.haprovider = item.hostha.haprovider;