Additional fixes for bsc#938942

virtman-allow-other-disk-formats.patch

OBS-URL: https://build.opensuse.org/package/show/Virtualization/virt-manager?expand=0&rev=245
This commit is contained in:
Charles Arnold 2015-08-03 21:58:57 +00:00 committed by Git OBS Bridge
parent 19009636f3
commit 3759fa950b

View File

@ -2,6 +2,8 @@ Reference: bsc#938942
Allow something other than qcow2 to be selected as the initial boot disk Allow something other than qcow2 to be selected as the initial boot disk
from the 'Customize configuration before install' screen. This is valid from the 'Customize configuration before install' screen. This is valid
only when the disk has not yet been created. 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 Index: virt-manager-1.2.1/virtManager/details.py
=================================================================== ===================================================================
@ -22,7 +24,7 @@ Index: virt-manager-1.2.1/virtManager/details.py
self.enable_apply(EDIT_DISK_FORMAT) self.enable_apply(EDIT_DISK_FORMAT)
# IO Tuning # IO Tuning
@@ -2694,10 +2700,22 @@ class vmmDetails(vmmGObjectUI): @@ -2694,7 +2700,7 @@ class vmmDetails(vmmGObjectUI):
iotune_wbs = (disk.iotune_wbs or 0) / 1024 iotune_wbs = (disk.iotune_wbs or 0) / 1024
iotune_wis = (disk.iotune_wis or 0) iotune_wis = (disk.iotune_wis or 0)
@ -31,18 +33,61 @@ Index: virt-manager-1.2.1/virtManager/details.py
virtinst.VirtualDisk.path_definitely_exists( virtinst.VirtualDisk.path_definitely_exists(
disk.conn, disk.path)) disk.conn, disk.path))
+ # If customizing and disk doesn't exist, allow format type to change Index: virt-manager-1.2.1/virtManager/domain.py
+ if show_format and self.is_customize_dialog: ===================================================================
+ fmt = uiutil.get_list_selection(self.widget("disk-format")) --- virt-manager-1.2.1.orig/virtManager/domain.py
+ guest = self.vm.get_backend() +++ virt-manager-1.2.1/virtManager/domain.py
+ if guest and fmt: @@ -27,6 +27,7 @@ import threading
+ for d in guest.get_devices("disk"):
+ if d.path == disk.path: import libvirt
+ dvol = d.get_vol_install()
+ if fmt in dvol.list_formats(): +import virtinst
+ dvol.format = fmt from virtinst import DomainCapabilities
+ break 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
+ +
size = _("Unknown") + # Change the format of the disk image
if not path: + def _reset_storage_format(self, disk):
size = "-" + 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