diff options
author | Markus Armbruster <armbru@redhat.com> | 2017-03-28 10:56:04 +0200 |
---|---|---|
committer | Jeff Cody <jcody@redhat.com> | 2017-03-28 09:53:16 -0400 |
commit | cbf036b4f3da48c2be6865eed4896acbd4149bc6 (patch) | |
tree | 636e5341e2f7cff492bd5830fd0b4e87d71a6880 /block | |
parent | 82f20e8547ce665e9bb23fdb55374840b846c143 (diff) |
rbd: Clean up runtime_opts, fix -drive to reject filename
runtime_opts is used for three different purposes:
* qemu_rbd_open() uses it to accept options it recognizes, such as
"pool" and "image". Other .bdrv_open() methods do it similarly.
* qemu_rbd_open() accepts additional list-valued options
auth-supported and server, with the help of qemu_rbd_array_opts().
The list elements are again dictionaries. qemu_rbd_array_opts()
uses runtime_opts to accept their members. Thus, runtime_opts
contains recognized sub-sub-options "auth", "host", "port" in
addition to recognized options. No other block driver does that.
* qemu_rbd_create() uses it to convert the QDict produced by
qemu_rbd_parse_filename() to QemuOpts. No other block driver does
that. The keys produced by qemu_rbd_parse_filename() are "pool",
"image", "snapshot", "conf", "user" and "keyvalue-pairs".
qemu_rbd_open() accepts these, so no additional ones here.
This is a confusing mess. Dates back to commit 0f9d252. First step
to clean it up is documenting runtime_opts.desc[]:
* Reorder entries to match the QAPI schema, like we do in other block
drivers.
* Document why the schema's "server" and "auth-supported" aren't in
.desc[].
* Document why "keyvalue-pairs", "host", "port" and "auth" are in
.desc[], but not the schema.
* Delete "filename", because none of the three users actually uses it.
This fixes -drive to reject parameter filename instead of silently
ignoring it.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Jeff Cody <jcody@redhat.com>
Message-id: 1490691368-32099-7-git-send-email-armbru@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
Diffstat (limited to 'block')
-rw-r--r-- | block/rbd.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/block/rbd.c b/block/rbd.c index 2632533a06..b2afe0732f 100644 --- a/block/rbd.c +++ b/block/rbd.c @@ -294,14 +294,14 @@ static QemuOptsList runtime_opts = { .head = QTAILQ_HEAD_INITIALIZER(runtime_opts.head), .desc = { { - .name = "filename", + .name = "pool", .type = QEMU_OPT_STRING, - .help = "Specification of the rbd image", + .help = "Rados pool name", }, { - .name = "password-secret", + .name = "image", .type = QEMU_OPT_STRING, - .help = "ID of secret providing the password", + .help = "Image name in the pool", }, { .name = "conf", @@ -309,16 +309,6 @@ static QemuOptsList runtime_opts = { .help = "Rados config file location", }, { - .name = "pool", - .type = QEMU_OPT_STRING, - .help = "Rados pool name", - }, - { - .name = "image", - .type = QEMU_OPT_STRING, - .help = "Image name in the pool", - }, - { .name = "snapshot", .type = QEMU_OPT_STRING, .help = "Ceph snapshot name", @@ -329,6 +319,19 @@ static QemuOptsList runtime_opts = { .type = QEMU_OPT_STRING, .help = "Rados id name", }, + /* + * server.* and auth-supported.* extracted manually, see + * qemu_rbd_array_opts() + */ + { + .name = "password-secret", + .type = QEMU_OPT_STRING, + .help = "ID of secret providing the password", + }, + + /* + * Keys for qemu_rbd_parse_filename(), not in the QAPI schema + */ { /* * HACK: name starts with '=' so that qemu_opts_parse() @@ -338,6 +341,13 @@ static QemuOptsList runtime_opts = { .type = QEMU_OPT_STRING, .help = "Legacy rados key/value option parameters", }, + + /* + * The remainder aren't option keys, but option sub-sub-keys, + * so that qemu_rbd_array_opts() can abuse runtime_opts for + * its own purposes + * TODO clean this up + */ { .name = "host", .type = QEMU_OPT_STRING, |