scripts/qmp: delete 'qmp' script
This script has not seen a patch that was specifically for this script since it was moved to this location in 2013, and I doubt it is used. It uses "man qmp" for its help message, which does not exist. It also presumes there is a manual page for qmp-XXX, for each defined qmp command XXX. I don't think that's true. The format it expects arguments in is something like: block-dirty-bitmap-add --node=foo --name=bar and has no capacity to support nested JSON arguments, either. Most developers use either qmp-shell or socat (or pasting JSON directly into qmp stdio), so this duplication and additional alternate syntax is not helpful. Remove it. Leave a breadcrumb script just in case, to be removed next release cycle. Signed-off-by: John Snow <jsnow@redhat.com> Message-Id: <20201019210430.1063390-1-jsnow@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
fca9d72323
commit
3600604667
131
scripts/qmp/qmp
131
scripts/qmp/qmp
@ -1,128 +1,11 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
#
|
|
||||||
# QMP command line tool
|
|
||||||
#
|
|
||||||
# Copyright IBM, Corp. 2011
|
|
||||||
#
|
|
||||||
# Authors:
|
|
||||||
# Anthony Liguori <aliguori@us.ibm.com>
|
|
||||||
#
|
|
||||||
# This work is licensed under the terms of the GNU GPLv2 or later.
|
|
||||||
# See the COPYING file in the top-level directory.
|
|
||||||
|
|
||||||
import sys, os
|
import sys
|
||||||
|
|
||||||
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
|
print('''This unmaintained and undocumented script was removed in preference
|
||||||
from qemu.qmp import QEMUMonitorProtocol
|
for qmp-shell. The assumption is that most users are using either
|
||||||
|
qmp-shell, socat, or pasting/piping JSON into stdio. The duplication of
|
||||||
|
facilities here is unwanted, and the divergence of syntax harmful.''',
|
||||||
|
file=sys.stderr)
|
||||||
|
|
||||||
def print_response(rsp, prefix=[]):
|
sys.exit(1)
|
||||||
if type(rsp) == list:
|
|
||||||
i = 0
|
|
||||||
for item in rsp:
|
|
||||||
if prefix == []:
|
|
||||||
prefix = ['item']
|
|
||||||
print_response(item, prefix[:-1] + ['%s[%d]' % (prefix[-1], i)])
|
|
||||||
i += 1
|
|
||||||
elif type(rsp) == dict:
|
|
||||||
for key in rsp.keys():
|
|
||||||
print_response(rsp[key], prefix + [key])
|
|
||||||
else:
|
|
||||||
if len(prefix):
|
|
||||||
print('%s: %s' % ('.'.join(prefix), rsp))
|
|
||||||
else:
|
|
||||||
print('%s' % (rsp))
|
|
||||||
|
|
||||||
def main(args):
|
|
||||||
path = None
|
|
||||||
|
|
||||||
# Use QMP_PATH if it's set
|
|
||||||
if 'QMP_PATH' in os.environ:
|
|
||||||
path = os.environ['QMP_PATH']
|
|
||||||
|
|
||||||
while len(args):
|
|
||||||
arg = args[0]
|
|
||||||
|
|
||||||
if arg.startswith('--'):
|
|
||||||
arg = arg[2:]
|
|
||||||
if arg.find('=') == -1:
|
|
||||||
value = True
|
|
||||||
else:
|
|
||||||
arg, value = arg.split('=', 1)
|
|
||||||
|
|
||||||
if arg in ['path']:
|
|
||||||
if type(value) == str:
|
|
||||||
path = value
|
|
||||||
elif arg in ['help']:
|
|
||||||
os.execlp('man', 'man', 'qmp')
|
|
||||||
else:
|
|
||||||
print('Unknown argument "%s"' % arg)
|
|
||||||
|
|
||||||
args = args[1:]
|
|
||||||
else:
|
|
||||||
break
|
|
||||||
|
|
||||||
if not path:
|
|
||||||
print("QMP path isn't set, use --path=qmp-monitor-address or set QMP_PATH")
|
|
||||||
return 1
|
|
||||||
|
|
||||||
if len(args):
|
|
||||||
command, args = args[0], args[1:]
|
|
||||||
else:
|
|
||||||
print('No command found')
|
|
||||||
print('Usage: "qmp [--path=qmp-monitor-address] qmp-cmd arguments"')
|
|
||||||
return 1
|
|
||||||
|
|
||||||
if command in ['help']:
|
|
||||||
os.execlp('man', 'man', 'qmp')
|
|
||||||
|
|
||||||
srv = QEMUMonitorProtocol(path)
|
|
||||||
srv.connect()
|
|
||||||
|
|
||||||
def do_command(srv, cmd, **kwds):
|
|
||||||
rsp = srv.cmd(cmd, kwds)
|
|
||||||
if 'error' in rsp:
|
|
||||||
raise Exception(rsp['error']['desc'])
|
|
||||||
return rsp['return']
|
|
||||||
|
|
||||||
commands = map(lambda x: x['name'], do_command(srv, 'query-commands'))
|
|
||||||
|
|
||||||
srv.close()
|
|
||||||
|
|
||||||
if command not in commands:
|
|
||||||
fullcmd = 'qmp-%s' % command
|
|
||||||
try:
|
|
||||||
os.environ['QMP_PATH'] = path
|
|
||||||
os.execvp(fullcmd, [fullcmd] + args)
|
|
||||||
except OSError as exc:
|
|
||||||
if exc.errno == 2:
|
|
||||||
print('Command "%s" not found.' % (fullcmd))
|
|
||||||
return 1
|
|
||||||
raise
|
|
||||||
return 0
|
|
||||||
|
|
||||||
srv = QEMUMonitorProtocol(path)
|
|
||||||
srv.connect()
|
|
||||||
|
|
||||||
arguments = {}
|
|
||||||
for arg in args:
|
|
||||||
if not arg.startswith('--'):
|
|
||||||
print('Unknown argument "%s"' % arg)
|
|
||||||
return 1
|
|
||||||
|
|
||||||
arg = arg[2:]
|
|
||||||
if arg.find('=') == -1:
|
|
||||||
value = True
|
|
||||||
else:
|
|
||||||
arg, value = arg.split('=', 1)
|
|
||||||
|
|
||||||
if arg in ['help']:
|
|
||||||
os.execlp('man', 'man', 'qmp-%s' % command)
|
|
||||||
return 1
|
|
||||||
|
|
||||||
arguments[arg] = value
|
|
||||||
|
|
||||||
rsp = do_command(srv, command, **arguments)
|
|
||||||
print_response(rsp)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.exit(main(sys.argv[1:]))
|
|
||||||
|
Loading…
Reference in New Issue
Block a user