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}
};
{
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;
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;
cleanup:
VIR_FREE(result);
+ VIR_FREE(monitor_cmd);
if (dom)
virDomainFree(dom);
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