Fix errors with missing nodedevs (bz #1225771)

Fix CDROM media change if device is bootable (bz #1229819)
Fix adding iscsi pools (bz #1231558)
spec: Add LXC to default connection list (bz #1235972)
Fix backtrace when reporting OS error (bz #1241902)
Raise upper limits for lxc ID namespaces (bz #1244490)
Fix 'copy host CPU definition'
Fix displaying VM machine type when connecting to old libvirt
Fix qemu:///session handling in 'Add Connection' dialog
Fix default storage path for qemu:///session, it should be .local/share/...
This commit is contained in:
Cole Robinson 2015-08-11 15:58:35 -04:00
parent 2c9f7ed9e2
commit eb8a447ebc
13 changed files with 472 additions and 2 deletions

View File

@ -0,0 +1,32 @@
From: Cole Robinson <crobinso@redhat.com>
Date: Tue, 9 Jun 2015 11:41:39 -0400
Subject: [PATCH virt-manager] connection: catch more errors in filter_nodedevs
(bug 1225771)
https://bugzilla.redhat.com/show_bug.cgi?id=1225771 Has an example of
libvirt failing to generate nodedev XML, so handle that too.
(cherry picked from commit 77423e7a8d2061f06f9f7d0b7a791821a134c8f7)
---
virtManager/connection.py | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/virtManager/connection.py b/virtManager/connection.py
index d40ace2..3ca13cc 100644
--- a/virtManager/connection.py
+++ b/virtManager/connection.py
@@ -594,9 +594,11 @@ class vmmConnection(vmmGObject):
try:
xmlobj = dev.get_xmlobj()
except libvirt.libvirtError, e:
- if e.get_error_code() == libvirt.VIR_ERR_NO_NODE_DEVICE:
- continue
- raise
+ # Libvirt nodedev XML fetching can be busted
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1225771
+ if e.get_error_code() != libvirt.VIR_ERR_NO_NODE_DEVICE:
+ logging.debug("Error fetching nodedev XML", exc_info=True)
+ continue
if devtype and xmlobj.device_type != devtype:
continue

View File

@ -0,0 +1,56 @@
From: Cole Robinson <crobinso@redhat.com>
Date: Mon, 10 Aug 2015 18:30:12 -0400
Subject: [PATCH virt-manager] domain: Use UpdateDevice for CDROM media change
(bz 1229819)
This has been supported for a long time now, and is more tested these
days, so let's use it rather than the old style AttachDevice method
It also works around a libvirt issue described in bz 1229819
(cherry picked from commit 40d4c378680275ee432fbf4825c55737bc8c3fc2)
---
virtManager/domain.py | 16 +++-------------
1 file changed, 3 insertions(+), 13 deletions(-)
diff --git a/virtManager/domain.py b/virtManager/domain.py
index bb8c511..6668961 100644
--- a/virtManager/domain.py
+++ b/virtManager/domain.py
@@ -799,10 +799,7 @@ class vmmDomain(vmmLibvirtObject):
_change_bus()
if do_hotplug:
- hotplug_kwargs = {"device": editdev}
- if path != _SENTINEL:
- hotplug_kwargs["storage_path"] = True
- self.hotplug(**hotplug_kwargs)
+ self.hotplug(device=editdev)
else:
self._redefine_xmlobj(xmlobj)
@@ -1056,8 +1053,7 @@ class vmmDomain(vmmLibvirtObject):
self._backend.updateDeviceFlags(xml, flags)
def hotplug(self, vcpus=_SENTINEL, memory=_SENTINEL, maxmem=_SENTINEL,
- description=_SENTINEL, title=_SENTINEL, storage_path=_SENTINEL,
- device=_SENTINEL):
+ description=_SENTINEL, title=_SENTINEL, device=_SENTINEL):
if not self.is_active():
return
@@ -1100,13 +1096,7 @@ class vmmDomain(vmmLibvirtObject):
if title != _SENTINEL:
_hotplug_metadata(title, libvirt.VIR_DOMAIN_METADATA_TITLE)
- if storage_path != _SENTINEL:
- # qemu originally only supported attach_device for updating
- # a device's path. Stick with that. We may need to differentiate
- # for other drivers that don't maintain back compat though
- self.attach_device(device)
-
- elif device != _SENTINEL:
+ if device != _SENTINEL:
self._update_device(device)

View File

@ -0,0 +1,56 @@
From: Cole Robinson <crobinso@redhat.com>
Date: Sun, 21 Jun 2015 15:47:31 -0400
Subject: [PATCH virt-manager] createpool: Fix adding iscsi pools (bz 1231558)
(cherry picked from commit 34db1af7b661b7eb5df4c71fc910d31c1ae9f7a4)
---
virtManager/createpool.py | 6 ++++--
virtManager/uiutil.py | 8 ++++++--
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/virtManager/createpool.py b/virtManager/createpool.py
index bd18d43..1eaa805 100644
--- a/virtManager/createpool.py
+++ b/virtManager/createpool.py
@@ -479,9 +479,11 @@ class vmmCreatePool(vmmGObjectUI):
source_list = self.widget("pool-source-path")
target_list = self.widget("pool-target-path")
- pool = uiutil.get_list_selection(source_list, column=2)
+ pool = uiutil.get_list_selection(source_list, column=2,
+ check_entry=False)
if pool is None:
- pool = uiutil.get_list_selection(target_list, column=2)
+ pool = uiutil.get_list_selection(target_list, column=2,
+ check_entry=False)
return pool
diff --git a/virtManager/uiutil.py b/virtManager/uiutil.py
index 82d2c1d..40b74d4 100644
--- a/virtManager/uiutil.py
+++ b/virtManager/uiutil.py
@@ -70,17 +70,21 @@ def get_list_selected_row(widget, check_visible=False):
return row
-def get_list_selection(widget, column=0, check_visible=False):
+def get_list_selection(widget, column=0,
+ check_visible=False, check_entry=True):
"""
Helper to simplify getting the selected row and value in a list/tree/combo.
If nothing is selected, and the widget is a combo box with a text entry,
return the value of that.
+
+ :param check_entry: If True, attempt to check the widget's text entry
+ using the logic described above.
"""
row = get_list_selected_row(widget, check_visible=check_visible)
if row is not None:
return row[column]
- if hasattr(widget, "get_has_entry"):
+ if check_entry and hasattr(widget, "get_has_entry"):
if widget.get_has_entry():
return widget.get_child().get_text().strip()

View File

@ -0,0 +1,23 @@
From: Cole Robinson <crobinso@redhat.com>
Date: Sun, 9 Aug 2015 18:15:37 -0400
Subject: [PATCH virt-manager] spec: Add LXC to default connection list (bz
1235972)
(cherry picked from commit 59b30c81a0a31c74138a6fed6ae68e79e048836a)
---
virt-manager.spec.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/virt-manager.spec.in b/virt-manager.spec.in
index cb6579f..6150940 100644
--- a/virt-manager.spec.in
+++ b/virt-manager.spec.in
@@ -8,7 +8,7 @@
%define libvirt_packages "libvirt-daemon-kvm,libvirt-daemon-config-network"
%define kvm_packages ""
%define preferred_distros "fedora,rhel"
-%define default_hvs "qemu,xen"
+%define default_hvs "qemu,xen,lxc"
%if 0%{?rhel}
%define preferred_distros "rhel,fedora"

View File

@ -0,0 +1,37 @@
From: Cole Robinson <crobinso@redhat.com>
Date: Mon, 10 Aug 2015 12:56:11 -0400
Subject: [PATCH virt-manager] create: Fix backtrace when reporting OS error
(bz 1241902)
(cherry picked from commit cca72a73c496b715bc90ee277291d0cbcf6d1771)
---
virtManager/create.py | 2 +-
virtManager/error.py | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/virtManager/create.py b/virtManager/create.py
index 8401a7a..452c8d0 100644
--- a/virtManager/create.py
+++ b/virtManager/create.py
@@ -1402,7 +1402,7 @@ class vmmCreate(vmmGObjectUI):
if variant:
guest.os_variant = variant
except ValueError, e:
- self.err.show_err(_("Error setting OS information."), e)
+ self.err.show_err(_("Error setting OS information."), str(e))
return None
if guest.os.is_arm64():
diff --git a/virtManager/error.py b/virtManager/error.py
index 30fc67e..5a838f7 100644
--- a/virtManager/error.py
+++ b/virtManager/error.py
@@ -89,6 +89,8 @@ class vmmErrorDialog(vmmGObject):
tb = "".join(traceback.format_exc()).strip()
if tb != "None":
details += "\n\n" + tb
+ else:
+ details = str(details)
if debug:
debugmsg = "error dialog message:\nsummary=%s" % summary

View File

@ -0,0 +1,36 @@
From: Cole Robinson <crobinso@redhat.com>
Date: Mon, 10 Aug 2015 13:01:04 -0400
Subject: [PATCH virt-manager] osdict: Fix unix alias
Needs to point to proper libosinfo name freebsd9.0
(cherry picked from commit 55b43dcbb81305e1cad6d157efd4d229a0b26741)
---
virtinst/osdict.py | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/virtinst/osdict.py b/virtinst/osdict.py
index 76c2260..a6ae3ac 100644
--- a/virtinst/osdict.py
+++ b/virtinst/osdict.py
@@ -174,7 +174,7 @@ class _OSDB(object):
"linux" : "generic",
"windows" : "winxp",
"solaris" : "solaris10",
- "unix": "freebsd9",
+ "unix": "freebsd9.0",
"other": "generic",
}
@@ -221,10 +221,7 @@ class _OSDB(object):
def lookup_os(self, key):
key = self._aliases.get(key) or key
- ret = self._all_variants.get(key)
- if ret is None:
- return None
- return ret
+ return self._all_variants.get(key)
def lookup_os_by_media(self, location):
media = libosinfo.Media.create_from_location(location, None)

View File

@ -0,0 +1,30 @@
From: Cole Robinson <crobinso@redhat.com>
Date: Mon, 10 Aug 2015 13:14:37 -0400
Subject: [PATCH virt-manager] details: Raise upper limits for lxc ID
namespaces (bz 1244490)
(cherry picked from commit 531260be363bf203062636b548c3d0ec7eab5500)
---
ui/details.ui | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ui/details.ui b/ui/details.ui
index eff3417..a2d3107 100644
--- a/ui/details.ui
+++ b/ui/details.ui
@@ -37,13 +37,13 @@
<property name="page_increment">25</property>
</object>
<object class="GtkAdjustment" id="adjustment16">
- <property name="upper">65536</property>
+ <property name="upper">10000000</property>
<property name="value">1000</property>
<property name="step_increment">1</property>
<property name="page_increment">25</property>
</object>
<object class="GtkAdjustment" id="adjustment17">
- <property name="upper">65536</property>
+ <property name="upper">10000000</property>
<property name="value">1000</property>
<property name="step_increment">1</property>
<property name="page_increment">25</property>

View File

@ -0,0 +1,32 @@
From: Pavel Hrdina <phrdina@redhat.com>
Date: Tue, 14 Jul 2015 15:53:25 +0200
Subject: [PATCH virt-manager] virtinst.cpu: fix copy host cpu definition
Commit cac4ac14 updated cpu features to use XMLBuilder and this change
removes the 'Features' class. There is no longer any '.names()'
method to return names, so just cycle through all features and use a
name attribute instead.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1240938
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
(cherry picked from commit a9b303fb141df5b2d2051c6b4ed489dbb09952f8)
---
virtinst/cpu.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/virtinst/cpu.py b/virtinst/cpu.py
index b12fd30..fb17bb7 100644
--- a/virtinst/cpu.py
+++ b/virtinst/cpu.py
@@ -104,8 +104,8 @@ class CPU(XMLBuilder):
for feature in self.features:
self.remove_feature(feature)
- for name in cpu.features.names():
- self.add_feature(name)
+ for feature in cpu.features:
+ self.add_feature(feature.name)
def vcpus_from_topology(self):
"""

View File

@ -0,0 +1,26 @@
From: Cole Robinson <crobinso@redhat.com>
Date: Tue, 14 Jul 2015 11:48:12 -0400
Subject: [PATCH virt-manager] tests: Add test for CPU clearing
Currently broken, fixed by the next patch
(cherry picked from commit 612123563eab40b546aac977c5556371de8aed70)
---
tests/xmlparse.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tests/xmlparse.py b/tests/xmlparse.py
index d737033..f134400 100644
--- a/tests/xmlparse.py
+++ b/tests/xmlparse.py
@@ -1282,8 +1282,9 @@ class XMLParseTest(unittest.TestCase):
basename = "clear-cpu-unknown-vals"
infile = "tests/xmlparse-xml/%s-in.xml" % basename
outfile = "tests/xmlparse-xml/%s-out.xml" % basename
- guest = virtinst.Guest(conn, parsexml=file(infile).read())
+ guest = virtinst.Guest(kvmconn, parsexml=file(infile).read())
+ guest.cpu.copy_host_cpu()
guest.cpu.clear()
utils.diff_compare(guest.get_xml_config(), outfile)

View File

@ -0,0 +1,33 @@
From: Pavel Hrdina <phrdina@redhat.com>
Date: Fri, 31 Jul 2015 14:28:00 +0200
Subject: [PATCH virt-manager] details: don't display error if machine is
missing in XML
Commint 0ddec919 updated the details page. Now the detail page of
existing domain cannot update the 'machine' value, only prints that
value. If we cannot get the machine from domain XML, don't pass a None,
but "Unknown" instead. This can happen if you are connecting with
virt-manager to really old libvirt, the machine value is present in
domain XML since libvirt v0.9.5.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1238981
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
(cherry picked from commit f81358b02d58b709529a35268cbaf8ce098d803a)
---
virtManager/details.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/virtManager/details.py b/virtManager/details.py
index 718f50a..8507bd0 100644
--- a/virtManager/details.py
+++ b/virtManager/details.py
@@ -2457,7 +2457,7 @@ class vmmDetails(vmmGObjectUI):
self.widget("overview-firmware-label").set_text(firmware)
# Machine settings
- machtype = self.vm.get_machtype()
+ machtype = self.vm.get_machtype() or _("Unknown")
if self.widget("machine-type").is_visible():
uiutil.set_list_selection(
self.widget("machine-type"), machtype)

View File

@ -0,0 +1,24 @@
From: Cole Robinson <crobinso@redhat.com>
Date: Sun, 9 Aug 2015 12:27:20 -0400
Subject: [PATCH virt-manager] addconnection: Fix qemu:///session vs. lxc:///
detection
(cherry picked from commit 4970615f4870cc5394a46ff6a049ac937b3043d6)
---
virtManager/connect.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/virtManager/connect.py b/virtManager/connect.py
index b977fea..7493d14 100644
--- a/virtManager/connect.py
+++ b/virtManager/connect.py
@@ -327,7 +327,8 @@ class vmmConnect(vmmGObjectUI):
self.populate_uri()
def hypervisor_changed(self, src):
- is_session = (src.get_active() == HV_QEMU_SESSION)
+ hv = uiutil.get_list_selection(self.widget("hypervisor"))
+ is_session = (hv == HV_QEMU_SESSION)
uiutil.set_grid_row_visible(
self.widget("session-warning-box"), is_session)
uiutil.set_grid_row_visible(

View File

@ -0,0 +1,25 @@
From: Cole Robinson <crobinso@redhat.com>
Date: Mon, 10 Aug 2015 12:35:13 -0400
Subject: [PATCH virt-manager] storage: session path should be
~/.local/share/libvirt/images
Not .local/libvirt/images :/ App dirs aren't supposed to be in ~/.local
(cherry picked from commit e22aeac5ae23b03e79e1d18c5fc7c6f2ca8b7a8d)
---
virtinst/storage.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/virtinst/storage.py b/virtinst/storage.py
index 9e90db8..285acb8 100644
--- a/virtinst/storage.py
+++ b/virtinst/storage.py
@@ -81,7 +81,7 @@ class _StorageObject(XMLBuilder):
def _get_default_pool_path(conn):
path = "/var/lib/libvirt/images"
if conn.is_session_uri():
- path = os.path.expanduser("~/.local/libvirt/images")
+ path = os.path.expanduser("~/.local/share/libvirt/images")
return path

View File

@ -8,7 +8,7 @@
%define libvirt_packages "libvirt-daemon-kvm,libvirt-daemon-config-network"
%define kvm_packages ""
%define preferred_distros "fedora,rhel"
%define default_hvs "qemu,xen"
%define default_hvs "qemu,xen,lxc"
%if 0%{?rhel}
%define preferred_distros "rhel,fedora"
@ -21,7 +21,7 @@
Name: virt-manager
Version: 1.2.1
Release: 2%{?dist}
Release: 3%{?dist}
%define verrel %{version}-%{release}
Summary: Virtual Machine Manager
@ -29,6 +29,30 @@ Group: Applications/Emulators
License: GPLv2+
URL: http://virt-manager.org/
Source0: http://virt-manager.org/download/sources/%{name}/%{name}-%{version}.tar.gz
# Fix errors with missing nodedevs (bz #1225771)
Patch0001: 0001-connection-catch-more-errors-in-filter_nodedevs-bug-.patch
# Fix CDROM media change if device is bootable (bz #1229819)
Patch0002: 0002-domain-Use-UpdateDevice-for-CDROM-media-change-bz-12.patch
# Fix adding iscsi pools (bz #1231558)
Patch0003: 0003-createpool-Fix-adding-iscsi-pools-bz-1231558.patch
# spec: Add LXC to default connection list (bz #1235972)
Patch0004: 0004-spec-Add-LXC-to-default-connection-list-bz-1235972.patch
# Fix backtrace when reporting OS error (bz #1241902)
Patch0005: 0005-create-Fix-backtrace-when-reporting-OS-error-bz-1241.patch
Patch0006: 0006-osdict-Fix-unix-alias.patch
# Raise upper limits for lxc ID namespaces (bz #1244490)
Patch0007: 0007-details-Raise-upper-limits-for-lxc-ID-namespaces-bz-.patch
# Fix 'copy host CPU definition'
Patch0008: 0008-virtinst.cpu-fix-copy-host-cpu-definition.patch
Patch0009: 0009-tests-Add-test-for-CPU-clearing.patch
# Fix displaying VM machine type when connecting to old libvirt
Patch0010: 0010-details-don-t-display-error-if-machine-is-missing-in.patch
# Fix qemu:///session handling in 'Add Connection' dialog
Patch0011: 0011-addconnection-Fix-qemu-session-vs.-lxc-detection.patch
# Fix default storage path for qemu:///session, it should be
# .local/share/...
Patch0012: 0012-storage-session-path-should-be-.local-share-libvirt-.patch
BuildArch: noarch
@ -102,6 +126,30 @@ machine).
%prep
%setup -q
# Fix errors with missing nodedevs (bz #1225771)
%patch0001 -p1
# Fix CDROM media change if device is bootable (bz #1229819)
%patch0002 -p1
# Fix adding iscsi pools (bz #1231558)
%patch0003 -p1
# spec: Add LXC to default connection list (bz #1235972)
%patch0004 -p1
# Fix backtrace when reporting OS error (bz #1241902)
%patch0005 -p1
%patch0006 -p1
# Raise upper limits for lxc ID namespaces (bz #1244490)
%patch0007 -p1
# Fix 'copy host CPU definition'
%patch0008 -p1
%patch0009 -p1
# Fix displaying VM machine type when connecting to old libvirt
%patch0010 -p1
# Fix qemu:///session handling in 'Add Connection' dialog
%patch0011 -p1
# Fix default storage path for qemu:///session, it should be
# .local/share/...
%patch0012 -p1
%build
%if %{qemu_user}
%define _qemu_user --qemu-user=%{qemu_user}
@ -213,6 +261,18 @@ fi
%{_bindir}/virt-xml
%changelog
* Tue Aug 11 2015 Cole Robinson <crobinso@redhat.com> - 1.2.1-3
- Fix errors with missing nodedevs (bz #1225771)
- Fix CDROM media change if device is bootable (bz #1229819)
- Fix adding iscsi pools (bz #1231558)
- spec: Add LXC to default connection list (bz #1235972)
- Fix backtrace when reporting OS error (bz #1241902)
- Raise upper limits for lxc ID namespaces (bz #1244490)
- Fix 'copy host CPU definition'
- Fix displaying VM machine type when connecting to old libvirt
- Fix qemu:///session handling in 'Add Connection' dialog
- Fix default storage path for qemu:///session, it should be .local/share/...
* Fri Jun 19 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.2.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild