1*22f3946bSLuiz Capitulino#!/usr/bin/python 2*22f3946bSLuiz Capitulino## 3*22f3946bSLuiz Capitulino# QEMU Object Model test tools 4*22f3946bSLuiz Capitulino# 5*22f3946bSLuiz Capitulino# Copyright IBM, Corp. 2011 6*22f3946bSLuiz Capitulino# 7*22f3946bSLuiz Capitulino# Authors: 8*22f3946bSLuiz Capitulino# Anthony Liguori <aliguori@us.ibm.com> 9*22f3946bSLuiz Capitulino# 10*22f3946bSLuiz Capitulino# This work is licensed under the terms of the GNU GPL, version 2 or later. See 11*22f3946bSLuiz Capitulino# the COPYING file in the top-level directory. 12*22f3946bSLuiz Capitulino## 13*22f3946bSLuiz Capitulino 14*22f3946bSLuiz Capitulinoimport sys 15*22f3946bSLuiz Capitulinoimport os 16*22f3946bSLuiz Capitulinofrom qmp import QEMUMonitorProtocol 17*22f3946bSLuiz Capitulino 18*22f3946bSLuiz Capitulinocmd, args = sys.argv[0], sys.argv[1:] 19*22f3946bSLuiz Capitulinosocket_path = None 20*22f3946bSLuiz Capitulinopath = None 21*22f3946bSLuiz Capitulinoprop = None 22*22f3946bSLuiz Capitulinovalue = None 23*22f3946bSLuiz Capitulino 24*22f3946bSLuiz Capitulinodef usage(): 25*22f3946bSLuiz Capitulino return '''environment variables: 26*22f3946bSLuiz Capitulino QMP_SOCKET=<path | addr:port> 27*22f3946bSLuiz Capitulinousage: 28*22f3946bSLuiz Capitulino %s [-h] [-s <QMP socket path | addr:port>] <path>.<property> <value> 29*22f3946bSLuiz Capitulino''' % cmd 30*22f3946bSLuiz Capitulino 31*22f3946bSLuiz Capitulinodef usage_error(error_msg = "unspecified error"): 32*22f3946bSLuiz Capitulino sys.stderr.write('%s\nERROR: %s\n' % (usage(), error_msg)) 33*22f3946bSLuiz Capitulino exit(1) 34*22f3946bSLuiz Capitulino 35*22f3946bSLuiz Capitulinoif len(args) > 0: 36*22f3946bSLuiz Capitulino if args[0] == "-h": 37*22f3946bSLuiz Capitulino print usage() 38*22f3946bSLuiz Capitulino exit(0); 39*22f3946bSLuiz Capitulino elif args[0] == "-s": 40*22f3946bSLuiz Capitulino try: 41*22f3946bSLuiz Capitulino socket_path = args[1] 42*22f3946bSLuiz Capitulino except: 43*22f3946bSLuiz Capitulino usage_error("missing argument: QMP socket path or address"); 44*22f3946bSLuiz Capitulino args = args[2:] 45*22f3946bSLuiz Capitulino 46*22f3946bSLuiz Capitulinoif not socket_path: 47*22f3946bSLuiz Capitulino if os.environ.has_key('QMP_SOCKET'): 48*22f3946bSLuiz Capitulino socket_path = os.environ['QMP_SOCKET'] 49*22f3946bSLuiz Capitulino else: 50*22f3946bSLuiz Capitulino usage_error("no QMP socket path or address given"); 51*22f3946bSLuiz Capitulino 52*22f3946bSLuiz Capitulinoif len(args) > 1: 53*22f3946bSLuiz Capitulino try: 54*22f3946bSLuiz Capitulino path, prop = args[0].rsplit('.', 1) 55*22f3946bSLuiz Capitulino except: 56*22f3946bSLuiz Capitulino usage_error("invalid format for path/property/value") 57*22f3946bSLuiz Capitulino value = args[1] 58*22f3946bSLuiz Capitulinoelse: 59*22f3946bSLuiz Capitulino usage_error("not enough arguments") 60*22f3946bSLuiz Capitulino 61*22f3946bSLuiz Capitulinosrv = QEMUMonitorProtocol(socket_path) 62*22f3946bSLuiz Capitulinosrv.connect() 63*22f3946bSLuiz Capitulino 64*22f3946bSLuiz Capitulinoprint srv.command('qom-set', path=path, property=prop, value=sys.argv[2]) 65