The command `domifaddr` can use three different sources to grab IP
address of a Virtual Machine: lease, agent and arp. This parameter does
not have a completer function to return source options.
Signed-off-by: Julio Faracco <jcfaracco@gmail.com>
---
tools/virsh-completer-domain.c | 17 +++++++++++++++++
tools/virsh-completer-domain.h | 5 +++++
tools/virsh-domain-monitor.c | 1 +
3 files changed, 23 insertions(+)
diff --git a/tools/virsh-completer-domain.c b/tools/virsh-completer-domain.c
index 0311ee50d0..c8709baa38 100644
--- a/tools/virsh-completer-domain.c
+++ b/tools/virsh-completer-domain.c
@@ -296,3 +296,20 @@ virshDomainShutdownModeCompleter(vshControl *ctl,
return virshCommaStringListComplete(mode, modes);
}
+
+
+char **
+virshDomainIfAddrSourceCompleter(vshControl *ctl,
+ const vshCmd *cmd,
+ unsigned int flags)
+{
+ const char *sources[] = {"lease", "agent", "arp", NULL};
+ const char *source = NULL;
+
+ virCheckFlags(0, NULL);
+
+ if (vshCommandOptStringQuiet(ctl, cmd, "source", &source) < 0)
+ return NULL;
+
+ return virshCommaStringListComplete(source, sources);
+}
diff --git a/tools/virsh-completer-domain.h b/tools/virsh-completer-domain.h
index 083ab327cc..f5e5625051 100644
--- a/tools/virsh-completer-domain.h
+++ b/tools/virsh-completer-domain.h
@@ -53,3 +53,8 @@ char ** virshDomainDeviceAliasCompleter(vshControl *ctl,
char ** virshDomainShutdownModeCompleter(vshControl *ctl,
const vshCmd *cmd,
unsigned int flags);
+
+char **
+virshDomainIfAddrSourceCompleter(vshControl *ctl,
+ const vshCmd *cmd,
+ unsigned int flags);
diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c
index 30b186ffd1..1d1f87eb9e 100644
--- a/tools/virsh-domain-monitor.c
+++ b/tools/virsh-domain-monitor.c
@@ -2346,6 +2346,7 @@ static const vshCmdOptDef opts_domifaddr[] = {
{.name = "source",
.type = VSH_OT_STRING,
.flags = VSH_OFLAG_NONE,
+ .completer = virshDomainIfAddrSourceCompleter,
.help = N_("address source: 'lease', 'agent', or 'arp'")},
{.name = NULL}
};
--
2.20.1
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On Thu, Jan 02, 2020 at 12:07:06PM -0300, Julio Faracco wrote: > The command `domifaddr` can use three different sources to grab IP > address of a Virtual Machine: lease, agent and arp. This parameter does > not have a completer function to return source options. > > Signed-off-by: Julio Faracco <jcfaracco@gmail.com> > --- ... > + > +char ** > +virshDomainIfAddrSourceCompleter(vshControl *ctl, I'd stay consistent with the existing naming scheme we have in place and expand 'If' to 'Interface' --> virshDomainInterfaceAddrSourceCompleter. Changed and pushed. Reviewed-by: Erik Skultety <eskultet@redhat.com> -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
On 1/2/20 4:07 PM, Julio Faracco wrote:
> The command `domifaddr` can use three different sources to grab IP
> address of a Virtual Machine: lease, agent and arp. This parameter does
> not have a completer function to return source options.
>
> Signed-off-by: Julio Faracco <jcfaracco@gmail.com>
> ---
> tools/virsh-completer-domain.c | 17 +++++++++++++++++
> tools/virsh-completer-domain.h | 5 +++++
> tools/virsh-domain-monitor.c | 1 +
> 3 files changed, 23 insertions(+)
>
> diff --git a/tools/virsh-completer-domain.c b/tools/virsh-completer-domain.c
> index 0311ee50d0..c8709baa38 100644
> --- a/tools/virsh-completer-domain.c
> +++ b/tools/virsh-completer-domain.c
> @@ -296,3 +296,20 @@ virshDomainShutdownModeCompleter(vshControl *ctl,
>
> return virshCommaStringListComplete(mode, modes);
> }
> +
> +
> +char **
> +virshDomainIfAddrSourceCompleter(vshControl *ctl,
> + const vshCmd *cmd,
> + unsigned int flags)
> +{
> + const char *sources[] = {"lease", "agent", "arp", NULL};
> + const char *source = NULL;
> +
> + virCheckFlags(0, NULL);
> +
> + if (vshCommandOptStringQuiet(ctl, cmd, "source", &source) < 0)
> + return NULL;
> +
> + return virshCommaStringListComplete(source, sources);
Actually, I don't think this is coorect. This helper completes a string
list separated by commas, for instance a shutdown mode where more than
one string (method) can be used:
virsh shutdown --mode acpi,agent,signal
But this is not the case for domifaddr --source, is it? It accepts
exactly one string. I know Erik pushed this, so I will post a fix up
later. Stay tuned.
Michal
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Michal,
This case of comma separated options, can we include a comma after
completion by default?
I.e.:
virsh # domifaddr 1 --source [TAB]
agent arp lease
virsh # domifaddr 1 --source ar[TAB]
virsh # domifaddr 1 --source arp,
This is easy to test and avoid mistakes.
--
Julio Cesar Faracco
Em sex., 3 de jan. de 2020 às 12:45, Michal Prívozník
<mprivozn@redhat.com> escreveu:
>
> On 1/2/20 4:07 PM, Julio Faracco wrote:
> > The command `domifaddr` can use three different sources to grab IP
> > address of a Virtual Machine: lease, agent and arp. This parameter does
> > not have a completer function to return source options.
> >
> > Signed-off-by: Julio Faracco <jcfaracco@gmail.com>
> > ---
> > tools/virsh-completer-domain.c | 17 +++++++++++++++++
> > tools/virsh-completer-domain.h | 5 +++++
> > tools/virsh-domain-monitor.c | 1 +
> > 3 files changed, 23 insertions(+)
> >
> > diff --git a/tools/virsh-completer-domain.c b/tools/virsh-completer-domain.c
> > index 0311ee50d0..c8709baa38 100644
> > --- a/tools/virsh-completer-domain.c
> > +++ b/tools/virsh-completer-domain.c
> > @@ -296,3 +296,20 @@ virshDomainShutdownModeCompleter(vshControl *ctl,
> >
> > return virshCommaStringListComplete(mode, modes);
> > }
> > +
> > +
> > +char **
> > +virshDomainIfAddrSourceCompleter(vshControl *ctl,
> > + const vshCmd *cmd,
> > + unsigned int flags)
> > +{
> > + const char *sources[] = {"lease", "agent", "arp", NULL};
> > + const char *source = NULL;
> > +
> > + virCheckFlags(0, NULL);
> > +
> > + if (vshCommandOptStringQuiet(ctl, cmd, "source", &source) < 0)
> > + return NULL;
> > +
> > + return virshCommaStringListComplete(source, sources);
>
> Actually, I don't think this is coorect. This helper completes a string
> list separated by commas, for instance a shutdown mode where more than
> one string (method) can be used:
>
> virsh shutdown --mode acpi,agent,signal
>
> But this is not the case for domifaddr --source, is it? It accepts
> exactly one string. I know Erik pushed this, so I will post a fix up
> later. Stay tuned.
>
> Michal
>
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On 1/3/20 4:56 PM, Julio Faracco wrote:
> Michal,
>
> This case of comma separated options, can we include a comma after
> completion by default?
> I.e.:
>
> virsh # domifaddr 1 --source [TAB]
> agent arp lease
> virsh # domifaddr 1 --source ar[TAB]
> virsh # domifaddr 1 --source arp,
>
> This is easy to test and avoid mistakes.
BTW: --source doesn't accept multiple values.
But anyway, for that we would need to change the way we parse the
argument value because for instance:
virsh shutdown --mode agent, fedora
is not viewed as valid command by current implementation:
error: Unknown mode value, expecting 'acpi', 'agent', 'initctl',
'signal', or 'paravirt'
The fix for this is pretty simple:
index 9315755990..e3daa7d015 100644
--- i/tools/virsh-domain.c
+++ w/tools/virsh-domain.c
@@ -5847 +5847 @@ cmdShutdown(vshControl *ctl, const vshCmd *cmd)
- while (tmp && *tmp) {
+ while (tmp && *tmp && **tmp) {
But the question is, should we? I mean, this way of accepting multiple
values is pretty unique. I haven't seen any other CLI tool like it
(except for QEMU obviously) so I don't see any behaviour we could mimic.
And I find comma at the end a bit ugly looking.
Michal
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2026 Red Hat, Inc.