* [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; 5+ 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] 5+ 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; 5+ 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] 5+ 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; 5+ 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] 5+ 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; 5+ 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] 5+ 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; 5+ 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] 5+ messages in thread
end of thread, other threads:[~2012-02-22 18:54 UTC | newest]
Thread overview: 5+ 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
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).