qemu-block
[Top][All Lists]
Advanced

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

Re: [Qemu-block] [Qemu-devel] [PATCH 2/7] qemu-img: add support for --ob


From: Eric Blake
Subject: Re: [Qemu-block] [Qemu-devel] [PATCH 2/7] qemu-img: add support for --object command line arg
Date: Tue, 22 Dec 2015 09:24:00 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0

On 12/22/2015 04:06 AM, Daniel P. Berrange wrote:
> Allow creation of user creatable object types with qemu-img
> via a --object command line arg. This will be used to supply

Does this read better as "a dash-dash-object", or "an object", in which
case you may have an article mismatch?  You can skirt the issue by
adding an adjective: "a new --object" works with either pronunciation of
"--object" :)

> passwords and/or encryption keys to the various block driver
> backends via the recently added 'secret' object type.
> 
>  # echo -n letmein > mypasswd.txt

'echo -n' is not portable; although it doesn't matter here, I tend to
favor 'printf letmein' for both its portability and for less typing.

>  # qemu-img info --object secret,id=sec0,file=mypasswd.txt \
>       ...other info args...
> 
> Signed-off-by: Daniel P. Berrange <address@hidden>
> ---
>  qemu-img-cmds.hx |  44 ++++----
>  qemu-img.c       | 300 
> +++++++++++++++++++++++++++++++++++++++++++++++++++++--
>  qemu-img.texi    |   8 ++
>  3 files changed, 322 insertions(+), 30 deletions(-)

How will libvirt discover whether qemu-img is new enough to support this
syntax?  Then again, qemu-img isn't used quite as heavily as qemu, and
the speedups we gain by using QMP instead of -help scraping on qemu
don't matter quite as much as what we can attempt with -help scraping on
qemu-img.


> @@ -94,6 +98,11 @@ static void QEMU_NORETURN help(void)
>             "\n"
>             "Command parameters:\n"
>             "  'filename' is a disk image filename\n"
> +           "  'objectdef' is a QEMU user creatable object definition. See \n"

Trailing whitespace on the user's terminal.

> +           "    the @code{qemu(1)} manual page for a description of the 
> object\n"
> +           "    properties. The only object type that it makes sense to 
> define\n"
> +           "    is the @code{secret} object, which is used to supply 
> passwords\n"
> +           "    and/or encryption keys.\n"
>             "  'fmt' is the disk image format. It is guessed automatically in 
> most cases\n"
>             "  'cache' is the cache mode used to write the output disk image, 
> the valid\n"
>             "    options are: 'none', 'writeback' (default, except for 
> convert), 'writethrough',\n"

You wrapped the text to fit in 80 source columns, but the lines below
wrapped to keep it at 80 user display columns (at the expense of longer
source text).  I'd actually lean towards the longer lines in this case,
even if we have to manually ignore checkpatch.pl.

[GNU coreutils does it like:

    printf("\
long line starting in column 0\n\
etc.");

so that you can fit much closer to 80 output characters while still
staying within 80 source columns; but I don't think we need the churn of
taking on that style]


> +static int object_create(void *opaque, QemuOpts *opts, Error **errp)
> +{
> +    Error *err = NULL;
> +    char *type = NULL;
> +    char *id = NULL;
> +    void *dummy = NULL;

Drop this.

> +    OptsVisitor *ov;
> +    QDict *pdict;

Add a Visitor *v; helper variable.

> +
> +    ov = opts_visitor_new(opts);
> +    pdict = qemu_opts_to_qdict(opts, NULL);
> +
> +    visit_start_struct(opts_get_visitor(ov), &dummy, NULL, NULL, 0, &err);

This conflicts with my pending patches:
https://lists.gnu.org/archive/html/qemu-devel/2015-12/msg03863.html

If mine go in first, you'll want this to be:

visit_start_struct(v, NULL, NULL, 0, &err);

And even if yours goes in first, you should make it look more like this,
so I don't have to fix it up after you:
https://lists.gnu.org/archive/html/qemu-devel/2015-12/msg03862.html

(since it looks like you copied from there anyways :)


> +
> +    user_creatable_add(type, id, pdict, opts_get_visitor(ov), &err);
> +    if (err) {
> +        goto out;
> +    }
> +    visit_end_struct(opts_get_visitor(ov), &err);

visit_end_struct() needs to be called unconditionally if
visit_start_struct() succeeded.  Again, if my series goes in first,
rebase it to look like my changes to vl.c; if yours goes in first, I'll
have to touch up your additions to match what I do elsewhere in my series.

> @@ -319,6 +397,13 @@ static int img_create(int argc, char **argv)
>          case 'q':
>              quiet = true;
>              break;
> +        case OPTION_OBJECT:
> +            opts = qemu_opts_parse_noisily(qemu_find_opts("object"),
> +                                           optarg, true);
> +            if (!opts) {
> +                exit(1);

Not for this patch, but maybe someday we should switch to
exit(EXIT_FAILURE) throughout the file.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

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