[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH for-2.11 v2 4/5] qmp-shell: Accept QMP command a
From: |
Eduardo Habkost |
Subject: |
Re: [Qemu-devel] [PATCH for-2.11 v2 4/5] qmp-shell: Accept QMP command as argument |
Date: |
Tue, 15 Aug 2017 17:39:09 -0300 |
User-agent: |
Mutt/1.8.0 (2017-02-23) |
On Tue, Aug 15, 2017 at 12:03:53PM +0200, Markus Armbruster wrote:
> Eduardo Habkost <address@hidden> writes:
>
> Suggest to insert here:
>
> If additional arguments QMP-COMMAND ARG=VAL... are given, run just
> that QMP command instead of the REPL.
>
> Question: is this limited to simple arguments? If no, how would I write
> an object argument? For instance, how would I do
>
> { "execute": "blockdev-add", "arguments": { "node-name": "foo", "driver":
> "nbd", "server": { "type": "inet", "host": "localhost", "port": "12345" } } }
>
> ?
Exactly the same way you would write it when running qmp-shell in
interactive mode. e.g.:
$ ./scripts/qmp/qmp-shell /tmp/qmp blockdev-add driver=qcow2 node-name=node-E
'file={"driver":"file","filename":"/path/to/file.qcow2"}'
>
> > This is useful for testing QMP commands in scripts.
> >
> > Example usage, combined with 'jq' for filtering the results:
> >
> > $ ./scripts/qmp/qmp-shell /tmp/qmp qom-list path=/ | jq -r .return[].name
> > machine
> > type
> > chardevs
> > backend
>
> What's jq?
https://stedolan.github.io/jq/
"like sed for JSON data"
>
> > $
>
> Let's drop this line.
Will do it.
>
> >
> > Signed-off-by: Eduardo Habkost <address@hidden>
> > ---
> > Changes v1 -> v2:
> > * Rewritten using optparse module
> > ---
> > scripts/qmp/qmp-shell | 14 +++++++++-----
> > 1 file changed, 9 insertions(+), 5 deletions(-)
> >
> > diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
> > index 4b9a420..4b7374e 100755
> > --- a/scripts/qmp/qmp-shell
> > +++ b/scripts/qmp/qmp-shell
> > @@ -400,7 +400,7 @@ def die(msg):
> >
> > def main():
> > parser = optparse.OptionParser(description='QMP shell utility')
> > - parser.set_usage("%prog [options] <UNIX socket path> | <TCP
> > address:port>")
> > + parser.set_usage("%prog [options] <UNIX socket path> | <TCP
> > address:port> [COMMAND [ARG=VALUE]...]")
> > parser.add_option('-v', action='store_true', dest='verbose',
> > help='Verbose (echo command sent and received)')
> > parser.add_option('-p', action='store_true', dest='pretty',
> > @@ -411,10 +411,11 @@ def main():
> > default=True, help='Skip negotiate (for qemu-ga)')
> > opts,args = parser.parse_args()
> >
> > - if len(args) != 1:
> > + if len(args) < 1:
> > parser.print_help(sys.stderr)
> > sys.exit(1)
> > addr = args[0]
> > + cmdargs = args[1:]
> >
> > try:
> > if opts.hmp:
> > @@ -433,10 +434,13 @@ def main():
> > except qemu.error:
> > die('Could not connect to %s' % addr)
> >
> > - qemu.show_banner()
> > qemu.set_verbosity(opts.verbose)
> > - while qemu.read_exec_command(qemu.get_prompt()):
> > - pass
> > + if len(cmdargs):
>
> Superfluous len().
Will fix it in the next version.
>
> > + qemu.execute_cmdargs(cmdargs)
> > + else:
> > + qemu.show_banner()
> > + while qemu.read_exec_command(qemu.get_prompt()):
> > + pass
> > qemu.close()
> >
> > if __name__ == '__main__':
--
Eduardo
- Re: [Qemu-devel] [PATCH for-2.11 v2 1/5] qmp-shell: Use optparse module, (continued)
Re: [Qemu-devel] [PATCH for-2.11 v2 1/5] qmp-shell: Use optparse module, Daniel P. Berrange, 2017/08/15
[Qemu-devel] [PATCH for-2.11 v2 2/5] qmp-shell: Pass split cmdargs to __build_cmd(), Eduardo Habkost, 2017/08/08
[Qemu-devel] [PATCH for-2.11 v2 3/5] qmp-shell: execute_cmdargs() method, Eduardo Habkost, 2017/08/08
[Qemu-devel] [PATCH for-2.11 v2 4/5] qmp-shell: Accept QMP command as argument, Eduardo Habkost, 2017/08/08
[Qemu-devel] [PATCH for-2.11 v2 5/5] Remove scripts/qmp/qmp, Eduardo Habkost, 2017/08/08