]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
storage: Adjust qemu-img switches check
authorJohn Ferlan <jferlan@redhat.com>
Tue, 31 May 2016 14:53:18 +0000 (10:53 -0400)
committerJohn Ferlan <jferlan@redhat.com>
Tue, 21 Jun 2016 18:31:19 +0000 (14:31 -0400)
Since we support QEMU 0.12 and later, checking for support of specific flags
added prior to that isn't necessary.

Thus start with the base of having the "-o options" available for the
qemu-img create option and then determine whether we have the compat
option for qcow2 files (which would be necessary up through qemu 2.0
where the default changes to compat 0.11).

Adjust test to no long check for NONE and FLAG options as well was removing
results of tests that would use that option.

Signed-off-by: John Ferlan <jferlan@redhat.com>
src/storage/storage_backend.c
tests/storagevolxml2argvdata/qcow2-flag.argv [deleted file]
tests/storagevolxml2argvdata/qcow2-nobacking-convert-flag.argv [deleted file]
tests/storagevolxml2argvdata/qcow2-nobacking-convert-none.argv [deleted file]
tests/storagevolxml2argvdata/qcow2-nobacking-flag.argv [deleted file]
tests/storagevolxml2argvdata/qcow2-nobacking-none.argv [deleted file]
tests/storagevolxml2argvdata/qcow2-none.argv [deleted file]
tests/storagevolxml2argvtest.c

index 8f03a6ec879e48b8822b11abb526a39141f2379d..7ef9ecd511f5576b9368e0885c29f915fc99d1dc 100644 (file)
@@ -869,10 +869,15 @@ virStoragePloopResize(virStorageVolDefPtr vol,
     return ret;
 }
 
+/* Flag values shared w/ storagevolxml2argvtest.c.
+ *
+ * QEMU_IMG_BACKING_FORMAT_OPTIONS (added in qemu 0.11)
+ * QEMU_IMG_BACKING_FORMAT_OPTIONS_COMPAT
+ *    was made necessary due to 2.0 change to change the default
+ *    qcow2 file format from 0.10 to 1.1.
+ */
 enum {
-    QEMU_IMG_BACKING_FORMAT_NONE = 0,
-    QEMU_IMG_BACKING_FORMAT_FLAG,
-    QEMU_IMG_BACKING_FORMAT_OPTIONS,
+    QEMU_IMG_BACKING_FORMAT_OPTIONS = 0,
     QEMU_IMG_BACKING_FORMAT_OPTIONS_COMPAT,
 };
 
@@ -904,46 +909,18 @@ virStorageBackendQemuImgSupportsCompat(const char *qemuimg)
 static int
 virStorageBackendQEMUImgBackingFormat(const char *qemuimg)
 {
-    char *help = NULL;
-    char *start;
-    char *end;
-    char *tmp;
-    int ret = -1;
-    int exitstatus;
-    virCommandPtr cmd = virCommandNewArgList(qemuimg, "-h", NULL);
-
-    virCommandAddEnvString(cmd, "LC_ALL=C");
-    virCommandSetOutputBuffer(cmd, &help);
-    virCommandClearCaps(cmd);
-
-    /* qemuimg doesn't return zero exit status on -h,
-     * therefore we need to provide pointer for storing
-     * exit status, although we don't parse it any later */
-    if (virCommandRun(cmd, &exitstatus) < 0)
-        goto cleanup;
-
-    if ((start = strstr(help, " create ")) == NULL ||
-        (end = strstr(start, "\n")) == NULL) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       _("unable to parse qemu-img output '%s'"),
-                       help);
-        goto cleanup;
-    }
-    if (((tmp = strstr(start, "-F fmt")) && tmp < end) ||
-        ((tmp = strstr(start, "-F backing_fmt")) && tmp < end)) {
-        ret = QEMU_IMG_BACKING_FORMAT_FLAG;
-    } else if ((tmp = strstr(start, "[-o options]")) && tmp < end) {
-        if (virStorageBackendQemuImgSupportsCompat(qemuimg))
-            ret = QEMU_IMG_BACKING_FORMAT_OPTIONS_COMPAT;
-        else
-            ret = QEMU_IMG_BACKING_FORMAT_OPTIONS;
-    } else {
-        ret = QEMU_IMG_BACKING_FORMAT_NONE;
-    }
+    /* As of QEMU 0.11 the [-o options] support was added via qemu
+     * commit id '9ea2ea71', so we start with that base and figure
+     * out what else we have */
+    int ret = QEMU_IMG_BACKING_FORMAT_OPTIONS;
+
+    /* QEMU 2.0 changed to using a format that only QEMU 1.1 and newer
+     * understands. Since we still support QEMU 0.12 and newer, we need
+     * to be able to handle the previous format as can be set via a
+     * compat=0.10 option. */
+    if (virStorageBackendQemuImgSupportsCompat(qemuimg))
+        ret = QEMU_IMG_BACKING_FORMAT_OPTIONS_COMPAT;
 
- cleanup:
-    virCommandFree(cmd);
-    VIR_FREE(help);
     return ret;
 }
 
