* [Qemu-devel] [PATCH v2 0/2] qom: add test tools (resend from "qom: dynamic properties") @ 2012-02-20 22:28 Michael Roth 2012-02-20 22:28 ` [Qemu-devel] [PATCH 1/2] qmp: make qmp.py easier to use Michael Roth ` (2 more replies) 0 siblings, 3 replies; 6+ messages in thread From: Michael Roth @ 2012-02-20 22:28 UTC (permalink / raw) To: qemu-devel; +Cc: aliguori CHANGES SINCE V2: - this one actually works :) QMP_SOCKET env variable wasn't being handled properly in the last version. AFAICT the qom tool got dropped from Anthony's "qom: dynamic properties and composition tree" series due to some hardcoded paths for the QMP socket. I've since ended up adding support for user-specified paths to get them working in my environment so I figured I'd resend to the list since I've seen others express interest. Only functional change for existing users would be the need to set your QMP_SOCKET env variable to the previous default (/tmp/server.sock): mdroth@illuin:~$ qom-set -h environment variables: QMP_SOCKET=<path | addr:port> usage: /home/mdroth/bin/qom-set [-h] [-s <QMP socket path | addr:port>] <path>.<property> <value> mdroth@illuin:~$ qom-get -h environment variables: QMP_SOCKET=<path | addr:port> usage: /home/mdroth/bin/qom-get [-h] [-s <QMP socket path | addr:port>] <path>.<property> mdroth@illuin:~$ qom-list -h environment variables: QMP_SOCKET=<path | addr:port> usage: /home/mdroth/bin/qom-list [-h] [-s <QMP socket path | addr:port>] [<path>] mdroth@illuin:~$ ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 1/2] qmp: make qmp.py easier to use 2012-02-20 22:28 [Qemu-devel] [PATCH v2 0/2] qom: add test tools (resend from "qom: dynamic properties") Michael Roth @ 2012-02-20 22:28 ` Michael Roth 2012-02-20 22:28 ` [Qemu-devel] [PATCH 2/2] qom: add test tools Michael Roth 2012-02-22 18:54 ` [Qemu-devel] [PATCH v2 0/2] qom: add test tools (resend from "qom: dynamic properties") Anthony Liguori 2 siblings, 0 replies; 6+ messages in thread From: Michael Roth @ 2012-02-20 22:28 UTC (permalink / raw) To: qemu-devel; +Cc: aliguori From: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com> --- QMP/qmp.py | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/QMP/qmp.py b/QMP/qmp.py index c7dbea0..36ecc1d 100644 --- a/QMP/qmp.py +++ b/QMP/qmp.py @@ -128,6 +128,12 @@ class QEMUMonitorProtocol: qmp_cmd['id'] = id return self.cmd_obj(qmp_cmd) + def command(self, cmd, **kwds): + ret = self.cmd(cmd, kwds) + if ret.has_key('error'): + raise Exception(ret['error']['desc']) + return ret['return'] + def get_events(self, wait=False): """ Get a list of available QMP events. -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 2/2] qom: add test tools 2012-02-20 22:28 [Qemu-devel] [PATCH v2 0/2] qom: add test tools (resend from "qom: dynamic properties") Michael Roth 2012-02-20 22:28 ` [Qemu-devel] [PATCH 1/2] qmp: make qmp.py easier to use Michael Roth @ 2012-02-20 22:28 ` Michael Roth 2012-02-22 1:03 ` Andreas Färber 2012-02-22 18:54 ` [Qemu-devel] [PATCH v2 0/2] qom: add test tools (resend from "qom: dynamic properties") Anthony Liguori 2 siblings, 1 reply; 6+ messages in thread From: Michael Roth @ 2012-02-20 22:28 UTC (permalink / raw) To: qemu-devel; +Cc: aliguori From: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com> --- QMP/qom-get | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ QMP/qom-list | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ QMP/qom-set | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 195 insertions(+), 0 deletions(-) create mode 100755 QMP/qom-get create mode 100755 QMP/qom-list create mode 100755 QMP/qom-set diff --git a/QMP/qom-get b/QMP/qom-get new file mode 100755 index 0000000..0172c69 --- /dev/null +++ b/QMP/qom-get @@ -0,0 +1,67 @@ +#!/usr/bin/python +## +# QEMU Object Model test tools +# +# Copyright IBM, Corp. 2011 +# +# Authors: +# Anthony Liguori <aliguori@us.ibm.com> +# +# This work is licensed under the terms of the GNU GPL, version 2 or later. See +# the COPYING file in the top-level directory. +## + +import sys +import os +from qmp import QEMUMonitorProtocol + +cmd, args = sys.argv[0], sys.argv[1:] +socket_path = None +path = None +prop = None + +def usage(): + return '''environment variables: + QMP_SOCKET=<path | addr:port> +usage: + %s [-h] [-s <QMP socket path | addr:port>] <path>.<property> +''' % cmd + +def usage_error(error_msg = "unspecified error"): + sys.stderr.write('%s\nERROR: %s\n' % (usage(), error_msg)) + exit(1) + +if len(args) > 0: + if args[0] == "-h": + print usage() + exit(0); + elif args[0] == "-s": + try: + socket_path = args[1] + except: + usage_error("missing argument: QMP socket path or address"); + args = args[2:] + +if not socket_path: + if os.environ.has_key('QMP_SOCKET'): + socket_path = os.environ['QMP_SOCKET'] + else: + usage_error("no QMP socket path or address given"); + +if len(args) > 0: + try: + path, prop = args[0].rsplit('.', 1) + except: + usage_error("invalid format for path/property/value") +else: + usage_error("not enough arguments") + +srv = QEMUMonitorProtocol(socket_path) +srv.connect() + +rsp = srv.command('qom-get', path=path, property=prop) +if type(rsp) == dict: + for i in rsp.keys(): + print '%s: %s' % (i, rsp[i]) +else: + print rsp diff --git a/QMP/qom-list b/QMP/qom-list new file mode 100755 index 0000000..1e7cc6c --- /dev/null +++ b/QMP/qom-list @@ -0,0 +1,64 @@ +#!/usr/bin/python +## +# QEMU Object Model test tools +# +# Copyright IBM, Corp. 2011 +# +# Authors: +# Anthony Liguori <aliguori@us.ibm.com> +# +# This work is licensed under the terms of the GNU GPL, version 2 or later. See +# the COPYING file in the top-level directory. +## + +import sys +import os +from qmp import QEMUMonitorProtocol + +cmd, args = sys.argv[0], sys.argv[1:] +socket_path = None +path = None +prop = None + +def usage(): + return '''environment variables: + QMP_SOCKET=<path | addr:port> +usage: + %s [-h] [-s <QMP socket path | addr:port>] [<path>] +''' % cmd + +def usage_error(error_msg = "unspecified error"): + sys.stderr.write('%s\nERROR: %s\n' % (usage(), error_msg)) + exit(1) + +if len(args) > 0: + if args[0] == "-h": + print usage() + exit(0); + elif args[0] == "-s": + try: + socket_path = args[1] + except: + usage_error("missing argument: QMP socket path or address"); + args = args[2:] + +if not socket_path: + if os.environ.has_key('QMP_SOCKET'): + socket_path = os.environ['QMP_SOCKET'] + else: + usage_error("no QMP socket path or address given"); + +srv = QEMUMonitorProtocol(socket_path) +srv.connect() + +if len(args) == 0: + print '/' + sys.exit(0) + +for item in srv.command('qom-list', path=args[0]): + if item['type'].startswith('child<'): + print '%s/' % item['name'] + elif item['type'].startswith('link<'): + print '@%s/' % item['name'] + else: + print '%s' % item['name'] diff --git a/QMP/qom-set b/QMP/qom-set new file mode 100755 index 0000000..54ecfec --- /dev/null +++ b/QMP/qom-set @@ -0,0 +1,64 @@ +#!/usr/bin/python +## +# QEMU Object Model test tools +# +# Copyright IBM, Corp. 2011 +# +# Authors: +# Anthony Liguori <aliguori@us.ibm.com> +# +# This work is licensed under the terms of the GNU GPL, version 2 or later. See +# the COPYING file in the top-level directory. +## + +import sys +import os +from qmp import QEMUMonitorProtocol + +cmd, args = sys.argv[0], sys.argv[1:] +socket_path = None +path = None +prop = None +value = None + +def usage(): + return '''environment variables: + QMP_SOCKET=<path | addr:port> +usage: + %s [-h] [-s <QMP socket path | addr:port>] <path>.<property> <value> +''' % cmd + +def usage_error(error_msg = "unspecified error"): + sys.stderr.write('%s\nERROR: %s\n' % (usage(), error_msg)) + exit(1) + +if len(args) > 0: + if args[0] == "-h": + print usage() + exit(0); + elif args[0] == "-s": + try: + socket_path = args[1] + except: + usage_error("missing argument: QMP socket path or address"); + args = args[2:] + +if not socket_path: + if os.environ.has_key('QMP_SOCKET'): + socket_path = os.environ['QMP_SOCKET'] + else: + usage_error("no QMP socket path or address given"); + +if len(args) > 1: + try: + path, prop = args[0].rsplit('.', 1) + except: + usage_error("invalid format for path/property/value") + value = args[1] +else: + usage_error("not enough arguments") + +srv = QEMUMonitorProtocol(socket_path) +srv.connect() + +print srv.command('qom-set', path=path, property=prop, value=sys.argv[2]) -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] qom: add test tools 2012-02-20 22:28 ` [Qemu-devel] [PATCH 2/2] qom: add test tools Michael Roth @ 2012-02-22 1:03 ` Andreas Färber 0 siblings, 0 replies; 6+ messages in thread From: Andreas Färber @ 2012-02-22 1:03 UTC (permalink / raw) To: Michael Roth; +Cc: Paolo Bonzini, aliguori, qemu-devel Am 20.02.2012 23:28, schrieb Michael Roth: > From: Anthony Liguori <aliguori@us.ibm.com> > > Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> > Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com> Tested-by: Andreas Färber <afaerber@suse.de> Thanks, these are really handy! :-) Since it's three independent scripts, it might make sense to split this into three commits? Andreas > --- > QMP/qom-get | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > QMP/qom-list | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > QMP/qom-set | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 195 insertions(+), 0 deletions(-) > create mode 100755 QMP/qom-get > create mode 100755 QMP/qom-list > create mode 100755 QMP/qom-set -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH v2 0/2] qom: add test tools (resend from "qom: dynamic properties") 2012-02-20 22:28 [Qemu-devel] [PATCH v2 0/2] qom: add test tools (resend from "qom: dynamic properties") Michael Roth 2012-02-20 22:28 ` [Qemu-devel] [PATCH 1/2] qmp: make qmp.py easier to use Michael Roth 2012-02-20 22:28 ` [Qemu-devel] [PATCH 2/2] qom: add test tools Michael Roth @ 2012-02-22 18:54 ` Anthony Liguori 2 siblings, 0 replies; 6+ messages in thread From: Anthony Liguori @ 2012-02-22 18:54 UTC (permalink / raw) To: Michael Roth; +Cc: qemu-devel On 02/20/2012 04:28 PM, Michael Roth wrote: > CHANGES SINCE V2: > - this one actually works :) QMP_SOCKET env variable wasn't being handled properly in > the last version. > > AFAICT the qom tool got dropped from Anthony's "qom: dynamic properties > and composition tree" series due to some hardcoded paths for the QMP socket. > > I've since ended up adding support for user-specified paths to get them working > in my environment so I figured I'd resend to the list since I've seen others > express interest. > > Only functional change for existing users would be the need to set your > QMP_SOCKET env variable to the previous default (/tmp/server.sock): Applied. Thanks. Regards, Anthony Liguori > > mdroth@illuin:~$ qom-set -h > environment variables: > QMP_SOCKET=<path | addr:port> > usage: > /home/mdroth/bin/qom-set [-h] [-s<QMP socket path | addr:port>]<path>.<property> <value> > > mdroth@illuin:~$ qom-get -h > environment variables: > QMP_SOCKET=<path | addr:port> > usage: > /home/mdroth/bin/qom-get [-h] [-s<QMP socket path | addr:port>]<path>.<property> > > mdroth@illuin:~$ qom-list -h > environment variables: > QMP_SOCKET=<path | addr:port> > usage: > /home/mdroth/bin/qom-list [-h] [-s<QMP socket path | addr:port>] [<path>] > > mdroth@illuin:~$ > > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Qemu-devel] qom: add test tools (resend from "qom: dynamic properties") @ 2012-02-20 20:50 Michael Roth 2012-02-20 20:50 ` [Qemu-devel] [PATCH 2/2] qom: add test tools Michael Roth 0 siblings, 1 reply; 6+ messages in thread From: Michael Roth @ 2012-02-20 20:50 UTC (permalink / raw) To: qemu-devel; +Cc: aliguori AFAICT tell the qom tool got dropped from Anthony's "qom: dynamic properties and composition tree" series due to some hardcoded paths for the QMP socket. I've since ended up adding support for user-specified paths to get them working in my environment so I figured I'd resend to the list since I've seen others express interest. Only functional change for existing users would be the need to set your QMP_SOCKET env variable to the previously hard-coded path: mdroth@illuin:~$ qom-set -h environment variables: QMP_SOCKET=<path | addr:port> usage: /home/mdroth/bin/qom-set [-h] [-s <QMP socket path | addr:port>] <path>.<property> <value> mdroth@illuin:~$ qom-get -h environment variables: QMP_SOCKET=<path | addr:port> usage: /home/mdroth/bin/qom-get [-h] [-s <QMP socket path | addr:port>] <path>.<property> mdroth@illuin:~$ qom-list -h environment variables: QMP_SOCKET=<path | addr:port> usage: /home/mdroth/bin/qom-list [-h] [-s <QMP socket path | addr:port>] [<path>] ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 2/2] qom: add test tools 2012-02-20 20:50 [Qemu-devel] " Michael Roth @ 2012-02-20 20:50 ` Michael Roth 0 siblings, 0 replies; 6+ messages in thread From: Michael Roth @ 2012-02-20 20:50 UTC (permalink / raw) To: qemu-devel; +Cc: aliguori From: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com> --- QMP/qom-get | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ QMP/qom-list | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ QMP/qom-set | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 189 insertions(+), 0 deletions(-) create mode 100755 QMP/qom-get create mode 100755 QMP/qom-list create mode 100755 QMP/qom-set diff --git a/QMP/qom-get b/QMP/qom-get new file mode 100755 index 0000000..cb824bc --- /dev/null +++ b/QMP/qom-get @@ -0,0 +1,65 @@ +#!/usr/bin/python +## +# QEMU Object Model test tools +# +# Copyright IBM, Corp. 2011 +# +# Authors: +# Anthony Liguori <aliguori@us.ibm.com> +# +# This work is licensed under the terms of the GNU GPL, version 2 or later. See +# the COPYING file in the top-level directory. +## + +import sys +import os +from qmp import QEMUMonitorProtocol + +cmd, args = sys.argv[0], sys.argv[1:] +socket_path = None +path = None +prop = None + +def usage(): + return '''environment variables: + QMP_SOCKET=<path | addr:port> +usage: + %s [-h] [-s <QMP socket path | addr:port>] <path>.<property> +''' % cmd + +def usage_error(error_msg = "unspecified error"): + sys.stderr.write('%s\nERROR: %s\n' % (usage(), error_msg)) + exit(1) + +if len(args) > 0: + if args[0] == "-h": + print usage() + exit(0); + elif args[0] == "-s": + try: + socket_path = args[1] + except: + usage_error("missing argument: QMP socket path or address"); + args = args[2:] +elif os.environ.has_key('QMP_SOCKET'): + socket_path = os.environ['QMP_SOCKET'] +else: + usage_error("no QMP socket path or address given"); + +if len(args) > 0: + try: + path, prop = args[0].rsplit('.', 1) + except: + usage_error("invalid format for path/property/value") +else: + usage_error("not enough arguments") + +srv = QEMUMonitorProtocol(socket_path) +srv.connect() + +rsp = srv.command('qom-get', path=path, property=prop) +if type(rsp) == dict: + for i in rsp.keys(): + print '%s: %s' % (i, rsp[i]) +else: + print rsp diff --git a/QMP/qom-list b/QMP/qom-list new file mode 100755 index 0000000..73225e6 --- /dev/null +++ b/QMP/qom-list @@ -0,0 +1,62 @@ +#!/usr/bin/python +## +# QEMU Object Model test tools +# +# Copyright IBM, Corp. 2011 +# +# Authors: +# Anthony Liguori <aliguori@us.ibm.com> +# +# This work is licensed under the terms of the GNU GPL, version 2 or later. See +# the COPYING file in the top-level directory. +## + +import sys +import os +from qmp import QEMUMonitorProtocol + +cmd, args = sys.argv[0], sys.argv[1:] +socket_path = None +path = None +prop = None + +def usage(): + return '''environment variables: + QMP_SOCKET=<path | addr:port> +usage: + %s [-h] [-s <QMP socket path | addr:port>] [<path>] +''' % cmd + +def usage_error(error_msg = "unspecified error"): + sys.stderr.write('%s\nERROR: %s\n' % (usage(), error_msg)) + exit(1) + +if len(args) > 0: + if args[0] == "-h": + print usage() + exit(0); + elif args[0] == "-s": + try: + socket_path = args[1] + except: + usage_error("missing argument: QMP socket path or address"); + args = args[2:] +elif os.environ.has_key('QMP_SOCKET'): + socket_path = os.environ['QMP_SOCKET'] +else: + usage_error("no QMP socket path or address given"); + +srv = QEMUMonitorProtocol(socket_path) +srv.connect() + +if len(args) == 0: + print '/' + sys.exit(0) + +for item in srv.command('qom-list', path=args[0]): + if item['type'].startswith('child<'): + print '%s/' % item['name'] + elif item['type'].startswith('link<'): + print '@%s/' % item['name'] + else: + print '%s' % item['name'] diff --git a/QMP/qom-set b/QMP/qom-set new file mode 100755 index 0000000..e8c744e --- /dev/null +++ b/QMP/qom-set @@ -0,0 +1,62 @@ +#!/usr/bin/python +## +# QEMU Object Model test tools +# +# Copyright IBM, Corp. 2011 +# +# Authors: +# Anthony Liguori <aliguori@us.ibm.com> +# +# This work is licensed under the terms of the GNU GPL, version 2 or later. See +# the COPYING file in the top-level directory. +## + +import sys +import os +from qmp import QEMUMonitorProtocol + +cmd, args = sys.argv[0], sys.argv[1:] +socket_path = None +path = None +prop = None +value = None + +def usage(): + return '''environment variables: + QMP_SOCKET=<path | addr:port> +usage: + %s [-h] [-s <QMP socket path | addr:port>] <path>.<property> <value> +''' % cmd + +def usage_error(error_msg = "unspecified error"): + sys.stderr.write('%s\nERROR: %s\n' % (usage(), error_msg)) + exit(1) + +if len(args) > 0: + if args[0] == "-h": + print usage() + exit(0); + elif args[0] == "-s": + try: + socket_path = args[1] + except: + usage_error("missing argument: QMP socket path or address"); + args = args[2:] +elif os.environ.has_key('QMP_SOCKET'): + socket_path = os.environ['QMP_SOCKET'] +else: + usage_error("no QMP socket path or address given"); + +if len(args) > 1: + try: + path, prop = args[0].rsplit('.', 1) + except: + usage_error("invalid format for path/property/value") + value = args[1] +else: + usage_error("not enough arguments") + +srv = QEMUMonitorProtocol(socket_path) +srv.connect() + +print srv.command('qom-set', path=path, property=prop, value=sys.argv[2]) -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2012-02-22 18:54 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-02-20 22:28 [Qemu-devel] [PATCH v2 0/2] qom: add test tools (resend from "qom: dynamic properties") Michael Roth 2012-02-20 22:28 ` [Qemu-devel] [PATCH 1/2] qmp: make qmp.py easier to use Michael Roth 2012-02-20 22:28 ` [Qemu-devel] [PATCH 2/2] qom: add test tools Michael Roth 2012-02-22 1:03 ` Andreas Färber 2012-02-22 18:54 ` [Qemu-devel] [PATCH v2 0/2] qom: add test tools (resend from "qom: dynamic properties") Anthony Liguori -- strict thread matches above, loose matches on Subject: below -- 2012-02-20 20:50 [Qemu-devel] " Michael Roth 2012-02-20 20:50 ` [Qemu-devel] [PATCH 2/2] qom: add test tools Michael Roth
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).