122f3946bSLuiz Capitulino#!/usr/bin/python 222f3946bSLuiz Capitulino## 322f3946bSLuiz Capitulino# QEMU Object Model test tools 422f3946bSLuiz Capitulino# 522f3946bSLuiz Capitulino# Copyright IBM, Corp. 2011 622f3946bSLuiz Capitulino# 722f3946bSLuiz Capitulino# Authors: 822f3946bSLuiz Capitulino# Anthony Liguori <aliguori@us.ibm.com> 922f3946bSLuiz Capitulino# 1022f3946bSLuiz Capitulino# This work is licensed under the terms of the GNU GPL, version 2 or later. See 1122f3946bSLuiz Capitulino# the COPYING file in the top-level directory. 1222f3946bSLuiz Capitulino## 1322f3946bSLuiz Capitulino 14*f03868bdSEduardo Habkostfrom __future__ import print_function 1522f3946bSLuiz Capitulinoimport sys 1622f3946bSLuiz Capitulinoimport os 1722f3946bSLuiz Capitulinofrom qmp import QEMUMonitorProtocol 1822f3946bSLuiz Capitulino 1922f3946bSLuiz Capitulinocmd, args = sys.argv[0], sys.argv[1:] 2022f3946bSLuiz Capitulinosocket_path = None 2122f3946bSLuiz Capitulinopath = None 2222f3946bSLuiz Capitulinoprop = None 2322f3946bSLuiz Capitulino 2422f3946bSLuiz Capitulinodef usage(): 2522f3946bSLuiz Capitulino return '''environment variables: 2622f3946bSLuiz Capitulino QMP_SOCKET=<path | addr:port> 2722f3946bSLuiz Capitulinousage: 2822f3946bSLuiz Capitulino %s [-h] [-s <QMP socket path | addr:port>] <path>.<property> 2922f3946bSLuiz Capitulino''' % cmd 3022f3946bSLuiz Capitulino 3122f3946bSLuiz Capitulinodef usage_error(error_msg = "unspecified error"): 3222f3946bSLuiz Capitulino sys.stderr.write('%s\nERROR: %s\n' % (usage(), error_msg)) 3322f3946bSLuiz Capitulino exit(1) 3422f3946bSLuiz Capitulino 3522f3946bSLuiz Capitulinoif len(args) > 0: 3622f3946bSLuiz Capitulino if args[0] == "-h": 37*f03868bdSEduardo Habkost print(usage()) 3822f3946bSLuiz Capitulino exit(0); 3922f3946bSLuiz Capitulino elif args[0] == "-s": 4022f3946bSLuiz Capitulino try: 4122f3946bSLuiz Capitulino socket_path = args[1] 4222f3946bSLuiz Capitulino except: 4322f3946bSLuiz Capitulino usage_error("missing argument: QMP socket path or address"); 4422f3946bSLuiz Capitulino args = args[2:] 4522f3946bSLuiz Capitulino 4622f3946bSLuiz Capitulinoif not socket_path: 4722f3946bSLuiz Capitulino if os.environ.has_key('QMP_SOCKET'): 4822f3946bSLuiz Capitulino socket_path = os.environ['QMP_SOCKET'] 4922f3946bSLuiz Capitulino else: 5022f3946bSLuiz Capitulino usage_error("no QMP socket path or address given"); 5122f3946bSLuiz Capitulino 5222f3946bSLuiz Capitulinoif len(args) > 0: 5322f3946bSLuiz Capitulino try: 5422f3946bSLuiz Capitulino path, prop = args[0].rsplit('.', 1) 5522f3946bSLuiz Capitulino except: 5622f3946bSLuiz Capitulino usage_error("invalid format for path/property/value") 5722f3946bSLuiz Capitulinoelse: 5822f3946bSLuiz Capitulino usage_error("not enough arguments") 5922f3946bSLuiz Capitulino 6022f3946bSLuiz Capitulinosrv = QEMUMonitorProtocol(socket_path) 6122f3946bSLuiz Capitulinosrv.connect() 6222f3946bSLuiz Capitulino 6322f3946bSLuiz Capitulinorsp = srv.command('qom-get', path=path, property=prop) 6422f3946bSLuiz Capitulinoif type(rsp) == dict: 6522f3946bSLuiz Capitulino for i in rsp.keys(): 66*f03868bdSEduardo Habkost print('%s: %s' % (i, rsp[i])) 6722f3946bSLuiz Capitulinoelse: 68*f03868bdSEduardo Habkost print(rsp) 69