[libvirt] [PATCH 5/9] virsh-network: Add network name completion to 'net-event' command

Signed-off-by: Lin Ma <lma@suse.com> --- tools/virsh-network.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tools/virsh-network.c b/tools/virsh-network.c index 7a8bcb1beb..bcf322a5ae 100644 --- a/tools/virsh-network.c +++ b/tools/virsh-network.c @@ -1202,10 +1202,7 @@ static const vshCmdInfo info_network_event[] = { }; static const vshCmdOptDef opts_network_event[] = { - {.name = "network", - .type = VSH_OT_STRING, - .help = N_("filter by network name or uuid") - }, + VIRSH_COMMON_OPT_NETWORK_OT_STRING(N_("filter by network name or uuid"), 0), {.name = "event", .type = VSH_OT_STRING, .help = N_("which event type to wait for") -- 2.16.2

Signed-off-by: Lin Ma <lma@suse.com> --- tools/virsh-network.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/tools/virsh-network.c b/tools/virsh-network.c index bcf322a5ae..89613f2a24 100644 --- a/tools/virsh-network.c +++ b/tools/virsh-network.c @@ -34,15 +34,18 @@ #include "virtime.h" #include "conf/network_conf.h" -#define VIRSH_COMMON_OPT_NETWORK(cflags) \ +#define VIRSH_COMMON_OPT_NETWORK(_helpstr, cflags) \ {.name = "network", \ .type = VSH_OT_DATA, \ .flags = VSH_OFLAG_REQ, \ - .help = N_("network name or uuid"), \ + .help = _helpstr, \ .completer = virshNetworkNameCompleter, \ .completer_flags = cflags, \ } +#define VIRSH_COMMON_OPT_NETWORK_FULL(cflags) \ + VIRSH_COMMON_OPT_NETWORK(N_("network name or uuid"), cflags) + #define VIRSH_COMMON_OPT_NETWORK_OT_STRING(_helpstr, cflags) \ {.name = "network", \ .type = VSH_OT_STRING, \ @@ -106,7 +109,7 @@ static const vshCmdInfo info_network_autostart[] = { }; static const vshCmdOptDef opts_network_autostart[] = { - VIRSH_COMMON_OPT_NETWORK(VIR_CONNECT_LIST_NETWORKS_PERSISTENT), + VIRSH_COMMON_OPT_NETWORK_FULL(VIR_CONNECT_LIST_NETWORKS_PERSISTENT), {.name = "disable", .type = VSH_OT_BOOL, .help = N_("disable autostarting") @@ -253,7 +256,7 @@ static const vshCmdInfo info_network_destroy[] = { }; static const vshCmdOptDef opts_network_destroy[] = { - VIRSH_COMMON_OPT_NETWORK(VIR_CONNECT_LIST_NETWORKS_ACTIVE), + VIRSH_COMMON_OPT_NETWORK_FULL(VIR_CONNECT_LIST_NETWORKS_ACTIVE), {.name = NULL} }; @@ -292,7 +295,7 @@ static const vshCmdInfo info_network_dumpxml[] = { }; static const vshCmdOptDef opts_network_dumpxml[] = { - VIRSH_COMMON_OPT_NETWORK(0), + VIRSH_COMMON_OPT_NETWORK_FULL(0), {.name = "inactive", .type = VSH_OT_BOOL, .help = N_("show inactive defined XML") @@ -343,7 +346,7 @@ static const vshCmdInfo info_network_info[] = { }; static const vshCmdOptDef opts_network_info[] = { - VIRSH_COMMON_OPT_NETWORK(0), + VIRSH_COMMON_OPT_NETWORK_FULL(0), {.name = NULL} }; @@ -792,7 +795,7 @@ static const vshCmdInfo info_network_start[] = { }; static const vshCmdOptDef opts_network_start[] = { - VIRSH_COMMON_OPT_NETWORK(VIR_CONNECT_LIST_NETWORKS_INACTIVE), + VIRSH_COMMON_OPT_NETWORK_FULL(VIR_CONNECT_LIST_NETWORKS_INACTIVE), {.name = NULL} }; @@ -830,7 +833,7 @@ static const vshCmdInfo info_network_undefine[] = { }; static const vshCmdOptDef opts_network_undefine[] = { - VIRSH_COMMON_OPT_NETWORK(VIR_CONNECT_LIST_NETWORKS_PERSISTENT), + VIRSH_COMMON_OPT_NETWORK_FULL(VIR_CONNECT_LIST_NETWORKS_PERSISTENT), {.name = NULL} }; @@ -869,7 +872,7 @@ static const vshCmdInfo info_network_update[] = { }; static const vshCmdOptDef opts_network_update[] = { - VIRSH_COMMON_OPT_NETWORK(0), + VIRSH_COMMON_OPT_NETWORK_FULL(0), {.name = "command", .type = VSH_OT_DATA, .flags = VSH_OFLAG_REQ, @@ -1070,7 +1073,7 @@ static const vshCmdInfo info_network_edit[] = { }; static const vshCmdOptDef opts_network_edit[] = { - VIRSH_COMMON_OPT_NETWORK(0), + VIRSH_COMMON_OPT_NETWORK_FULL(0), {.name = NULL} }; @@ -1314,7 +1317,7 @@ static const vshCmdInfo info_network_dhcp_leases[] = { }; static const vshCmdOptDef opts_network_dhcp_leases[] = { - VIRSH_COMMON_OPT_NETWORK(0), + VIRSH_COMMON_OPT_NETWORK_FULL(0), {.name = "mac", .type = VSH_OT_STRING, .flags = VSH_OFLAG_NONE, -- 2.16.2

Signed-off-by: Lin Ma <lma@suse.com> --- tools/virsh-network.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tools/virsh-network.c b/tools/virsh-network.c index 89613f2a24..ca07fb568f 100644 --- a/tools/virsh-network.c +++ b/tools/virsh-network.c @@ -1032,11 +1032,7 @@ static const vshCmdInfo info_network_uuid[] = { }; static const vshCmdOptDef opts_network_uuid[] = { - {.name = "network", - .type = VSH_OT_DATA, - .flags = VSH_OFLAG_REQ, - .help = N_("network name") - }, + VIRSH_COMMON_OPT_NETWORK(N_("network name"), 0), {.name = NULL} }; -- 2.16.2

Signed-off-by: Lin Ma <lma@suse.com> --- tools/virsh-completer.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ tools/virsh-completer.h | 4 ++++ 2 files changed, 52 insertions(+) diff --git a/tools/virsh-completer.c b/tools/virsh-completer.c index e3b8234b41..11fe44055d 100644 --- a/tools/virsh-completer.c +++ b/tools/virsh-completer.c @@ -143,6 +143,54 @@ virshDomainInterfaceCompleter(vshControl *ctl, } +char ** +virshDomainBlockTargetCompleter(vshControl *ctl, + const vshCmd *cmd, + unsigned int flags) +{ + virshControlPtr priv = ctl->privData; + xmlDocPtr xmldoc = NULL; + xmlXPathContextPtr ctxt = NULL; + xmlNodePtr *disks = NULL; + int ndisks; + size_t i; + char **ret = NULL; + + virCheckFlags(0, NULL); + + if (!priv->conn || virConnectIsAlive(priv->conn) <= 0) + return NULL; + + if (virshDomainGetXML(ctl, cmd, 0, &xmldoc, &ctxt) < 0) + goto error; + + ndisks = virXPathNodeSet("./devices/disk", ctxt, &disks); + if (ndisks < 0) + goto error; + + if (VIR_ALLOC_N(ret, ndisks + 1) < 0) + goto error; + + for (i = 0; i < ndisks; i++) { + ctxt->node = disks[i]; + if (!(ret[i] = virXPathString("string(./target/@dev)", ctxt))) + goto error; + } + + VIR_FREE(disks); + xmlFreeDoc(xmldoc); + xmlXPathFreeContext(ctxt); + return ret; + + error: + VIR_FREE(disks); + xmlFreeDoc(xmldoc); + xmlXPathFreeContext(ctxt); + virStringListFree(ret); + return NULL; +} + + char ** virshStoragePoolNameCompleter(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED, diff --git a/tools/virsh-completer.h b/tools/virsh-completer.h index fa443d3ad7..7b830b4ca5 100644 --- a/tools/virsh-completer.h +++ b/tools/virsh-completer.h @@ -38,6 +38,10 @@ char ** virshDomainInterfaceCompleter(vshControl *ctl, const vshCmd *cmd, unsigned int flags); +char ** virshDomainBlockTargetCompleter(vshControl *ctl, + const vshCmd *cmd, + unsigned int flags); + char ** virshStoragePoolNameCompleter(vshControl *ctl, const vshCmd *cmd, unsigned int flags); -- 2.16.2

On 05/15/2018 01:18 PM, Lin Ma wrote:
Signed-off-by: Lin Ma <lma@suse.com> --- tools/virsh-completer.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ tools/virsh-completer.h | 4 ++++ 2 files changed, 52 insertions(+)
diff --git a/tools/virsh-completer.c b/tools/virsh-completer.c index e3b8234b41..11fe44055d 100644 --- a/tools/virsh-completer.c +++ b/tools/virsh-completer.c @@ -143,6 +143,54 @@ virshDomainInterfaceCompleter(vshControl *ctl, }
+char ** +virshDomainBlockTargetCompleter(vshControl *ctl,
I think virshDomainDiskTargetCompleter is better name. "Block" suggests it's only working with block devices. Although I know you just took the inspiration in our (dom-)blk* commands. Michal

Signed-off-by: Lin Ma <lma@suse.com> --- tools/virsh-domain-monitor.c | 2 ++ tools/virsh-domain.c | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c index fa93f3a312..7f479dd27d 100644 --- a/tools/virsh-domain-monitor.c +++ b/tools/virsh-domain-monitor.c @@ -391,6 +391,7 @@ static const vshCmdOptDef opts_domblkinfo[] = { {.name = "device", .type = VSH_OT_DATA, .flags = VSH_OFLAG_REQ, + .completer = virshDomainBlockTargetCompleter, .help = N_("block device") }, {.name = "human", @@ -807,6 +808,7 @@ static const vshCmdOptDef opts_domblkstat[] = { {.name = "device", .type = VSH_OT_STRING, .flags = VSH_OFLAG_EMPTY_OK, + .completer = virshDomainBlockTargetCompleter, .help = N_("block device") }, {.name = "human", diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index bc44131fa2..4f6cfdc872 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -1090,6 +1090,7 @@ static const vshCmdOptDef opts_blkdeviotune[] = { {.name = "device", .type = VSH_OT_DATA, .flags = VSH_OFLAG_REQ, + .completer = virshDomainBlockTargetCompleter, .help = N_("block device") }, {.name = "total_bytes_sec", @@ -1886,6 +1887,7 @@ static const vshCmdOptDef opts_blockcommit[] = { {.name = "path", .type = VSH_OT_DATA, .flags = VSH_OFLAG_REQ, + .completer = virshDomainBlockTargetCompleter, .help = N_("fully-qualified path of disk") }, {.name = "bandwidth", @@ -2111,6 +2113,7 @@ static const vshCmdOptDef opts_blockcopy[] = { {.name = "path", .type = VSH_OT_DATA, .flags = VSH_OFLAG_REQ, + .completer = virshDomainBlockTargetCompleter, .help = N_("fully-qualified path of source disk") }, {.name = "dest", @@ -2427,6 +2430,7 @@ static const vshCmdOptDef opts_blockjob[] = { {.name = "path", .type = VSH_OT_DATA, .flags = VSH_OFLAG_REQ, + .completer = virshDomainBlockTargetCompleter, .help = N_("fully-qualified path of disk") }, {.name = "abort", @@ -2670,6 +2674,7 @@ static const vshCmdOptDef opts_blockpull[] = { {.name = "path", .type = VSH_OT_DATA, .flags = VSH_OFLAG_REQ, + .completer = virshDomainBlockTargetCompleter, .help = N_("fully-qualified path of disk") }, {.name = "bandwidth", @@ -2816,6 +2821,7 @@ static const vshCmdOptDef opts_blockresize[] = { {.name = "path", .type = VSH_OT_DATA, .flags = VSH_OFLAG_REQ, + .completer = virshDomainBlockTargetCompleter, .help = N_("Fully-qualified path of block device") }, {.name = "size", @@ -7346,6 +7352,7 @@ static const vshCmdOptDef opts_domblkthreshold[] = { {.name = "dev", .type = VSH_OT_DATA, .flags = VSH_OFLAG_REQ, + .completer = virshDomainBlockTargetCompleter, .help = N_("device to set threshold for") }, {.name = "threshold", @@ -13497,6 +13504,7 @@ static const vshCmdOptDef opts_change_media[] = { {.name = "path", .type = VSH_OT_DATA, .flags = VSH_OFLAG_REQ, + .completer = virshDomainBlockTargetCompleter, .help = N_("Fully-qualified path or target of disk device") }, {.name = "source", -- 2.16.2

On 05/15/2018 01:18 PM, Lin Ma wrote:
Signed-off-by: Lin Ma <lma@suse.com> --- tools/virsh-domain-monitor.c | 2 ++ tools/virsh-domain.c | 8 ++++++++ 2 files changed, 10 insertions(+)
diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c index fa93f3a312..7f479dd27d 100644 --- a/tools/virsh-domain-monitor.c +++ b/tools/virsh-domain-monitor.c @@ -391,6 +391,7 @@ static const vshCmdOptDef opts_domblkinfo[] = { {.name = "device", .type = VSH_OT_DATA, .flags = VSH_OFLAG_REQ, + .completer = virshDomainBlockTargetCompleter,
Because of the rename this needs to be changed too. Michal
participants (2)
-
Lin Ma
-
Michal Privoznik