- Upstream bug fixes (bsc#1027942)

ba08f84b-addstorage-Return-to-using-qcow2-sparse-by-default.patch
  a010c49b-cli-Fix-os-variant-help-introspection.patch
  79ebcbcb-viewers-Fix-spice-audio.patch
  e5a51f63-details-Change-Close-accelerator-to-ctrl+shift+w.patch
  9c13d2f8-Remove-use-of-problematic-terminology.patch
- jsc#SLE-16582, Upgrade virt-manager >= 3.x

OBS-URL: https://build.opensuse.org/package/show/Virtualization/virt-manager?expand=0&rev=511
This commit is contained in:
Charles Arnold 2020-09-28 15:36:40 +00:00 committed by Git OBS Bridge
parent 6de106691e
commit 0c9d900197
7 changed files with 507 additions and 1 deletions

View File

@ -0,0 +1,50 @@
Subject: viewers: Fix spice audio
From: Cole Robinson crobinso@redhat.com Mon Sep 21 11:35:51 2020 -0400
Date: Mon Sep 21 11:35:51 2020 -0400:
Git: 79ebcbcb71d77548443b7943d65bacb216c93769
Commit 1689ebb25 removed what I thought was an unused audio
handle in the spice viewer code, but apparently it does
something. Strangely some VMs work fine (linux, windows 7),
but my windows 10 VMs need this to actually get audio.
No clue what that's all about
https://bugzilla.redhat.com/show_bug.cgi?id=1881080
Signed-off-by: Cole Robinson <crobinso@redhat.com>
diff --git a/virtManager/details/viewers.py b/virtManager/details/viewers.py
index 46ff1431..da9f906d 100644
--- a/virtManager/details/viewers.py
+++ b/virtManager/details/viewers.py
@@ -476,6 +476,7 @@ class SpiceViewer(Viewer):
Viewer.__init__(self, *args, **kwargs)
self._spice_session = None
self._display = None
+ self._audio = None
self._main_channel = None
self._display_channel = None
self._usbdev_manager = None
@@ -618,6 +619,14 @@ class SpiceViewer(Viewer):
self._init_widget()
self.emit("connected")
+ elif (type(channel) in [SpiceClientGLib.PlaybackChannel,
+ SpiceClientGLib.RecordChannel] and
+ not self._audio):
+ # It's unclear why we need this audio handle, but it
+ # does matter:
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1881080
+ self._audio = SpiceClientGLib.Audio.get(self._spice_session, None)
+
def _agent_connected_cb(self, src, val):
self.emit("agent-connected") # pragma: no cover
@@ -631,6 +640,7 @@ class SpiceViewer(Viewer):
_SIGS.disconnect_obj_signals(self._spice_session)
self._spice_session.disconnect()
self._spice_session = None
+ self._audio = None
if self._display:
self._display.destroy()
self._display = None

View File

@ -0,0 +1,226 @@
Subject: Remove use of problematic terminology
From: Cole Robinson crobinso@redhat.com Wed Sep 23 14:33:17 2020 -0400
Date: Wed Sep 23 14:33:17 2020 -0400:
Git: 9c13d2f8788414f1ab5b0300ce82b5d9ce277880
Following kernel recommendation here:
https://lkml.org/lkml/2020/7/4/229
Signed-off-by: Cole Robinson <crobinso@redhat.com>
Index: virt-manager-3.0.0/man/virt-install.rst
===================================================================
--- virt-manager-3.0.0.orig/man/virt-install.rst
+++ virt-manager-3.0.0/man/virt-install.rst
@@ -1247,7 +1247,7 @@ Connect the guest to the host network. E
Tell virt-install not to add any default network interface.
If ``--network`` is omitted a single NIC will be created in the guest. If
-there is a bridge device in the host with a physical interface enslaved,
+there is a bridge device in the host with a physical interface attached,
that will be used for connectivity. Failing that, the virtual network
called ``default`` will be used. This option can be specified multiple
times to setup more than one NIC.
Index: virt-manager-3.0.0/tests/uitests/test_addhardware.py
===================================================================
--- virt-manager-3.0.0.orig/tests/uitests/test_addhardware.py
+++ virt-manager-3.0.0/tests/uitests/test_addhardware.py
@@ -310,7 +310,7 @@ class AddHardware(lib.testcase.UITestCas
self.app.open(break_setfacl=True)
details = self.app.open_details_window("test-clone-simple")
- # Say 'Yes' and it should fail, then blacklist the paths
+ # Say 'Yes' and it should fail, then denylist the paths
addhw = self._open_addhw_window(details)
tab = self._select_hw(addhw, "Storage", "storage-tab")
tab.find_fuzzy("Select or create", "radio").click()
Index: virt-manager-3.0.0/tests/uitests/test_connection.py
===================================================================
--- virt-manager-3.0.0.orig/tests/uitests/test_connection.py
+++ virt-manager-3.0.0/tests/uitests/test_connection.py
@@ -15,7 +15,7 @@ class UITestConnection(lib.testcase.UITe
def testConnectionBlacklist(self):
self.app.open(
- extra_opts=["--test-options=object-blacklist=test-many-devices"])
+ extra_opts=["--test-options=object-denylist=test-many-devices"])
manager = self.app.topwin
def _delete_vm(vmname):
Index: virt-manager-3.0.0/virtManager/connection.py
===================================================================
--- virt-manager-3.0.0.orig/virtManager/connection.py
+++ virt-manager-3.0.0/virtManager/connection.py
@@ -38,46 +38,46 @@ class _ObjectList(vmmGObject):
vmmGObject.__init__(self)
self._objects = []
- self._blacklist = {}
+ self._denylist = {}
self._lock = threading.Lock()
def _cleanup(self):
self._objects = []
- def _blacklist_key(self, obj):
+ def _denylist_key(self, obj):
return str(obj.__class__) + obj.get_name()
- def add_blacklist(self, obj):
+ def add_denylist(self, obj):
"""
- Add an object to the blacklist. Basically a list of objects we
+ Add an object to the denylist. Basically a list of objects we
choose not to poll, because they threw an error at init time
- :param obj: vmmLibvirtObject to blacklist
+ :param obj: vmmLibvirtObject to denylist
:returns: number of added object to list
"""
- key = self._blacklist_key(obj)
- count = self._blacklist.get(key, 0)
- self._blacklist[key] = count + 1
- return self._blacklist[key]
+ key = self._denylist_key(obj)
+ count = self._denylist.get(key, 0)
+ self._denylist[key] = count + 1
+ return self._denylist[key]
- def remove_blacklist(self, obj):
+ def remove_denylist(self, obj):
"""
- :param obj: vmmLibvirtObject to remove from blacklist
- :returns: True if object was blacklisted or False otherwise.
+ :param obj: vmmLibvirtObject to remove from denylist
+ :returns: True if object was denylisted or False otherwise.
"""
- key = self._blacklist_key(obj)
- return bool(self._blacklist.pop(key, 0))
+ key = self._denylist_key(obj)
+ return bool(self._denylist.pop(key, 0))
- def in_blacklist(self, obj):
+ def in_denylist(self, obj):
"""
- If an object is in list only once don't consider it blacklisted,
+ If an object is in list only once don't consider it denylisted,
give it one more chance.
:param obj: vmmLibvirtObject to check
- :returns: True if object is blacklisted
+ :returns: True if object is denylisted
"""
- key = self._blacklist_key(obj)
- return self._blacklist.get(key, 0) >= _ObjectList.BLACKLIST_COUNT
+ key = self._denylist_key(obj)
+ return self._denylist.get(key, 0) >= _ObjectList.BLACKLIST_COUNT
def remove(self, obj):
"""
@@ -90,7 +90,7 @@ class _ObjectList(vmmGObject):
# Identity check is sufficient here, since we should never be
# asked to remove an object that wasn't at one point in the list.
if obj not in self._objects:
- return self.remove_blacklist(obj)
+ return self.remove_denylist(obj)
self._objects.remove(obj)
return True
@@ -1060,11 +1060,11 @@ class vmmConnection(vmmGObject):
if initialize_failed:
log.debug("Blacklisting %s=%s", class_name, obj.get_name())
- count = self._objects.add_blacklist(obj)
- log.debug("Object added in blacklist, count=%d", count)
+ count = self._objects.add_denylist(obj)
+ log.debug("Object added in denylist, count=%d", count)
return
- self._objects.remove_blacklist(obj)
+ self._objects.remove_denylist(obj)
if not self._objects.add(obj):
log.debug("New %s=%s requested, but it's already tracked.",
class_name, obj.get_name())
@@ -1134,7 +1134,7 @@ class vmmConnection(vmmGObject):
gone_objects.extend(gone)
preexisting_objects.extend([o for o in master if o not in new])
- new = [n for n in new if not self._objects.in_blacklist(n)]
+ new = [n for n in new if not self._objects.in_denylist(n)]
return new
new_vms = _process_objects("vms")
Index: virt-manager-3.0.0/virtManager/lib/testmock.py
===================================================================
--- virt-manager-3.0.0.orig/virtManager/lib/testmock.py
+++ virt-manager-3.0.0/virtManager/lib/testmock.py
@@ -157,7 +157,7 @@ class CLITestOptionsClass:
Spice doesn't return values here when we are just testing
against seabios in uitests, this fakes it to hit more code paths
* fake-systray: Enable the fake systray window
- * object-blacklist=NAME: Make object initialize for that name
+ * object-denylist=NAME: Make object initialize for that name
fail to test some connection code paths
* conn-crash: Test connection abruptly closing like when
libvirtd is restarted.
@@ -205,7 +205,7 @@ class CLITestOptionsClass:
self.fake_vnc_username = _get("fake-vnc-username")
self.fake_console_resolution = _get("fake-console-resolution")
self.fake_systray = _get("fake-systray")
- self.object_blacklist = _get_value("object-blacklist")
+ self.object_denylist = _get_value("object-denylist")
self.conn_crash = _get("conn-crash")
self.fake_agent_event = _get_value("fake-agent-event")
self.fake_nodedev_event = _get_value("fake-nodedev-event")
Index: virt-manager-3.0.0/virtManager/object/domain.py
===================================================================
--- virt-manager-3.0.0.orig/virtManager/object/domain.py
+++ virt-manager-3.0.0/virtManager/object/domain.py
@@ -393,7 +393,7 @@ class vmmDomain(vmmLibvirtObject):
self.get_uuid() == "00000000-0000-0000-0000-000000000000"):
# We don't want virt-manager to track Domain-0 since it
# doesn't work with our UI. Raising an error will ensures it
- # is blacklisted.
+ # is denylisted.
raise RuntimeError( # pragma: no cover
"Can't track Domain-0 as a vmmDomain")
Index: virt-manager-3.0.0/virtManager/object/libvirtobject.py
===================================================================
--- virt-manager-3.0.0.orig/virtManager/object/libvirtobject.py
+++ virt-manager-3.0.0/virtManager/object/libvirtobject.py
@@ -171,7 +171,7 @@ class vmmLibvirtObject(vmmGObject):
initialize_failed = False
try:
- if self.config.CLITestOptions.object_blacklist == self._name:
+ if self.config.CLITestOptions.object_denylist == self._name:
raise RuntimeError("fake initialization error")
self._init_libvirt_state()
Index: virt-manager-3.0.0/virtinst/devices/graphics.py
===================================================================
--- virt-manager-3.0.0.orig/virtinst/devices/graphics.py
+++ virt-manager-3.0.0/virtinst/devices/graphics.py
@@ -151,7 +151,7 @@ class DeviceGraphics(Device):
def _spice_supported(self):
if not self.conn.is_qemu() and not self.conn.is_test():
return False
- # Spice has issues on some host arches, like ppc, so whitelist it
+ # Spice has issues on some host arches, like ppc, so allow it
if self.conn.caps.host.cpu.arch not in ["i686", "x86_64"]:
return False
return True
Index: virt-manager-3.0.0/virtinst/devices/interface.py
===================================================================
--- virt-manager-3.0.0.orig/virtinst/devices/interface.py
+++ virt-manager-3.0.0/virtinst/devices/interface.py
@@ -72,7 +72,7 @@ def _host_default_bridge():
return dev # pragma: no cover
# Old style, peth0 == phys dev, eth0 == netloop, xenbr0 == bridge,
- # vif0.0 == netloop enslaved, eth0 == default route
+ # vif0.0 == netloop attached, eth0 == default route
try:
defn = int(dev[-1])
except Exception: # pragma: no cover

View File

@ -0,0 +1,20 @@
Subject: cli: Fix --os-variant=help introspection
From: Cole Robinson crobinso@redhat.com Sun Sep 20 16:00:33 2020 -0400
Date: Sun Sep 20 16:00:46 2020 -0400:
Git: a010c49b8b3c0ecca5ec99d962b2b98f25694a37
Signed-off-by: Cole Robinson <crobinso@redhat.com>
Index: virt-manager-3.0.0/virtinst/cli.py
===================================================================
--- virt-manager-3.0.0.orig/virtinst/cli.py
+++ virt-manager-3.0.0/virtinst/cli.py
@@ -1830,7 +1830,7 @@ class OSVariantData(object):
class ParserOSVariant(VirtCLIParser):
- cli_arg_name = "os-variant"
+ cli_arg_name = "os_variant"
supports_clearxml = False
@classmethod

View File

@ -0,0 +1,86 @@
Subject: addstorage: Return to using qcow2 sparse by default
From: Cole Robinson crobinso@redhat.com Sat Sep 19 18:06:45 2020 -0400
Date: Sun Sep 20 10:11:36 2020 -0400:
Git: ba08f84b3408744e9aa9763d100e8aa217c1f5ff
https://bugzilla.redhat.com/show_bug.cgi?id=1759454
See 15a6a7e2105440df528f75c4df4d2471df28bd1e
The idea behind virt-manager's sparse vs nonsparse default, is that if
the user selected 'raw' for as the default image format, assume they
want to maximize performance, so fully allocate the disk.
qcow2 didn't support anything except sparse, so the sparse=True vs
sparse=False made no difference. So we always set sparse=False
Then qcow2 grows non-sparse support, and virt-manager is suddenly
defaulting to it, which is not the intention.
Default to sparse when requested format isn't raw
Signed-off-by: Cole Robinson <crobinso@redhat.com>
Index: virt-manager-3.0.0/tests/uitests/test_addhardware.py
===================================================================
--- virt-manager-3.0.0.orig/tests/uitests/test_addhardware.py
+++ virt-manager-3.0.0/tests/uitests/test_addhardware.py
@@ -152,11 +152,8 @@ class AddHardware(lib.testcase.UITestCas
tab.combo_select("Cache mode:", "none")
tab.combo_select("Discard mode:", "ignore")
tab.combo_select("Detect zeroes:", "unmap")
- # Size too big
- tab.find("GiB", "spin button").set_text("2000")
- self._finish(addhw, check=None)
- self.app.click_alert_button("not enough free space", "Close")
- tab.find("GiB", "spin button").set_text("1.5")
+ # High number but we are non-sparse by default so it won't complain
+ tab.find("GiB", "spin button").set_text("200000")
self._finish(addhw, check=details)
# USB disk with removable setting
Index: virt-manager-3.0.0/tests/uitests/test_createvm.py
===================================================================
--- virt-manager-3.0.0.orig/tests/uitests/test_createvm.py
+++ virt-manager-3.0.0/tests/uitests/test_createvm.py
@@ -201,12 +201,11 @@ class NewVM(lib.testcase.UITestCase):
self.forward(newvm)
self.forward(newvm)
- # Trigger size validation failure
+ # qcow2 default shouldn't trigger size error
sizetext = newvm.find(None, "spin button", "GiB")
sizetext.set_text("10000000")
- self.forward(newvm, check=False)
- self.app.click_alert_button("Storage parameter error", "OK")
- sizetext.set_text("1")
+ _forward(newvm)
+ _back(newvm)
# Use the storage browser to select a local file
storagetext = newvm.find("storage-entry")
Index: virt-manager-3.0.0/virtManager/device/addstorage.py
===================================================================
--- virt-manager-3.0.0.orig/virtManager/device/addstorage.py
+++ virt-manager-3.0.0/virtManager/device/addstorage.py
@@ -251,14 +251,18 @@ class vmmAddStorage(vmmGObjectUI):
if disk.wants_storage_creation():
pool = disk.get_parent_pool()
size = uiutil.spin_get_helper(self.widget("storage-size"))
- sparse = False
+ fmt = self.conn.get_default_storage_format()
+
+ # If the user changed the default disk format to raw, assume
+ # they want to maximize performance, so fully allocate the
+ # disk image. Otherwise use sparse
+ sparse = fmt != 'raw'
vol_install = virtinst.DeviceDisk.build_vol_install(
disk.conn, os.path.basename(disk.path), pool,
size, sparse)
disk.set_vol_install(vol_install)
- fmt = self.conn.get_default_storage_format()
if disk.get_vol_install().supports_format():
log.debug("Using default prefs format=%s for path=%s",
fmt, disk.path)

View File

@ -0,0 +1,104 @@
Subject: details: Change Close accelerator to ctrl+shift+w
From: Cole Robinson crobinso@redhat.com Mon Sep 21 14:33:25 2020 -0400
Date: Mon Sep 21 14:33:25 2020 -0400:
Git: e5a51f637411b4b2efc789fdef99eb4860ac3b9f
Close accelerator changes ctrl+w -> ctrl+shift+w
Quit accelerator changes ctrl+q -> ctrl+shift+q
After aafb874c8, if the mouse pointer isn't inside the console
window, it has keyboard focus but ctrl+w will be sent to the vmwindow
and not the VM. ctrl+w is a common shortcut for deleting a word so
this is pretty disruptive if you are typing inside the VM
Use gnome-terminal-esque accelerators starting with ctrl+shift to
reduce the chance of collision.
https://bugzilla.redhat.com/show_bug.cgi?id=1880295
Signed-off-by: Cole Robinson <crobinso@redhat.com>
Index: virt-manager-3.0.0/tests/uitests/test_livetests.py
===================================================================
--- virt-manager-3.0.0.orig/tests/uitests/test_livetests.py
+++ virt-manager-3.0.0/tests/uitests/test_livetests.py
@@ -146,7 +146,7 @@ class Console(lib.testcase.UITestCase):
# Check that modifiers don't work
win.click()
self.app.sleep(1)
- win.keyCombo("<ctrl>w")
+ win.keyCombo("<ctrl><shift>w")
lib.utils.check(lambda: win.showing)
dom.destroy()
win.find("Guest is not running.")
@@ -315,13 +315,13 @@ class Console(lib.testcase.UITestCase):
# Ensure ctrl+w doesn't close the window, modifiers are disabled
term.click()
- win.keyCombo("<ctrl>w")
+ win.keyCombo("<ctrl><shift>w")
lib.utils.check(lambda: win.showing)
- # Shut it down, ensure <ctrl>w works again
+ # Shut it down, ensure accelerator works again
self._destroy(win)
win.click_title()
self.app.sleep(1)
- win.keyCombo("<ctrl>w")
+ win.keyCombo("<ctrl><shift>w")
lib.utils.check(lambda: not win.showing)
Index: virt-manager-3.0.0/ui/vmwindow.ui
===================================================================
--- virt-manager-3.0.0.orig/ui/vmwindow.ui
+++ virt-manager-3.0.0/ui/vmwindow.ui
@@ -3,6 +3,16 @@
<interface>
<requires lib="gtk+" version="3.22"/>
<object class="GtkAccelGroup" id="accelgroup1"/>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-close</property>
+ </object>
+ <object class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-quit</property>
+ </object>
<object class="GtkWindow" id="vmm-vmwindow">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Virtual Machine</property>
@@ -48,24 +58,28 @@
</child>
<child>
<object class="GtkImageMenuItem" id="close4">
- <property name="label">gtk-close</property>
+ <property name="label">_Close</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
- <property name="use_stock">True</property>
+ <property name="image">image1</property>
+ <property name="use_stock">False</property>
<property name="accel_group">accelgroup1</property>
<signal name="activate" handler="on_details_menu_close_activate" swapped="no"/>
+ <accelerator key="w" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="quit3">
- <property name="label">gtk-quit</property>
+ <property name="label">_Quit</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
- <property name="use_stock">True</property>
+ <property name="image">image2</property>
+ <property name="use_stock">False</property>
<property name="accel_group">accelgroup1</property>
<signal name="activate" handler="on_details_menu_quit_activate" swapped="no"/>
+ <accelerator key="q" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
</object>
</child>
</object>

View File

@ -1,7 +1,17 @@
-------------------------------------------------------------------
Mon Sep 28 08:17:59 MDT 2020 - carnold@suse.com
- Upstream bug fixes (bsc#1027942)
ba08f84b-addstorage-Return-to-using-qcow2-sparse-by-default.patch
a010c49b-cli-Fix-os-variant-help-introspection.patch
79ebcbcb-viewers-Fix-spice-audio.patch
e5a51f63-details-Change-Close-accelerator-to-ctrl+shift+w.patch
9c13d2f8-Remove-use-of-problematic-terminology.patch
-------------------------------------------------------------------
Wed Sep 16 05:24:21 MDT 2020 - carnold@suse.com
- Update to virt-manager 3.0.0 (fate#326786)
- jsc#SLE-16582, Upgrade virt-manager >= 3.x
virt-manager-3.0.0.tar.bz2
* virt-install cloud-init support (Athina Plaskasoviti, Cole
Robinson)

View File

@ -32,6 +32,11 @@ Source1: virt-install.rb
Source2: virt-install.desktop
Source3: virt-manager-supportconfig
# Upstream Patches
Patch1: ba08f84b-addstorage-Return-to-using-qcow2-sparse-by-default.patch
Patch2: a010c49b-cli-Fix-os-variant-help-introspection.patch
Patch3: 79ebcbcb-viewers-Fix-spice-audio.patch
Patch4: e5a51f63-details-Change-Close-accelerator-to-ctrl+shift+w.patch
Patch5: 9c13d2f8-Remove-use-of-problematic-terminology.patch
# SUSE Only
Patch70: virtman-desktop.patch
Patch71: virtman-kvm.patch
@ -154,6 +159,11 @@ machine).
%prep
%setup -q
# Upstream Patches
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
# SUSE Only
%patch70 -p1
%patch71 -p1