summaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorMarkus Armbruster2017-03-28 10:56:04 +0200
committerJeff Cody2017-03-28 15:53:16 +0200
commitcbf036b4f3da48c2be6865eed4896acbd4149bc6 (patch)
tree636e5341e2f7cff492bd5830fd0b4e87d71a6880 /block
parentrbd: Don't accept -drive driver=rbd, keyvalue-pairs=... (diff)
downloadqemu-cbf036b4f3da48c2be6865eed4896acbd4149bc6.tar.gz
qemu-cbf036b4f3da48c2be6865eed4896acbd4149bc6.tar.xz
qemu-cbf036b4f3da48c2be6865eed4896acbd4149bc6.zip
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.c38
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,