mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-29 13:23:54 -06:00
scripts/qemu.py: use a more consistent docstring style
Signed-off-by: Cleber Rosa <crosa@redhat.com> Message-Id: <20181004161852.11673-10-crosa@redhat.com> [ehabkost: reverted unintentional submodule update] Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
parent
cbcdf1a951
commit
e301e65c97
1 changed files with 41 additions and 24 deletions
|
@ -59,9 +59,9 @@ class QEMUMachineAddDeviceError(QEMUMachineError):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class MonitorResponseError(qmp.qmp.QMPError):
|
class MonitorResponseError(qmp.qmp.QMPError):
|
||||||
'''
|
"""
|
||||||
Represents erroneous QMP monitor reply
|
Represents erroneous QMP monitor reply
|
||||||
'''
|
"""
|
||||||
def __init__(self, reply):
|
def __init__(self, reply):
|
||||||
try:
|
try:
|
||||||
desc = reply["error"]["desc"]
|
desc = reply["error"]["desc"]
|
||||||
|
@ -72,14 +72,15 @@ class MonitorResponseError(qmp.qmp.QMPError):
|
||||||
|
|
||||||
|
|
||||||
class QEMUMachine(object):
|
class QEMUMachine(object):
|
||||||
'''A QEMU VM
|
"""
|
||||||
|
A QEMU VM
|
||||||
|
|
||||||
Use this object as a context manager to ensure the QEMU process terminates::
|
Use this object as a context manager to ensure the QEMU process terminates::
|
||||||
|
|
||||||
with VM(binary) as vm:
|
with VM(binary) as vm:
|
||||||
...
|
...
|
||||||
# vm is guaranteed to be shut down here
|
# vm is guaranteed to be shut down here
|
||||||
'''
|
"""
|
||||||
|
|
||||||
def __init__(self, binary, args=None, wrapper=None, name=None,
|
def __init__(self, binary, args=None, wrapper=None, name=None,
|
||||||
test_dir="/var/tmp", monitor_address=None,
|
test_dir="/var/tmp", monitor_address=None,
|
||||||
|
@ -141,7 +142,9 @@ class QEMUMachine(object):
|
||||||
self._args.append(args)
|
self._args.append(args)
|
||||||
|
|
||||||
def add_fd(self, fd, fdset, opaque, opts=''):
|
def add_fd(self, fd, fdset, opaque, opts=''):
|
||||||
'''Pass a file descriptor to the VM'''
|
"""
|
||||||
|
Pass a file descriptor to the VM
|
||||||
|
"""
|
||||||
options = ['fd=%d' % fd,
|
options = ['fd=%d' % fd,
|
||||||
'set=%d' % fdset,
|
'set=%d' % fdset,
|
||||||
'opaque=%s' % opaque]
|
'opaque=%s' % opaque]
|
||||||
|
@ -197,7 +200,9 @@ class QEMUMachine(object):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _remove_if_exists(path):
|
def _remove_if_exists(path):
|
||||||
'''Remove file object at path if it exists'''
|
"""
|
||||||
|
Remove file object at path if it exists
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
os.remove(path)
|
os.remove(path)
|
||||||
except OSError as exception:
|
except OSError as exception:
|
||||||
|
@ -300,7 +305,9 @@ class QEMUMachine(object):
|
||||||
raise
|
raise
|
||||||
|
|
||||||
def _launch(self):
|
def _launch(self):
|
||||||
'''Launch the VM and establish a QMP connection'''
|
"""
|
||||||
|
Launch the VM and establish a QMP connection
|
||||||
|
"""
|
||||||
devnull = open(os.path.devnull, 'rb')
|
devnull = open(os.path.devnull, 'rb')
|
||||||
self._pre_launch()
|
self._pre_launch()
|
||||||
self._qemu_full_args = (self._wrapper + [self._binary] +
|
self._qemu_full_args = (self._wrapper + [self._binary] +
|
||||||
|
@ -314,14 +321,18 @@ class QEMUMachine(object):
|
||||||
self._post_launch()
|
self._post_launch()
|
||||||
|
|
||||||
def wait(self):
|
def wait(self):
|
||||||
'''Wait for the VM to power off'''
|
"""
|
||||||
|
Wait for the VM to power off
|
||||||
|
"""
|
||||||
self._popen.wait()
|
self._popen.wait()
|
||||||
self._qmp.close()
|
self._qmp.close()
|
||||||
self._load_io_log()
|
self._load_io_log()
|
||||||
self._post_shutdown()
|
self._post_shutdown()
|
||||||
|
|
||||||
def shutdown(self):
|
def shutdown(self):
|
||||||
'''Terminate the VM and clean up'''
|
"""
|
||||||
|
Terminate the VM and clean up
|
||||||
|
"""
|
||||||
if self.is_running():
|
if self.is_running():
|
||||||
try:
|
try:
|
||||||
self._qmp.cmd('quit')
|
self._qmp.cmd('quit')
|
||||||
|
@ -345,7 +356,9 @@ class QEMUMachine(object):
|
||||||
self._launched = False
|
self._launched = False
|
||||||
|
|
||||||
def qmp(self, cmd, conv_keys=True, **args):
|
def qmp(self, cmd, conv_keys=True, **args):
|
||||||
'''Invoke a QMP command and return the response dict'''
|
"""
|
||||||
|
Invoke a QMP command and return the response dict
|
||||||
|
"""
|
||||||
qmp_args = dict()
|
qmp_args = dict()
|
||||||
for key, value in args.items():
|
for key, value in args.items():
|
||||||
if conv_keys:
|
if conv_keys:
|
||||||
|
@ -356,11 +369,11 @@ class QEMUMachine(object):
|
||||||
return self._qmp.cmd(cmd, args=qmp_args)
|
return self._qmp.cmd(cmd, args=qmp_args)
|
||||||
|
|
||||||
def command(self, cmd, conv_keys=True, **args):
|
def command(self, cmd, conv_keys=True, **args):
|
||||||
'''
|
"""
|
||||||
Invoke a QMP command.
|
Invoke a QMP command.
|
||||||
On success return the response dict.
|
On success return the response dict.
|
||||||
On failure raise an exception.
|
On failure raise an exception.
|
||||||
'''
|
"""
|
||||||
reply = self.qmp(cmd, conv_keys, **args)
|
reply = self.qmp(cmd, conv_keys, **args)
|
||||||
if reply is None:
|
if reply is None:
|
||||||
raise qmp.qmp.QMPError("Monitor is closed")
|
raise qmp.qmp.QMPError("Monitor is closed")
|
||||||
|
@ -369,13 +382,17 @@ class QEMUMachine(object):
|
||||||
return reply["return"]
|
return reply["return"]
|
||||||
|
|
||||||
def get_qmp_event(self, wait=False):
|
def get_qmp_event(self, wait=False):
|
||||||
'''Poll for one queued QMP events and return it'''
|
"""
|
||||||
|
Poll for one queued QMP events and return it
|
||||||
|
"""
|
||||||
if len(self._events) > 0:
|
if len(self._events) > 0:
|
||||||
return self._events.pop(0)
|
return self._events.pop(0)
|
||||||
return self._qmp.pull_event(wait=wait)
|
return self._qmp.pull_event(wait=wait)
|
||||||
|
|
||||||
def get_qmp_events(self, wait=False):
|
def get_qmp_events(self, wait=False):
|
||||||
'''Poll for queued QMP events and return a list of dicts'''
|
"""
|
||||||
|
Poll for queued QMP events and return a list of dicts
|
||||||
|
"""
|
||||||
events = self._qmp.get_events(wait=wait)
|
events = self._qmp.get_events(wait=wait)
|
||||||
events.extend(self._events)
|
events.extend(self._events)
|
||||||
del self._events[:]
|
del self._events[:]
|
||||||
|
@ -383,7 +400,7 @@ class QEMUMachine(object):
|
||||||
return events
|
return events
|
||||||
|
|
||||||
def event_wait(self, name, timeout=60.0, match=None):
|
def event_wait(self, name, timeout=60.0, match=None):
|
||||||
'''
|
"""
|
||||||
Wait for specified timeout on named event in QMP; optionally filter
|
Wait for specified timeout on named event in QMP; optionally filter
|
||||||
results by match.
|
results by match.
|
||||||
|
|
||||||
|
@ -391,7 +408,7 @@ class QEMUMachine(object):
|
||||||
branch processing on match's value None
|
branch processing on match's value None
|
||||||
{"foo": {"bar": 1}} matches {"foo": None}
|
{"foo": {"bar": 1}} matches {"foo": None}
|
||||||
{"foo": {"bar": 1}} does not matches {"foo": {"baz": None}}
|
{"foo": {"bar": 1}} does not matches {"foo": {"baz": None}}
|
||||||
'''
|
"""
|
||||||
def event_match(event, match=None):
|
def event_match(event, match=None):
|
||||||
if match is None:
|
if match is None:
|
||||||
return True
|
return True
|
||||||
|
@ -424,29 +441,29 @@ class QEMUMachine(object):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_log(self):
|
def get_log(self):
|
||||||
'''
|
"""
|
||||||
After self.shutdown or failed qemu execution, this returns the output
|
After self.shutdown or failed qemu execution, this returns the output
|
||||||
of the qemu process.
|
of the qemu process.
|
||||||
'''
|
"""
|
||||||
return self._iolog
|
return self._iolog
|
||||||
|
|
||||||
def add_args(self, *args):
|
def add_args(self, *args):
|
||||||
'''
|
"""
|
||||||
Adds to the list of extra arguments to be given to the QEMU binary
|
Adds to the list of extra arguments to be given to the QEMU binary
|
||||||
'''
|
"""
|
||||||
self._args.extend(args)
|
self._args.extend(args)
|
||||||
|
|
||||||
def set_machine(self, machine_type):
|
def set_machine(self, machine_type):
|
||||||
'''
|
"""
|
||||||
Sets the machine type
|
Sets the machine type
|
||||||
|
|
||||||
If set, the machine type will be added to the base arguments
|
If set, the machine type will be added to the base arguments
|
||||||
of the resulting QEMU command line.
|
of the resulting QEMU command line.
|
||||||
'''
|
"""
|
||||||
self._machine = machine_type
|
self._machine = machine_type
|
||||||
|
|
||||||
def set_console(self, device_type=None):
|
def set_console(self, device_type=None):
|
||||||
'''
|
"""
|
||||||
Sets the device type for a console device
|
Sets the device type for a console device
|
||||||
|
|
||||||
If set, the console device and a backing character device will
|
If set, the console device and a backing character device will
|
||||||
|
@ -464,7 +481,7 @@ class QEMUMachine(object):
|
||||||
@param device_type: the device type, such as "isa-serial"
|
@param device_type: the device type, such as "isa-serial"
|
||||||
@raises: QEMUMachineAddDeviceError if the device type is not given
|
@raises: QEMUMachineAddDeviceError if the device type is not given
|
||||||
and can not be determined.
|
and can not be determined.
|
||||||
'''
|
"""
|
||||||
if device_type is None:
|
if device_type is None:
|
||||||
if self._machine is None:
|
if self._machine is None:
|
||||||
raise QEMUMachineAddDeviceError("Can not add a console device:"
|
raise QEMUMachineAddDeviceError("Can not add a console device:"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue