qemu/scripts/qmp/qom-tree
<<
>>
Prefs
   1#!/usr/bin/python
   2##
   3# QEMU Object Model test tools
   4#
   5# Copyright IBM, Corp. 2011
   6# Copyright (c) 2013 SUSE LINUX Products GmbH
   7#
   8# Authors:
   9#  Anthony Liguori   <aliguori@amazon.com>
  10#  Andreas Faerber   <afaerber@suse.de>
  11#
  12# This work is licensed under the terms of the GNU GPL, version 2 or later.  See
  13# the COPYING file in the top-level directory.
  14##
  15
  16import sys
  17import os
  18from qmp import QEMUMonitorProtocol
  19
  20cmd, args = sys.argv[0], sys.argv[1:]
  21socket_path = None
  22path = None
  23prop = None
  24
  25def usage():
  26    return '''environment variables:
  27    QMP_SOCKET=<path | addr:port>
  28usage:
  29    %s [-h] [-s <QMP socket path | addr:port>] [<path>]
  30''' % cmd
  31
  32def usage_error(error_msg = "unspecified error"):
  33    sys.stderr.write('%s\nERROR: %s\n' % (usage(), error_msg))
  34    exit(1)
  35
  36if len(args) > 0:
  37    if args[0] == "-h":
  38        print usage()
  39        exit(0);
  40    elif args[0] == "-s":
  41        try:
  42            socket_path = args[1]
  43        except:
  44            usage_error("missing argument: QMP socket path or address");
  45        args = args[2:]
  46
  47if not socket_path:
  48    if os.environ.has_key('QMP_SOCKET'):
  49        socket_path = os.environ['QMP_SOCKET']
  50    else:
  51        usage_error("no QMP socket path or address given");
  52
  53srv = QEMUMonitorProtocol(socket_path)
  54srv.connect()
  55
  56def list_node(path):
  57    print '%s' % path
  58    items = srv.command('qom-list', path=path)
  59    for item in items:
  60        if not item['type'].startswith('child<'):
  61            try:
  62                print '  %s: %s (%s)' % (item['name'], srv.command('qom-get', path=path, property=item['name']), item['type'])
  63            except:
  64                print '  %s: <EXCEPTION> (%s)' % (item['name'], item['type'])
  65    print ''
  66    for item in items:
  67        if item['type'].startswith('child<'):
  68            list_node((path if (path != '/') else '')  + '/' + item['name'])
  69
  70if len(args) == 0:
  71    path = '/'
  72else:
  73    path = args[0]
  74
  75list_node(path)
  76