virsh: Implement support for virDomainQemuMonitorCommandWithFiles

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2022-01-28 09:24:03 +01:00
parent f87fa77ca9
commit 43edde82af
2 changed files with 23 additions and 2 deletions

View File

@ -7897,7 +7897,8 @@ qemu-monitor-command
::
qemu-monitor-command domain { [--hmp] | [--pretty] [--return-value] } command...
qemu-monitor-command domain { [--hmp] | [--pretty] [--return-value] }
[--pass-fds N,M,...] command...
Send an arbitrary monitor command *command* to domain *domain* through the
QEMU monitor. The results of the command will be printed on stdout.
@ -7930,6 +7931,9 @@ extracted rather than passing through the full reply from QEMU.
If *--hmp* is passed, the command is considered to be a human monitor command
and libvirt will automatically convert it into QMP and convert the result back.
If *--pass-fds* is specified, the argument is a comma separated list
of open file descriptors which should be passed on to qemu along with the
command.
qemu-agent-command
------------------

View File

@ -9721,6 +9721,11 @@ static const vshCmdOptDef opts_qemu_monitor_command[] = {
.type = VSH_OT_BOOL,
.help = N_("extract the value of the 'return' key from the returned string")
},
{.name = "pass-fds",
.type = VSH_OT_STRING,
.completer = virshCompleteEmpty,
.help = N_("pass file descriptors N,M,... along with the command")
},
{.name = "cmd",
.type = VSH_OT_ARGV,
.flags = VSH_OFLAG_REQ,
@ -9819,6 +9824,8 @@ cmdQemuMonitorCommand(vshControl *ctl, const vshCmd *cmd)
bool returnval = vshCommandOptBool(cmd, "return-value");
virJSONValue *formatjson;
g_autofree char *jsonstr = NULL;
g_autofree int *fds = NULL;
size_t nfds = 0;
VSH_EXCLUSIVE_OPTIONS("hmp", "pretty");
VSH_EXCLUSIVE_OPTIONS("hmp", "return-value");
@ -9838,9 +9845,19 @@ cmdQemuMonitorCommand(vshControl *ctl, const vshCmd *cmd)
return NULL;
}
if (virDomainQemuMonitorCommand(dom, monitor_cmd, &result, flags) < 0)
if (virshFetchPassFdsList(ctl, cmd, &nfds, &fds) < 0)
return false;
if (fds) {
if (virDomainQemuMonitorCommandWithFiles(dom, monitor_cmd, nfds, fds,
NULL, NULL,
&result, flags) < 0)
return false;
} else {
if (virDomainQemuMonitorCommand(dom, monitor_cmd, &result, flags) < 0)
return false;
}
if (returnval || pretty) {
resultjson = virJSONValueFromString(result);