diff --git a/virtManager/addhardware.py b/virtManager/addhardware.py index b9f7eea5..77a7b323 100644 --- a/virtManager/addhardware.py +++ b/virtManager/addhardware.py @@ -469,50 +469,12 @@ class vmmAddHardware(vmmGObjectUI): @staticmethod def populate_disk_bus_combo(vm, devtype, model): - # try to get supported disk bus types from domain capabilities domcaps = vm.get_domain_capabilities() - disk_bus_types = None - if "bus" in domcaps.devices.disk.enum_names(): - disk_bus_types = domcaps.devices.disk.get_enum("bus").get_values() - - # if there are no disk bus types in domain capabilities fallback to - # old code - if not disk_bus_types: - disk_bus_types = [] - if vm.is_hvm(): - if not vm.get_xmlobj().os.is_q35(): - disk_bus_types.append("ide") - disk_bus_types.append("sata") - disk_bus_types.append("fdc") - - if not vm.xmlobj.stable_defaults(): - disk_bus_types.append("scsi") - disk_bus_types.append("usb") - - if vm.get_hv_type() in ["qemu", "kvm", "test"]: - disk_bus_types.append("sd") - disk_bus_types.append("virtio") - if "scsi" not in disk_bus_types: - disk_bus_types.append("scsi") - - if vm.conn.is_xen() or vm.conn.is_test(): - disk_bus_types.append("xen") - - rows = [] - for bus in disk_bus_types: - rows.append([bus, DeviceDisk.pretty_disk_bus(bus)]) + buses = DeviceDisk.get_recommended_buses(vm.xmlobj, domcaps, devtype) model.clear() - - bus_map = { - "disk": ["ide", "sata", "scsi", "sd", "usb", "virtio", "xen"], - "floppy": ["fdc"], - "cdrom": ["ide", "sata", "scsi"], - "lun": ["scsi"], - } - for row in rows: - if row[0] in bus_map[devtype]: - model.append(row) + for bus in buses: + model.append([bus, DeviceDisk.pretty_disk_bus(bus)]) @staticmethod diff --git a/virtinst/devices/disk.py b/virtinst/devices/disk.py index 186cf083..51c9f684 100644 --- a/virtinst/devices/disk.py +++ b/virtinst/devices/disk.py @@ -142,6 +142,44 @@ class DeviceDisk(Device): error_policies = ["ignore", "stop", "enospace", "report"] + @staticmethod + def get_old_recommended_buses(guest): + ret = [] + if guest.os.is_hvm() or guest.conn.is_test(): + if not guest.os.is_q35(): + ret.append("ide") + ret.append("sata") + ret.append("fdc") + ret.append("scsi") + ret.append("usb") + + if guest.type in ["qemu", "kvm", "test"]: + ret.append("sd") + ret.append("virtio") + if "scsi" not in ret: + ret.append("scsi") + + if guest.conn.is_xen() or guest.conn.is_test(): + ret.append("xen") + + return ret + + @staticmethod + def get_recommended_buses(guest, domcaps, devtype): + # try to get supported disk bus types from domain capabilities + if "bus" in domcaps.devices.disk.enum_names(): + buses = domcaps.devices.disk.get_enum("bus").get_values() + else: + buses = DeviceDisk.get_old_recommended_buses(guest) + + bus_map = { + "disk": ["ide", "sata", "scsi", "sd", "usb", "virtio", "xen"], + "floppy": ["fdc"], + "cdrom": ["ide", "sata", "scsi"], + "lun": ["scsi"], + } + return [bus for bus in buses if bus in bus_map.get(devtype, [])] + @staticmethod def disk_type_to_xen_driver_name(disk_type): """