On 01/14/2013 11:59 PM, Michal Privoznik wrote:
---
tools/virsh-volume.c | 368 +++++++++++++++++++++++++++++++++++++++------------
1 file changed, 286 insertions(+), 82 deletions(-)
diff --git a/tools/virsh-volume.c b/tools/virsh-volume.c
index a57fc28..e17d946 100644
--- a/tools/virsh-volume.c
+++ b/tools/virsh-volume.c
@@ -112,21 +112,47 @@ static const vshCmdInfo info_vol_create_as[] = {
};
static const vshCmdOptDef opts_vol_create_as[] = {
- {"pool", VSH_OT_DATA, VSH_OFLAG_REQ, N_("pool name")},
- {"name", VSH_OT_DATA, VSH_OFLAG_REQ, N_("name of the volume")},
- {"capacity", VSH_OT_DATA, VSH_OFLAG_REQ,
- N_("size of the vol, as scaled integer (default bytes)")},
- {"allocation", VSH_OT_STRING, 0,
- N_("initial allocation size, as scaled integer (default bytes)")},
- {"format", VSH_OT_STRING, 0,
- N_("file format type raw,bochs,qcow,qcow2,qed,vmdk")},
- {"backing-vol", VSH_OT_STRING, 0,
- N_("the backing volume if taking a snapshot")},
- {"backing-vol-format", VSH_OT_STRING, 0,
- N_("format of backing volume if taking a snapshot")},
- {"prealloc-metadata", VSH_OT_BOOL, 0, N_("preallocate metadata (for
qcow2 "
- "instead of full allocation)")},
- {NULL, 0, 0, NULL}
+ {.name = "pool",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("pool name")
+ },
+ {.name = "name",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("name of the volume")
+ },
+ {.name = "capacity",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("size of the vol, as scaled integer (default bytes)")
+ },
+ {.name = "allocation",
+ .type = VSH_OT_STRING,
+ .flags = 0,
+ .help = N_("initial allocation size, as scaled integer (default bytes)")
+ },
+ {.name = "format",
+ .type = VSH_OT_STRING,
+ .flags = 0,
+ .help = N_("file format type raw,bochs,qcow,qcow2,qed,vmdk")
+ },
+ {.name = "backing-vol",
+ .type = VSH_OT_STRING,
+ .flags = 0,
+ .help = N_("the backing volume if taking a snapshot")
+ },
+ {.name = "backing-vol-format",
+ .type = VSH_OT_STRING,
+ .flags = 0,
+ .help = N_("format of backing volume if taking a snapshot")
+ },
+ {.name = "prealloc-metadata",
+ .type = VSH_OT_BOOL,
+ .flags = 0,
+ .help = N_("preallocate metadata (for qcow2 instead of full
allocation)")
+ },
+ {.name = NULL}
};
static int
@@ -290,11 +316,22 @@ static const vshCmdInfo info_vol_create[] = {
};
static const vshCmdOptDef opts_vol_create[] = {
- {"pool", VSH_OT_DATA, VSH_OFLAG_REQ, N_("pool name")},
- {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("file containing an XML vol
description")},
- {"prealloc-metadata", VSH_OT_BOOL, 0, N_("preallocate metadata (for
qcow2 "
- "instead of full allocation)")},
- {NULL, 0, 0, NULL}
+ {.name = "pool",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("pool name")
+ },
+ {.name = "file",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("file containing an XML vol description")
+ },
+ {.name = "prealloc-metadata",
+ .type = VSH_OT_BOOL,
+ .flags = 0,
+ .help = N_("preallocate metadata (for qcow2 instead of full
allocation)")
+ },
+ {.name = NULL}
};
static bool
@@ -349,13 +386,32 @@ static const vshCmdInfo info_vol_create_from[] = {
};
static const vshCmdOptDef opts_vol_create_from[] = {
- {"pool", VSH_OT_DATA, VSH_OFLAG_REQ, N_("pool name or uuid")},
- {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("file containing an XML vol
description")},
- {"vol", VSH_OT_DATA, VSH_OFLAG_REQ, N_("input vol name or
key")},
- {"inputpool", VSH_OT_STRING, 0, N_("pool name or uuid of the input
volume's pool")},
- {"prealloc-metadata", VSH_OT_BOOL, 0, N_("preallocate metadata (for
qcow2 "
- "instead of full allocation)")},
- {NULL, 0, 0, NULL}
+ {.name = "pool",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("pool name or uuid")
+ },
+ {.name = "file",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("file containing an XML vol description")
+ },
+ {.name = "vol",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("input vol name or key")
+ },
+ {.name = "inputpool",
+ .type = VSH_OT_STRING,
+ .flags = 0,
+ .help = N_("pool name or uuid of the input volume's pool")
+ },
+ {.name = "prealloc-metadata",
+ .type = VSH_OT_BOOL,
+ .flags = 0,
+ .help = N_("preallocate metadata (for qcow2 instead of full
allocation)")
+ },
+ {.name = NULL}
};
static bool
@@ -446,12 +502,27 @@ static const vshCmdInfo info_vol_clone[] = {
};
static const vshCmdOptDef opts_vol_clone[] = {
- {"vol", VSH_OT_DATA, VSH_OFLAG_REQ, N_("orig vol name or
key")},
- {"newname", VSH_OT_DATA, VSH_OFLAG_REQ, N_("clone name")},
- {"pool", VSH_OT_STRING, 0, N_("pool name or uuid")},
- {"prealloc-metadata", VSH_OT_BOOL, 0, N_("preallocate metadata (for
qcow2 "
- "instead of full allocation)")},
- {NULL, 0, 0, NULL}
+ {.name = "vol",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("orig vol name or key")
+ },
+ {.name = "newname",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("clone name")
+ },
+ {.name = "pool",
+ .type = VSH_OT_STRING,
+ .flags = 0,
+ .help = N_("pool name or uuid")
+ },
+ {.name = "prealloc-metadata",
+ .type = VSH_OT_BOOL,
+ .flags = 0,
+ .help = N_("preallocate metadata (for qcow2 instead of full
allocation)")
+ },
+ {.name = NULL}
};
static bool
@@ -525,12 +596,32 @@ static const vshCmdInfo info_vol_upload[] = {
};
static const vshCmdOptDef opts_vol_upload[] = {
- {"vol", VSH_OT_DATA, VSH_OFLAG_REQ, N_("vol name, key or
path")},
- {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("file")},
- {"pool", VSH_OT_STRING, 0, N_("pool name or uuid")},
- {"offset", VSH_OT_INT, 0, N_("volume offset to upload to") },
- {"length", VSH_OT_INT, 0, N_("amount of data to upload") },
- {NULL, 0, 0, NULL}
+ {.name = "vol",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("vol name, key or path")
+ },
+ {.name = "file",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("file")
+ },
+ {.name = "pool",
+ .type = VSH_OT_STRING,
+ .flags = 0,
+ .help = N_("pool name or uuid")
+ },
+ {.name = "offset",
+ .type = VSH_OT_INT,
+ .flags = 0,
+ .help = N_("volume offset to upload to")
+ },
+ {.name = "length",
+ .type = VSH_OT_INT,
+ .flags = 0,
+ .help = N_("amount of data to upload")
+ },
+ {.name = NULL}
};
static int
@@ -620,12 +711,32 @@ static const vshCmdInfo info_vol_download[] = {
};
static const vshCmdOptDef opts_vol_download[] = {
- {"vol", VSH_OT_DATA, VSH_OFLAG_REQ, N_("vol name, key or
path")},
- {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("file")},
- {"pool", VSH_OT_STRING, 0, N_("pool name or uuid")},
- {"offset", VSH_OT_INT, 0, N_("volume offset to download from")
},
- {"length", VSH_OT_INT, 0, N_("amount of data to download") },
- {NULL, 0, 0, NULL}
+ {.name = "vol",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("vol name, key or path")
+ },
+ {.name = "file",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("file")
+ },
+ {.name = "pool",
+ .type = VSH_OT_STRING,
+ .flags = 0,
+ .help = N_("pool name or uuid")
+ },
+ {.name = "offset",
+ .type = VSH_OT_INT,
+ .flags = 0,
+ .help = N_("volume offset to download from")
+ },
+ {.name = "length",
+ .type = VSH_OT_INT,
+ .flags = 0,
+ .help = N_("amount of data to download")
+ },
+ {.name = NULL}
};
static bool
@@ -713,9 +824,17 @@ static const vshCmdInfo info_vol_delete[] = {
};
static const vshCmdOptDef opts_vol_delete[] = {
- {"vol", VSH_OT_DATA, VSH_OFLAG_REQ, N_("vol name, key or
path")},
- {"pool", VSH_OT_STRING, 0, N_("pool name or uuid")},
- {NULL, 0, 0, NULL}
+ {.name = "vol",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("vol name, key or path")
+ },
+ {.name = "pool",
+ .type = VSH_OT_STRING,
+ .flags = 0,
+ .help = N_("pool name or uuid")
+ },
+ {.name = NULL}
};
static bool
@@ -750,10 +869,22 @@ static const vshCmdInfo info_vol_wipe[] = {
};
static const vshCmdOptDef opts_vol_wipe[] = {
- {"vol", VSH_OT_DATA, VSH_OFLAG_REQ, N_("vol name, key or
path")},
- {"pool", VSH_OT_STRING, 0, N_("pool name or uuid")},
- {"algorithm", VSH_OT_STRING, 0, N_("perform selected wiping
algorithm")},
- {NULL, 0, 0, NULL}
+ {.name = "vol",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("vol name, key or path")
+ },
+ {.name = "pool",
+ .type = VSH_OT_STRING,
+ .flags = 0,
+ .help = N_("pool name or uuid")
+ },
+ {.name = "algorithm",
+ .type = VSH_OT_STRING,
+ .flags = 0,
+ .help = N_("perform selected wiping algorithm")
+ },
+ {.name = NULL}
};
VIR_ENUM_DECL(virStorageVolWipeAlgorithm)
@@ -814,9 +945,17 @@ static const vshCmdInfo info_vol_info[] = {
};
static const vshCmdOptDef opts_vol_info[] = {
- {"vol", VSH_OT_DATA, VSH_OFLAG_REQ, N_("vol name, key or
path")},
- {"pool", VSH_OT_STRING, 0, N_("pool name or uuid")},
- {NULL, 0, 0, NULL}
+ {.name = "vol",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("vol name, key or path")
+ },
+ {.name = "pool",
+ .type = VSH_OT_STRING,
+ .flags = 0,
+ .help = N_("pool name or uuid")
+ },
+ {.name = NULL}
};
static bool
@@ -878,16 +1017,37 @@ static const vshCmdInfo info_vol_resize[] = {
};
static const vshCmdOptDef opts_vol_resize[] = {
- {"vol", VSH_OT_DATA, VSH_OFLAG_REQ, N_("vol name, key or
path")},
- {"capacity", VSH_OT_DATA, VSH_OFLAG_REQ,
- N_("new capacity for the vol, as scaled integer (default bytes)")},
- {"pool", VSH_OT_STRING, 0, N_("pool name or uuid")},
- {"allocate", VSH_OT_BOOL, 0,
- N_("allocate the new capacity, rather than leaving it sparse")},
- {"delta", VSH_OT_BOOL, 0,
- N_("use capacity as a delta to current size, rather than the new
size")},
- {"shrink", VSH_OT_BOOL, 0, N_("allow the resize to shrink the
volume")},
- {NULL, 0, 0, NULL}
+ {.name = "vol",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("vol name, key or path")
+ },
+ {.name = "capacity",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("new capacity for the vol, as scaled integer (default
bytes)")
+ },
+ {.name = "pool",
+ .type = VSH_OT_STRING,
+ .flags = 0,
+ .help = N_("pool name or uuid")
+ },
+ {.name = "allocate",
+ .type = VSH_OT_BOOL,
+ .flags = 0,
+ .help = N_("allocate the new capacity, rather than leaving it sparse")
+ },
+ {.name = "delta",
+ .type = VSH_OT_BOOL,
+ .flags = 0,
+ .help = N_("use capacity as a delta to current size, rather than the new
size")
+ },
+ {.name = "shrink",
+ .type = VSH_OT_BOOL,
+ .flags = 0,
+ .help = N_("allow the resize to shrink the volume")
+ },
+ {.name = NULL}
};
static bool
@@ -960,9 +1120,17 @@ static const vshCmdInfo info_vol_dumpxml[] = {
};
static const vshCmdOptDef opts_vol_dumpxml[] = {
- {"vol", VSH_OT_DATA, VSH_OFLAG_REQ, N_("vol name, key or
path")},
- {"pool", VSH_OT_STRING, 0, N_("pool name or uuid")},
- {NULL, 0, 0, NULL}
+ {.name = "vol",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("vol name, key or path")
+ },
+ {.name = "pool",
+ .type = VSH_OT_STRING,
+ .flags = 0,
+ .help = N_("pool name or uuid")
+ },
+ {.name = NULL}
};
static bool
@@ -1122,9 +1290,17 @@ static const vshCmdInfo info_vol_list[] = {
};
static const vshCmdOptDef opts_vol_list[] = {
- {"pool", VSH_OT_DATA, VSH_OFLAG_REQ, N_("pool name or uuid")},
- {"details", VSH_OT_BOOL, 0, N_("display extended details for
volumes")},
- {NULL, 0, 0, NULL}
+ {.name = "pool",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("pool name or uuid")
+ },
+ {.name = "details",
+ .type = VSH_OT_BOOL,
+ .flags = 0,
+ .help = N_("display extended details for volumes")
+ },
+ {.name = NULL}
};
static bool
@@ -1391,8 +1567,12 @@ static const vshCmdInfo info_vol_name[] = {
};
static const vshCmdOptDef opts_vol_name[] = {
- {"vol", VSH_OT_DATA, VSH_OFLAG_REQ, N_("volume key or path")},
- {NULL, 0, 0, NULL}
+ {.name = "vol",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("volume key or path")
+ },
+ {.name = NULL}
};
static bool
@@ -1419,9 +1599,17 @@ static const vshCmdInfo info_vol_pool[] = {
};
static const vshCmdOptDef opts_vol_pool[] = {
- {"uuid", VSH_OT_BOOL, 0, N_("return the pool uuid rather than pool
name")},
- {"vol", VSH_OT_DATA, VSH_OFLAG_REQ, N_("volume key or path")},
- {NULL, 0, 0, NULL}
+ {.name = "uuid",
+ .type = VSH_OT_BOOL,
+ .flags = 0,
+ .help = N_("return the pool uuid rather than pool name")
+ },
+ {.name = "vol",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("volume key or path")
+ },
+ {.name = NULL}
};
static bool
@@ -1471,9 +1659,17 @@ static const vshCmdInfo info_vol_key[] = {
};
static const vshCmdOptDef opts_vol_key[] = {
- {"vol", VSH_OT_DATA, VSH_OFLAG_REQ, N_("volume name or path")},
- {"pool", VSH_OT_STRING, 0, N_("pool name or uuid")},
- {NULL, 0, 0, NULL}
+ {.name = "vol",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("volume name or path")
+ },
+ {.name = "pool",
+ .type = VSH_OT_STRING,
+ .flags = 0,
+ .help = N_("pool name or uuid")
+ },
+ {.name = NULL}
};
static bool
@@ -1499,9 +1695,17 @@ static const vshCmdInfo info_vol_path[] = {
};
static const vshCmdOptDef opts_vol_path[] = {
- {"vol", VSH_OT_DATA, VSH_OFLAG_REQ, N_("volume name or key")},
- {"pool", VSH_OT_STRING, 0, N_("pool name or uuid")},
- {NULL, 0, 0, NULL}
+ {.name = "vol",
+ .type = VSH_OT_DATA,
+ .flags = VSH_OFLAG_REQ,
+ .help = N_("volume name or key")
+ },
+ {.name = "pool",
+ .type = VSH_OT_STRING,
+ .flags = 0,
+ .help = N_("pool name or uuid")
+ },
+ {.name = NULL}
};
static bool
ACK