From a53dcd6aa94b8aa7bae83b28df157866675d9921 Mon Sep 17 00:00:00 2001 From: Nathan Johnson Date: Tue, 8 May 2018 04:30:44 -0500 Subject: [PATCH 1/2] ceph: Fixes #2611 use raw disk type for rdb (#2623) Fix issue where kvm / ceph cannot create volumes. Fixes #2611 --- .../com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java index 792fc6958cd..64d2a0421b0 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java @@ -661,7 +661,7 @@ public class LibvirtStorageAdaptor implements StorageAdaptor { switch (pool.getType()) { case RBD: - return createPhysicalDiskByLibVirt(name, pool, format, provisioningType, size); + return createPhysicalDiskByLibVirt(name, pool, PhysicalDiskFormat.RAW, provisioningType, size); case NetworkFilesystem: case Filesystem: switch (format) { From bd0959517b5bdee3aaf42890faba586459528562 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 8 May 2018 15:56:49 +0530 Subject: [PATCH 2/2] 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;