Signed-off-by: Chris Lalancette <clalance@xxxxxxxxxx> --- tools/Makefile.am | 1 + tools/virsh.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 0 deletions(-) diff --git a/tools/Makefile.am b/tools/Makefile.am index 33a3216..b1c2691 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -39,6 +39,7 @@ virsh_LDADD = \ $(STATIC_BINARIES) \ $(WARN_CFLAGS) \ ../src/libvirt.la \ + ../src/libvirt_qemu.la \ ../gnulib/lib/libgnu.la \ $(VIRSH_LIBS) virsh_CFLAGS = \ diff --git a/tools/virsh.c b/tools/virsh.c index d5fe6c4..9511646 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -8627,6 +8627,70 @@ cleanup: } /* + * "monitor-command" command + */ +static const vshCmdInfo info_monitor_command[] = { + {"help", N_("Monitor Command")}, + {"desc", N_("Monitor Command")}, + {NULL, NULL} +}; + +static const vshCmdOptDef opts_monitor_command[] = { + {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, + {"cmd", VSH_OT_DATA, VSH_OFLAG_REQ, N_("command")}, + {NULL, 0, 0, NULL} +}; + +static int +cmdMonitorCommand(vshControl *ctl, const vshCmd *cmd) +{ + virDomainPtr dom = NULL; + int ret = FALSE; + char *monitor_cmd; + char *result = NULL; + int i; + + if (!vshConnectionUsability(ctl, ctl->conn, TRUE)) + goto cleanup; + + dom = vshCommandOptDomain(ctl, cmd, NULL); + if (dom == NULL) + goto cleanup; + + monitor_cmd = vshCommandOptString(cmd, "cmd", NULL); + if (monitor_cmd == NULL) { + vshError(ctl, "%s", _("missing monitor command")); + goto cleanup; + } + + /* FIXME: HACK! For the time being I convert all ^ to space so + * that the virsh argument parsing doesn't screw us up. We should + * fix the argument parsing + */ + i = 0; + while (monitor_cmd[i] != '\0') { + if (monitor_cmd[i] == '^') + monitor_cmd[i] = ' '; + i++; + } + + if (virQemuMonitorCommand(dom, monitor_cmd, &result, 0) < 0) + goto cleanup; + + fprintf(stdout, "%s\n", result); + + ret = TRUE; + +cleanup: + VIR_FREE(result); + if (dom) + virDomainFree(dom); + + return ret; +} + + +/* * Commands */ static const vshCmdDef commands[] = { @@ -8788,6 +8852,8 @@ static const vshCmdDef commands[] = { {"snapshot-list", cmdSnapshotList, opts_snapshot_list, info_snapshot_list}, {"snapshot-revert", cmdDomainSnapshotRevert, opts_snapshot_revert, info_snapshot_revert}, + {"monitor-command", cmdMonitorCommand, opts_monitor_command, info_monitor_command}, + {NULL, NULL, NULL, NULL} }; -- 1.6.6.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list