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 <rohit.yadav@shapeblue.com>
This commit is contained in:
Rohit Yadav 2018-05-08 15:56:49 +05:30 committed by GitHub
parent a53dcd6aa9
commit bd0959517b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 13 additions and 5 deletions

2
debian/control vendored
View File

@ -22,7 +22,7 @@ Description: CloudStack server library
Package: cloudstack-agent Package: cloudstack-agent
Architecture: all 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 Recommends: init-system-helpers
Conflicts: cloud-agent, cloud-agent-libs, cloud-agent-deps, cloud-agent-scripts Conflicts: cloud-agent, cloud-agent-libs, cloud-agent-deps, cloud-agent-scripts
Description: CloudStack agent Description: CloudStack agent

View File

@ -121,7 +121,7 @@ public class LibvirtDomainXMLParser {
def.defBlockBasedDisk(diskDev, diskLabel, def.defBlockBasedDisk(diskDev, diskLabel,
DiskDef.DiskBus.valueOf(bus.toUpperCase())); DiskDef.DiskBus.valueOf(bus.toUpperCase()));
} }
if (diskCacheMode != null) { if (StringUtils.isNotBlank(diskCacheMode)) {
def.setCacheMode(DiskDef.DiskCacheMode.valueOf(diskCacheMode.toUpperCase())); def.setCacheMode(DiskDef.DiskCacheMode.valueOf(diskCacheMode.toUpperCase()));
} }
} }

View File

@ -819,8 +819,12 @@ public class LibvirtVMDef {
diskBuilder.append(" type='" + _diskType + "'"); diskBuilder.append(" type='" + _diskType + "'");
diskBuilder.append(">\n"); diskBuilder.append(">\n");
if(qemuDriver) { if(qemuDriver) {
diskBuilder.append("<driver name='qemu'" + " type='" + _diskFmtType diskBuilder.append("<driver name='qemu'" + " type='" + _diskFmtType + "' ");
+ "' cache='" + _diskCacheMode + "' ");
if (_deviceType != DeviceType.CDROM) {
diskBuilder.append("cache='" + _diskCacheMode + "' ");
}
if(_discard != null && _discard != DiscardType.IGNORE) { if(_discard != null && _discard != DiscardType.IGNORE) {
diskBuilder.append("discard='" + _discard.toString() + "' "); diskBuilder.append("discard='" + _discard.toString() + "' ");
} }

View File

@ -71,7 +71,7 @@ public final class LibvirtStopCommandWrapper extends CommandWrapper<StopCommand,
//move the command line file to backup. //move the command line file to backup.
s_logger.debug("backing up the cmdline"); s_logger.debug("backing up the cmdline");
try{ try{
Pair<Boolean, String> ret = SshHelper.sshExecute(command.getControlIp(), 3922, "root", pemFile, null,"mv -f "+CMDLINE_PATH+" "+CMDLINE_BACKUP_PATH); Pair<Boolean, String> ret = SshHelper.sshExecute(command.getControlIp(), 3922, "root", pemFile, null,"cp -f "+CMDLINE_PATH+" "+CMDLINE_BACKUP_PATH);
if(!ret.first()){ if(!ret.first()){
s_logger.debug("Failed to backup cmdline file due to "+ret.second()); s_logger.debug("Failed to backup cmdline file due to "+ret.second());
} }

View File

@ -17484,6 +17484,10 @@
item.powerstate = item.outofbandmanagement.powerstate; 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) { if (item && item.hostha) {
item.hastate = item.hostha.hastate; item.hastate = item.hostha.hastate;
item.haprovider = item.hostha.haprovider; item.haprovider = item.hostha.haprovider;