virtinst: unify detection of duplicate console when removing device

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
Pavel Hrdina 2024-02-12 09:38:02 +01:00 committed by Cole Robinson
parent 29145b9e93
commit ef64949e84
3 changed files with 9 additions and 18 deletions

View File

@ -622,21 +622,11 @@ class vmmDomain(vmmLibvirtObject):
""" """
Remove passed device from the inactive guest XML Remove passed device from the inactive guest XML
""" """
# If serial and duplicate console are both present, they both need
# to be removed at the same time
con = None
if self.serial_is_console_dup(devobj):
con = self.xmlobj.devices.console[0]
xmlobj = self._make_xmlobj_to_define() xmlobj = self._make_xmlobj_to_define()
editdev = self._lookup_device_to_define(xmlobj, devobj, False) editdev = self._lookup_device_to_define(xmlobj, devobj, False)
if not editdev: if not editdev:
return # pragma: no cover return # pragma: no cover
if con:
rmcon = xmlobj.find_device(con)
if rmcon:
xmlobj.remove_device(rmcon)
xmlobj.remove_device(editdev) xmlobj.remove_device(editdev)
self._redefine_xmlobj(xmlobj) self._redefine_xmlobj(xmlobj)

View File

@ -501,8 +501,11 @@ class Guest(XMLBuilder):
def add_device(self, dev): def add_device(self, dev):
self.devices.add_child(dev) self.devices.add_child(dev)
def remove_device(self, dev): def remove_device(self, dev):
self.devices.remove_child(dev) self.devices.remove_child(dev)
self._remove_duplicate_console(dev)
devices = XMLChildProperty(_DomainDevices, is_single=True) devices = XMLChildProperty(_DomainDevices, is_single=True)
def find_device(self, origdev): def find_device(self, origdev):
@ -1212,3 +1215,9 @@ class Guest(XMLBuilder):
self._add_spice_channels() self._add_spice_channels()
self._add_spice_sound() self._add_spice_sound()
self._add_spice_usbredir() self._add_spice_usbredir()
def _remove_duplicate_console(self, dev):
condup = DeviceConsole.get_console_duplicate(self, dev)
if condup:
log.debug("Found duplicate console device:\n%s", condup.get_xml())
self.devices.remove_child(condup)

View File

@ -10,7 +10,6 @@ import libvirt
from . import cli from . import cli
from .cli import fail, fail_conflicting, print_stdout, print_stderr from .cli import fail, fail_conflicting, print_stdout, print_stderr
from .devices import DeviceConsole
from .guest import Guest from .guest import Guest
from .logger import log from .logger import log
from . import xmlutil from . import xmlutil
@ -189,13 +188,6 @@ def action_remove_device(guest, options, parserclass):
getattr(options, parserclass.cli_arg_name)[-1], parserclass) getattr(options, parserclass.cli_arg_name)[-1], parserclass)
devs = xmlutil.listify(devs) devs = xmlutil.listify(devs)
# Check for console duplicate devices
for dev in devs[:]:
condup = DeviceConsole.get_console_duplicate(guest, dev)
if condup:
log.debug("Found duplicate console device:\n%s", condup.get_xml())
devs.append(condup)
for dev in devs: for dev in devs:
guest.remove_device(dev) guest.remove_device(dev)
return devs return devs