Hello community, here is the log from the commit of package virt-manager for openSUSE:Factory checked in at 2019-04-04 12:08:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/virt-manager (Old) and /work/SRC/openSUSE:Factory/.virt-manager.new.3908 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "virt-manager" Thu Apr 4 12:08:05 2019 rev:193 rq:691298 version:2.1.0 Changes: -------- --- /work/SRC/openSUSE:Factory/virt-manager/virt-manager.changes 2019-03-28 22:48:56.351051997 +0100 +++ /work/SRC/openSUSE:Factory/.virt-manager.new.3908/virt-manager.changes 2019-04-04 12:08:15.297392180 +0200 @@ -1,0 +2,15 @@ +Wed Apr 3 11:08:16 MDT 2019 - [email protected] + +- Upstream bug fixes (bsc#1027942) + 57db4185-virt-clone-fix-force-copy-of-empty-cdrom-or-floppy-disk.patch + 26a433fc-virtManager-clone-check-which-storage-pools-supports-volume-cloning.patch + 4f66c423-cloner-Handle-nonsparse-for-qcow2-images.patch + a02fc0d0-virtManager-clone-build-default-clone-path-if-we-know-how.patch + 1856c1fa-support-Fix-minimum-version-check.patch + 74bbc3db-urldetect-Check-also-for-treeinfo.patch + 708af01c-osdict-Add-supports_virtioinput.patch + f23b01be-guest-Add-VirtIO-input-devices-to-s390x-guests-with-graphics.patch + 7afbb90b-virt-xml-Handle-VM-names-that-look-like-id-uuid.patch + a0ca387a-cli-Fix-pool-default-when-path-belongs-to-another-pool.patch + +------------------------------------------------------------------- New: ---- 1856c1fa-support-Fix-minimum-version-check.patch 26a433fc-virtManager-clone-check-which-storage-pools-supports-volume-cloning.patch 4f66c423-cloner-Handle-nonsparse-for-qcow2-images.patch 57db4185-virt-clone-fix-force-copy-of-empty-cdrom-or-floppy-disk.patch 708af01c-osdict-Add-supports_virtioinput.patch 74bbc3db-urldetect-Check-also-for-treeinfo.patch 7afbb90b-virt-xml-Handle-VM-names-that-look-like-id-uuid.patch a02fc0d0-virtManager-clone-build-default-clone-path-if-we-know-how.patch a0ca387a-cli-Fix-pool-default-when-path-belongs-to-another-pool.patch f23b01be-guest-Add-VirtIO-input-devices-to-s390x-guests-with-graphics.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ virt-manager.spec ++++++ --- /var/tmp/diff_new_pack.AfOP4B/_old 2019-04-04 12:08:17.665389935 +0200 +++ /var/tmp/diff_new_pack.AfOP4B/_new 2019-04-04 12:08:17.669389931 +0200 @@ -12,7 +12,7 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# Please submit bugfixes or comments via http://bugs.opensuse.org/ # @@ -35,8 +35,18 @@ Patch1: f7508d02-addhardware-Fix-setting-optimal-default-net-model.patch Patch2: 1018ab44-inspection-handle-failures-in-application-listing.patch Patch3: ae8a4f3d-engine-Fix-first-run-startup-error.patch -Patch4: 5bc847eb-virt-install-Do-not-warn-about-consoles-on-s390x.patch -Patch5: 8d9743d6-virt-install-Add-support-for-xenbus-controller.patch +Patch4: 57db4185-virt-clone-fix-force-copy-of-empty-cdrom-or-floppy-disk.patch +Patch5: 26a433fc-virtManager-clone-check-which-storage-pools-supports-volume-cloning.patch +Patch6: 4f66c423-cloner-Handle-nonsparse-for-qcow2-images.patch +Patch7: a02fc0d0-virtManager-clone-build-default-clone-path-if-we-know-how.patch +Patch8: 1856c1fa-support-Fix-minimum-version-check.patch +Patch9: 5bc847eb-virt-install-Do-not-warn-about-consoles-on-s390x.patch +Patch10: 74bbc3db-urldetect-Check-also-for-treeinfo.patch +Patch11: 708af01c-osdict-Add-supports_virtioinput.patch +Patch12: f23b01be-guest-Add-VirtIO-input-devices-to-s390x-guests-with-graphics.patch +Patch13: 7afbb90b-virt-xml-Handle-VM-names-that-look-like-id-uuid.patch +Patch14: 8d9743d6-virt-install-Add-support-for-xenbus-controller.patch +Patch15: a0ca387a-cli-Fix-pool-default-when-path-belongs-to-another-pool.patch # SUSE Only Patch70: virtman-desktop.patch Patch71: virtman-kvm.patch @@ -170,6 +180,16 @@ %patch3 -p1 %patch4 -p1 %patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 +%patch14 -p1 +%patch15 -p1 # SUSE Only %patch70 -p1 %patch71 -p1 ++++++ 1856c1fa-support-Fix-minimum-version-check.patch ++++++ Subject: support: Fix minimum version check From: Cole Robinson [email protected] Wed Mar 6 13:05:47 2019 -0500 Date: Wed Mar 6 13:06:54 2019 -0500: Git: 1856c1fa6501c7d37d360377937a82cfa2d1cd20 The original code for this was about version 0.7.3, but a refactor accidentally changed it to 0.7.9 which is a libvirt version that doesn't exist. Fix it diff --git a/virtinst/support.py b/virtinst/support.py index 0f0f6104..fabcfe7d 100644 --- a/virtinst/support.py +++ b/virtinst/support.py @@ -131,7 +131,7 @@ class _SupportCheck(object): for an 'unsupported' error from libvirt. @flag: A flag to check exists. This will be appended to the argument - list if run_args are provided, otherwise we will only check against + :list if run_args are provided, otherwise we will only check against that the flag is present in the python bindings. @hv_version: A dictionary with hypervisor names for keys, and @@ -157,9 +157,9 @@ class _SupportCheck(object): versions = ([self.version] + list(self.hv_libvirt_version.values())) for vstr in versions: v = _version_str_to_int(vstr) - if vstr is not None and v != 0 and v < 7009: + if vstr is not None and v != 0 and v < 7003: raise RuntimeError("programming error: Cannot enforce " - "support checks for libvirt versions less than 0.7.9, " + "support checks for libvirt versions less than 0.7.3, " "since required APIs were not available. ver=%s" % vstr) def check_support(self, conn, data): ++++++ 26a433fc-virtManager-clone-check-which-storage-pools-supports-volume-cloning.patch ++++++ Subject: virtManager: clone: check which storage pools supports volume cloning From: Pavel Hrdina [email protected] Thu Feb 28 11:47:40 2019 +0100 Date: Mon Mar 4 13:23:45 2019 +0100: Git: 26a433fc421b7c23e02deb8fe84cdedc21fd8f95 When cloning a guest in virt-manager the GUI shows a list of disks and select default cloning policy for every disk. For storage pools where we know that cloning is not possible we should not select that option as default one. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1463066 Reviewed-by: Cole Robinson <[email protected]> Signed-off-by: Pavel Hrdina <[email protected]> diff --git a/virtManager/clone.py b/virtManager/clone.py index 895d258a..4148fca0 100644 --- a/virtManager/clone.py +++ b/virtManager/clone.py @@ -64,6 +64,11 @@ def can_we_clone(conn, vol, path): elif not os.path.exists(path): msg = _("Path does not exist.") + else: + pool = vol.get_parent_pool() + if not pool.supports_volume_creation(clone=True): + msg = _("Cannot clone %s storage pool.") % pool.get_type() + if msg: ret = False @@ -94,12 +99,8 @@ def do_we_default(conn, vol, path, ro, shared, devtype): if vol: pool_type = vol.get_parent_pool().get_type() - if pool_type == virtinst.StoragePool.TYPE_SCSI: - info = append_str(info, _("SCSI device")) - elif pool_type == virtinst.StoragePool.TYPE_DISK: + if pool_type == virtinst.StoragePool.TYPE_DISK: info = append_str(info, _("Disk device")) - elif pool_type == virtinst.StoragePool.TYPE_ISCSI: - info = append_str(info, _("iSCSI share")) if shared: info = append_str(info, _("Shareable")) diff --git a/virtManager/storagepool.py b/virtManager/storagepool.py index bf79b161..d0d26cc2 100644 --- a/virtManager/storagepool.py +++ b/virtManager/storagepool.py @@ -238,8 +238,8 @@ class vmmStoragePool(vmmLibvirtObject): def can_change_alloc(self): typ = self.get_type() return (typ in [StoragePool.TYPE_LOGICAL, StoragePool.TYPE_ZFS]) - def supports_volume_creation(self): - return self.get_xmlobj().supports_volume_creation() + def supports_volume_creation(self, clone=False): + return self.get_xmlobj().supports_volume_creation(clone=clone) def get_type(self): return self.get_xmlobj().type diff --git a/virtinst/storage.py b/virtinst/storage.py index 5781e4a7..3249c454 100644 --- a/virtinst/storage.py +++ b/virtinst/storage.py @@ -395,13 +395,25 @@ class StoragePool(_StorageObject): return self.type in users[propname] return hasattr(self, propname) - def supports_volume_creation(self): - return self.type in [ - StoragePool.TYPE_DIR, StoragePool.TYPE_FS, - StoragePool.TYPE_NETFS, StoragePool.TYPE_LOGICAL, + def supports_volume_creation(self, clone=False): + """ + Returns if pool supports volume creation. If @clone is set to True + returns if pool supports volume cloning (virVolCreateXMLFrom). + """ + supported = [ + StoragePool.TYPE_DIR, + StoragePool.TYPE_FS, + StoragePool.TYPE_NETFS, StoragePool.TYPE_DISK, - StoragePool.TYPE_RBD, StoragePool.TYPE_SHEEPDOG, - StoragePool.TYPE_ZFS] + StoragePool.TYPE_LOGICAL, + StoragePool.TYPE_RBD, + ] + if not clone: + supported.extend([ + StoragePool.TYPE_SHEEPDOG, + StoragePool.TYPE_ZFS, + ]) + return self.type in supported def get_disk_type(self): if (self.type == StoragePool.TYPE_DISK or ++++++ 4f66c423-cloner-Handle-nonsparse-for-qcow2-images.patch ++++++ Subject: cloner: Handle --nonsparse for qcow2 images (bz 1675743) From: Cole Robinson [email protected] Mon Mar 4 13:20:51 2019 -0500 Date: Mon Mar 4 14:04:34 2019 -0500: Git: 4f66c423f7833e270b61536d53a0772ce1242abc https://bugzilla.redhat.com/show_bug.cgi?id=1675743 diff --git a/tests/clone-xml/cross-pool-disks-out.xml b/tests/clone-xml/cross-pool-disks-out.xml index 260f321c..6093e240 100644 --- a/tests/clone-xml/cross-pool-disks-out.xml +++ b/tests/clone-xml/cross-pool-disks-out.xml @@ -1,7 +1,7 @@ <volume> <name>new1.img</name> <capacity>1000000</capacity> - <allocation>50000</allocation> + <allocation>1000000</allocation> <target> <format type="qcow2"/> <features> @@ -12,7 +12,7 @@ <volume> <name>new2.img</name> <capacity>1000000</capacity> - <allocation>50000</allocation> + <allocation>1000000</allocation> <target> <format type="qcow2"/> <features> diff --git a/virtinst/cloner.py b/virtinst/cloner.py index ba89a26f..b29027e3 100644 --- a/virtinst/cloner.py +++ b/virtinst/cloner.py @@ -330,6 +330,8 @@ class Cloner(object): vol_install.input_vol = orig_disk.get_vol_object() vol_install.sync_input_vol(only_format=True) + if self.clone_sparse: + vol_install.allocation = vol_install.capacity vol_install.reflink = self.reflink clone_disk.set_vol_install(vol_install) elif orig_disk.path: diff --git a/virtinst/storage.py b/virtinst/storage.py index 3249c454..2e92c5d6 100644 --- a/virtinst/storage.py +++ b/virtinst/storage.py @@ -744,6 +744,10 @@ class StorageVolume(_StorageObject): self.conn.check_support( self.conn.SUPPORT_POOL_METADATA_PREALLOC, self.pool)): createflags |= libvirt.VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA + if self.capacity == self.allocation: + # For cloning, this flag will make libvirt+qemu-img preallocate + # the new disk image + cloneflags |= libvirt.VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA if self.reflink: cloneflags |= getattr(libvirt, ++++++ 57db4185-virt-clone-fix-force-copy-of-empty-cdrom-or-floppy-disk.patch ++++++ Subject: virt-clone: fix force-copy of empty cdrom or floppy disk From: Pavel Hrdina [email protected] Thu Feb 28 17:53:58 2019 +0100 Date: Thu Feb 28 18:05:31 2019 +0100: Git: 57db41854c86704af331d283810db0d86786825a There is nothing to copy so don't try to generate new path. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1564863 Signed-off-by: Pavel Hrdina <[email protected]> Index: virt-manager-2.1.0/tests/clitest.py =================================================================== --- virt-manager-2.1.0.orig/tests/clitest.py +++ virt-manager-2.1.0/tests/clitest.py @@ -1047,6 +1047,7 @@ c.add_invalid("--original-xml " + _CLONE c.add_invalid("--original-xml " + _CLONE_UNMANAGED + " --file %(NEWCLONEIMG1)s --file %(NEWCLONEIMG2)s --force-copy=hdc") # XML w/ disks, force copy but not enough disks passed c.add_invalid("--original-xml " + _CLONE_MANAGED + " --file /tmp/clonevol") # XML w/ managed storage, specify unmanaged path (should fail) c.add_invalid("--original-xml " + _CLONE_NOEXIST + " --file %(EXISTIMG1)s") # XML w/ non-existent storage, WITHOUT --preserve +c.add_valid("--original-xml " + _CLONE_MANAGED + " --auto-clone --force-copy fda") # force copy empty floppy drive Index: virt-manager-2.1.0/virt-clone =================================================================== --- virt-manager-2.1.0.orig/virt-clone +++ virt-manager-2.1.0/virt-clone @@ -67,11 +67,10 @@ def get_clone_diskfile(new_diskfiles, de new_diskfiles.append(None) newpath = new_diskfiles[newidx] - if newpath is None and auto_clone: - newpath = design.generate_clone_disk_path(origpath) - if origpath is None: newpath = None + elif newpath is None and auto_clone: + newpath = design.generate_clone_disk_path(origpath) clonepaths.append(newpath) newidx += 1 ++++++ 708af01c-osdict-Add-supports_virtioinput.patch ++++++ Subject: osdict: Add supports_virtioinput() From: Andrea Bolognani [email protected] Wed Mar 20 16:52:34 2019 +0100 Date: Thu Mar 21 15:31:20 2019 +0100: Git: 708af01c145dcaf5146901d18e22d1da61e09444 We can use this function to figure out whether the guest OS supports VirtIO input devices (virtio-tablet, virtio-keyboard and virtio-mouse). Signed-off-by: Andrea Bolognani <[email protected]> Index: virt-manager-2.1.0/virtinst/osdict.py =================================================================== --- virt-manager-2.1.0.orig/virtinst/osdict.py +++ virt-manager-2.1.0/virtinst/osdict.py @@ -390,6 +390,11 @@ class _OsVariant(object): # Remove this hack after 6 months or so return self._is_related_to("rhel6.0") + def supports_virtioinput(self): + # virtio1.0-input + devids = ["http://pcisig.com/pci/1af4/1052"] + return bool(self._device_filter(devids=devids)) + def supports_usb3(self): # qemu-xhci devids = ["http://pcisig.com/pci/1b36/0004"] ++++++ 74bbc3db-urldetect-Check-also-for-treeinfo.patch ++++++ Subject: urldetect: Check also for 'treeinfo' (bz 1689252) From: Cole Robinson [email protected] Mon Mar 18 14:22:25 2019 -0400 Date: Mon Mar 18 14:24:07 2019 -0400: Git: 74bbc3db15d5e9a1b4d21c276f7d3f435b83d2fd Trees published to akamai CDN via Red Hat Satellite can't have .dotfiles in them. More details here: https://bugzilla.redhat.com/show_bug.cgi?id=635065 So we also need to check for .treeinfo. Anaconda does this too so it's a long known issue. https://bugzilla.redhat.com/show_bug.cgi?id=1689252 diff --git a/virtinst/urldetect.py b/virtinst/urldetect.py index 3033e6ea..4d301ef3 100644 --- a/virtinst/urldetect.py +++ b/virtinst/urldetect.py @@ -48,7 +48,16 @@ class _DistroCache(object): if self._treeinfo: return self._treeinfo - treeinfostr = self.acquire_file_content(".treeinfo") + # Vast majority of trees here use .treeinfo. However, trees via + # Red Hat satellite on akamai CDN will use treeinfo, because akamai + # doesn't do dotfiles apparently: + # + # https://bugzilla.redhat.com/show_bug.cgi?id=635065 + # + # Anaconda is the canonical treeinfo consumer and they check for both + # locations, so we need to do the same + treeinfostr = (self.acquire_file_content(".treeinfo") or + self.acquire_file_content("treeinfo")) if treeinfostr is None: return None ++++++ 7afbb90b-virt-xml-Handle-VM-names-that-look-like-id-uuid.patch ++++++ Subject: virt-xml: Handle VM names that look like id/uuid (bz 1679025) From: Cole Robinson [email protected] Thu Mar 21 13:34:52 2019 -0400 Date: Thu Mar 21 13:45:58 2019 -0400: Git: 7afbb90b4ddfa449e4efc2d57e726d477f96637b Previously we assume they are id/uuid, so if it's actually the VM name then the command fails. Now we always check for a name first, https://bugzilla.redhat.com/show_bug.cgi?id=1679025 Index: virt-manager-2.1.0/tests/clitest.py =================================================================== --- virt-manager-2.1.0.orig/tests/clitest.py +++ virt-manager-2.1.0/tests/clitest.py @@ -908,8 +908,8 @@ c.add_compare("--build-xml --cpu pentium c.add_compare("--build-xml --tpm /dev/tpm", "build-tpm") c.add_compare("--build-xml --blkiotune weight=100,device_path=/dev/sdf,device_weight=200", "build-blkiotune") c.add_compare("--build-xml --idmap uid_start=0,uid_target=1000,uid_count=10,gid_start=0,gid_target=1000,gid_count=10", "build-idmap") -c.add_compare("test --edit --boot network,cdrom", "edit-bootorder") -c.add_compare("--confirm test --edit --cpu host-passthrough", "prompt-response") +c.add_compare("4a64cc71-19c4-2fd0-2323-3050941ea3c3 --edit --boot network,cdrom", "edit-bootorder") # basic bootorder test, also using UUID lookup +c.add_compare("--confirm 1 --edit --cpu host-passthrough", "prompt-response") # prompt response, also using domid lookup c.add_compare("--edit --print-diff --qemu-commandline clearxml=yes", "edit-clearxml-qemu-commandline", input_file=(XMLDIR + "/virtxml-qemu-commandline-clear.xml")) c.add_compare("--connect %(URI-KVM)s test-hyperv-uefi --edit --boot uefi", "hyperv-uefi-collision") Index: virt-manager-2.1.0/virt-xml =================================================================== --- virt-manager-2.1.0.orig/virt-xml +++ virt-manager-2.1.0/virt-xml @@ -73,12 +73,18 @@ def get_domain_and_guest(conn, domstr): isuuid = bool(re.match(uuidre, domstr)) try: - if isint: - domain = conn.lookupByID(int(domstr)) - elif isuuid: - domain = conn.lookupByUUIDString(domstr) - else: + domain = None + try: domain = conn.lookupByName(domstr) + except Exception: + # Incase the VM has a UUID or ID for a name + logging.debug("Error looking up domain by name", exc_info=True) + if isint: + domain = conn.lookupByID(int(domstr)) + elif isuuid: + domain = conn.lookupByUUIDString(domstr) + else: + raise except libvirt.libvirtError as e: fail(_("Could not find domain '%s': %s") % (domstr, e)) ++++++ a02fc0d0-virtManager-clone-build-default-clone-path-if-we-know-how.patch ++++++ Subject: virtManager: clone: build default clone path if we know how From: Pavel Hrdina [email protected] Tue Mar 5 10:16:06 2019 +0100 Date: Wed Mar 6 17:19:00 2019 +0100: Git: a02fc0d02272ade8aea851be4e0f7c7ec38de2fe Function do_we_default returns only if we want to default to clone disk even if we know how to create default clone path. Only in case that the storage pool is TYPE_DISK we don't know how to create default path and we cannot default to clone that disk. In all other cases as ReadOnly disk or Shareable and so on we can prepare the default path for user if they decide to clone it. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1565106 Reviewed-by: Cole Robinson <[email protected]> Signed-off-by: Pavel Hrdina <[email protected]> diff --git a/virtManager/clone.py b/virtManager/clone.py index 4148fca0..1adc59c9 100644 --- a/virtManager/clone.py +++ b/virtManager/clone.py @@ -79,6 +79,7 @@ def do_we_default(conn, vol, path, ro, shared, devtype): """ Returns (do we clone by default?, info string if not)""" ignore = conn info = "" + can_default = True def append_str(str1, str2, delim=", "): if not str2: @@ -101,11 +102,12 @@ def do_we_default(conn, vol, path, ro, shared, devtype): pool_type = vol.get_parent_pool().get_type() if pool_type == virtinst.StoragePool.TYPE_DISK: info = append_str(info, _("Disk device")) + can_default = False if shared: info = append_str(info, _("Shareable")) - return (not info, info) + return (not info, info, can_default) class vmmCloneVM(vmmGObjectUI): @@ -390,8 +392,8 @@ class vmmCloneVM(vmmGObjectUI): skip_targets.remove(force_target) vol = self.conn.get_vol_by_path(path) - default, definfo = do_we_default(self.conn, vol, path, ro, shared, - devtype) + default, definfo, can_default = do_we_default(self.conn, vol, path, + ro, shared, devtype) def storage_add(failinfo=None): # pylint: disable=cell-var-from-loop @@ -426,7 +428,7 @@ class vmmCloneVM(vmmGObjectUI): storage_row[STORAGE_INFO_CAN_CLONE] = True # If we cannot create default clone_path don't even try to do that - if not default: + if not can_default: storage_add() continue ++++++ a0ca387a-cli-Fix-pool-default-when-path-belongs-to-another-pool.patch ++++++ Subject: cli: Fix pool=default when path belongs to another pool (bz 1692489) From: Cole Robinson [email protected] Tue Mar 26 10:44:58 2019 -0400 Date: Tue Mar 26 11:15:46 2019 -0400: Git: a0ca387aad0fde19683aa8b5b5636add6455b8b4 Using 'virt-install --disk size=X' implicitly uses pool=default. If a pool named 'default' exists we use that; if not, and a pool using the default path exists under a different name, we attempt to use that as well, and if that doesn't exist, we create pool=default The second case is broken, so if there's no pool=default and eg. pool=FOO points to /var/lib/libvirt/images, we still attempt to look up pool=default which understandably fails https://bugzilla.redhat.com/show_bug.cgi?id=1692489 Index: virt-manager-2.1.0/virtinst/cli.py =================================================================== --- virt-manager-2.1.0.orig/virtinst/cli.py +++ virt-manager-2.1.0/virtinst/cli.py @@ -2263,7 +2263,9 @@ class ParserDisk(VirtCLIParser): poolobj = None if poolname: if poolname == "default": - StoragePool.build_default_pool(self.guest.conn) + poolxml = StoragePool.build_default_pool(self.guest.conn) + if poolxml: + poolname = poolxml.name poolobj = self.guest.conn.storagePoolLookupByName(poolname) if volname: ++++++ f23b01be-guest-Add-VirtIO-input-devices-to-s390x-guests-with-graphics.patch ++++++ Subject: guest: Add VirtIO input devices to s390x guests with graphics From: Andrea Bolognani [email protected] Wed Mar 20 16:52:35 2019 +0100 Date: Thu Mar 21 15:31:20 2019 +0100: Git: f23b01be53aa8b5b8d91aadbfb0c06268fa5c7b9 We're not including any input devices in the generated XML for s390x guests, and the results is that it's not possible to interact with them short of using the serial console or connecting through ssh, which is fine but probably not what is expected when graphics are present. USB input devices are not a good fit for s390x guests: USB requires PCI, and PCI is not widely available or used on s390x; VirtIO devices, on the other hand, are a perfect match since s390x guests use basically no emulated devices and rely on VirtIO for most functionality. https://bugzilla.redhat.com/show_bug.cgi?id=1683609 Signed-off-by: Andrea Bolognani <[email protected]> Index: virt-manager-2.1.0/virtinst/guest.py =================================================================== --- virt-manager-2.1.0.orig/virtinst/guest.py +++ virt-manager-2.1.0/virtinst/guest.py @@ -588,6 +588,17 @@ class Guest(XMLBuilder): dev.bus = "usb" self.add_device(dev) + # s390x guests need VirtIO input devices + if self.os.is_s390x() and self.osinfo.supports_virtioinput(): + dev = DeviceInput(self.conn) + dev.type = "tablet" + dev.bus = "virtio" + self.add_device(dev) + dev = DeviceInput(self.conn) + dev.type = "keyboard" + dev.bus = "virtio" + self.add_device(dev) + def _add_default_console_device(self): if self.skip_default_console: return
