diff --git a/4970615f-fix-qemu-vs-lxc-detection.patch b/4970615f-fix-qemu-vs-lxc-detection.patch new file mode 100644 index 00000000..282db45d --- /dev/null +++ b/4970615f-fix-qemu-vs-lxc-detection.patch @@ -0,0 +1,20 @@ +Subject: addconnection: Fix qemu:///session vs. lxc:/// detection +From: Cole Robinson crobinso@redhat.com Sun Aug 9 12:27:20 2015 -0400 +Date: Sun Aug 9 12:27:20 2015 -0400: +Git: 4970615f4870cc5394a46ff6a049ac937b3043d6 + + +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( diff --git a/a9b303fb-fix-copy-host-cpu-definition.patch b/a9b303fb-fix-copy-host-cpu-definition.patch new file mode 100644 index 00000000..7db38dda --- /dev/null +++ b/a9b303fb-fix-copy-host-cpu-definition.patch @@ -0,0 +1,29 @@ +Subject: virtinst.cpu: fix copy host cpu definition +From: Pavel Hrdina phrdina@redhat.com Tue Jul 14 15:53:25 2015 +0200 +Date: Tue Jul 14 11:53:02 2015 -0400: +Git: a9b303fb141df5b2d2051c6b4ed489dbb09952f8 + +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 + +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): + """ diff --git a/aebebbf8-report-an-error-for-pxe-install-without-network.patch b/aebebbf8-report-an-error-for-pxe-install-without-network.patch new file mode 100644 index 00000000..0739bd1f --- /dev/null +++ b/aebebbf8-report-an-error-for-pxe-install-without-network.patch @@ -0,0 +1,41 @@ +Subject: virt-install: report an error for pxe install without network +From: Pavel Hrdina phrdina@redhat.com Thu Aug 6 14:43:00 2015 +0200 +Date: Thu Aug 6 14:56:30 2015 +0200: +Git: aebebbf879ff33af38f858aebc01a5de1cafb1a7 + +Fix a regression where we used to report an error message if user +specified pxe installation without any network (--nonetworks or +--network none). + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1250382 + +Signed-off-by: Pavel Hrdina + +Index: virt-manager-1.2.1/tests/clitest.py +=================================================================== +--- virt-manager-1.2.1.orig/tests/clitest.py ++++ virt-manager-1.2.1/tests/clitest.py +@@ -742,8 +742,8 @@ c.add_valid("--mac 22:22:33:44:55:AF") + c.add_valid("--bridge mybr0 --mac 22:22:33:44:55:AF") # Old bridge w/ mac + c.add_valid("--network bridge:mybr0,model=e1000") # --network bridge: + c.add_valid("--network network:default --mac RANDOM") # VirtualNetwork with a random macaddr +-c.add_valid("--nonetworks") # no networks + c.add_valid("--vnc --keymap=local") # --keymap local ++c.add_invalid("--nonetworks") # no networks + c.add_invalid("--graphics vnc --vnclisten 1.2.3.4") # mixing old and new + c.add_invalid("--network=FOO") # Nonexistent network + c.add_invalid("--mac 1234") # Invalid mac +Index: virt-manager-1.2.1/virt-install +=================================================================== +--- virt-manager-1.2.1.orig/virt-install ++++ virt-manager-1.2.1/virt-install +@@ -226,6 +226,9 @@ def convert_old_networks(options): + fail(_("Cannot use --nonetworks with --network")) + options.network = ["none"] + ++ if options.pxe and options.network and "none" in options.network: ++ fail(_("Can't use --pxe without any network")) ++ + macs = virtinst.util.listify(options.mac) + networks = virtinst.util.listify(options.network) + bridges = virtinst.util.listify(options.bridge) diff --git a/f81358b0-dont-display-error-if-machine-is-missing-in-XML.patch b/f81358b0-dont-display-error-if-machine-is-missing-in-XML.patch new file mode 100644 index 00000000..4554c09e --- /dev/null +++ b/f81358b0-dont-display-error-if-machine-is-missing-in-XML.patch @@ -0,0 +1,29 @@ +Subject: details: don't display error if machine is missing in XML +From: Pavel Hrdina phrdina@redhat.com Fri Jul 31 14:28:00 2015 +0200 +Date: Wed Aug 5 13:32:04 2015 +0200: +Git: f81358b02d58b709529a35268cbaf8ce098d803a + +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 + +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) diff --git a/virt-manager.changes b/virt-manager.changes index 8c3e122c..e1c48e07 100644 --- a/virt-manager.changes +++ b/virt-manager.changes @@ -1,3 +1,15 @@ +------------------------------------------------------------------- +Mon Aug 10 11:58:32 MDT 2015 - carnold@suse.com + +- Drop the following patches for bsc#938942 as they are not needed. + virtman-reset-image-filename-based-on-format.patch + virtman-allow-other-disk-formats.patch +- Upstream bug fixes + a9b303fb-fix-copy-host-cpu-definition.patch + f81358b0-dont-display-error-if-machine-is-missing-in-XML.patch + aebebbf8-report-an-error-for-pxe-install-without-network.patch + 4970615f-fix-qemu-vs-lxc-detection.patch + ------------------------------------------------------------------- Thu Jul 23 09:39:26 MDT 2015 - carnold@suse.com diff --git a/virt-manager.spec b/virt-manager.spec index b4fea74f..b56cbce5 100644 --- a/virt-manager.spec +++ b/virt-manager.spec @@ -41,6 +41,10 @@ Patch1: 77423e7a-connection-catch-more-errors-in-filter_nodedevs.patch Patch2: fc93e154-fix-udp-tcp-host-vs-mode-UI.patch Patch3: 34db1af7-fix-adding-iscsi-pools.patch Patch4: 76bad650-fix-virt-xml-define-and-update.patch +Patch5: a9b303fb-fix-copy-host-cpu-definition.patch +Patch6: f81358b0-dont-display-error-if-machine-is-missing-in-XML.patch +Patch7: aebebbf8-report-an-error-for-pxe-install-without-network.patch +Patch8: 4970615f-fix-qemu-vs-lxc-detection.patch # SUSE Only Patch70: virtman-desktop.patch Patch71: virtman-kvm.patch @@ -77,8 +81,6 @@ Patch152: virtman-increase-setKeepAlive-count.patch Patch153: virtman-allow-destroy-from-shutdown-menu-of-crashed-vm.patch Patch154: virtman-check-for-valid-display.patch Patch155: virtman-allow-creating-i686-vm.patch -Patch156: virtman-reset-image-filename-based-on-format.patch -Patch157: virtman-allow-other-disk-formats.patch Patch160: virtinst-xen-drive-type.patch Patch161: virtinst-xenbus-disk-index-fix.patch Patch162: virtinst-refresh_before_fetch_pool.patch @@ -167,6 +169,10 @@ machine). %patch2 -p1 %patch3 -p1 %patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 # SUSE Only %patch70 -p1 %patch71 -p1 @@ -203,8 +209,6 @@ machine). %patch153 -p1 %patch154 -p1 %patch155 -p1 -%patch156 -p1 -%patch157 -p1 %patch160 -p1 %patch161 -p1 %patch162 -p1 diff --git a/virtman-allow-other-disk-formats.patch b/virtman-allow-other-disk-formats.patch deleted file mode 100644 index 1ba1833f..00000000 --- a/virtman-allow-other-disk-formats.patch +++ /dev/null @@ -1,93 +0,0 @@ -Reference: bsc#938942 -Allow something other than qcow2 to be selected as the initial boot disk -from the 'Customize configuration before install' screen. This is valid -only when the disk has not yet been created. -Changing the format requires changing the domain xml and the volume -xml and renaming the file with an appropriate extension. - -Index: virt-manager-1.2.1/virtManager/details.py -=================================================================== ---- virt-manager-1.2.1.orig/virtManager/details.py -+++ virt-manager-1.2.1/virtManager/details.py -@@ -1830,7 +1830,13 @@ class vmmDetails(vmmGObjectUI): - self.enable_apply(EDIT_BOOTORDER) - - def disk_format_changed(self, ignore): -- self.widget("disk-format-warn").show() -+ # Allow changing the disk format if disk hasn't yet been created -+ disk = self.get_hw_selection(HW_LIST_COL_DEVICE) -+ show_warn = (disk and \ -+ virtinst.VirtualDisk.path_definitely_exists(disk.conn, disk.path)) and not \ -+ self.is_customize_dialog -+ if show_warn: -+ self.widget("disk-format-warn").show() - self.enable_apply(EDIT_DISK_FORMAT) - - # IO Tuning -@@ -2694,7 +2700,7 @@ class vmmDetails(vmmGObjectUI): - iotune_wbs = (disk.iotune_wbs or 0) / 1024 - iotune_wis = (disk.iotune_wis or 0) - -- show_format = (not self.is_customize_dialog or -+ show_format = (not self.is_customize_dialog or not - virtinst.VirtualDisk.path_definitely_exists( - disk.conn, disk.path)) - -Index: virt-manager-1.2.1/virtManager/domain.py -=================================================================== ---- virt-manager-1.2.1.orig/virtManager/domain.py -+++ virt-manager-1.2.1/virtManager/domain.py -@@ -27,6 +27,7 @@ import threading - - import libvirt - -+import virtinst - from virtinst import DomainCapabilities - from virtinst import DomainSnapshot - from virtinst import Guest -@@ -721,6 +722,37 @@ class vmmDomain(vmmLibvirtObject): - # Device XML editing # - ###################### - -+ # Change the extension on the name. -+ def _reset_file_name_extension(self, guest, disk, fmt): -+ suffix = virtinst.StorageVolume.get_file_extension_for_format(fmt) or ".img" -+ dirpath = os.path.dirname(disk.path) -+ pool = self.conn.get_default_pool() -+ newcollidelist = [] -+ collidelist = [d.path for d in self.get_disk_devices()] -+ # Sanitize collidelist to work with the collision checker -+ for c in collidelist: -+ if c and os.path.dirname(c) == pool.get_target_path(): -+ newcollidelist.append(os.path.basename(c)) -+ newname = virtinst.StorageVolume.find_free_name( -+ pool.get_backend(), guest.name, -+ suffix=suffix, collidelist=newcollidelist) -+ disk.get_vol_install().name = newname -+ return dirpath + '/' + newname -+ -+ # Change the format of the disk image -+ def _reset_storage_format(self, disk): -+ if disk.driver_type is None: -+ return -+ fmt = disk.driver_type -+ guest = self.get_backend() -+ if guest and fmt: -+ for d in guest.get_devices("disk"): -+ if d.path == disk.path: -+ dvol = d.get_vol_install() -+ if dvol.format != fmt and fmt in dvol.list_formats(): -+ dvol.format = fmt -+ disk._source_file = self._reset_file_name_extension(guest, d, fmt) -+ - def define_disk(self, devobj, do_hotplug, - path=_SENTINEL, readonly=_SENTINEL, serial=_SENTINEL, - shareable=_SENTINEL, removable=_SENTINEL, cache=_SENTINEL, -@@ -777,6 +809,7 @@ class vmmDomain(vmmLibvirtObject): - editdev.driver_io = io or None - if driver_type != _SENTINEL: - editdev.driver_type = driver_type or None -+ self._reset_storage_format(editdev) - if serial != _SENTINEL: - editdev.serial = serial or None - diff --git a/virtman-reset-image-filename-based-on-format.patch b/virtman-reset-image-filename-based-on-format.patch deleted file mode 100644 index 71639351..00000000 --- a/virtman-reset-image-filename-based-on-format.patch +++ /dev/null @@ -1,69 +0,0 @@ -Reference: bsc#938942 -When a disk is added to an existing virtual machine and the storage format for -that disk is selected to be something other than qcow2 reset the image name -extension from qcow2 to the format selected. This is for a new disk that needs -to be created. - -Index: virt-manager-1.2.1/virtManager/addstorage.py -=================================================================== ---- virt-manager-1.2.1.orig/virtManager/addstorage.py -+++ virt-manager-1.2.1/virtManager/addstorage.py -@@ -58,9 +58,10 @@ class vmmAddStorage(vmmGObjectUI): - def _get_default_dir(self): - return virtinst.StoragePool.get_default_dir(self.conn.get_backend()) - -- def _get_ideal_path_info(self, name): -+ def _get_ideal_path_info(self, name, fmt=None): - path = self._get_default_dir() -- fmt = self.conn.get_default_storage_format() -+ if fmt is None: -+ fmt = self.conn.get_default_storage_format() - suffix = virtinst.StorageVolume.get_file_extension_for_format(fmt) - return (path, name, suffix or ".img") - -@@ -208,7 +209,7 @@ class vmmAddStorage(vmmGObjectUI): - use_storage.set_sensitive(True) - storage_area.set_tooltip_text(storage_tooltip or "") - -- def get_default_path(self, name, collidelist=None): -+ def get_default_path(self, name, fmt=None, collidelist=None): - collidelist = collidelist or [] - pool = self.conn.get_default_pool() - -@@ -217,15 +218,16 @@ class vmmAddStorage(vmmGObjectUI): - def path_exists(p): - return os.path.exists(p) or p in collidelist - -+ target, ignore, suffix = self._get_ideal_path_info(name, fmt) - if not pool: - # Use old generating method -- origf = os.path.join(default_dir, name + ".img") -+ origf = os.path.join(default_dir, name + suffix) - f = origf - - n = 1 - while path_exists(f) and n < 100: - f = os.path.join(default_dir, name + -- "-" + str(n) + ".img") -+ "-" + str(n) + suffix) - n += 1 - - if path_exists(f): -@@ -233,8 +235,6 @@ class vmmAddStorage(vmmGObjectUI): - - path = f - else: -- target, ignore, suffix = self._get_ideal_path_info(name) -- - # Sanitize collidelist to work with the collision checker - newcollidelist = [] - for c in collidelist: -@@ -310,7 +310,7 @@ class vmmAddStorage(vmmGObjectUI): - not self.widget("config-storage-nosparse").get_active()) - if path is None: - if is_default: -- path = self.get_default_path(vmname, collidelist) -+ path = self.get_default_path(vmname, fmt, collidelist) - else: - path = self.widget("config-storage-entry").get_text().strip() -