@@ -1218,29 +1195,17 @@ virStorageBackendCreateQemuImgCmdFromVol(virConnectPtr conn,
     if (info.backingPath)
         virCommandAddArgList(cmd, "-b", info.backingPath, NULL);
 
-    if (imgformat >= QEMU_IMG_BACKING_FORMAT_OPTIONS) {
-        if (info.format == VIR_STORAGE_FILE_QCOW2 && !info.compat &&
-            imgformat == QEMU_IMG_BACKING_FORMAT_OPTIONS_COMPAT)
-            info.compat = "0.10";
+    if (info.format == VIR_STORAGE_FILE_QCOW2 && !info.compat &&
+        imgformat >= QEMU_IMG_BACKING_FORMAT_OPTIONS_COMPAT)
+        info.compat = "0.10";
 
-        if (virStorageBackendCreateQemuImgOpts(&opts, info) < 0) {
-            virCommandFree(cmd);
-            return NULL;
-        }
-        if (opts)
-            virCommandAddArgList(cmd, "-o", opts, NULL);
-        VIR_FREE(opts);
-    } else {
-        if (info.backingPath) {
-            if (imgformat == QEMU_IMG_BACKING_FORMAT_FLAG)
-                virCommandAddArgList(cmd, "-F", backingType, NULL);
-            else
-                VIR_DEBUG("Unable to set backing store format for %s with %s",
-                          info.path, create_tool);
-        }
-        if (info.encryption)
-            virCommandAddArg(cmd, "-e");
+    if (virStorageBackendCreateQemuImgOpts(&opts, info) < 0) {
+        virCommandFree(cmd);
+        return NULL;
     }
+    if (opts)
+        virCommandAddArgList(cmd, "-o", opts, NULL);
+    VIR_FREE(opts);
 
     if (info.inputPath)
         virCommandAddArg(cmd, info.inputPath);
diff --git a/tests/storagevolxml2argvdata/qcow2-flag.argv b/tests/storagevolxml2argvdata/qcow2-flag.argv
deleted file mode 100644 (file)
index 5f87ad5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-qemu-img create -f qcow2 -b /dev/null -F raw \
--e /var/lib/libvirt/images/OtherDemo.img 5242880K
diff --git a/tests/storagevolxml2argvdata/qcow2-nobacking-convert-flag.argv b/tests/storagevolxml2argvdata/qcow2-nobacking-convert-flag.argv
deleted file mode 100644 (file)
index 57bdd4a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-qemu-img convert -f raw -O qcow2 -e /var/lib/libvirt/images/sparse.img \
-/var/lib/libvirt/images/OtherDemo.img
diff --git a/tests/storagevolxml2argvdata/qcow2-nobacking-convert-none.argv b/tests/storagevolxml2argvdata/qcow2-nobacking-convert-none.argv
deleted file mode 100644 (file)
index 57bdd4a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-qemu-img convert -f raw -O qcow2 -e /var/lib/libvirt/images/sparse.img \
-/var/lib/libvirt/images/OtherDemo.img
diff --git a/tests/storagevolxml2argvdata/qcow2-nobacking-flag.argv b/tests/storagevolxml2argvdata/qcow2-nobacking-flag.argv
deleted file mode 100644 (file)
index 62ad85f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-qemu-img create -f qcow2 -e /var/lib/libvirt/images/OtherDemo.img 5242880K
diff --git a/tests/storagevolxml2argvdata/qcow2-nobacking-none.argv b/tests/storagevolxml2argvdata/qcow2-nobacking-none.argv
deleted file mode 100644 (file)
index 62ad85f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-qemu-img create -f qcow2 -e /var/lib/libvirt/images/OtherDemo.img 5242880K
diff --git a/tests/storagevolxml2argvdata/qcow2-none.argv b/tests/storagevolxml2argvdata/qcow2-none.argv
deleted file mode 100644 (file)
index 10b7175..0000000
+++ /dev/null
@@ -1 +0,0 @@
-qemu-img create -f qcow2 -b /dev/null -e /var/lib/libvirt/images/OtherDemo.img 5242880K
index 8934471632b3ac7cdee21c9086248a1cdae5afa8..ccfe9abc1d8988805ae8c68423ffb1642c929439 100644 (file)
@@ -168,9 +168,7 @@ testCompareXMLToArgvHelper(const void *data)
 }
 
 enum {
-    FMT_NONE = 0,
-    FMT_FLAG,
-    FMT_OPTIONS,
+    FMT_OPTIONS = 0,
     FMT_COMPAT,
 };
 
@@ -217,24 +215,6 @@ mymain(void)
     DO_TEST_FAIL("pool-dir", "vol-qcow2",
                  "pool-dir", "vol-file",
                  "qcow2-convert-prealloc", flags, FMT_OPTIONS);
-    DO_TEST("pool-dir", "vol-qcow2",
-            NULL, NULL,
-            "qcow2-flag", 0, FMT_FLAG);
-    DO_TEST("pool-dir", "vol-qcow2-nobacking",
-            NULL, NULL,
-            "qcow2-nobacking-flag", 0, FMT_FLAG);
-    DO_TEST("pool-dir", "vol-qcow2-nobacking",
-            "pool-dir", "vol-file",
-            "qcow2-nobacking-convert-flag", 0, FMT_FLAG);
-    DO_TEST("pool-dir", "vol-qcow2",
-            NULL, NULL,
-            "qcow2-none", 0, FMT_NONE);
-    DO_TEST("pool-dir", "vol-qcow2-nobacking",
-            NULL, NULL,
-            "qcow2-nobacking-none", 0, FMT_NONE);
-    DO_TEST("pool-dir", "vol-qcow2-nobacking",
-            "pool-dir", "vol-file",
-            "qcow2-nobacking-convert-none", 0, FMT_NONE);
     DO_TEST("pool-dir", "vol-qcow2-lazy",
             NULL, NULL,
             "qcow2-lazy", 0, FMT_OPTIONS);