qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] [PATCH v5 07/10] qemu-img: allow specifying image as a


From: Kevin Wolf
Subject: Re: [Qemu-block] [PATCH v5 07/10] qemu-img: allow specifying image as a set of options args
Date: Thu, 4 Feb 2016 16:42:06 +0100
User-agent: Mutt/1.5.21 (2010-09-15)

Am 02.02.2016 um 13:57 hat Daniel P. Berrange geschrieben:
> Currently qemu-img allows an image filename to be passed on the
> command line, but unless using the JSON format, it does not have
> a way to set any options except the format eg
> 
>    qemu-img info https://127.0.0.1/images/centos7.iso
> 
> This adds a --image-opts arg that indicates that the positional
> filename should be interpreted as a full option string, not
> just a filename.
> 
>    qemu-img info --image-opts 
> driver=https,url=https://127.0.0.1/images,sslverify=off
> 
> This flag is mutually exclusive with the '-f' / '-F' flags.
> 
> Signed-off-by: Daniel P. Berrange <address@hidden>

> @@ -212,9 +222,31 @@ static int print_block_option_help(const char *filename, 
> const char *fmt)
>      return 0;
>  }
>  
> -static BlockBackend *img_open(const char *id, const char *filename,
> -                              const char *fmt, int flags,
> -                              bool require_io, bool quiet)
> +static BlockBackend *img_open_opts(const char *id,
> +                                   QemuOpts *opts, int flags)
> +{
> +    QDict *options;
> +    Error *local_err = NULL;
> +    char *file = NULL;
> +    BlockBackend *blk;
> +    file = g_strdup(qemu_opt_get(opts, "file"));
> +    qemu_opt_unset(opts, "file");

Didn't we decide that we don't want to special-case "file"?

> +    options = qemu_opts_to_qdict(opts, NULL);
> +    blk = blk_new_open(id, file, NULL, options, flags, &local_err);
> +    if (!blk) {
> +        error_report("Could not open '%s': %s", file ? file : "",
> +                     error_get_pretty(local_err));
> +        g_free(file);
> +        error_free(local_err);
> +        return NULL;
> +    }
> +    g_free(file);
> +    return blk;
> +}
> +
> +static BlockBackend *img_open_file(const char *id, const char *filename,
> +                                   const char *fmt, int flags,
> +                                   bool require_io, bool quiet)
>  {
>      BlockBackend *blk;
>      BlockDriverState *bs;
> @@ -251,6 +283,33 @@ fail:
>      return NULL;
>  }
>  
> +
> +static BlockBackend *img_open(const char *id,
> +                              bool image_opts,
> +                              const char *filename,
> +                              const char *fmt, int flags,
> +                              bool require_io, bool quiet)
> +{
> +    BlockBackend *blk;
> +    if (image_opts) {
> +        QemuOpts *opts;
> +        if (fmt) {
> +            error_report("--image-opts and --format are mutually exclusive");
> +            return NULL;
> +        }
> +        opts = qemu_opts_parse_noisily(qemu_find_opts("source"),
> +                                       filename, true);
> +        if (!opts) {
> +            return NULL;
> +        }
> +        blk = img_open_opts("image", opts, flags);
> +    } else {
> +        blk = img_open_file("image", filename, fmt, flags, true, quiet);
> +    }
> +    return blk;
> +}

I think id should be passed on instead of being replaced by "image".

> @@ -1956,7 +2034,13 @@ static int img_convert(int argc, char **argv)
>          goto out;
>      }
>  
> -    out_blk = img_open("target", out_filename, out_fmt, flags, true, quiet);
> +    /* XXX we should allow --image-opts to trigger use of
> +     * img_open() here, but then we have trouble with
> +     * the bdrv_create() call which takes different params.
> +     * Not critical right now, so fix can wait...
> +     */
> +    out_blk = img_open_file("target", out_filename,
> +                            out_fmt, flags, true, quiet);

So is the plan to add another option (like --target-image-opts) when
this call is converted?

Kevin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]