]> xenbits.xensource.com Git - libvirt.git/commitdiff
vmx: Adapt to emptyBackingString for cdrom-image
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 7 Jan 2016 08:51:55 +0000 (09:51 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 25 Jan 2016 07:34:23 +0000 (08:34 +0100)
https://bugzilla.redhat.com/show_bug.cgi?id=1266088

We are missing this value for cdrom-image device. It seems like
there's no added value to extend this to other types of disk
devices [1].

1: https://www.redhat.com/archives/libvir-list/2016-January/msg01038.html

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
src/vmx/vmx.c
tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.vmx [new file with mode: 0644]
tests/vmx2xmldata/vmx2xml-cdrom-ide-empty.xml [new file with mode: 0644]
tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.vmx [new file with mode: 0644]
tests/vmx2xmldata/vmx2xml-cdrom-scsi-empty.xml [new file with mode: 0644]
tests/vmx2xmltest.c
tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.vmx [new file with mode: 0644]
tests/xml2vmxdata/xml2vmx-cdrom-ide-empty.xml [new file with mode: 0644]
tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.vmx [new file with mode: 0644]
tests/xml2vmxdata/xml2vmx-cdrom-scsi-empty.xml [new file with mode: 0644]
tests/xml2vmxtest.c

index d1cdad32ea24f303a85fa3687e64f9bd5cd27215..4fd0a1d9bcd2b0ea0d887279e57ca13b75de7ca3 100644 (file)
@@ -2234,6 +2234,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
                 (*def)->transient = STRCASEEQ(mode,
                                               "independent-nonpersistent");
         } else if (virFileHasSuffix(fileName, ".iso") ||
+                   STREQ(fileName, "emptyBackingString") ||
                    (deviceType &&
                     (STRCASEEQ(deviceType, "atapi-cdrom") ||
                      STRCASEEQ(deviceType, "cdrom-raw") ||
@@ -2319,6 +2320,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 +3537,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 if (def->device == VIR_DOMAIN_DISK_DEVICE_CDROM) {
+            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 (file)
index 0000000..62fdb3d
--- /dev/null
@@ -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 (file)
index 0000000..e086379
--- /dev/null
@@ -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='cdrom'>
+      <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 (file)
index 0000000..3c6036a
--- /dev/null
@@ -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 (file)
index 0000000..56ad678
--- /dev/null
@@ -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='cdrom'>
+      <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>
index 0bbf055c06661d8967eb2b45fb946da11d0871c4..a22af75ed4394d26a75b5d72677a3d282d7009d0 100644 (file)
@@ -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 (file)
index 0000000..45c7950
--- /dev/null
@@ -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 (file)
index 0000000..219603e
--- /dev/null
@@ -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 (file)
index 0000000..1097cb1
--- /dev/null
@@ -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 (file)
index 0000000..a5a6d80
--- /dev/null
@@ -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>
index 32bad5fc98f44428daec0f89f6afc180ce17ce0d..d970240fbf4a6a589f21bf3dd78455d220df29ca 100644 (file)
@@ -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);