mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-02 09:47:16 +03:00
virtinst: delay "lookup_capsinfo" until we really need it
When I try to open the details window for a domain that does not use the system default emulator, I get the following exception: > Traceback (most recent call last): > File "virtManager/vmwindow.py", line 40, in get_instance > cls._instances[key] = vmmVMWindow(vm) > File "virtManager/vmwindow.py", line 83, in __init__ > self._details = vmmDetails(self.vm, self.builder, self.topwin, > File "virtManager/details/details.py", line 389, in __init__ > self._init_details() > File "virtManager/details/details.py", line 807, in _init_details > vmmAddHardware.build_video_combo(self.vm, video_dev) > File "virtManager/addhardware.py", line 816, in build_video_combo > default = DeviceVideo.default_model(vm.xmlobj) > File "virtinst/devices/video.py", line 47, in default_model > if (guest.lookup_domcaps().supports_video_virtio() and > File "virtinst/guest.py", line 656, in lookup_domcaps > if not self._domcaps or not _compare(self._domcaps): > File "virtinst/guest.py", line 646, in _compare > if self.os.machine and not _compare_machine(domcaps): > File "virtinst/guest.py", line 633, in _compare_machine > capsinfo = self.lookup_capsinfo() > File "virtinst/guest.py", line 674, in lookup_capsinfo > self._capsinfo = self.conn.caps.guest_lookup( > File "virtinst/capabilities.py", line 319, in guest_lookup > raise ValueError(msg) > ValueError: Host does not support domain type kvm with machine > 'pc-q35-8.1' for virtualization type 'hvm' with architecture 'x86_64' This is a regression; according to git-bisect, it was introduced in commit 05fcc7410eee ("virtinst: fix caching of domain capabilities", 2022-07-27). "lookup_capsinfo" (and "guest_lookup" called by it) are unsuitable for machine type alias checking (or for anything else) if the domain uses an emulator that differs from the system default emulator. The information returned by virConnectGetCapabilities() pertains to the system default emulator. Thus, when using a non-default emulator, we should either not call "lookup_capsinfo" for machine type alias checking, *or* we should suppress the exception, and pretend that the alias check was a mismatch. It turns out that we can avoid the "lookup_capsinfo" call (and thereby the exception) in practice if we just delay the call until after the direct (non-alias) comparison. Fixes: #539 Fixes: 05fcc7410eee ("virtinst: fix caching of domain capabilities", 2022-07-27) Signed-off-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
parent
7cd6151a21
commit
4ead4acb44
@ -630,9 +630,9 @@ class Guest(XMLBuilder):
|
||||
|
||||
def lookup_domcaps(self):
|
||||
def _compare_machine(domcaps):
|
||||
capsinfo = self.lookup_capsinfo()
|
||||
if self.os.machine == domcaps.machine:
|
||||
return True
|
||||
capsinfo = self.lookup_capsinfo()
|
||||
if capsinfo.is_machine_alias(self.os.machine, domcaps.machine):
|
||||
return True
|
||||
return False
|
||||
|
Loading…
x
Reference in New Issue
Block a user