Dario Faggioli
3206ea7c01
- Revert to revision 715. We're fixing bug 1199924, before moving to QEMU 7.0 OBS-URL: https://build.opensuse.org/request/show/979479 OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=718
122 lines
4.1 KiB
Diff
122 lines
4.1 KiB
Diff
From: John Snow <jsnow@redhat.com>
|
|
Date: Mon, 10 Jan 2022 18:28:53 -0500
|
|
Subject: python/qmp: switch qmp-shell to AQMP
|
|
|
|
Git-commit: f3efd12930f34b9724e15d8fd2ff56a97b67219d
|
|
|
|
We have a replacement for async QMP, but it doesn't have feature parity
|
|
yet. For now, then, port the old tool onto the new backend.
|
|
|
|
Signed-off-by: John Snow <jsnow@redhat.com>
|
|
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
|
|
Signed-off-by: Li Zhang <lizhang@suse.de>
|
|
---
|
|
python/qemu/aqmp/legacy.py | 3 +++
|
|
python/qemu/qmp/qmp_shell.py | 31 +++++++++++++++++--------------
|
|
2 files changed, 20 insertions(+), 14 deletions(-)
|
|
|
|
diff --git a/python/qemu/aqmp/legacy.py b/python/qemu/aqmp/legacy.py
|
|
index 27df22818a76190e872f08c0852e..0890f95b16875ecb815ed4560bc7 100644
|
|
--- a/python/qemu/aqmp/legacy.py
|
|
+++ b/python/qemu/aqmp/legacy.py
|
|
@@ -22,6 +22,9 @@ from .protocol import Runstate, SocketAddrT
|
|
from .qmp_client import QMPClient
|
|
|
|
|
|
+# (Temporarily) Re-export QMPBadPortError
|
|
+QMPBadPortError = qemu.qmp.QMPBadPortError
|
|
+
|
|
#: QMPMessage is an entire QMP message of any kind.
|
|
QMPMessage = Dict[str, Any]
|
|
|
|
diff --git a/python/qemu/qmp/qmp_shell.py b/python/qemu/qmp/qmp_shell.py
|
|
index e7d7eb18f19cae7ac185b333013e..d11bf54b00e5d56616ae57be0006 100644
|
|
--- a/python/qemu/qmp/qmp_shell.py
|
|
+++ b/python/qemu/qmp/qmp_shell.py
|
|
@@ -95,8 +95,13 @@ from typing import (
|
|
Sequence,
|
|
)
|
|
|
|
-from qemu import qmp
|
|
-from qemu.qmp import QMPMessage
|
|
+from qemu.aqmp import ConnectError, QMPError, SocketAddrT
|
|
+from qemu.aqmp.legacy import (
|
|
+ QEMUMonitorProtocol,
|
|
+ QMPBadPortError,
|
|
+ QMPMessage,
|
|
+ QMPObject,
|
|
+)
|
|
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
@@ -125,7 +130,7 @@ class QMPCompleter:
|
|
return None
|
|
|
|
|
|
-class QMPShellError(qmp.QMPError):
|
|
+class QMPShellError(QMPError):
|
|
"""
|
|
QMP Shell Base error class.
|
|
"""
|
|
@@ -153,7 +158,7 @@ class FuzzyJSON(ast.NodeTransformer):
|
|
return node
|
|
|
|
|
|
-class QMPShell(qmp.QEMUMonitorProtocol):
|
|
+class QMPShell(QEMUMonitorProtocol):
|
|
"""
|
|
QMPShell provides a basic readline-based QMP shell.
|
|
|
|
@@ -161,7 +166,7 @@ class QMPShell(qmp.QEMUMonitorProtocol):
|
|
:param pretty: Pretty-print QMP messages.
|
|
:param verbose: Echo outgoing QMP messages to console.
|
|
"""
|
|
- def __init__(self, address: qmp.SocketAddrT,
|
|
+ def __init__(self, address: SocketAddrT,
|
|
pretty: bool = False, verbose: bool = False):
|
|
super().__init__(address)
|
|
self._greeting: Optional[QMPMessage] = None
|
|
@@ -237,7 +242,7 @@ class QMPShell(qmp.QEMUMonitorProtocol):
|
|
|
|
def _cli_expr(self,
|
|
tokens: Sequence[str],
|
|
- parent: qmp.QMPObject) -> None:
|
|
+ parent: QMPObject) -> None:
|
|
for arg in tokens:
|
|
(key, sep, val) = arg.partition('=')
|
|
if sep != '=':
|
|
@@ -403,7 +408,7 @@ class HMPShell(QMPShell):
|
|
:param pretty: Pretty-print QMP messages.
|
|
:param verbose: Echo outgoing QMP messages to console.
|
|
"""
|
|
- def __init__(self, address: qmp.SocketAddrT,
|
|
+ def __init__(self, address: SocketAddrT,
|
|
pretty: bool = False, verbose: bool = False):
|
|
super().__init__(address, pretty, verbose)
|
|
self._cpu_index = 0
|
|
@@ -512,19 +517,17 @@ def main() -> None:
|
|
|
|
try:
|
|
address = shell_class.parse_address(args.qmp_server)
|
|
- except qmp.QMPBadPortError:
|
|
+ except QMPBadPortError:
|
|
parser.error(f"Bad port number: {args.qmp_server}")
|
|
return # pycharm doesn't know error() is noreturn
|
|
|
|
with shell_class(address, args.pretty, args.verbose) as qemu:
|
|
try:
|
|
qemu.connect(negotiate=not args.skip_negotiation)
|
|
- except qmp.QMPConnectError:
|
|
- die("Didn't get QMP greeting message")
|
|
- except qmp.QMPCapabilitiesError:
|
|
- die("Couldn't negotiate capabilities")
|
|
- except OSError as err:
|
|
- die(f"Couldn't connect to {args.qmp_server}: {err!s}")
|
|
+ except ConnectError as err:
|
|
+ if isinstance(err.exc, OSError):
|
|
+ die(f"Couldn't connect to {args.qmp_server}: {err!s}")
|
|
+ die(str(err))
|
|
|
|
for _ in qemu.repl():
|
|
pass
|