https://bugzilla.redhat.com/show_bug.cgi?id=1266088 We are missing this value for cdrom-image device. Honestly, I have no idea whether it can happen for other disk devices too. Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> --- diff to v1: -extened support for scsi CDROM too -added formatting code -added couple of tests src/vmx/vmx.c | 38 +++++++++++++++++++++----- tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.vmx | 5 ++++ tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.xml | 23 ++++++++++++++++ tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.vmx | 6 ++++ tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.xml | 23 ++++++++++++++++ tests/vmx2xmltest.c | 3 ++ tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.vmx | 13 +++++++++ tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.xml | 13 +++++++++ tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.vmx | 14 ++++++++++ tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.xml | 13 +++++++++ tests/xml2vmxtest.c | 2 ++ 11 files changed, 146 insertions(+), 7 deletions(-) create mode 100644 tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.vmx create mode 100644 tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.xml create mode 100644 tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.vmx create mode 100644 tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.xml create mode 100644 tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.vmx create mode 100644 tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.xml create mode 100644 tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.vmx create mode 100644 tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.xml diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index d1cdad3..10fec74 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -2246,6 +2246,16 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con * call to this function to parse a CDROM device may handle it. */ goto ignore; + } else if (STREQ(fileName, "emptyBackingString")) { + if (deviceType && STRCASENEQ(deviceType, "cdrom-image")) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Expecting VMX entry '%s' to be 'cdrom-image' " + "but found '%s'"), deviceType_name, deviceType); + goto cleanup; + } + + virDomainDiskSetType(*def, VIR_STORAGE_TYPE_FILE); + ignore_value(virDomainDiskSetSource(*def, NULL)); } else { virReportError(VIR_ERR_INTERNAL_ERROR, _("Invalid or not yet handled value '%s' " @@ -2319,6 +2329,16 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con */ goto ignore; } + } else if (STREQ(fileName, "emptyBackingString")) { + if (deviceType && STRCASENEQ(deviceType, "cdrom-image")) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Expecting VMX entry '%s' to be 'cdrom-image' " + "but found '%s'"), deviceType_name, deviceType); + goto cleanup; + } + + virDomainDiskSetType(*def, VIR_STORAGE_TYPE_FILE); + ignore_value(virDomainDiskSetSource(*def, NULL)); } else { virReportError(VIR_ERR_INTERNAL_ERROR, _("Invalid or not yet handled value '%s' " @@ -3526,15 +3546,19 @@ virVMXFormatDisk(virVMXContext *ctx, virDomainDiskDefPtr def, if (type == VIR_STORAGE_TYPE_FILE) { const char *src = virDomainDiskGetSource(def); - if (src && ! virFileHasSuffix(src, fileExt)) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Image file for %s %s '%s' has " - "unsupported suffix, expecting '%s'"), - busType, deviceType, def->dst, fileExt); + if (src) { + if (!virFileHasSuffix(src, fileExt)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Image file for %s %s '%s' has " + "unsupported suffix, expecting '%s'"), + busType, deviceType, def->dst, fileExt); return -1; - } + } - fileName = ctx->formatFileName(src, ctx->opaque); + fileName = ctx->formatFileName(src, ctx->opaque); + } else { + ignore_value(VIR_STRDUP(fileName, "emptyBackingString")); + } if (fileName == NULL) return -1; diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.vmx b/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.vmx new file mode 100644 index 0000000..62fdb3d --- /dev/null +++ b/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.vmx @@ -0,0 +1,5 @@ +config.version = "8" +virtualHW.version = "4" +ide0:0.present = "true" +ide0:0.deviceType = "cdrom-image" +ide0:0.fileName = "emptyBackingString" diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.xml b/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.xml new file mode 100644 index 0000000..232200b --- /dev/null +++ b/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.xml @@ -0,0 +1,23 @@ +<domain type='vmware'> + <uuid>00000000-0000-0000-0000-000000000000</uuid> + <memory unit='KiB'>32768</memory> + <currentMemory unit='KiB'>32768</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='i686'>hvm</type> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <disk type='file' device='disk'> + <target dev='hda' bus='ide'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <controller type='ide' index='0'/> + <video> + <model type='vmvga' vram='4096'/> + </video> + </devices> +</domain> diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.vmx b/tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.vmx new file mode 100644 index 0000000..3c6036a --- /dev/null +++ b/tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.vmx @@ -0,0 +1,6 @@ +config.version = "8" +virtualHW.version = "4" +scsi0.present = "true" +scsi0:0.present = "true" +scsi0:0.deviceType = "cdrom-image" +scsi0:0.fileName = "emptyBackingString" diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.xml b/tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.xml new file mode 100644 index 0000000..f2e4c75 --- /dev/null +++ b/tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.xml @@ -0,0 +1,23 @@ +<domain type='vmware'> + <uuid>00000000-0000-0000-0000-000000000000</uuid> + <memory unit='KiB'>32768</memory> + <currentMemory unit='KiB'>32768</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='i686'>hvm</type> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <disk type='file' device='disk'> + <target dev='sda' bus='scsi'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <controller type='scsi' index='0'/> + <video> + <model type='vmvga' vram='4096'/> + </video> + </devices> +</domain> diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c index 0bbf055..a22af75 100644 --- a/tests/vmx2xmltest.c +++ b/tests/vmx2xmltest.c @@ -219,14 +219,17 @@ mymain(void) DO_TEST("harddisk-transient", "harddisk-transient"); DO_TEST("cdrom-scsi-file", "cdrom-scsi-file"); + DO_TEST("cdrom-scsi-empty", "cdrom-scsi-empty"); DO_TEST("cdrom-scsi-device", "cdrom-scsi-device"); DO_TEST("cdrom-scsi-raw-device", "cdrom-scsi-raw-device"); DO_TEST("cdrom-scsi-raw-auto-detect", "cdrom-scsi-raw-auto-detect"); DO_TEST("cdrom-scsi-passthru", "cdrom-scsi-passthru"); DO_TEST("cdrom-ide-file", "cdrom-ide-file"); + DO_TEST("cdrom-ide-empty", "cdrom-ide-empty"); DO_TEST("cdrom-ide-device", "cdrom-ide-device"); DO_TEST("cdrom-ide-raw-device", "cdrom-ide-raw-device"); DO_TEST("cdrom-ide-raw-auto-detect", "cdrom-ide-raw-auto-detect"); + DO_TEST("cdrom-ide-raw-auto-detect", "cdrom-ide-raw-auto-detect"); DO_TEST("floppy-file", "floppy-file"); DO_TEST("floppy-device", "floppy-device"); diff --git a/tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.vmx b/tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.vmx new file mode 100644 index 0000000..45c7950 --- /dev/null +++ b/tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.vmx @@ -0,0 +1,13 @@ +.encoding = "UTF-8" +config.version = "8" +virtualHW.version = "4" +guestOS = "other" +uuid.bios = "56 4d 9b ef ac d9 b4 e0-c8 f0 ae a8 b9 10 35 15" +displayName = "cdrom-ide-file" +memsize = "4" +numvcpus = "1" +ide0:0.present = "true" +ide0:0.deviceType = "cdrom-image" +ide0:0.fileName = "emptyBackingString" +floppy0.present = "false" +floppy1.present = "false" diff --git a/tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.xml b/tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.xml new file mode 100644 index 0000000..219603e --- /dev/null +++ b/tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.xml @@ -0,0 +1,13 @@ +<domain type='vmware'> + <name>cdrom-ide-file</name> + <uuid>564d9bef-acd9-b4e0-c8f0-aea8b9103515</uuid> + <memory unit='KiB'>4096</memory> + <os> + <type>hvm</type> + </os> + <devices> + <disk type='file' device='cdrom'> + <target dev='hda' bus='ide'/> + </disk> + </devices> +</domain> diff --git a/tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.vmx b/tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.vmx new file mode 100644 index 0000000..1097cb1 --- /dev/null +++ b/tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.vmx @@ -0,0 +1,14 @@ +.encoding = "UTF-8" +config.version = "8" +virtualHW.version = "4" +guestOS = "other" +uuid.bios = "56 4d 9b ef ac d9 b4 e0-c8 f0 ae a8 b9 10 35 15" +displayName = "cdrom-scsi-empty" +memsize = "4" +numvcpus = "1" +scsi0.present = "true" +scsi0:0.present = "true" +scsi0:0.deviceType = "cdrom-image" +scsi0:0.fileName = "emptyBackingString" +floppy0.present = "false" +floppy1.present = "false" diff --git a/tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.xml b/tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.xml new file mode 100644 index 0000000..a5a6d80 --- /dev/null +++ b/tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.xml @@ -0,0 +1,13 @@ +<domain type='vmware'> + <name>cdrom-scsi-empty</name> + <uuid>564d9bef-acd9-b4e0-c8f0-aea8b9103515</uuid> + <memory unit='KiB'>4096</memory> + <os> + <type>hvm</type> + </os> + <devices> + <disk type='file' device='cdrom'> + <target dev='sda' bus='scsi'/> + </disk> + </devices> +</domain> diff --git a/tests/xml2vmxtest.c b/tests/xml2vmxtest.c index 32bad5f..d970240 100644 --- a/tests/xml2vmxtest.c +++ b/tests/xml2vmxtest.c @@ -235,11 +235,13 @@ mymain(void) DO_TEST("harddisk-ide-file", "harddisk-ide-file", 4); DO_TEST("cdrom-scsi-file", "cdrom-scsi-file", 4); + DO_TEST("cdrom-scsi-empty", "cdrom-scsi-empty", 4); DO_TEST("cdrom-scsi-device", "cdrom-scsi-device", 4); DO_TEST("cdrom-scsi-raw-device", "cdrom-scsi-raw-device", 4); DO_TEST("cdrom-scsi-raw-auto-detect", "cdrom-scsi-raw-auto-detect", 4); DO_TEST("cdrom-scsi-passthru", "cdrom-scsi-passthru", 4); DO_TEST("cdrom-ide-file", "cdrom-ide-file", 4); + DO_TEST("cdrom-ide-empty", "cdrom-ide-empty", 4); DO_TEST("cdrom-ide-device", "cdrom-ide-device", 4); DO_TEST("cdrom-ide-raw-device", "cdrom-ide-raw-device", 4); DO_TEST("cdrom-ide-raw-auto-detect", "cdrom-ide-raw-auto-detect", 4); -- 2.4.10 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list