mirror of https://github.com/apache/cloudstack.git
backport patch from master to 2.1.x, to solve the vm don't boot on latest fedora.
This commit is contained in:
parent
a6ec285114
commit
c9d6ac7082
|
|
@ -2091,12 +2091,12 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
isoPath = isoVol.getPath();
|
||||
|
||||
diskDef iso = new diskDef();
|
||||
iso.defFileBasedDisk(isoPath, "hdc", diskDef.diskBus.IDE);
|
||||
iso.defFileBasedDisk(isoPath, "hdc", diskDef.diskBus.IDE, diskDef.diskFmtType.RAW);
|
||||
iso.setDeviceType(diskDef.deviceType.CDROM);
|
||||
isoXml = iso.toString();
|
||||
} else {
|
||||
diskDef iso = new diskDef();
|
||||
iso.defFileBasedDisk(null, "hdc", diskDef.diskBus.IDE);
|
||||
iso.defFileBasedDisk(null, "hdc", diskDef.diskBus.IDE, diskDef.diskFmtType.RAW);
|
||||
iso.setDeviceType(diskDef.deviceType.CDROM);
|
||||
isoXml = iso.toString();
|
||||
}
|
||||
|
|
@ -2148,9 +2148,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
diskDef disk = new diskDef();
|
||||
String guestOSType = getGuestType(vmName);
|
||||
if (isGuestPVEnabled(guestOSType)) {
|
||||
disk.defFileBasedDisk(sourceFile, diskDev, diskDef.diskBus.VIRTIO);
|
||||
disk.defFileBasedDisk(sourceFile, diskDev, diskDef.diskBus.VIRTIO, diskDef.diskFmtType.QCOW2);
|
||||
} else {
|
||||
disk.defFileBasedDisk(sourceFile, diskDev, diskDef.diskBus.SCSI);
|
||||
disk.defFileBasedDisk(sourceFile, diskDev, diskDef.diskBus.SCSI, diskDef.diskFmtType.QCOW2);
|
||||
}
|
||||
String xml = disk.toString();
|
||||
return attachOrDetachDevice(attach, vmName, xml);
|
||||
|
|
@ -2931,11 +2931,11 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
String datadiskPath = tmplVol.getKey();
|
||||
|
||||
diskDef hda = new diskDef();
|
||||
hda.defFileBasedDisk(rootkPath, "hda", diskDef.diskBus.IDE);
|
||||
hda.defFileBasedDisk(rootkPath, "hda", diskDef.diskBus.IDE, diskDef.diskFmtType.QCOW2);
|
||||
disks.add(hda);
|
||||
|
||||
diskDef hdb = new diskDef();
|
||||
hdb.defFileBasedDisk(datadiskPath, "hdb", diskDef.diskBus.IDE);
|
||||
hdb.defFileBasedDisk(datadiskPath, "hdb", diskDef.diskBus.IDE, diskDef.diskFmtType.RAW);
|
||||
disks.add(hdb);
|
||||
|
||||
return disks;
|
||||
|
|
@ -2970,25 +2970,24 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
|
||||
|
||||
diskDef hda = new diskDef();
|
||||
hda.defFileBasedDisk(rootVolume.getPath(), "hda", diskBusType);
|
||||
hda.defFileBasedDisk(rootVolume.getPath(), "hda", diskBusType, diskDef.diskFmtType.QCOW2);
|
||||
disks.add(hda);
|
||||
|
||||
/*Centos doesn't support scsi hotplug. For other host OSes, we attach the disk after the vm is running, so that we can hotplug it.*/
|
||||
if (dataVolume != null) {
|
||||
diskDef hdb = new diskDef();
|
||||
hdb.defFileBasedDisk(dataVolume.getPath(), "hdb", diskBusType);
|
||||
hdb.defFileBasedDisk(dataVolume.getPath(), "hdb", diskBusType, diskDef.diskFmtType.QCOW2);
|
||||
if (!isCentosHost()) {
|
||||
hdb.setAttachDeferred(true);
|
||||
}
|
||||
disks.add(hdb);
|
||||
}
|
||||
|
||||
if (isoPath != null) {
|
||||
diskDef hdc = new diskDef();
|
||||
hdc.defFileBasedDisk(isoPath, "hdc", diskDef.diskBus.IDE);
|
||||
hdc.setDeviceType(diskDef.deviceType.CDROM);
|
||||
disks.add(hdc);
|
||||
}
|
||||
|
||||
diskDef hdc = new diskDef();
|
||||
hdc.defFileBasedDisk(isoPath, "hdc", diskDef.diskBus.IDE, diskDef.diskFmtType.RAW);
|
||||
hdc.setDeviceType(diskDef.deviceType.CDROM);
|
||||
disks.add(hdc);
|
||||
|
||||
return disks;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ public class LibvirtVMDef {
|
|||
private String _initrd;
|
||||
private String _root;
|
||||
private String _cmdline;
|
||||
|
||||
private List<bootOrder> _bootdevs = new ArrayList<bootOrder>();
|
||||
private String _machine;
|
||||
public void setGuestType (guestType type) {
|
||||
|
|
@ -79,6 +80,7 @@ public class LibvirtVMDef {
|
|||
public void setBootOrder(bootOrder order) {
|
||||
_bootdevs.add(order);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString () {
|
||||
if (_type == guestType.KVM) {
|
||||
|
|
@ -249,10 +251,25 @@ public class LibvirtVMDef {
|
|||
}
|
||||
}
|
||||
|
||||
enum diskFmtType {
|
||||
RAW("raw"),
|
||||
QCOW2("qcow2");
|
||||
String _fmtType;
|
||||
diskFmtType(String fmt) {
|
||||
_fmtType = fmt;
|
||||
}
|
||||
@Override
|
||||
public String toString() {
|
||||
return _fmtType;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private deviceType _deviceType; /*floppy, disk, cdrom*/
|
||||
private diskType _diskType;
|
||||
private String _sourcePath;
|
||||
private String _diskLabel;
|
||||
private diskFmtType _diskFmtType;
|
||||
private diskBus _bus;
|
||||
private boolean _readonly = false;
|
||||
private boolean _shareable = false;
|
||||
|
|
@ -260,13 +277,13 @@ public class LibvirtVMDef {
|
|||
public void setDeviceType(deviceType deviceType) {
|
||||
_deviceType = deviceType;
|
||||
}
|
||||
public void defFileBasedDisk(String filePath, String diskLabel, diskBus bus) {
|
||||
public void defFileBasedDisk(String filePath, String diskLabel, diskBus bus, diskFmtType diskFmtType) {
|
||||
_diskType = diskType.FILE;
|
||||
_deviceType = deviceType.DISK;
|
||||
_sourcePath = filePath;
|
||||
_diskLabel = diskLabel;
|
||||
_bus = bus;
|
||||
|
||||
_diskFmtType = diskFmtType;
|
||||
}
|
||||
public void defBlockBasedDisk(String diskName, String diskLabel, diskBus bus) {
|
||||
_diskType = diskType.BLOCK;
|
||||
|
|
@ -302,6 +319,8 @@ public class LibvirtVMDef {
|
|||
}
|
||||
diskBuilder.append(" type='" + _diskType + "'");
|
||||
diskBuilder.append(">\n");
|
||||
diskBuilder.append("<driver name='qemu'" + " type='" + _diskFmtType + "'/>\n");
|
||||
|
||||
if (_diskType == diskType.FILE) {
|
||||
diskBuilder.append("<source ");
|
||||
if (_sourcePath != null) {
|
||||
|
|
@ -599,11 +618,11 @@ public class LibvirtVMDef {
|
|||
devices.setEmulatorPath("/usr/bin/qemu-kvm");
|
||||
|
||||
diskDef hda = new diskDef();
|
||||
hda.defFileBasedDisk("/path/to/hda1", "hda", diskDef.diskBus.IDE);
|
||||
hda.defFileBasedDisk("/path/to/hda1", "hda", diskDef.diskBus.IDE, diskDef.diskFmtType.RAW);
|
||||
devices.addDevice(hda);
|
||||
|
||||
diskDef hdb = new diskDef();
|
||||
hdb.defFileBasedDisk("/path/to/hda2", "hdb", diskDef.diskBus.IDE);
|
||||
hdb.defFileBasedDisk("/path/to/hda2", "hdb", diskDef.diskBus.IDE, diskDef.diskFmtType.RAW);
|
||||
devices.addDevice(hdb);
|
||||
|
||||
interfaceDef pubNic = new interfaceDef();
|
||||
|
|
|
|||
Loading…
Reference in New Issue