If user creates virtual machine via virt-manager and select "boot from ISO" then in libvirt we can see the following devices section <disk type="file" device="disk"> <source file="/var/lib/libvirt/images/generic.img"/> <target dev="hda" bus="ide"/> </disk> <disk type="file" device="cdrom"> <source file="/var/lib/libvirt/images/Fedora-Live-Xfce-x86_64-23-10.iso"/> <target dev="hdb" bus="ide"/> <readonly/> </disk> These devices don't have disk->format parameter, so we should allow to add disks with format = VIR_STORAGE_FILE_NONE. If user select boot from HDD and add new Cdrom device then we see <disk type="file" device="cdrom"> <target dev="hdb" bus="ide"/> <readonly/> </disk> Cdrom device doesn't have disk->source parameter, it means that user did select "attach to real device" or "use ISO". So we should not return error if we get device with empty source path. --- diff from v1: Add commit description Move this commit to patch series src/vz/vz_sdk.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c index c5f8edd..1fcfb2e 100644 --- a/src/vz/vz_sdk.c +++ b/src/vz/vz_sdk.c @@ -2026,8 +2026,9 @@ prlsdkCheckUnsupportedParams(PRL_HANDLE sdkdom, virDomainDefPtr def) } if (!IS_CT(def)) { - if (def->os.nBootDevs != 1 || - def->os.bootDevs[0] != VIR_DOMAIN_BOOT_DISK || + if (def->os.nBootDevs == 0 || + (def->os.bootDevs[0] != VIR_DOMAIN_BOOT_DISK && + def->os.bootDevs[0] != VIR_DOMAIN_BOOT_CDROM) || def->os.init != NULL || def->os.initargv != NULL) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", @@ -3192,11 +3193,12 @@ static int prlsdkAddDisk(PRL_HANDLE sdkdom, if (disk->src->type == VIR_STORAGE_TYPE_FILE) { if (disk->device == VIR_DOMAIN_DISK_DEVICE_DISK && - virDomainDiskGetFormat(disk) != VIR_STORAGE_FILE_PLOOP) { + (virDomainDiskGetFormat(disk) != VIR_STORAGE_FILE_PLOOP && + virDomainDiskGetFormat(disk) != VIR_STORAGE_FILE_NONE)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Invalid format of " - "disk %s, vz driver supports only " - "images in ploop format."), disk->src->path); + "disk %s, it should be either not set or " + "ploop format."), disk->src->path); goto cleanup; } @@ -3218,11 +3220,13 @@ static int prlsdkAddDisk(PRL_HANDLE sdkdom, pret = PrlVmDev_SetEmulatedType(sdkdisk, emutype); prlsdkCheckRetGoto(pret, cleanup); - pret = PrlVmDev_SetSysName(sdkdisk, disk->src->path); - prlsdkCheckRetGoto(pret, cleanup); + if (disk->src->path != NULL) { + pret = PrlVmDev_SetSysName(sdkdisk, disk->src->path); + prlsdkCheckRetGoto(pret, cleanup); - pret = PrlVmDev_SetFriendlyName(sdkdisk, disk->src->path); - prlsdkCheckRetGoto(pret, cleanup); + pret = PrlVmDev_SetFriendlyName(sdkdisk, disk->src->path); + prlsdkCheckRetGoto(pret, cleanup); + } drive = &disk->info.addr.drive; if (drive->controller > 0) { -- 1.8.3.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list