Skip to content

Commit

Permalink
python/qmp: switch qemu-ga-client to AQMP
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
jnsnow committed Jan 21, 2022
1 parent 7017f38 commit 26db075
Showing 1 changed file with 11 additions and 11 deletions.
22 changes: 11 additions & 11 deletions python/qemu/qmp/qemu_ga_client.py
Expand Up @@ -37,8 +37,8 @@
# the COPYING file in the top-level directory.

import argparse
import asyncio
import base64
import errno
import os
import random
import sys
Expand All @@ -50,8 +50,8 @@
Sequence,
)

from qemu import qmp
from qemu.qmp import SocketAddrT
from qemu.aqmp import ConnectError, SocketAddrT
from qemu.aqmp.legacy import QEMUMonitorProtocol


# This script has not seen many patches or careful attention in quite
Expand All @@ -61,7 +61,7 @@
# pylint: disable=missing-docstring


class QemuGuestAgent(qmp.QEMUMonitorProtocol):
class QemuGuestAgent(QEMUMonitorProtocol):
def __getattr__(self, name: str) -> Callable[..., Any]:
def wrapper(**kwds: object) -> object:
return self.command('guest-' + name.replace('_', '-'), **kwds)
Expand Down Expand Up @@ -149,7 +149,7 @@ def ping(self, timeout: Optional[float]) -> bool:
self.qga.settimeout(timeout)
try:
self.qga.ping()
except TimeoutError:
except asyncio.TimeoutError:
return False
return True

Expand All @@ -172,7 +172,7 @@ def suspend(self, mode: str) -> None:
try:
getattr(self.qga, 'suspend' + '_' + mode)()
# On error exception will raise
except TimeoutError:
except asyncio.TimeoutError:
# On success command will timed out
return

Expand All @@ -182,7 +182,7 @@ def shutdown(self, mode: str = 'powerdown') -> None:

try:
self.qga.shutdown(mode=mode)
except TimeoutError:
except asyncio.TimeoutError:
pass


Expand Down Expand Up @@ -277,7 +277,7 @@ def _cmd_reboot(client: QemuGuestAgentClient, args: Sequence[str]) -> None:

def send_command(address: str, cmd: str, args: Sequence[str]) -> None:
if not os.path.exists(address):
print('%s not found' % address)
print(f"'{address}' not found. (Is QEMU running?)")
sys.exit(1)

if cmd not in commands:
Expand All @@ -287,10 +287,10 @@ def send_command(address: str, cmd: str, args: Sequence[str]) -> None:

try:
client = QemuGuestAgentClient(address)
except OSError as err:
except ConnectError as err:
print(err)
if err.errno == errno.ECONNREFUSED:
print('Hint: qemu is not running?')
if isinstance(err.exc, ConnectionError):
print('(Is QEMU running?)')
sys.exit(1)

if cmd == 'fsfreeze' and args[0] == 'freeze':
Expand Down

0 comments on commit 26db075

Please sign in to comment.