python/machine.py: Don't modify state in _base_args()

Don't append to the _remove_files list during _base_args; instead do so
during _launch. Rework _base_args as a @property to help facilitate
this impression.

This has the additional benefit of making the type of _console_address
easier to analyze statically.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Message-id: 20201006235817.3280413-5-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
John Snow 2020-10-06 19:58:01 -04:00
parent c5e61a6da8
commit 652809dfa6
2 changed files with 14 additions and 10 deletions

View file

@ -25,7 +25,7 @@ import signal
import subprocess import subprocess
import tempfile import tempfile
from types import TracebackType from types import TracebackType
from typing import Optional, Type from typing import List, Optional, Type
from . import console_socket, qmp from . import console_socket, qmp
from .qmp import SocketAddrT from .qmp import SocketAddrT
@ -137,7 +137,9 @@ class QEMUMachine:
self._console_index = 0 self._console_index = 0
self._console_set = False self._console_set = False
self._console_device_type = None self._console_device_type = None
self._console_address = None self._console_address = os.path.join(
self._sock_dir, f"{self._name}-console.sock"
)
self._console_socket = None self._console_socket = None
self._remove_files = [] self._remove_files = []
self._user_killed = False self._user_killed = False
@ -253,7 +255,8 @@ class QEMUMachine:
with open(self._qemu_log_path, "r") as iolog: with open(self._qemu_log_path, "r") as iolog:
self._iolog = iolog.read() self._iolog = iolog.read()
def _base_args(self): @property
def _base_args(self) -> List[str]:
args = ['-display', 'none', '-vga', 'none'] args = ['-display', 'none', '-vga', 'none']
if self._qmp_set: if self._qmp_set:
@ -271,9 +274,6 @@ class QEMUMachine:
for _ in range(self._console_index): for _ in range(self._console_index):
args.extend(['-serial', 'null']) args.extend(['-serial', 'null'])
if self._console_set: if self._console_set:
self._console_address = os.path.join(self._sock_dir,
self._name + "-console.sock")
self._remove_files.append(self._console_address)
chardev = ('socket,id=console,path=%s,server,nowait' % chardev = ('socket,id=console,path=%s,server,nowait' %
self._console_address) self._console_address)
args.extend(['-chardev', chardev]) args.extend(['-chardev', chardev])
@ -289,6 +289,9 @@ class QEMUMachine:
self._qemu_log_path = os.path.join(self._temp_dir, self._name + ".log") self._qemu_log_path = os.path.join(self._temp_dir, self._name + ".log")
self._qemu_log_file = open(self._qemu_log_path, 'wb') self._qemu_log_file = open(self._qemu_log_path, 'wb')
if self._console_set:
self._remove_files.append(self._console_address)
if self._qmp_set: if self._qmp_set:
if self._remove_monitor_sockfile: if self._remove_monitor_sockfile:
assert isinstance(self._monitor_address, str) assert isinstance(self._monitor_address, str)
@ -374,7 +377,7 @@ class QEMUMachine:
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] +
self._base_args() + self._args) self._base_args + self._args)
LOG.debug('VM launch command: %r', ' '.join(self._qemu_full_args)) LOG.debug('VM launch command: %r', ' '.join(self._qemu_full_args))
self._popen = subprocess.Popen(self._qemu_full_args, self._popen = subprocess.Popen(self._qemu_full_args,
stdin=devnull, stdin=devnull,

View file

@ -19,7 +19,7 @@ subclass of QEMUMachine, respectively.
import os import os
import socket import socket
from typing import Optional, TextIO from typing import List, Optional, TextIO
from .machine import QEMUMachine from .machine import QEMUMachine
@ -111,8 +111,9 @@ class QEMUQtestMachine(QEMUMachine):
self._qtest = None self._qtest = None
self._qtest_path = os.path.join(sock_dir, name + "-qtest.sock") self._qtest_path = os.path.join(sock_dir, name + "-qtest.sock")
def _base_args(self): @property
args = super()._base_args() def _base_args(self) -> List[str]:
args = super()._base_args
args.extend(['-qtest', 'unix:path=' + self._qtest_path, args.extend(['-qtest', 'unix:path=' + self._qtest_path,
'-accel', 'qtest']) '-accel', 'qtest'])
return args return args