mirror of https://github.com/xemu-project/xemu.git
python/qmp: switch qemu-ga-client to AQMP
Async QMP always raises a "ConnectError" on any connection error which houses the cause in a second exception. We can check if this root cause was python's ConnectionError to determine a fairly similar condition to the original error check here. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Beraldo Leal <bleal@redhat.com>
This commit is contained in:
parent
7017f3853a
commit
26db07516f
|
@ -37,8 +37,8 @@ See also: https://wiki.qemu.org/Features/QAPI/GuestAgent
|
||||||
# the COPYING file in the top-level directory.
|
# the COPYING file in the top-level directory.
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import asyncio
|
||||||
import base64
|
import base64
|
||||||
import errno
|
|
||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
import sys
|
import sys
|
||||||
|
@ -50,8 +50,8 @@ from typing import (
|
||||||
Sequence,
|
Sequence,
|
||||||
)
|
)
|
||||||
|
|
||||||
from qemu import qmp
|
from qemu.aqmp import ConnectError, SocketAddrT
|
||||||
from qemu.qmp import SocketAddrT
|
from qemu.aqmp.legacy import QEMUMonitorProtocol
|
||||||
|
|
||||||
|
|
||||||
# This script has not seen many patches or careful attention in quite
|
# This script has not seen many patches or careful attention in quite
|
||||||
|
@ -61,7 +61,7 @@ from qemu.qmp import SocketAddrT
|
||||||
# pylint: disable=missing-docstring
|
# pylint: disable=missing-docstring
|
||||||
|
|
||||||
|
|
||||||
class QemuGuestAgent(qmp.QEMUMonitorProtocol):
|
class QemuGuestAgent(QEMUMonitorProtocol):
|
||||||
def __getattr__(self, name: str) -> Callable[..., Any]:
|
def __getattr__(self, name: str) -> Callable[..., Any]:
|
||||||
def wrapper(**kwds: object) -> object:
|
def wrapper(**kwds: object) -> object:
|
||||||
return self.command('guest-' + name.replace('_', '-'), **kwds)
|
return self.command('guest-' + name.replace('_', '-'), **kwds)
|
||||||
|
@ -149,7 +149,7 @@ class QemuGuestAgentClient:
|
||||||
self.qga.settimeout(timeout)
|
self.qga.settimeout(timeout)
|
||||||
try:
|
try:
|
||||||
self.qga.ping()
|
self.qga.ping()
|
||||||
except TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ class QemuGuestAgentClient:
|
||||||
try:
|
try:
|
||||||
getattr(self.qga, 'suspend' + '_' + mode)()
|
getattr(self.qga, 'suspend' + '_' + mode)()
|
||||||
# On error exception will raise
|
# On error exception will raise
|
||||||
except TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
# On success command will timed out
|
# On success command will timed out
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ class QemuGuestAgentClient:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.qga.shutdown(mode=mode)
|
self.qga.shutdown(mode=mode)
|
||||||
except TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@ -277,7 +277,7 @@ commands = [m.replace('_cmd_', '') for m in dir() if '_cmd_' in m]
|
||||||
|
|
||||||
def send_command(address: str, cmd: str, args: Sequence[str]) -> None:
|
def send_command(address: str, cmd: str, args: Sequence[str]) -> None:
|
||||||
if not os.path.exists(address):
|
if not os.path.exists(address):
|
||||||
print('%s not found' % address)
|
print(f"'{address}' not found. (Is QEMU running?)")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
if cmd not in commands:
|
if cmd not in commands:
|
||||||
|
@ -287,10 +287,10 @@ def send_command(address: str, cmd: str, args: Sequence[str]) -> None:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
client = QemuGuestAgentClient(address)
|
client = QemuGuestAgentClient(address)
|
||||||
except OSError as err:
|
except ConnectError as err:
|
||||||
print(err)
|
print(err)
|
||||||
if err.errno == errno.ECONNREFUSED:
|
if isinstance(err.exc, ConnectionError):
|
||||||
print('Hint: qemu is not running?')
|
print('(Is QEMU running?)')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
if cmd == 'fsfreeze' and args[0] == 'freeze':
|
if cmd == 'fsfreeze' and args[0] == 'freeze':
|
||||||
|
|
Loading…
Reference in New Issue