Call me lazy, but:
virsh qemu-monitor-command dom --hmp info status
is nicer than:
virsh qemu-monitor-command dom --hmp 'info status'
* tools/virsh.c (cmdQemuMonitorCommand): Allow multiple arguments,
for convenience.
---
tools/virsh.c | 19 +++++++++++++++----
tools/virsh.pod | 6 ++++--
2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/tools/virsh.c b/tools/virsh.c
index 51ba0a8..c094911 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -12476,8 +12476,8 @@ 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")},
- {"cmd", VSH_OT_DATA, VSH_OFLAG_REQ, N_("command")},
{"hmp", VSH_OT_BOOL, 0, N_("command is in human monitor
protocol")},
+ {"cmd", VSH_OT_ARGV, VSH_OFLAG_REQ, N_("command")},
{NULL, 0, 0, NULL}
};
@@ -12486,9 +12486,12 @@ cmdQemuMonitorCommand(vshControl *ctl, const vshCmd *cmd)
{
virDomainPtr dom = NULL;
bool ret = false;
- const char *monitor_cmd = NULL;
+ char *monitor_cmd = NULL;
char *result = NULL;
unsigned int flags = 0;
+ const vshCmdOpt *opt = NULL;
+ virBuffer buf = VIR_BUFFER_INITIALIZER;
+ bool pad = false;
if (!vshConnectionUsability(ctl, ctl->conn))
goto cleanup;
@@ -12497,10 +12500,17 @@ cmdQemuMonitorCommand(vshControl *ctl, const vshCmd *cmd)
if (dom == NULL)
goto cleanup;
- if (vshCommandOptString(cmd, "cmd", &monitor_cmd) <= 0) {
- vshError(ctl, "%s", _("missing monitor command"));
+ while ((opt = vshCommandOptArgv(cmd, opt))) {
+ if (pad)
+ virBufferAddChar(&buf, ' ');
+ pad = true;
+ virBufferAdd(&buf, opt->data, -1);
+ }
+ if (virBufferError(&buf)) {
+ vshPrint(ctl, "%s", _("Failed to collect command"));
goto cleanup;
}
+ monitor_cmd = virBufferContentAndReset(&buf);
if (vshCommandOptBool(cmd, "hmp"))
flags |= VIR_DOMAIN_QEMU_MONITOR_COMMAND_HMP;
@@ -12514,6 +12524,7 @@ cmdQemuMonitorCommand(vshControl *ctl, const vshCmd *cmd)
cleanup:
VIR_FREE(result);
+ VIR_FREE(monitor_cmd);
if (dom)
virDomainFree(dom);
diff --git a/tools/virsh.pod b/tools/virsh.pod
index 1893c23..11a13fd 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -1689,13 +1689,15 @@ attaching to an externally launched QEMU process. There may be
issues with the guest ABI changing upon migration, and hotunplug
may not work.
-=item B<qemu-monitor-command> I<domain> I<command> [I<--hmp>]
+=item B<qemu-monitor-command> I<domain> [I<--hmp>] I<command>...
Send an arbitrary monitor command I<command> to domain I<domain> through the
qemu monitor. The results of the command will be printed on stdout. If
I<--hmp> is passed, the command is considered to be a human monitor command
and libvirt will automatically convert it into QMP if needed. In that case
-the result will also be converted back from QMP.
+the result will also be converted back from QMP. If more than one argument
+is provided for I<command>, they are concatenated with a space in between
+before passing the single command to the monitor.
=back
--
1.7.4.4