On Mon, Jan 14, 2013 at 9:59 AM, Michal Privoznik <mprivozn@xxxxxxxxxx> wrote: > --- > tools/virsh-domain.c | 2299 +++++++++++++++++++++++++++++++++++++++----------- > 1 file changed, 1813 insertions(+), 486 deletions(-) > > diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c > index e91939c..8165ea6 100644 > --- a/tools/virsh-domain.c > +++ b/tools/virsh-domain.c > @@ -157,11 +157,27 @@ static const vshCmdInfo info_attach_device[] = { > }; > > static const vshCmdOptDef opts_attach_device[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("XML file")}, > - {"persistent", VSH_OT_ALIAS, 0, "config"}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "file", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("XML file") > + }, > + {.name = "persistent", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "config" > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = NULL} > }; > > static bool > @@ -219,25 +235,87 @@ static const vshCmdInfo info_attach_disk[] = { > }; > > static const vshCmdOptDef opts_attach_disk[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"source", VSH_OT_DATA, VSH_OFLAG_REQ | VSH_OFLAG_EMPTY_OK, > - N_("source of disk device")}, > - {"target", VSH_OT_DATA, VSH_OFLAG_REQ, N_("target of disk device")}, > - {"driver", VSH_OT_STRING, 0, N_("driver of disk device")}, > - {"subdriver", VSH_OT_STRING, 0, N_("subdriver of disk device")}, > - {"cache", VSH_OT_STRING, 0, N_("cache mode of disk device")}, > - {"type", VSH_OT_STRING, 0, N_("target device type")}, > - {"mode", VSH_OT_STRING, 0, N_("mode of device reading and writing")}, > - {"persistent", VSH_OT_ALIAS, 0, "config"}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {"sourcetype", VSH_OT_STRING, 0, N_("type of source (block|file)")}, > - {"serial", VSH_OT_STRING, 0, N_("serial of disk device")}, > - {"shareable", VSH_OT_BOOL, 0, N_("shareable between domains")}, > - {"rawio", VSH_OT_BOOL, 0, N_("needs rawio capability")}, > - {"address", VSH_OT_STRING, 0, N_("address of disk device")}, > - {"multifunction", VSH_OT_BOOL, 0, > - N_("use multifunction pci under specified address")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "source", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ | VSH_OFLAG_EMPTY_OK, > + .help = N_("source of disk device") > + }, > + {.name = "target", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("target of disk device") > + }, > + {.name = "driver", > + .type = VSH_OT_STRING, > + .flags = 0, > + .help = N_("driver of disk device") > + }, > + {.name = "subdriver", > + .type = VSH_OT_STRING, > + .flags = 0, > + .help = N_("subdriver of disk device") > + }, > + {.name = "cache", > + .type = VSH_OT_STRING, > + .flags = 0, > + .help = N_("cache mode of disk device") > + }, > + {.name = "type", > + .type = VSH_OT_STRING, > + .flags = 0, > + .help = N_("target device type") > + }, > + {.name = "mode", > + .type = VSH_OT_STRING, > + .flags = 0, > + .help = N_("mode of device reading and writing") > + }, > + {.name = "persistent", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "config" > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = "sourcetype", > + .type = VSH_OT_STRING, > + .flags = 0, > + .help = N_("type of source (block|file)") > + }, > + {.name = "serial", > + .type = VSH_OT_STRING, > + .flags = 0, > + .help = N_("serial of disk device") > + }, > + {.name = "shareable", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("shareable between domains") > + }, > + {.name = "rawio", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("needs rawio capability") > + }, > + {.name = "address", > + .type = VSH_OT_STRING, > + .flags = 0, > + .help = N_("address of disk device") > + }, > + {.name = "multifunction", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("use multifunction pci under specified address") > + }, > + {.name = NULL} > }; > > enum { > @@ -575,18 +653,62 @@ static const vshCmdInfo info_attach_interface[] = { > }; > > static const vshCmdOptDef opts_attach_interface[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"type", VSH_OT_DATA, VSH_OFLAG_REQ, N_("network interface type")}, > - {"source", VSH_OT_DATA, VSH_OFLAG_REQ, N_("source of network interface")}, > - {"target", VSH_OT_DATA, 0, N_("target network name")}, > - {"mac", VSH_OT_DATA, 0, N_("MAC address")}, > - {"script", VSH_OT_DATA, 0, N_("script used to bridge network interface")}, > - {"model", VSH_OT_DATA, 0, N_("model type")}, > - {"persistent", VSH_OT_ALIAS, 0, "config"}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {"inbound", VSH_OT_DATA, VSH_OFLAG_NONE, N_("control domain's incoming traffics")}, > - {"outbound", VSH_OT_DATA, VSH_OFLAG_NONE, N_("control domain's outgoing traffics")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "type", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("network interface type") > + }, > + {.name = "source", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("source of network interface") > + }, > + {.name = "target", > + .type = VSH_OT_DATA, > + .flags = 0, > + .help = N_("target network name") > + }, > + {.name = "mac", > + .type = VSH_OT_DATA, > + .flags = 0, > + .help = N_("MAC address") > + }, > + {.name = "script", > + .type = VSH_OT_DATA, > + .flags = 0, > + .help = N_("script used to bridge network interface") > + }, > + {.name = "model", > + .type = VSH_OT_DATA, > + .flags = 0, > + .help = N_("model type") > + }, > + {.name = "persistent", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "config" > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = "inbound", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_NONE, > + .help = N_("control domain's incoming traffics") > + }, > + {.name = "outbound", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_NONE, > + .help = N_("control domain's outgoing traffics") > + }, > + {.name = NULL} > }; > > /* parse inbound and outbound which are in the format of > @@ -773,9 +895,17 @@ static const vshCmdInfo info_autostart[] = { > }; > > static const vshCmdOptDef opts_autostart[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"disable", VSH_OT_BOOL, 0, N_("disable autostarting")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "disable", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("disable autostarting") > + }, > + {.name = NULL} > }; > > static bool > @@ -818,30 +948,92 @@ static const vshCmdInfo info_blkdeviotune[] = { > }; > > static const vshCmdOptDef opts_blkdeviotune[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"device", VSH_OT_DATA, VSH_OFLAG_REQ, N_("block device")}, > - {"total_bytes_sec", VSH_OT_ALIAS, 0, "total-bytes-sec"}, > - {"total-bytes-sec", VSH_OT_INT, VSH_OFLAG_NONE, > - N_("total throughput limit in bytes per second")}, > - {"read_bytes_sec", VSH_OT_ALIAS, 0, "read-bytes-sec"}, > - {"read-bytes-sec", VSH_OT_INT, VSH_OFLAG_NONE, > - N_("read throughput limit in bytes per second")}, > - {"write_bytes_sec", VSH_OT_ALIAS, 0, "write-bytes-sec"}, > - {"write-bytes-sec", VSH_OT_INT, VSH_OFLAG_NONE, > - N_("write throughput limit in bytes per second")}, > - {"total_iops_sec", VSH_OT_ALIAS, 0, "total-iops-sec"}, > - {"total-iops-sec", VSH_OT_INT, VSH_OFLAG_NONE, > - N_("total I/O operations limit per second")}, > - {"read_iops_sec", VSH_OT_ALIAS, 0, "read-iops-sec"}, > - {"read-iops-sec", VSH_OT_INT, VSH_OFLAG_NONE, > - N_("read I/O operations limit per second")}, > - {"write_iops_sec", VSH_OT_ALIAS, 0, "write-iops-sec"}, > - {"write-iops-sec", VSH_OT_INT, VSH_OFLAG_NONE, > - N_("write I/O operations limit per second")}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {"live", VSH_OT_BOOL, 0, N_("affect running domain")}, > - {"current", VSH_OT_BOOL, 0, N_("affect current domain")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "device", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("block device") > + }, > + {.name = "total_bytes_sec", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "total-bytes-sec" > + }, > + {.name = "total-bytes-sec", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("total throughput limit in bytes per second") > + }, > + {.name = "read_bytes_sec", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "read-bytes-sec" > + }, > + {.name = "read-bytes-sec", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("read throughput limit in bytes per second") > + }, > + {.name = "write_bytes_sec", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "write-bytes-sec" > + }, > + {.name = "write-bytes-sec", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("write throughput limit in bytes per second") > + }, > + {.name = "total_iops_sec", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "total-iops-sec" > + }, > + {.name = "total-iops-sec", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("total I/O operations limit per second") > + }, > + {.name = "read_iops_sec", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "read-iops-sec" > + }, > + {.name = "read-iops-sec", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("read I/O operations limit per second") > + }, > + {.name = "write_iops_sec", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "write-iops-sec" > + }, > + {.name = "write-iops-sec", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("write I/O operations limit per second") > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = "live", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect running domain") > + }, > + {.name = "current", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect current domain") > + }, > + {.name = NULL} > }; > > static bool > @@ -1038,15 +1230,37 @@ static const vshCmdInfo info_blkiotune[] = { > }; > > static const vshCmdOptDef opts_blkiotune[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"weight", VSH_OT_INT, VSH_OFLAG_NONE, > - N_("IO Weight in range [100, 1000]")}, > - {"device-weights", VSH_OT_STRING, VSH_OFLAG_NONE, > - N_("per-device IO Weights, in the form of /path/to/device,weight,...")}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {"live", VSH_OT_BOOL, 0, N_("affect running domain")}, > - {"current", VSH_OT_BOOL, 0, N_("affect current domain")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "weight", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("IO Weight in range [100, 1000]") > + }, > + {.name = "device-weights", > + .type = VSH_OT_STRING, > + .flags = VSH_OFLAG_NONE, > + .help = N_("per-device IO Weights, in the form of /path/to/device,weight,...") > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = "live", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect running domain") > + }, > + {.name = "current", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect current domain") > + }, > + {.name = NULL} > }; > > static bool > @@ -1303,21 +1517,57 @@ static const vshCmdInfo info_block_commit[] = { > }; > > static const vshCmdOptDef opts_block_commit[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"path", VSH_OT_DATA, VSH_OFLAG_REQ, N_("fully-qualified path of disk")}, > - {"bandwidth", VSH_OT_DATA, VSH_OFLAG_NONE, N_("bandwidth limit in MiB/s")}, > - {"base", VSH_OT_DATA, VSH_OFLAG_NONE, > - N_("path of base file to commit into (default bottom of chain)")}, > - {"shallow", VSH_OT_BOOL, 0, N_("use backing file of top as base")}, > - {"top", VSH_OT_DATA, VSH_OFLAG_NONE, > - N_("path of top file to commit from (default top of chain)")}, > - {"delete", VSH_OT_BOOL, 0, > - N_("delete files that were successfully committed")}, > - {"wait", VSH_OT_BOOL, 0, N_("wait for job to complete")}, > - {"verbose", VSH_OT_BOOL, 0, N_("with --wait, display the progress")}, > - {"timeout", VSH_OT_INT, VSH_OFLAG_NONE, > - N_("with --wait, abort if copy exceeds timeout (in seconds)")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "path", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("fully-qualified path of disk") > + }, > + {.name = "bandwidth", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_NONE, > + .help = N_("bandwidth limit in MiB/s") > + }, > + {.name = "base", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_NONE, > + .help = N_("path of base file to commit into (default bottom of chain)") > + }, > + {.name = "shallow", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("use backing file of top as base") > + }, > + {.name = "top", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_NONE, > + .help = N_("path of top file to commit from (default top of chain)") > + }, > + {.name = "delete", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("delete files that were successfully committed") > + }, > + {.name = "wait", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("wait for job to complete") > + }, > + {.name = "verbose", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("with --wait, display the progress") > + }, > + {.name = "timeout", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("with --wait, abort if copy exceeds timeout (in seconds)") > + }, > + {.name = NULL} > }; > > static bool > @@ -1446,22 +1696,72 @@ static const vshCmdInfo info_block_copy[] = { > }; > > static const vshCmdOptDef opts_block_copy[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"path", VSH_OT_DATA, VSH_OFLAG_REQ, N_("fully-qualified path of disk")}, > - {"dest", VSH_OT_DATA, VSH_OFLAG_REQ, N_("path of the copy to create")}, > - {"bandwidth", VSH_OT_DATA, VSH_OFLAG_NONE, N_("bandwidth limit in MiB/s")}, > - {"shallow", VSH_OT_BOOL, 0, N_("make the copy share a backing chain")}, > - {"reuse-external", VSH_OT_BOOL, 0, N_("reuse existing destination")}, > - {"raw", VSH_OT_BOOL, 0, N_("use raw destination file")}, > - {"wait", VSH_OT_BOOL, 0, N_("wait for job to reach mirroring phase")}, > - {"verbose", VSH_OT_BOOL, 0, N_("with --wait, display the progress")}, > - {"timeout", VSH_OT_INT, VSH_OFLAG_NONE, > - N_("with --wait, abort if copy exceeds timeout (in seconds)")}, > - {"pivot", VSH_OT_BOOL, 0, N_("with --wait, pivot when mirroring starts")}, > - {"finish", VSH_OT_BOOL, 0, N_("with --wait, quit when mirroring starts")}, > - {"async", VSH_OT_BOOL, 0, > - N_("with --wait, don't wait for cancel to finish")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "path", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("fully-qualified path of disk") > + }, > + {.name = "dest", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("path of the copy to create") > + }, > + {.name = "bandwidth", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_NONE, > + .help = N_("bandwidth limit in MiB/s") > + }, > + {.name = "shallow", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("make the copy share a backing chain") > + }, > + {.name = "reuse-external", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("reuse existing destination") > + }, > + {.name = "raw", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("use raw destination file") > + }, > + {.name = "wait", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("wait for job to reach mirroring phase") > + }, > + {.name = "verbose", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("with --wait, display the progress") > + }, > + {.name = "timeout", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("with --wait, abort if copy exceeds timeout (in seconds)") > + }, > + {.name = "pivot", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("with --wait, pivot when mirroring starts") > + }, > + {.name = "finish", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("with --wait, quit when mirroring starts") > + }, > + {.name = "async", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("with --wait, don't wait for cancel to finish") > + }, > + {.name = NULL} > }; > > static bool > @@ -1604,19 +1904,42 @@ static const vshCmdInfo info_block_job[] = { > }; > > static const vshCmdOptDef opts_block_job[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"path", VSH_OT_DATA, VSH_OFLAG_REQ, N_("fully-qualified path of disk")}, > - {"abort", VSH_OT_BOOL, VSH_OFLAG_NONE, > - N_("abort the active job on the specified disk")}, > - {"async", VSH_OT_BOOL, VSH_OFLAG_NONE, > - N_("don't wait for --abort to complete")}, > - {"pivot", VSH_OT_BOOL, VSH_OFLAG_NONE, > - N_("conclude and pivot a copy job")}, > - {"info", VSH_OT_BOOL, VSH_OFLAG_NONE, > - N_("get active job information for the specified disk")}, > - {"bandwidth", VSH_OT_DATA, VSH_OFLAG_NONE, > - N_("set the Bandwidth limit in MiB/s")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "path", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("fully-qualified path of disk") > + }, > + {.name = "abort", > + .type = VSH_OT_BOOL, > + .flags = VSH_OFLAG_NONE, > + .help = N_("abort the active job on the specified disk") > + }, > + {.name = "async", > + .type = VSH_OT_BOOL, > + .flags = VSH_OFLAG_NONE, > + .help = N_("don't wait for --abort to complete") > + }, > + {.name = "pivot", > + .type = VSH_OT_BOOL, > + .flags = VSH_OFLAG_NONE, > + .help = N_("conclude and pivot a copy job") > + }, > + {.name = "info", > + .type = VSH_OT_BOOL, > + .flags = VSH_OFLAG_NONE, > + .help = N_("get active job information for the specified disk") > + }, > + {.name = "bandwidth", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_NONE, > + .help = N_("set the Bandwidth limit in MiB/s") > + }, > + {.name = NULL} > }; > > static bool > @@ -1680,18 +2003,47 @@ static const vshCmdInfo info_block_pull[] = { > }; > > static const vshCmdOptDef opts_block_pull[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"path", VSH_OT_DATA, VSH_OFLAG_REQ, N_("fully-qualified path of disk")}, > - {"bandwidth", VSH_OT_DATA, VSH_OFLAG_NONE, N_("bandwidth limit in MiB/s")}, > - {"base", VSH_OT_DATA, VSH_OFLAG_NONE, > - N_("path of backing file in chain for a partial pull")}, > - {"wait", VSH_OT_BOOL, 0, N_("wait for job to finish")}, > - {"verbose", VSH_OT_BOOL, 0, N_("with --wait, display the progress")}, > - {"timeout", VSH_OT_INT, VSH_OFLAG_NONE, > - N_("with --wait, abort if pull exceeds timeout (in seconds)")}, > - {"async", VSH_OT_BOOL, 0, > - N_("with --wait, don't wait for cancel to finish")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "path", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("fully-qualified path of disk") > + }, > + {.name = "bandwidth", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_NONE, > + .help = N_("bandwidth limit in MiB/s") > + }, > + {.name = "base", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_NONE, > + .help = N_("path of backing file in chain for a partial pull") > + }, > + {.name = "wait", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("wait for job to finish") > + }, > + {.name = "verbose", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("with --wait, display the progress") > + }, > + {.name = "timeout", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("with --wait, abort if pull exceeds timeout (in seconds)") > + }, > + {.name = "async", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("with --wait, don't wait for cancel to finish") > + }, > + {.name = NULL} > }; > > static bool > @@ -1819,12 +2171,22 @@ static const vshCmdInfo info_block_resize[] = { > }; > > static const vshCmdOptDef opts_block_resize[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"path", VSH_OT_DATA, VSH_OFLAG_REQ, > - N_("Fully-qualified path of block device")}, > - {"size", VSH_OT_INT, VSH_OFLAG_REQ, > - N_("New size of the block device, as scaled integer (default KiB)")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "path", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("Fully-qualified path of block device") > + }, > + {.name = "size", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_REQ, > + .help = N_("New size of the block device, as scaled integer (default KiB)") > + }, > + {.name = NULL} > }; > > static bool > @@ -1878,13 +2240,27 @@ static const vshCmdInfo info_console[] = { > }; > > static const vshCmdOptDef opts_console[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"devname", VSH_OT_STRING, 0, N_("character device name")}, > - {"force", VSH_OT_BOOL, 0, > - N_("force console connection (disconnect already connected sessions)")}, > - {"safe", VSH_OT_BOOL, 0, > - N_("only connect if safe console handling is supported")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "devname", > + .type = VSH_OT_STRING, > + .flags = 0, > + .help = N_("character device name") > + }, > + {.name = "force", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("force console connection (disconnect already connected sessions)") > + }, > + {.name = "safe", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("only connect if safe console handling is supported") > + }, > + {.name = NULL} > }; > > static bool > @@ -1961,12 +2337,32 @@ static const vshCmdInfo info_domif_setlink[] = { > }; > > static const vshCmdOptDef opts_domif_setlink[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"interface", VSH_OT_DATA, VSH_OFLAG_REQ, N_("interface device (MAC Address)")}, > - {"state", VSH_OT_DATA, VSH_OFLAG_REQ, N_("new state of the device")}, > - {"persistent", VSH_OT_ALIAS, 0, "config"}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "interface", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("interface device (MAC Address)") > + }, > + {.name = "state", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("new state of the device") > + }, > + {.name = "persistent", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "config" > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = NULL} > }; > > static bool > @@ -2135,14 +2531,42 @@ static const vshCmdInfo info_domiftune[] = { > }; > > static const vshCmdOptDef opts_domiftune[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"interface", VSH_OT_DATA, VSH_OFLAG_REQ, N_("interface device (MAC Address)")}, > - {"inbound", VSH_OT_DATA, VSH_OFLAG_NONE, N_("control domain's incoming traffics")}, > - {"outbound", VSH_OT_DATA, VSH_OFLAG_NONE, N_("control domain's outgoing traffics")}, > - {"config", VSH_OT_BOOL, VSH_OFLAG_NONE, N_("affect next boot")}, > - {"live", VSH_OT_BOOL, VSH_OFLAG_NONE, N_("affect running domain")}, > - {"current", VSH_OT_BOOL, VSH_OFLAG_NONE, N_("affect current domain")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "interface", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("interface device (MAC Address)") > + }, > + {.name = "inbound", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_NONE, > + .help = N_("control domain's incoming traffics") > + }, > + {.name = "outbound", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_NONE, > + .help = N_("control domain's outgoing traffics") > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = VSH_OFLAG_NONE, > + .help = N_("affect next boot") > + }, > + {.name = "live", > + .type = VSH_OT_BOOL, > + .flags = VSH_OFLAG_NONE, > + .help = N_("affect running domain") > + }, > + {.name = "current", > + .type = VSH_OT_BOOL, > + .flags = VSH_OFLAG_NONE, > + .help = N_("affect current domain") > + }, > + {.name = NULL} > }; > > static bool > @@ -2328,8 +2752,12 @@ static const vshCmdInfo info_suspend[] = { > }; > > static const vshCmdOptDef opts_suspend[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = NULL} > }; > > static bool > @@ -2366,12 +2794,24 @@ static const vshCmdInfo info_dom_pm_suspend[] = { > }; > > static const vshCmdOptDef opts_dom_pm_suspend[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"duration", VSH_OT_INT, VSH_OFLAG_REQ_OPT, N_("duration in seconds")}, > - {"target", VSH_OT_STRING, VSH_OFLAG_REQ, N_("mem(Suspend-to-RAM), " > - "disk(Suspend-to-Disk), " > - "hybrid(Hybrid-Suspend)")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "duration", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_REQ_OPT, > + .help = N_("duration in seconds") > + }, > + {.name = "target", > + .type = VSH_OT_STRING, > + .flags = VSH_OFLAG_REQ, > + .help = N_("mem(Suspend-to-RAM), " > + "disk(Suspend-to-Disk), " > + "hybrid(Hybrid-Suspend)") > + }, > + {.name = NULL} > }; > > static bool > @@ -2436,8 +2876,12 @@ static const vshCmdInfo info_dom_pm_wakeup[] = { > }; > > static const vshCmdOptDef opts_dom_pm_wakeup[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = NULL} > }; > > static bool > @@ -2478,18 +2922,38 @@ static const vshCmdInfo info_undefine[] = { > }; > > static const vshCmdOptDef opts_undefine[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name or uuid")}, > - {"managed-save", VSH_OT_BOOL, 0, N_("remove domain managed state file")}, > - {"storage", VSH_OT_DATA, VSH_OFLAG_NONE, > - N_("remove associated storage volumes (comma separated list of targets " > - "or source paths) (see domblklist)")}, > - {"remove-all-storage", VSH_OT_BOOL, 0, > - N_("remove all associated storage volumes (use with caution)")}, > - {"wipe-storage", VSH_OT_BOOL, VSH_OFLAG_NONE, > - N_("wipe data on the removed volumes")}, > - {"snapshots-metadata", VSH_OT_BOOL, 0, > - N_("remove all domain snapshot metadata, if inactive")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name or uuid") > + }, > + {.name = "managed-save", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("remove domain managed state file") > + }, > + {.name = "storage", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_NONE, > + .help = N_("remove associated storage volumes (comma separated list of " > + "targets or source paths) (see domblklist)") > + }, > + {.name = "remove-all-storage", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("remove all associated storage volumes (use with caution)") > + }, > + {.name = "wipe-storage", > + .type = VSH_OT_BOOL, > + .flags = VSH_OFLAG_NONE, > + .help = N_("wipe data on the removed volumes") > + }, > + {.name = "snapshots-metadata", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("remove all domain snapshot metadata, if inactive") > + }, > + {.name = NULL} > }; > > typedef struct { > @@ -2818,18 +3282,39 @@ static const vshCmdInfo info_start[] = { > }; > > static const vshCmdOptDef opts_start[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("name of the inactive domain")}, > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("name of the inactive domain") > + }, > #ifndef WIN32 > - {"console", VSH_OT_BOOL, 0, N_("attach to console after creation")}, > + {.name = "console", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("attach to console after creation") > + }, > #endif > - {"paused", VSH_OT_BOOL, 0, N_("leave the guest paused after creation")}, > - {"autodestroy", VSH_OT_BOOL, 0, > - N_("automatically destroy the guest when virsh disconnects")}, > - {"bypass-cache", VSH_OT_BOOL, 0, > - N_("avoid file system cache when loading")}, > - {"force-boot", VSH_OT_BOOL, 0, > - N_("force fresh boot by discarding any managed save")}, > - {NULL, 0, 0, NULL} > + {.name = "paused", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("leave the guest paused after creation") > + }, > + {.name = "autodestroy", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("automatically destroy the guest when virsh disconnects") > + }, > + {.name = "bypass-cache", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("avoid file system cache when loading") > + }, > + {.name = "force-boot", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("force fresh boot by discarding any managed save") > + }, > + {.name = NULL} > }; > > static bool > @@ -2917,15 +3402,42 @@ static const vshCmdInfo info_save[] = { > }; > > static const vshCmdOptDef opts_save[] = { > - {"bypass-cache", VSH_OT_BOOL, 0, N_("avoid file system cache when saving")}, > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("where to save the data")}, > - {"xml", VSH_OT_STRING, 0, > - N_("filename containing updated XML for the target")}, > - {"running", VSH_OT_BOOL, 0, N_("set domain to be running on restore")}, > - {"paused", VSH_OT_BOOL, 0, N_("set domain to be paused on restore")}, > - {"verbose", VSH_OT_BOOL, 0, N_("display the progress of save")}, > - {NULL, 0, 0, NULL} > + {.name = "bypass-cache", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("avoid file system cache when saving") > + }, > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "file", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("where to save the data") > + }, > + {.name = "xml", > + .type = VSH_OT_STRING, > + .flags = 0, > + .help = N_("filename containing updated XML for the target") > + }, > + {.name = "running", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("set domain to be running on restore") > + }, > + {.name = "paused", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("set domain to be paused on restore") > + }, > + {.name = "verbose", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("display the progress of save") > + }, > + {.name = NULL} > }; > > static void > @@ -3140,9 +3652,17 @@ static const vshCmdInfo info_save_image_dumpxml[] = { > }; > > static const vshCmdOptDef opts_save_image_dumpxml[] = { > - {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("saved state file to read")}, > - {"security-info", VSH_OT_BOOL, 0, N_("include security sensitive information in XML dump")}, > - {NULL, 0, 0, NULL} > + {.name = "file", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("saved state file to read") > + }, > + {.name = "security-info", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("include security sensitive information in XML dump") > + }, > + {.name = NULL} > }; > > static bool > @@ -3181,12 +3701,27 @@ static const vshCmdInfo info_save_image_define[] = { > }; > > static const vshCmdOptDef opts_save_image_define[] = { > - {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("saved state file to modify")}, > - {"xml", VSH_OT_STRING, VSH_OFLAG_REQ, > - N_("filename containing updated XML for the target")}, > - {"running", VSH_OT_BOOL, 0, N_("set domain to be running on restore")}, > - {"paused", VSH_OT_BOOL, 0, N_("set domain to be paused on restore")}, > - {NULL, 0, 0, NULL} > + {.name = "file", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("saved state file to modify") > + }, > + {.name = "xml", > + .type = VSH_OT_STRING, > + .flags = VSH_OFLAG_REQ, > + .help = N_("filename containing updated XML for the target") > + }, > + {.name = "running", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("set domain to be running on restore") > + }, > + {.name = "paused", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("set domain to be paused on restore") > + }, > + {.name = NULL} > }; > > static bool > @@ -3237,10 +3772,22 @@ static const vshCmdInfo info_save_image_edit[] = { > }; > > static const vshCmdOptDef opts_save_image_edit[] = { > - {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("saved state file to edit")}, > - {"running", VSH_OT_BOOL, 0, N_("set domain to be running on restore")}, > - {"paused", VSH_OT_BOOL, 0, N_("set domain to be paused on restore")}, > - {NULL, 0, 0, NULL} > + {.name = "file", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("saved state file to edit") > + }, > + {.name = "running", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("set domain to be running on restore") > + }, > + {.name = "paused", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("set domain to be paused on restore") > + }, > + {.name = NULL} > }; > > static bool > @@ -3299,12 +3846,32 @@ static const vshCmdInfo info_managedsave[] = { > }; > > static const vshCmdOptDef opts_managedsave[] = { > - {"bypass-cache", VSH_OT_BOOL, 0, N_("avoid file system cache when saving")}, > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"running", VSH_OT_BOOL, 0, N_("set domain to be running on next start")}, > - {"paused", VSH_OT_BOOL, 0, N_("set domain to be paused on next start")}, > - {"verbose", VSH_OT_BOOL, 0, N_("display the progress of save")}, > - {NULL, 0, 0, NULL} > + {.name = "bypass-cache", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("avoid file system cache when saving") > + }, > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "running", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("set domain to be running on next start") > + }, > + {.name = "paused", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("set domain to be paused on next start") > + }, > + {.name = "verbose", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("display the progress of save") > + }, > + {.name = NULL} > }; > > static void > @@ -3403,8 +3970,12 @@ static const vshCmdInfo info_managedsaveremove[] = { > }; > > static const vshCmdOptDef opts_managedsaveremove[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = NULL} > }; > > static bool > @@ -3454,14 +4025,42 @@ static const vshCmdInfo info_schedinfo[] = { > }; > > static const vshCmdOptDef opts_schedinfo[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"set", VSH_OT_STRING, VSH_OFLAG_NONE, N_("parameter=value")}, > - {"weight", VSH_OT_INT, VSH_OFLAG_NONE, N_("weight for XEN_CREDIT")}, > - {"cap", VSH_OT_INT, VSH_OFLAG_NONE, N_("cap for XEN_CREDIT")}, > - {"current", VSH_OT_BOOL, 0, N_("get/set current scheduler info")}, > - {"config", VSH_OT_BOOL, 0, N_("get/set value to be used on next boot")}, > - {"live", VSH_OT_BOOL, 0, N_("get/set value from running domain")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "set", > + .type = VSH_OT_STRING, > + .flags = VSH_OFLAG_NONE, > + .help = N_("parameter=value") > + }, > + {.name = "weight", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("weight for XEN_CREDIT") > + }, > + {.name = "cap", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("cap for XEN_CREDIT") > + }, > + {.name = "current", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("get/set current scheduler info") > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("get/set value to be used on next boot") > + }, > + {.name = "live", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("get/set value from running domain") > + }, > + {.name = NULL} > }; > > static int > @@ -3675,14 +4274,32 @@ static const vshCmdInfo info_restore[] = { > }; > > static const vshCmdOptDef opts_restore[] = { > - {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("the state to restore")}, > - {"bypass-cache", VSH_OT_BOOL, 0, > - N_("avoid file system cache when restoring")}, > - {"xml", VSH_OT_STRING, 0, > - N_("filename containing updated XML for the target")}, > - {"running", VSH_OT_BOOL, 0, N_("restore domain into running state")}, > - {"paused", VSH_OT_BOOL, 0, N_("restore domain into paused state")}, > - {NULL, 0, 0, NULL} > + {.name = "file", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("the state to restore") > + }, > + {.name = "bypass-cache", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("avoid file system cache when restoring") > + }, > + {.name = "xml", > + .type = VSH_OT_STRING, > + .flags = 0, > + .help = N_("filename containing updated XML for the target") > + }, > + {.name = "running", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("restore domain into running state") > + }, > + {.name = "paused", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("restore domain into paused state") > + }, > + {.name = NULL} > }; > > static bool > @@ -3738,16 +4355,47 @@ static const vshCmdInfo info_dump[] = { > }; > > static const vshCmdOptDef opts_dump[] = { > - {"live", VSH_OT_BOOL, 0, N_("perform a live core dump if supported")}, > - {"crash", VSH_OT_BOOL, 0, N_("crash the domain after core dump")}, > - {"bypass-cache", VSH_OT_BOOL, 0, > - N_("avoid file system cache when saving")}, > - {"reset", VSH_OT_BOOL, 0, N_("reset the domain after core dump")}, > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("where to dump the core")}, > - {"verbose", VSH_OT_BOOL, 0, N_("display the progress of dump")}, > - {"memory-only", VSH_OT_BOOL, 0, N_("dump domain's memory only")}, > - {NULL, 0, 0, NULL} > + {.name = "live", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("perform a live core dump if supported") > + }, > + {.name = "crash", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("crash the domain after core dump") > + }, > + {.name = "bypass-cache", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("avoid file system cache when saving") > + }, > + {.name = "reset", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("reset the domain after core dump") > + }, > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "file", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("where to dump the core") > + }, > + {.name = "verbose", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("display the progress of dump") > + }, > + {.name = "memory-only", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("dump domain's memory only") > + }, > + {.name = NULL} > }; > > static void > @@ -3855,10 +4503,22 @@ static const vshCmdInfo info_screenshot[] = { > }; > > static const vshCmdOptDef opts_screenshot[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"file", VSH_OT_DATA, VSH_OFLAG_NONE, N_("where to store the screenshot")}, > - {"screen", VSH_OT_INT, VSH_OFLAG_NONE, N_("ID of a screen to take screenshot of")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "file", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_NONE, > + .help = N_("where to store the screenshot") > + }, > + {.name = "screen", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("ID of a screen to take screenshot of") > + }, > + {.name = NULL} > }; > > /** > @@ -3990,8 +4650,12 @@ static const vshCmdInfo info_resume[] = { > }; > > static const vshCmdOptDef opts_resume[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = NULL} > }; > > static bool > @@ -4025,9 +4689,17 @@ static const vshCmdInfo info_shutdown[] = { > }; > > static const vshCmdOptDef opts_shutdown[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"mode", VSH_OT_STRING, VSH_OFLAG_NONE, N_("shutdown mode: acpi|agent")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "mode", > + .type = VSH_OT_STRING, > + .flags = VSH_OFLAG_NONE, > + .help = N_("shutdown mode: acpi|agent") > + }, > + {.name = NULL} > }; > > static bool > @@ -4102,9 +4774,17 @@ static const vshCmdInfo info_reboot[] = { > }; > > static const vshCmdOptDef opts_reboot[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"mode", VSH_OT_STRING, VSH_OFLAG_NONE, N_("shutdown mode: acpi|agent")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "mode", > + .type = VSH_OT_STRING, > + .flags = VSH_OFLAG_NONE, > + .help = N_("shutdown mode: acpi|agent") > + }, > + {.name = NULL} > }; > > static bool > @@ -4174,8 +4854,12 @@ static const vshCmdInfo info_reset[] = { > }; > > static const vshCmdOptDef opts_reset[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = NULL} > }; > > static bool > @@ -4209,8 +4893,12 @@ static const vshCmdInfo info_domjobinfo[] = { > }; > > static const vshCmdOptDef opts_domjobinfo[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = NULL} > }; > > static bool > @@ -4288,8 +4976,12 @@ static const vshCmdInfo info_domjobabort[] = { > }; > > static const vshCmdOptDef opts_domjobabort[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = NULL} > }; > > static bool > @@ -4318,8 +5010,12 @@ static const vshCmdInfo info_maxvcpus[] = { > }; > > static const vshCmdOptDef opts_maxvcpus[] = { > - {"type", VSH_OT_STRING, 0, N_("domain type")}, > - {NULL, 0, 0, NULL} > + {.name = "type", > + .type = VSH_OT_STRING, > + .flags = 0, > + .help = N_("domain type") > + }, > + {.name = NULL} > }; > > static bool > @@ -4351,14 +5047,37 @@ static const vshCmdInfo info_vcpucount[] = { > }; > > static const vshCmdOptDef opts_vcpucount[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"maximum", VSH_OT_BOOL, 0, N_("get maximum cap on vcpus")}, > - {"active", VSH_OT_BOOL, 0, N_("get number of currently active vcpus")}, > - {"live", VSH_OT_BOOL, 0, N_("get value from running domain")}, > - {"config", VSH_OT_BOOL, 0, N_("get value to be used on next boot")}, > - {"current", VSH_OT_BOOL, 0, > - N_("get value according to current domain state")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "maximum", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("get maximum cap on vcpus") > + }, > + {.name = "active", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("get number of currently active vcpus") > + }, > + {.name = "live", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("get value from running domain") > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("get value to be used on next boot") > + }, > + {.name = "current", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("get value according to current domain state") > + }, > + {.name = NULL} > }; > > static bool > @@ -4551,8 +5270,12 @@ static const vshCmdInfo info_vcpuinfo[] = { > }; > > static const vshCmdOptDef opts_vcpuinfo[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = NULL} > }; > > static bool > @@ -4652,14 +5375,37 @@ static const vshCmdInfo info_vcpupin[] = { > }; > > static const vshCmdOptDef opts_vcpupin[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"vcpu", VSH_OT_INT, 0, N_("vcpu number")}, > - {"cpulist", VSH_OT_DATA, VSH_OFLAG_EMPTY_OK, > - N_("host cpu number(s) to set, or omit option to query")}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {"live", VSH_OT_BOOL, 0, N_("affect running domain")}, > - {"current", VSH_OT_BOOL, 0, N_("affect current domain")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "vcpu", > + .type = VSH_OT_INT, > + .flags = 0, > + .help = N_("vcpu number") > + }, > + {.name = "cpulist", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_EMPTY_OK, > + .help = N_("host cpu number(s) to set, or omit option to query") > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = "live", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect running domain") > + }, > + {.name = "current", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect current domain") > + }, > + {.name = NULL} > }; > > /* > @@ -4910,13 +5656,32 @@ static const vshCmdInfo info_emulatorpin[] = { > }; > > static const vshCmdOptDef opts_emulatorpin[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"cpulist", VSH_OT_DATA, VSH_OFLAG_EMPTY_OK, > - N_("host cpu number(s) to set, or omit option to query")}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {"live", VSH_OT_BOOL, 0, N_("affect running domain")}, > - {"current", VSH_OT_BOOL, 0, N_("affect current domain")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "cpulist", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_EMPTY_OK, > + .help = N_("host cpu number(s) to set, or omit option to query") > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = "live", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect running domain") > + }, > + {.name = "current", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect current domain") > + }, > + {.name = NULL} > }; > > static bool > @@ -5092,13 +5857,37 @@ static const vshCmdInfo info_setvcpus[] = { > }; > > static const vshCmdOptDef opts_setvcpus[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"count", VSH_OT_INT, VSH_OFLAG_REQ, N_("number of virtual CPUs")}, > - {"maximum", VSH_OT_BOOL, 0, N_("set maximum limit on next boot")}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {"live", VSH_OT_BOOL, 0, N_("affect running domain")}, > - {"current", VSH_OT_BOOL, 0, N_("affect current domain")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "count", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_REQ, > + .help = N_("number of virtual CPUs") > + }, > + {.name = "maximum", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("set maximum limit on next boot") > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = "live", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect running domain") > + }, > + {.name = "current", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect current domain") > + }, > + {.name = NULL} > }; > > static bool > @@ -5183,8 +5972,12 @@ static const vshCmdInfo info_cpu_compare[] = { > }; > > static const vshCmdOptDef opts_cpu_compare[] = { > - {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("file containing an XML CPU description")}, > - {NULL, 0, 0, NULL} > + {.name = "file", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("file containing an XML CPU description") > + }, > + {.name = NULL} > }; > > static bool > @@ -5280,8 +6073,12 @@ static const vshCmdInfo info_cpu_baseline[] = { > }; > > static const vshCmdOptDef opts_cpu_baseline[] = { > - {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("file containing XML CPU descriptions")}, > - {NULL, 0, 0, NULL} > + {.name = "file", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("file containing XML CPU descriptions") > + }, > + {.name = NULL} > }; > > static bool > @@ -5382,11 +6179,27 @@ static const vshCmdInfo info_cpu_stats[] = { > }; > > static const vshCmdOptDef opts_cpu_stats[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"total", VSH_OT_BOOL, 0, N_("Show total statistics only")}, > - {"start", VSH_OT_INT, 0, N_("Show statistics from this CPU")}, > - {"count", VSH_OT_INT, 0, N_("Number of shown CPUs at most")}, > - {NULL, 0, 0, NULL}, > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "total", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("Show total statistics only") > + }, > + {.name = "start", > + .type = VSH_OT_INT, > + .flags = 0, > + .help = N_("Show statistics from this CPU") > + }, > + {.name = "count", > + .type = VSH_OT_INT, > + .flags = 0, > + .help = N_("Number of shown CPUs at most") > + }, > + {.name = NULL}, > }; > > static bool > @@ -5536,13 +6349,29 @@ static const vshCmdInfo info_create[] = { > }; > > static const vshCmdOptDef opts_create[] = { > - {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("file containing an XML domain description")}, > + {.name = "file", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("file containing an XML domain description") > + }, > #ifndef WIN32 > - {"console", VSH_OT_BOOL, 0, N_("attach to console after creation")}, > + {.name = "console", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("attach to console after creation") > + }, > #endif > - {"paused", VSH_OT_BOOL, 0, N_("leave the guest paused after creation")}, > - {"autodestroy", VSH_OT_BOOL, 0, N_("automatically destroy the guest when virsh disconnects")}, > - {NULL, 0, 0, NULL} > + {.name = "paused", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("leave the guest paused after creation") > + }, > + {.name = "autodestroy", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("automatically destroy the guest when virsh disconnects") > + }, > + {.name = NULL} > }; > > static bool > @@ -5596,8 +6425,12 @@ static const vshCmdInfo info_define[] = { > }; > > static const vshCmdOptDef opts_define[] = { > - {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("file containing an XML domain description")}, > - {NULL, 0, 0, NULL} > + {.name = "file", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("file containing an XML domain description") > + }, > + {.name = NULL} > }; > > static bool > @@ -5639,9 +6472,17 @@ static const vshCmdInfo info_destroy[] = { > }; > > static const vshCmdOptDef opts_destroy[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"graceful", VSH_OT_BOOL, VSH_OFLAG_NONE, N_("terminate gracefully")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "graceful", > + .type = VSH_OT_BOOL, > + .flags = VSH_OFLAG_NONE, > + .help = N_("terminate gracefully") > + }, > + {.name = NULL} > }; > > static bool > @@ -5685,14 +6526,42 @@ static const vshCmdInfo info_desc[] = { > }; > > static const vshCmdOptDef opts_desc[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"live", VSH_OT_BOOL, 0, N_("modify/get running state")}, > - {"config", VSH_OT_BOOL, 0, N_("modify/get persistent configuration")}, > - {"current", VSH_OT_BOOL, 0, N_("modify/get current state configuration")}, > - {"title", VSH_OT_BOOL, 0, N_("modify/get the title instead of description")}, > - {"edit", VSH_OT_BOOL, 0, N_("open an editor to modify the description")}, > - {"new-desc", VSH_OT_ARGV, 0, N_("message")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "live", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("modify/get running state") > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("modify/get persistent configuration") > + }, > + {.name = "current", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("modify/get current state configuration") > + }, > + {.name = "title", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("modify/get the title instead of description") > + }, > + {.name = "edit", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("open an editor to modify the description") > + }, > + {.name = "new-desc", > + .type = VSH_OT_ARGV, > + .flags = 0, > + .help = N_("message") > + }, > + {.name = NULL} > }; > > static bool > @@ -5838,8 +6707,12 @@ static const vshCmdInfo info_inject_nmi[] = { > }; > > static const vshCmdOptDef opts_inject_nmi[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = NULL} > }; > > static bool > @@ -5868,13 +6741,27 @@ static const vshCmdInfo info_send_key[] = { > }; > > static const vshCmdOptDef opts_send_key[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"codeset", VSH_OT_STRING, VSH_OFLAG_REQ_OPT, > - N_("the codeset of keycodes, default:linux")}, > - {"holdtime", VSH_OT_INT, VSH_OFLAG_REQ_OPT, > - N_("the time (in milliseconds) how long the keys will be held")}, > - {"keycode", VSH_OT_ARGV, VSH_OFLAG_REQ, N_("the key code")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "codeset", > + .type = VSH_OT_STRING, > + .flags = VSH_OFLAG_REQ_OPT, > + .help = N_("the codeset of keycodes, default:linux") > + }, > + {.name = "holdtime", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_REQ_OPT, > + .help = N_("the time (in milliseconds) how long the keys will be held") > + }, > + {.name = "keycode", > + .type = VSH_OT_ARGV, > + .flags = VSH_OFLAG_REQ, > + .help = N_("the key code") > + }, > + {.name = NULL} > }; > > static int > @@ -5950,10 +6837,22 @@ static const vshCmdInfo info_send_process_signal[] = { > }; > > static const vshCmdOptDef opts_send_process_signal[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"pid", VSH_OT_DATA, VSH_OFLAG_REQ, N_("the process ID") }, > - {"signame", VSH_OT_DATA, VSH_OFLAG_REQ, N_("the signal number or name") }, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "pid", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("the process ID") > + }, > + {.name = "signame", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("the signal number or name") > + }, > + {.name = NULL} > }; > > VIR_ENUM_DECL(virDomainProcessSignal) > @@ -6053,14 +6952,37 @@ static const vshCmdInfo info_setmem[] = { > }; > > static const vshCmdOptDef opts_setmem[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"kilobytes", VSH_OT_ALIAS, 0, "size"}, > - {"size", VSH_OT_INT, VSH_OFLAG_REQ, > - N_("new memory size, as scaled integer (default KiB)")}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {"live", VSH_OT_BOOL, 0, N_("affect running domain")}, > - {"current", VSH_OT_BOOL, 0, N_("affect current domain")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "kilobytes", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "size" > + }, > + {.name = "size", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_REQ, > + .help = N_("new memory size, as scaled integer (default KiB)") > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = "live", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect running domain") > + }, > + {.name = "current", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect current domain") > + }, > + {.name = NULL} > }; > > static bool > @@ -6132,14 +7054,37 @@ static const vshCmdInfo info_setmaxmem[] = { > }; > > static const vshCmdOptDef opts_setmaxmem[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"kilobytes", VSH_OT_ALIAS, 0, "size"}, > - {"size", VSH_OT_INT, VSH_OFLAG_REQ, > - N_("new maximum memory size, as scaled integer (default KiB)")}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {"live", VSH_OT_BOOL, 0, N_("affect running domain")}, > - {"current", VSH_OT_BOOL, 0, N_("affect current domain")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "kilobytes", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "size" > + }, > + {.name = "size", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_REQ, > + .help = N_("new maximum memory size, as scaled integer (default KiB)") > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = "live", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect running domain") > + }, > + {.name = "current", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect current domain") > + }, > + {.name = NULL} > }; > > static bool > @@ -6215,19 +7160,47 @@ static const vshCmdInfo info_memtune[] = { > }; > > static const vshCmdOptDef opts_memtune[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"hard-limit", VSH_OT_INT, VSH_OFLAG_NONE, > - N_("Max memory, as scaled integer (default KiB)")}, > - {"soft-limit", VSH_OT_INT, VSH_OFLAG_NONE, > - N_("Memory during contention, as scaled integer (default KiB)")}, > - {"swap-hard-limit", VSH_OT_INT, VSH_OFLAG_NONE, > - N_("Max memory plus swap, as scaled integer (default KiB)")}, > - {"min-guarantee", VSH_OT_INT, VSH_OFLAG_NONE, > - N_("Min guaranteed memory, as scaled integer (default KiB)")}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {"live", VSH_OT_BOOL, 0, N_("affect running domain")}, > - {"current", VSH_OT_BOOL, 0, N_("affect current domain")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "hard-limit", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("Max memory, as scaled integer (default KiB)") > + }, > + {.name = "soft-limit", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("Memory during contention, as scaled integer (default KiB)") > + }, > + {.name = "swap-hard-limit", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("Max memory plus swap, as scaled integer (default KiB)") > + }, > + {.name = "min-guarantee", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_NONE, > + .help = N_("Min guaranteed memory, as scaled integer (default KiB)") > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = "live", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect running domain") > + }, > + {.name = "current", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect current domain") > + }, > + {.name = NULL} > }; > > static int > @@ -6416,15 +7389,37 @@ static const vshCmdInfo info_numatune[] = { > }; > > static const vshCmdOptDef opts_numatune[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"mode", VSH_OT_DATA, VSH_OFLAG_NONE, > - N_("NUMA mode, one of strict, preferred and interleave")}, > - {"nodeset", VSH_OT_DATA, VSH_OFLAG_NONE, > - N_("NUMA node selections to set")}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {"live", VSH_OT_BOOL, 0, N_("affect running domain")}, > - {"current", VSH_OT_BOOL, 0, N_("affect current domain")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "mode", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_NONE, > + .help = N_("NUMA mode, one of strict, preferred and interleave") > + }, > + {.name = "nodeset", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_NONE, > + .help = N_("NUMA node selections to set") > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = "live", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect running domain") > + }, > + {.name = "current", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect current domain") > + }, > + {.name = NULL} > }; > > static bool > @@ -6567,12 +7562,27 @@ static const vshCmdInfo info_qemu_monitor_command[] = { > }; > > static const vshCmdOptDef opts_qemu_monitor_command[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"hmp", VSH_OT_BOOL, 0, N_("command is in human monitor protocol")}, > - {"pretty", VSH_OT_BOOL, 0, > - N_("pretty-print any qemu monitor protocol output")}, > - {"cmd", VSH_OT_ARGV, VSH_OFLAG_REQ, N_("command")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "hmp", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("command is in human monitor protocol") > + }, > + {.name = "pretty", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("pretty-print any qemu monitor protocol output") > + }, > + {.name = "cmd", > + .type = VSH_OT_ARGV, > + .flags = VSH_OFLAG_REQ, > + .help = N_("command") > + }, > + {.name = NULL} > }; > > static bool > @@ -6649,8 +7659,12 @@ static const vshCmdInfo info_qemu_attach[] = { > }; > > static const vshCmdOptDef opts_qemu_attach[] = { > - {"pid", VSH_OT_DATA, VSH_OFLAG_REQ, N_("pid")}, > - {NULL, 0, 0, NULL} > + {.name = "pid", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("pid") > + }, > + {.name = NULL} > }; > > static bool > @@ -6692,12 +7706,32 @@ static const vshCmdInfo info_qemu_agent_command[] = { > }; > > static const vshCmdOptDef opts_qemu_agent_command[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"timeout", VSH_OT_INT, VSH_OFLAG_REQ_OPT, N_("timeout seconds. must be positive.")}, > - {"async", VSH_OT_BOOL, 0, N_("execute command without waiting for timeout")}, > - {"block", VSH_OT_BOOL, 0, N_("execute command without timeout")}, > - {"cmd", VSH_OT_ARGV, VSH_OFLAG_REQ, N_("command")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "timeout", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_REQ_OPT, > + .help = N_("timeout seconds. must be positive.") > + }, > + {.name = "async", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("execute command without waiting for timeout") > + }, > + {.name = "block", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("execute command without timeout") > + }, > + {.name = "cmd", > + .type = VSH_OT_ARGV, > + .flags = VSH_OFLAG_REQ, > + .help = N_("command") > + }, > + {.name = NULL} > }; > > static bool > @@ -6780,12 +7814,32 @@ static const vshCmdInfo info_dumpxml[] = { > }; > > static const vshCmdOptDef opts_dumpxml[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"inactive", VSH_OT_BOOL, 0, N_("show inactive defined XML")}, > - {"security-info", VSH_OT_BOOL, 0, N_("include security sensitive information in XML dump")}, > - {"update-cpu", VSH_OT_BOOL, 0, N_("update guest CPU according to host CPU")}, > - {"migratable", VSH_OT_BOOL, 0, N_("provide XML suitable for migrations")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "inactive", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("show inactive defined XML") > + }, > + {.name = "security-info", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("include security sensitive information in XML dump") > + }, > + {.name = "update-cpu", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("update guest CPU according to host CPU") > + }, > + {.name = "migratable", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("provide XML suitable for migrations") > + }, > + {.name = NULL} > }; > > static bool > @@ -6834,9 +7888,17 @@ static const vshCmdInfo info_domxmlfromnative[] = { > }; > > static const vshCmdOptDef opts_domxmlfromnative[] = { > - {"format", VSH_OT_DATA, VSH_OFLAG_REQ, N_("source config data format")}, > - {"config", VSH_OT_DATA, VSH_OFLAG_REQ, N_("config data file to import from")}, > - {NULL, 0, 0, NULL} > + {.name = "format", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("source config data format") > + }, > + {.name = "config", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("config data file to import from") > + }, > + {.name = NULL} > }; > > static bool > @@ -6878,9 +7940,17 @@ static const vshCmdInfo info_domxmltonative[] = { > }; > > static const vshCmdOptDef opts_domxmltonative[] = { > - {"format", VSH_OT_DATA, VSH_OFLAG_REQ, N_("target config data type format")}, > - {"xml", VSH_OT_DATA, VSH_OFLAG_REQ, N_("xml data file to export from")}, > - {NULL, 0, 0, NULL} > + {.name = "format", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("target config data type format") > + }, > + {.name = "xml", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("xml data file to export from") > + }, > + {.name = NULL} > }; > > static bool > @@ -6922,8 +7992,12 @@ static const vshCmdInfo info_domname[] = { > }; > > static const vshCmdOptDef opts_domname[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain id or uuid")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain id or uuid") > + }, > + {.name = NULL} > }; > > static bool > @@ -6950,8 +8024,12 @@ static const vshCmdInfo info_domid[] = { > }; > > static const vshCmdOptDef opts_domid[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name or uuid")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name or uuid") > + }, > + {.name = NULL} > }; > > static bool > @@ -6983,8 +8061,12 @@ static const vshCmdInfo info_domuuid[] = { > }; > > static const vshCmdOptDef opts_domuuid[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain id or name")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain id or name") > + }, > + {.name = NULL} > }; > > static bool > @@ -7016,28 +8098,107 @@ static const vshCmdInfo info_migrate[] = { > }; > > static const vshCmdOptDef opts_migrate[] = { > - {"live", VSH_OT_BOOL, 0, N_("live migration")}, > - {"offline", VSH_OT_BOOL, 0, N_("offline migration")}, > - {"p2p", VSH_OT_BOOL, 0, N_("peer-2-peer migration")}, > - {"direct", VSH_OT_BOOL, 0, N_("direct migration")}, > - {"tunneled", VSH_OT_ALIAS, 0, "tunnelled"}, > - {"tunnelled", VSH_OT_BOOL, 0, N_("tunnelled migration")}, > - {"persistent", VSH_OT_BOOL, 0, N_("persist VM on destination")}, > - {"undefinesource", VSH_OT_BOOL, 0, N_("undefine VM on source")}, > - {"suspend", VSH_OT_BOOL, 0, N_("do not restart the domain on the destination host")}, > - {"copy-storage-all", VSH_OT_BOOL, 0, N_("migration with non-shared storage with full disk copy")}, > - {"copy-storage-inc", VSH_OT_BOOL, 0, N_("migration with non-shared storage with incremental copy (same base image shared between source and destination)")}, > - {"change-protection", VSH_OT_BOOL, 0, > - N_("prevent any configuration changes to domain until migration ends)")}, > - {"unsafe", VSH_OT_BOOL, 0, N_("force migration even if it may be unsafe")}, > - {"verbose", VSH_OT_BOOL, 0, N_("display the progress of migration")}, > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"desturi", VSH_OT_DATA, VSH_OFLAG_REQ, N_("connection URI of the destination host as seen from the client(normal migration) or source(p2p migration)")}, > - {"migrateuri", VSH_OT_DATA, 0, N_("migration URI, usually can be omitted")}, > - {"dname", VSH_OT_DATA, 0, N_("rename to new name during migration (if supported)")}, > - {"timeout", VSH_OT_INT, 0, N_("force guest to suspend if live migration exceeds timeout (in seconds)")}, > - {"xml", VSH_OT_STRING, 0, N_("filename containing updated XML for the target")}, > - {NULL, 0, 0, NULL} > + {.name = "live", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("live migration") > + }, > + {.name = "offline", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("offline migration") > + }, > + {.name = "p2p", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("peer-2-peer migration") > + }, > + {.name = "direct", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("direct migration") > + }, > + {.name = "tunneled", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "tunnelled" > + }, > + {.name = "tunnelled", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("tunnelled migration") > + }, > + {.name = "persistent", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("persist VM on destination") > + }, > + {.name = "undefinesource", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("undefine VM on source") > + }, > + {.name = "suspend", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("do not restart the domain on the destination host") > + }, > + {.name = "copy-storage-all", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("migration with non-shared storage with full disk copy") > + }, > + {.name = "copy-storage-inc", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("migration with non-shared storage with incremental copy (same base image shared between source and destination)") > + }, > + {.name = "change-protection", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("prevent any configuration changes to domain until migration ends)") > + }, > + {.name = "unsafe", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("force migration even if it may be unsafe") > + }, > + {.name = "verbose", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("display the progress of migration") > + }, > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "desturi", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("connection URI of the destination host as seen from the client(normal migration) or source(p2p migration)") > + }, > + {.name = "migrateuri", > + .type = VSH_OT_DATA, > + .flags = 0, > + .help = N_("migration URI, usually can be omitted") > + }, > + {.name = "dname", > + .type = VSH_OT_DATA, > + .flags = 0, > + .help = N_("rename to new name during migration (if supported)") > + }, > + {.name = "timeout", > + .type = VSH_OT_INT, > + .flags = 0, > + .help = N_("force guest to suspend if live migration exceeds timeout (in seconds)") > + }, > + {.name = "xml", > + .type = VSH_OT_STRING, > + .flags = 0, > + .help = N_("filename containing updated XML for the target") > + }, > + {.name = NULL} > }; > > static void > @@ -7232,9 +8393,17 @@ static const vshCmdInfo info_migrate_setmaxdowntime[] = { > }; > > static const vshCmdOptDef opts_migrate_setmaxdowntime[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"downtime", VSH_OT_INT, VSH_OFLAG_REQ, N_("maximum tolerable downtime (in milliseconds) for migration")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "downtime", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_REQ, > + .help = N_("maximum tolerable downtime (in milliseconds) for migration") > + }, > + {.name = NULL} > }; > > static bool > @@ -7274,10 +8443,17 @@ static const vshCmdInfo info_migrate_setspeed[] = { > }; > > static const vshCmdOptDef opts_migrate_setspeed[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"bandwidth", VSH_OT_INT, VSH_OFLAG_REQ, > - N_("migration bandwidth limit in MiB/s")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "bandwidth", > + .type = VSH_OT_INT, > + .flags = VSH_OFLAG_REQ, > + .help = N_("migration bandwidth limit in MiB/s") > + }, > + {.name = NULL} > }; > > static bool > @@ -7315,8 +8491,12 @@ static const vshCmdInfo info_migrate_getspeed[] = { > }; > > static const vshCmdOptDef opts_migrate_getspeed[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = NULL} > }; > > static bool > @@ -7351,9 +8531,17 @@ static const vshCmdInfo info_domdisplay[] = { > }; > > static const vshCmdOptDef opts_domdisplay[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"include-password", VSH_OT_BOOL, VSH_OFLAG_NONE, N_("includes the password into the connection URI if available")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "include-password", > + .type = VSH_OT_BOOL, > + .flags = VSH_OFLAG_NONE, > + .help = N_("includes the password into the connection URI if available") > + }, > + {.name = NULL} > }; > > static bool > @@ -7522,8 +8710,12 @@ static const vshCmdInfo info_vncdisplay[] = { > }; > > static const vshCmdOptDef opts_vncdisplay[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = NULL} > }; > > static bool > @@ -7587,8 +8779,12 @@ static const vshCmdInfo info_ttyconsole[] = { > }; > > static const vshCmdOptDef opts_ttyconsole[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = NULL} > }; > > static bool > @@ -7639,8 +8835,12 @@ static const vshCmdInfo info_domhostname[] = { > }; > > static const vshCmdOptDef opts_domhostname[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = NULL} > }; > > static bool > @@ -7925,11 +9125,27 @@ static const vshCmdInfo info_detach_device[] = { > }; > > static const vshCmdOptDef opts_detach_device[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("XML file")}, > - {"persistent", VSH_OT_ALIAS, 0, "config"}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "file", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("XML file") > + }, > + {.name = "persistent", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "config" > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = NULL} > }; > > static bool > @@ -7986,12 +9202,32 @@ static const vshCmdInfo info_update_device[] = { > }; > > static const vshCmdOptDef opts_update_device[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"file", VSH_OT_DATA, VSH_OFLAG_REQ, N_("XML file")}, > - {"persistent", VSH_OT_ALIAS, 0, "config"}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {"force", VSH_OT_BOOL, 0, N_("force device update")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "file", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("XML file") > + }, > + {.name = "persistent", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "config" > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = "force", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("force device update") > + }, > + {.name = NULL} > }; > > static bool > @@ -8053,12 +9289,32 @@ static const vshCmdInfo info_detach_interface[] = { > }; > > static const vshCmdOptDef opts_detach_interface[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"type", VSH_OT_DATA, VSH_OFLAG_REQ, N_("network interface type")}, > - {"mac", VSH_OT_STRING, 0, N_("MAC address")}, > - {"persistent", VSH_OT_ALIAS, 0, "config"}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "type", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("network interface type") > + }, > + {.name = "mac", > + .type = VSH_OT_STRING, > + .flags = 0, > + .help = N_("MAC address") > + }, > + {.name = "persistent", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "config" > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = NULL} > }; > > static bool > @@ -8414,11 +9670,27 @@ static const vshCmdInfo info_detach_disk[] = { > }; > > static const vshCmdOptDef opts_detach_disk[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"target", VSH_OT_DATA, VSH_OFLAG_REQ, N_("target of disk device")}, > - {"persistent", VSH_OT_ALIAS, 0, "config"}, > - {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "target", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("target of disk device") > + }, > + {.name = "persistent", > + .type = VSH_OT_ALIAS, > + .flags = 0, > + .help = "config" > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("affect next boot") > + }, > + {.name = NULL} > }; > > static bool > @@ -8487,8 +9759,12 @@ static const vshCmdInfo info_edit[] = { > }; > > static const vshCmdOptDef opts_edit[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = NULL} > }; > > static bool > @@ -8539,19 +9815,58 @@ static const vshCmdInfo info_change_media[] = { > }; > > static const vshCmdOptDef opts_change_media[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"path", VSH_OT_DATA, VSH_OFLAG_REQ, N_("Fully-qualified path or " > - "target of disk device")}, > - {"source", VSH_OT_DATA, 0, N_("source of the media")}, > - {"eject", VSH_OT_BOOL, 0, N_("Eject the media")}, > - {"insert", VSH_OT_BOOL, 0, N_("Insert the media")}, > - {"update", VSH_OT_BOOL, 0, N_("Update the media")}, > - {"current", VSH_OT_BOOL, 0, N_("can be either or both of --live and --config, " > - "depends on implementation of hypervisor driver")}, > - {"live", VSH_OT_BOOL, 0, N_("alter live configuration of running domain")}, > - {"config", VSH_OT_BOOL, 0, N_("alter persistent configuration, effect observed on next boot")}, > - {"force", VSH_OT_BOOL, 0, N_("force media changing")}, > - {NULL, 0, 0, NULL} > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "path", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("Fully-qualified path or target of disk device") > + }, > + {.name = "source", > + .type = VSH_OT_DATA, > + .flags = 0, > + .help = N_("source of the media") > + }, > + {.name = "eject", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("Eject the media") > + }, > + {.name = "insert", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("Insert the media") > + }, > + {.name = "update", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("Update the media") > + }, > + {.name = "current", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("can be either or both of --live and --config, " > + "depends on implementation of hypervisor driver") > + }, > + {.name = "live", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("alter live configuration of running domain") > + }, > + {.name = "config", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("alter persistent configuration, effect observed on next boot") > + }, > + {.name = "force", > + .type = VSH_OT_BOOL, > + .flags = 0, > + .help = N_("force media changing") > + }, > + {.name = NULL} > }; > > static bool > @@ -8666,10 +9981,22 @@ static const vshCmdInfo info_domfstrim[] = { > }; > > static const vshCmdOptDef opts_domfstrim[] = { > - {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > - {"minimum", VSH_OT_INT, 0, N_("Just a hint to ignore contiguous " > - "free ranges smaller than this (Bytes)")}, > - {"mountpoint", VSH_OT_DATA, 0, N_("which mount point to trim")}, > + {.name = "domain", > + .type = VSH_OT_DATA, > + .flags = VSH_OFLAG_REQ, > + .help = N_("domain name, id or uuid") > + }, > + {.name = "minimum", > + .type = VSH_OT_INT, > + .flags = 0, > + .help = N_("Just a hint to ignore contiguous " > + "free ranges smaller than this (Bytes)") > + }, > + {.name = "mountpoint", > + .type = VSH_OT_DATA, > + .flags = 0, > + .help = N_("which mount point to trim") > + }, > {NULL, 0, 0, NULL} > }; > static bool > -- > 1.8.0.2 > > -- > libvir-list mailing list > libvir-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list > ACK. -- Doug Goldstein -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list