qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [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).