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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list