From: Kevin Wolf <kwolf@redhat.com>
To: "Daniel P. Berrange" <berrange@redhat.com>
Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org,
"Markus Armbruster" <armbru@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH v4 05/10] qemu-io: allow specifying image as a set of options args
Date: Wed, 27 Jan 2016 15:26:51 +0100 [thread overview]
Message-ID: <20160127142651.GC9484@noname.str.redhat.com> (raw)
In-Reply-To: <1453815262-13440-6-git-send-email-berrange@redhat.com>
Am 26.01.2016 um 14:34 hat Daniel P. Berrange geschrieben:
> Currently qemu-io 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-io https://127.0.0.1/images/centos7.iso
> qemu-io /home/berrange/demo.qcow2
>
> 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-io --image-opts driver=http,url=https://127.0.0.1/images,sslverify=off
> qemu-io --image-opts file=/home/berrange/demo.qcow2
>
> This flag is mutually exclusive with the '-f' flag.
>
> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> ---
> qemu-io.c | 34 +++++++++++++++++++++++++++++++++-
> 1 file changed, 33 insertions(+), 1 deletion(-)
>
> diff --git a/qemu-io.c b/qemu-io.c
> index d1432ea..51d8272 100644
> --- a/qemu-io.c
> +++ b/qemu-io.c
> @@ -367,6 +367,7 @@ static void reenable_tty_echo(void)
>
> enum {
> OPTION_OBJECT = 256,
> + OPTION_IMAGE_OPTS = 257,
> };
>
> static QemuOptsList qemu_object_opts = {
> @@ -397,6 +398,16 @@ static int object_create(void *opaque, QemuOpts *opts, Error **errp)
> return 0;
> }
>
> +static QemuOptsList file_opts = {
> + .name = "file",
> + .implied_opt_name = "file",
> + .head = QTAILQ_HEAD_INITIALIZER(file_opts.head),
> + .desc = {
> + /* no elements => accept any params */
> + { /* end of list */ }
> + },
> +};
> +
> int main(int argc, char **argv)
> {
> int readonly = 0;
> @@ -416,6 +427,7 @@ int main(int argc, char **argv)
> { "cache", 1, NULL, 't' },
> { "trace", 1, NULL, 'T' },
> { "object", 1, NULL, OPTION_OBJECT },
> + { "image-opts", 0, NULL, OPTION_IMAGE_OPTS },
> { NULL, 0, NULL, 0 }
> };
> int c;
> @@ -424,6 +436,7 @@ int main(int argc, char **argv)
> Error *local_error = NULL;
> QDict *opts = NULL;
> QemuOpts *qopts = NULL;
> + bool imageOpts = false;
>
> #ifdef CONFIG_POSIX
> signal(SIGPIPE, SIG_IGN);
> @@ -492,6 +505,9 @@ int main(int argc, char **argv)
> exit(1);
> }
> break;
> + case OPTION_IMAGE_OPTS:
> + imageOpts = true;
> + break;
> default:
> usage(progname);
> exit(1);
> @@ -534,7 +550,23 @@ int main(int argc, char **argv)
> flags |= BDRV_O_RDWR;
> }
>
> - if ((argc - optind) == 1) {
> + if (imageOpts) {
> + char *file;
> + qopts = qemu_opts_parse_noisily(&file_opts, argv[optind], false);
> + if (!qopts) {
> + exit(1);
> + }
> + if (opts) {
> + error_report("--image-opts and -f are mutually exclusive");
> + exit(1);
> + }
> + file = g_strdup(qemu_opt_get(qopts, "file"));
> + qemu_opt_unset(qopts, "file");
I'm not sure if special casing "file" is a good idea. I think you're
doing it in order to support something that looks like -drive, but it's
not the same anyway - all of the options that are parsed in drive_new()
or blockdev_init() aren't supported.
We could change things so that qemu-io actually goes through
drive_new() or blockdev_init(), at the cost of forbidding node
references for the "file" options like -drive unfortunately does. Or we
can require that you use actual bdrv_open() options and specify
file.filename=... for raw-posix.
But I would like to avoid creating a new type of option parsing with yet
another behaviour.
> + opts = qemu_opts_to_qdict(qopts, NULL);
> + qemu_opts_reset(&file_opts);
> + openfile(file, flags, opts);
> + g_free(file);
> + } else if ((argc - optind) == 1) {
> openfile(argv[optind], flags, opts);
> }
> command_loop();
Kevin
next prev parent reply other threads:[~2016-01-27 14:27 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-26 13:34 [Qemu-devel] [PATCH v4 00/10] Make qemu-img/qemu-nbd/qemu-io CLI more flexible Daniel P. Berrange
2016-01-26 13:34 ` [Qemu-devel] [PATCH v4 01/10] qom: add helpers for UserCreatable object types Daniel P. Berrange
2016-01-26 13:34 ` [Qemu-devel] [PATCH v4 02/10] qemu-img: add support for --object command line arg Daniel P. Berrange
2016-01-27 13:26 ` Kevin Wolf
2016-02-02 10:45 ` Daniel P. Berrange
2016-01-26 13:34 ` [Qemu-devel] [PATCH v4 03/10] qemu-nbd: " Daniel P. Berrange
2016-01-27 13:57 ` Kevin Wolf
2016-02-02 11:40 ` Daniel P. Berrange
2016-01-26 13:34 ` [Qemu-devel] [PATCH v4 04/10] qemu-io: " Daniel P. Berrange
2016-01-26 13:34 ` [Qemu-devel] [PATCH v4 05/10] qemu-io: allow specifying image as a set of options args Daniel P. Berrange
2016-01-27 14:26 ` Kevin Wolf [this message]
2016-02-02 10:13 ` Daniel P. Berrange
2016-01-26 13:34 ` [Qemu-devel] [PATCH v4 06/10] qemu-nbd: " Daniel P. Berrange
2016-01-26 13:34 ` [Qemu-devel] [PATCH v4 07/10] qemu-img: " Daniel P. Berrange
2016-01-27 14:30 ` Kevin Wolf
2016-02-02 11:40 ` Daniel P. Berrange
2016-01-26 13:34 ` [Qemu-devel] [PATCH v4 08/10] qemu-nbd: don't overlap long option values with short options Daniel P. Berrange
2016-01-26 13:34 ` [Qemu-devel] [PATCH v4 09/10] qemu-nbd: use no_argument/required_argument constants Daniel P. Berrange
2016-01-26 13:34 ` [Qemu-devel] [PATCH v4 10/10] qemu-io: " Daniel P. Berrange
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160127142651.GC9484@noname.str.redhat.com \
--to=kwolf@redhat.com \
--cc=afaerber@suse.de \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.