- Upstream bug fixes
531db6a7-new-volume-tooltip-logic.patch 531dbfa7-handle-errors-when-deregistering-events-on-close.patch - Upstream bug fixes 5318a2cd-cpu-model-fallback-failure-fix.patch 5318a626-adding-filesystem-device-fix.patch 5318aa88-invalid-libvirt-volume-XML.patch 5318b486-virtinstall-location-iso-fix.patch 5319db07-customize-add-disk-fix.patch - Allow the installation repos provided by zypper to be selected as network installation sources virtman-show-suse-install-repos.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/virt-manager?expand=0&rev=148
This commit is contained in:
parent
9dab6bfcb9
commit
6786659bca
30
5318a2cd-cpu-model-fallback-failure-fix.patch
Normal file
30
5318a2cd-cpu-model-fallback-failure-fix.patch
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
Subject: details: Fix fallback if fetching CPU models fails (bz 1072704)
|
||||||
|
From: Cole Robinson crobinso@redhat.com Thu Mar 6 11:31:09 2014 -0500
|
||||||
|
Date: Thu Mar 6 11:31:09 2014 -0500:
|
||||||
|
Git: b078ba8c3d69b62fe748d9182babef8971914277
|
||||||
|
|
||||||
|
|
||||||
|
Index: virt-manager-1.0.0/virtManager/details.py
|
||||||
|
===================================================================
|
||||||
|
--- virt-manager-1.0.0.orig/virtManager/details.py
|
||||||
|
+++ virt-manager-1.0.0/virtManager/details.py
|
||||||
|
@@ -969,8 +969,9 @@ class vmmDetails(vmmGObjectUI):
|
||||||
|
no_default = not self.is_customize_dialog
|
||||||
|
|
||||||
|
try:
|
||||||
|
- cpu_values = caps.get_cpu_values(self.vm.get_arch())
|
||||||
|
+ cpu_names = caps.get_cpu_values(self.vm.get_arch()).cpus
|
||||||
|
except:
|
||||||
|
+ cpu_names = []
|
||||||
|
logging.exception("Error populating CPU model list")
|
||||||
|
|
||||||
|
# CPU model combo
|
||||||
|
@@ -991,7 +992,7 @@ class vmmDetails(vmmGObjectUI):
|
||||||
|
model.append([_("Clear CPU configuration"), "3",
|
||||||
|
virtinst.CPU.SPECIAL_MODE_CLEAR, False])
|
||||||
|
model.append([None, None, None, True])
|
||||||
|
- for name in [c.model for c in cpu_values.cpus]:
|
||||||
|
+ for name in [c.model for c in cpu_names]:
|
||||||
|
model.append([name, name, name, False])
|
||||||
|
|
||||||
|
# Disk cache combo
|
22
5318a626-adding-filesystem-device-fix.patch
Normal file
22
5318a626-adding-filesystem-device-fix.patch
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
Subject: fsdetails: Fix adding a filesystem device (bz 1073067)
|
||||||
|
From: Cole Robinson crobinso@redhat.com Thu Mar 6 11:45:26 2014 -0500
|
||||||
|
Date: Thu Mar 6 11:45:26 2014 -0500:
|
||||||
|
Git: 9074fc6c6080cf650cf97457dda799700ee2b635
|
||||||
|
|
||||||
|
|
||||||
|
Index: virt-manager-1.0.0/virtManager/fsdetails.py
|
||||||
|
===================================================================
|
||||||
|
--- virt-manager-1.0.0.orig/virtManager/fsdetails.py
|
||||||
|
+++ virt-manager-1.0.0/virtManager/fsdetails.py
|
||||||
|
@@ -158,8 +158,9 @@ class vmmFSDetails(vmmGObjectUI):
|
||||||
|
rowindex=0, check_visible=True)
|
||||||
|
|
||||||
|
def get_config_fs_readonly(self):
|
||||||
|
- return uiutil.get_list_selection(self.widget("fs-readonly"),
|
||||||
|
- rowindex=0, check_visible=True)
|
||||||
|
+ if not self.widget("fs-readonly").is_visible():
|
||||||
|
+ return None
|
||||||
|
+ return self.widget("fs-readonly").get_active()
|
||||||
|
|
||||||
|
def get_config_fs_driver(self):
|
||||||
|
return uiutil.get_list_selection(self.widget("fs-driver-combo"),
|
32
5318aa88-invalid-libvirt-volume-XML.patch
Normal file
32
5318aa88-invalid-libvirt-volume-XML.patch
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
Subject: Handle libvirt generating invalid volume XML (bz 1072770)
|
||||||
|
From: Cole Robinson crobinso@redhat.com Thu Mar 6 12:04:08 2014 -0500
|
||||||
|
Date: Thu Mar 6 12:04:08 2014 -0500:
|
||||||
|
Git: df7012a68b6a13a676e2019523f6863617a110d8
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/virtManager/connection.py b/virtManager/connection.py
|
||||||
|
index 96dfa1c..57e143d 100644
|
||||||
|
--- a/virtManager/connection.py
|
||||||
|
+++ b/virtManager/connection.py
|
||||||
|
@@ -179,7 +179,7 @@ class vmmConnection(vmmGObject):
|
||||||
|
for vol in pool.get_volumes(refresh=False).values():
|
||||||
|
try:
|
||||||
|
ret.append(vol.get_xmlobj(refresh_if_nec=False))
|
||||||
|
- except libvirt.libvirtError, e:
|
||||||
|
+ except Exception, e:
|
||||||
|
logging.debug("Fetching volume XML failed: %s", e)
|
||||||
|
return ret
|
||||||
|
self._backend.cb_fetch_all_vols = fetch_all_vols
|
||||||
|
diff --git a/virtinst/connection.py b/virtinst/connection.py
|
||||||
|
index a915f25..3cc5b79 100644
|
||||||
|
--- a/virtinst/connection.py
|
||||||
|
+++ b/virtinst/connection.py
|
||||||
|
@@ -222,7 +222,7 @@ class VirtualConnection(object):
|
||||||
|
try:
|
||||||
|
xml = vol.XMLDesc(0)
|
||||||
|
ret.append(StorageVolume(weakref.ref(self), parsexml=xml))
|
||||||
|
- except libvirt.libvirtError, e:
|
||||||
|
+ except Exception, e:
|
||||||
|
logging.debug("Fetching volume XML failed: %s", e)
|
||||||
|
|
||||||
|
if self.cache_object_fetch:
|
287
5318b486-virtinstall-location-iso-fix.patch
Normal file
287
5318b486-virtinstall-location-iso-fix.patch
Normal file
@ -0,0 +1,287 @@
|
|||||||
|
Subject: virt-install: Fix --location iso again, and test it (bz 1071513)
|
||||||
|
From: Cole Robinson crobinso@redhat.com Thu Mar 6 12:35:01 2014 -0500
|
||||||
|
Date: Thu Mar 6 12:46:46 2014 -0500:
|
||||||
|
Git: 797afb3b273d08a74119c878b689730f0b36a252
|
||||||
|
|
||||||
|
|
||||||
|
Index: virt-manager-1.0.0/tests/__init__.py
|
||||||
|
===================================================================
|
||||||
|
--- virt-manager-1.0.0.orig/tests/__init__.py
|
||||||
|
+++ virt-manager-1.0.0/tests/__init__.py
|
||||||
|
@@ -21,6 +21,8 @@ import logging
|
||||||
|
import os
|
||||||
|
|
||||||
|
os.environ["VIRTINST_TEST_SUITE"] = "1"
|
||||||
|
+os.environ["VIRTINST_TEST_URL_DIR"] = os.path.abspath(
|
||||||
|
+ "tests/cli-test-xml/fakefedoratree/")
|
||||||
|
|
||||||
|
import virtinst
|
||||||
|
virtinst.stable_defaults = False
|
||||||
|
Index: virt-manager-1.0.0/tests/cli-test-xml/compare/virt-install-location-iso.xml
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ virt-manager-1.0.0/tests/cli-test-xml/compare/virt-install-location-iso.xml
|
||||||
|
@@ -0,0 +1,129 @@
|
||||||
|
+<domain type="kvm">
|
||||||
|
+ <name>foobar</name>
|
||||||
|
+ <uuid>00000000-1111-2222-3333-444444444444</uuid>
|
||||||
|
+ <memory>65536</memory>
|
||||||
|
+ <currentMemory>65536</currentMemory>
|
||||||
|
+ <vcpu>1</vcpu>
|
||||||
|
+ <os>
|
||||||
|
+ <type arch="x86_64">hvm</type>
|
||||||
|
+ <kernel>./virtinst-vmlinuz.</kernel>
|
||||||
|
+ <initrd>./virtinst-initrd.img.</initrd>
|
||||||
|
+ </os>
|
||||||
|
+ <features>
|
||||||
|
+ <acpi/>
|
||||||
|
+ <apic/>
|
||||||
|
+ <pae/>
|
||||||
|
+ </features>
|
||||||
|
+ <cpu mode="custom" match="exact">
|
||||||
|
+ <model>core2duo</model>
|
||||||
|
+ </cpu>
|
||||||
|
+ <clock offset="utc">
|
||||||
|
+ <timer name="rtc" tickpolicy="catchup"/>
|
||||||
|
+ <timer name="pit" tickpolicy="delay"/>
|
||||||
|
+ <timer name="hpet" present="no"/>
|
||||||
|
+ </clock>
|
||||||
|
+ <on_poweroff>destroy</on_poweroff>
|
||||||
|
+ <on_reboot>destroy</on_reboot>
|
||||||
|
+ <on_crash>destroy</on_crash>
|
||||||
|
+ <devices>
|
||||||
|
+ <emulator>/usr/bin/qemu-kvm</emulator>
|
||||||
|
+ <disk type="file" device="cdrom">
|
||||||
|
+ <driver name="qemu"/>
|
||||||
|
+ <source file="/home/crobinso/src/virt-manager/tests/cli-test-xml/fake.iso"/>
|
||||||
|
+ <target dev="hda" bus="ide"/>
|
||||||
|
+ <readonly/>
|
||||||
|
+ </disk>
|
||||||
|
+ <controller type="usb" index="0" model="ich9-ehci1"/>
|
||||||
|
+ <controller type="usb" index="0" model="ich9-uhci1">
|
||||||
|
+ <master startport="0"/>
|
||||||
|
+ </controller>
|
||||||
|
+ <controller type="usb" index="0" model="ich9-uhci2">
|
||||||
|
+ <master startport="2"/>
|
||||||
|
+ </controller>
|
||||||
|
+ <controller type="usb" index="0" model="ich9-uhci3">
|
||||||
|
+ <master startport="4"/>
|
||||||
|
+ </controller>
|
||||||
|
+ <interface type="bridge">
|
||||||
|
+ <source bridge="eth0"/>
|
||||||
|
+ <mac address="00:11:22:33:44:55"/>
|
||||||
|
+ <model type="virtio"/>
|
||||||
|
+ </interface>
|
||||||
|
+ <input type="tablet" bus="usb"/>
|
||||||
|
+ <graphics type="spice" port="-1" tlsPort="-1" autoport="yes"/>
|
||||||
|
+ <console type="pty"/>
|
||||||
|
+ <channel type="spicevmc">
|
||||||
|
+ <target type="virtio" name="com.redhat.spice.0"/>
|
||||||
|
+ </channel>
|
||||||
|
+ <sound model="ich6"/>
|
||||||
|
+ <video>
|
||||||
|
+ <model type="qxl"/>
|
||||||
|
+ </video>
|
||||||
|
+ <redirdev bus="usb" type="spicevmc"/>
|
||||||
|
+ <redirdev bus="usb" type="spicevmc"/>
|
||||||
|
+ <redirdev bus="usb" type="spicevmc"/>
|
||||||
|
+ <redirdev bus="usb" type="spicevmc"/>
|
||||||
|
+ </devices>
|
||||||
|
+</domain>
|
||||||
|
+<domain type="kvm">
|
||||||
|
+ <name>foobar</name>
|
||||||
|
+ <uuid>00000000-1111-2222-3333-444444444444</uuid>
|
||||||
|
+ <memory>65536</memory>
|
||||||
|
+ <currentMemory>65536</currentMemory>
|
||||||
|
+ <vcpu>1</vcpu>
|
||||||
|
+ <os>
|
||||||
|
+ <type arch="x86_64">hvm</type>
|
||||||
|
+ <boot dev="hd"/>
|
||||||
|
+ </os>
|
||||||
|
+ <features>
|
||||||
|
+ <acpi/>
|
||||||
|
+ <apic/>
|
||||||
|
+ <pae/>
|
||||||
|
+ </features>
|
||||||
|
+ <cpu mode="custom" match="exact">
|
||||||
|
+ <model>core2duo</model>
|
||||||
|
+ </cpu>
|
||||||
|
+ <clock offset="utc">
|
||||||
|
+ <timer name="rtc" tickpolicy="catchup"/>
|
||||||
|
+ <timer name="pit" tickpolicy="delay"/>
|
||||||
|
+ <timer name="hpet" present="no"/>
|
||||||
|
+ </clock>
|
||||||
|
+ <on_poweroff>destroy</on_poweroff>
|
||||||
|
+ <on_reboot>restart</on_reboot>
|
||||||
|
+ <on_crash>restart</on_crash>
|
||||||
|
+ <devices>
|
||||||
|
+ <emulator>/usr/bin/qemu-kvm</emulator>
|
||||||
|
+ <disk type="block" device="cdrom">
|
||||||
|
+ <target dev="hda" bus="ide"/>
|
||||||
|
+ <readonly/>
|
||||||
|
+ </disk>
|
||||||
|
+ <controller type="usb" index="0" model="ich9-ehci1"/>
|
||||||
|
+ <controller type="usb" index="0" model="ich9-uhci1">
|
||||||
|
+ <master startport="0"/>
|
||||||
|
+ </controller>
|
||||||
|
+ <controller type="usb" index="0" model="ich9-uhci2">
|
||||||
|
+ <master startport="2"/>
|
||||||
|
+ </controller>
|
||||||
|
+ <controller type="usb" index="0" model="ich9-uhci3">
|
||||||
|
+ <master startport="4"/>
|
||||||
|
+ </controller>
|
||||||
|
+ <interface type="bridge">
|
||||||
|
+ <source bridge="eth0"/>
|
||||||
|
+ <mac address="00:11:22:33:44:55"/>
|
||||||
|
+ <model type="virtio"/>
|
||||||
|
+ </interface>
|
||||||
|
+ <input type="tablet" bus="usb"/>
|
||||||
|
+ <graphics type="spice" port="-1" tlsPort="-1" autoport="yes"/>
|
||||||
|
+ <console type="pty"/>
|
||||||
|
+ <channel type="spicevmc">
|
||||||
|
+ <target type="virtio" name="com.redhat.spice.0"/>
|
||||||
|
+ </channel>
|
||||||
|
+ <sound model="ich6"/>
|
||||||
|
+ <video>
|
||||||
|
+ <model type="qxl"/>
|
||||||
|
+ </video>
|
||||||
|
+ <redirdev bus="usb" type="spicevmc"/>
|
||||||
|
+ <redirdev bus="usb" type="spicevmc"/>
|
||||||
|
+ <redirdev bus="usb" type="spicevmc"/>
|
||||||
|
+ <redirdev bus="usb" type="spicevmc"/>
|
||||||
|
+ </devices>
|
||||||
|
+</domain>
|
||||||
|
Index: virt-manager-1.0.0/tests/clitest.py
|
||||||
|
===================================================================
|
||||||
|
--- virt-manager-1.0.0.orig/tests/clitest.py
|
||||||
|
+++ virt-manager-1.0.0/tests/clitest.py
|
||||||
|
@@ -528,6 +528,7 @@ c.add_compare("--os-variant fedora20 --n
|
||||||
|
c.add_compare("--arch armv7l --machine vexpress-a9 --boot kernel=/f19-arm.kernel,initrd=/f19-arm.initrd,dtb=/f19-arm.dtb,extra_args=\"console=ttyAMA0 rw root=/dev/mmcblk0p3\" --disk %(EXISTIMG1)s --nographics", "arm-vexpress-plain", skip_check=support.SUPPORT_CONN_DISK_SD)
|
||||||
|
c.add_compare("--arch armv7l --machine vexpress-a15 --boot kernel=/f19-arm.kernel,initrd=/f19-arm.initrd,dtb=/f19-arm.dtb,kernel_args=\"console=ttyAMA0 rw root=/dev/vda3\",extra_args=foo --disk %(EXISTIMG1)s --nographics --os-variant fedora19", "arm-vexpress-f19", skip_check=support.SUPPORT_CONN_VIRTIO_MMIO)
|
||||||
|
c.add_compare("--arch ppc64 --machine pseries --boot network --disk %(EXISTIMG1)s --os-variant fedora20", "ppc64-pseries-f20")
|
||||||
|
+c.add_compare("--nodisks --location tests/cli-test-xml/fake.iso", "location-iso") # Using --location iso mounting
|
||||||
|
c.add_valid("--cdrom %(EXISTIMG2)s --file %(EXISTIMG1)s --os-variant win2k3 --wait 0 --sound") # HVM windows install with disk
|
||||||
|
c.add_valid("--os-variant fedora20 --file %(EXISTIMG1)s --location %(TREEDIR)s --extra-args console=ttyS0 --sound") # F14 Directory tree URL install with extra-args
|
||||||
|
c.add_invalid("--nodisks --boot network --machine foobar") # Unknown machine type
|
||||||
|
Index: virt-manager-1.0.0/virtinst/distroinstaller.py
|
||||||
|
===================================================================
|
||||||
|
--- virt-manager-1.0.0.orig/virtinst/distroinstaller.py
|
||||||
|
+++ virt-manager-1.0.0/virtinst/distroinstaller.py
|
||||||
|
@@ -299,11 +299,12 @@ def _upload_media(conn, scratchdir, syst
|
||||||
|
|
||||||
|
|
||||||
|
# Enum of the various install media types we can have
|
||||||
|
-(MEDIA_LOCATION_PATH,
|
||||||
|
+(MEDIA_LOCATION_DIR,
|
||||||
|
+ MEDIA_LOCATION_CDROM,
|
||||||
|
MEDIA_LOCATION_URL,
|
||||||
|
MEDIA_CDROM_PATH,
|
||||||
|
MEDIA_CDROM_URL,
|
||||||
|
- MEDIA_CDROM_IMPLIED) = range(1, 6)
|
||||||
|
+ MEDIA_CDROM_IMPLIED) = range(1, 7)
|
||||||
|
|
||||||
|
|
||||||
|
class DistroInstaller(Installer):
|
||||||
|
@@ -324,7 +325,11 @@ class DistroInstaller(Installer):
|
||||||
|
|
||||||
|
if self.location and _is_url(self.conn, self.location):
|
||||||
|
return self.cdrom and MEDIA_CDROM_URL or MEDIA_LOCATION_URL
|
||||||
|
- return self.cdrom and MEDIA_CDROM_PATH or MEDIA_LOCATION_PATH
|
||||||
|
+ if self.cdrom:
|
||||||
|
+ return MEDIA_CDROM_PATH
|
||||||
|
+ if self.location and os.path.isdir(self.location):
|
||||||
|
+ return MEDIA_LOCATION_DIR
|
||||||
|
+ return MEDIA_LOCATION_CDROM
|
||||||
|
|
||||||
|
def _prepare_local(self):
|
||||||
|
transient = True
|
||||||
|
@@ -374,7 +379,7 @@ class DistroInstaller(Installer):
|
||||||
|
def _get_bootdev(self, isinstall, guest):
|
||||||
|
mediatype = self._get_media_type()
|
||||||
|
local = mediatype in [MEDIA_CDROM_PATH, MEDIA_CDROM_IMPLIED,
|
||||||
|
- MEDIA_LOCATION_PATH]
|
||||||
|
+ MEDIA_LOCATION_DIR, MEDIA_LOCATION_CDROM]
|
||||||
|
persistent_cd = (local and
|
||||||
|
self.cdrom and
|
||||||
|
self.livecd)
|
||||||
|
@@ -420,9 +425,10 @@ class DistroInstaller(Installer):
|
||||||
|
return
|
||||||
|
|
||||||
|
dev = None
|
||||||
|
- if mediatype == MEDIA_CDROM_PATH:
|
||||||
|
+ if mediatype == MEDIA_CDROM_PATH or mediatype == MEDIA_LOCATION_CDROM:
|
||||||
|
dev = self._prepare_local()
|
||||||
|
- else:
|
||||||
|
+
|
||||||
|
+ if mediatype != MEDIA_CDROM_PATH:
|
||||||
|
fetcher = urlfetcher.fetcherForURI(self.location,
|
||||||
|
scratchdir, meter)
|
||||||
|
try:
|
||||||
|
@@ -454,7 +460,7 @@ class DistroInstaller(Installer):
|
||||||
|
|
||||||
|
mediatype = self._get_media_type()
|
||||||
|
return mediatype in [MEDIA_CDROM_URL, MEDIA_LOCATION_URL,
|
||||||
|
- MEDIA_LOCATION_PATH]
|
||||||
|
+ MEDIA_LOCATION_DIR, MEDIA_LOCATION_CDROM]
|
||||||
|
|
||||||
|
def check_location(self, guest):
|
||||||
|
mediatype = self._get_media_type()
|
||||||
|
Index: virt-manager-1.0.0/virtinst/urlfetcher.py
|
||||||
|
===================================================================
|
||||||
|
--- virt-manager-1.0.0.orig/virtinst/urlfetcher.py
|
||||||
|
+++ virt-manager-1.0.0/virtinst/urlfetcher.py
|
||||||
|
@@ -189,10 +189,16 @@ class _MountedImageFetcher(_LocalImageFe
|
||||||
|
Fetcher capable of extracting files from a NFS server
|
||||||
|
or loopback mounted file, or local CDROM device
|
||||||
|
"""
|
||||||
|
+ _in_test_suite = bool("VIRTINST_TEST_SUITE" in os.environ)
|
||||||
|
+
|
||||||
|
def prepareLocation(self):
|
||||||
|
cmd = None
|
||||||
|
- self.srcdir = tempfile.mkdtemp(prefix="virtinstmnt.",
|
||||||
|
- dir=self.scratchdir)
|
||||||
|
+
|
||||||
|
+ if self._in_test_suite:
|
||||||
|
+ self.srcdir = os.environ["VIRTINST_TEST_URL_DIR"]
|
||||||
|
+ else:
|
||||||
|
+ self.srcdir = tempfile.mkdtemp(prefix="virtinstmnt.",
|
||||||
|
+ dir=self.scratchdir)
|
||||||
|
mountcmd = "/bin/mount"
|
||||||
|
|
||||||
|
logging.debug("Preparing mount at " + self.srcdir)
|
||||||
|
@@ -207,21 +213,24 @@ class _MountedImageFetcher(_LocalImageFe
|
||||||
|
|
||||||
|
logging.debug("mount cmd: %s", cmd)
|
||||||
|
|
||||||
|
- ret = subprocess.call(cmd)
|
||||||
|
- if ret != 0:
|
||||||
|
- self.cleanupLocation()
|
||||||
|
- raise ValueError(_("Mounting location '%s' failed") %
|
||||||
|
- (self.location))
|
||||||
|
+ if not self._in_test_suite:
|
||||||
|
+ ret = subprocess.call(cmd)
|
||||||
|
+ if ret != 0:
|
||||||
|
+ self.cleanupLocation()
|
||||||
|
+ raise ValueError(_("Mounting location '%s' failed") %
|
||||||
|
+ (self.location))
|
||||||
|
return True
|
||||||
|
|
||||||
|
def cleanupLocation(self):
|
||||||
|
logging.debug("Cleaning up mount at " + self.srcdir)
|
||||||
|
- cmd = ["/bin/umount", self.srcdir]
|
||||||
|
- subprocess.call(cmd)
|
||||||
|
- try:
|
||||||
|
- os.rmdir(self.srcdir)
|
||||||
|
- except:
|
||||||
|
- pass
|
||||||
|
+
|
||||||
|
+ if not self._in_test_suite:
|
||||||
|
+ cmd = ["/bin/umount", self.srcdir]
|
||||||
|
+ subprocess.call(cmd)
|
||||||
|
+ try:
|
||||||
|
+ os.rmdir(self.srcdir)
|
||||||
|
+ except:
|
||||||
|
+ pass
|
||||||
|
|
||||||
|
|
||||||
|
class _DirectImageFetcher(_LocalImageFetcher):
|
28
5319db07-customize-add-disk-fix.patch
Normal file
28
5319db07-customize-add-disk-fix.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
Subject: addhardware: Fix adding disk through 'customize' dialog (bz 1073808)
|
||||||
|
From: Cole Robinson crobinso@redhat.com Fri Mar 7 09:37:08 2014 -0500
|
||||||
|
Date: Fri Mar 7 09:43:19 2014 -0500:
|
||||||
|
Git: 7ef9d7fbfc4173b6a6e88b6fb74e895293ffda55
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/virtManager/addhardware.py b/virtManager/addhardware.py
|
||||||
|
index 75238d2..18f2aef 100644
|
||||||
|
--- a/virtManager/addhardware.py
|
||||||
|
+++ b/virtManager/addhardware.py
|
||||||
|
@@ -1477,6 +1477,7 @@ class vmmAddHardware(vmmGObjectUI):
|
||||||
|
disk.driver_cache = cache
|
||||||
|
|
||||||
|
# Generate target
|
||||||
|
+ disks = []
|
||||||
|
if not self.is_customize_dialog:
|
||||||
|
disks = (self.vm.get_disk_devices() +
|
||||||
|
self.vm.get_disk_devices(inactive=True))
|
||||||
|
@@ -1484,7 +1485,8 @@ class vmmAddHardware(vmmGObjectUI):
|
||||||
|
if d.target not in used:
|
||||||
|
used.append(d.target)
|
||||||
|
|
||||||
|
- prefer_ctrl = self._set_disk_controller(disk, controller_model, disks)
|
||||||
|
+ prefer_ctrl = self._set_disk_controller(
|
||||||
|
+ disk, controller_model, disks)
|
||||||
|
|
||||||
|
if not self.is_customize_dialog:
|
||||||
|
disk.generate_target(used, prefer_ctrl)
|
42
531db6a7-new-volume-tooltip-logic.patch
Normal file
42
531db6a7-new-volume-tooltip-logic.patch
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
Subject: storagebrowse: Duplicate tooltip logic for 'new volume' button
|
||||||
|
From: Cole Robinson crobinso@redhat.com Mon Mar 10 08:56:51 2014 -0400
|
||||||
|
Date: Mon Mar 10 08:57:11 2014 -0400:
|
||||||
|
Git: cfc52051b71bcfbf3f58ea6eddf457298f186727
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/virtManager/storagebrowse.py b/virtManager/storagebrowse.py
|
||||||
|
index 314a6ab..3f61352 100644
|
||||||
|
--- a/virtManager/storagebrowse.py
|
||||||
|
+++ b/virtManager/storagebrowse.py
|
||||||
|
@@ -208,7 +208,8 @@ class vmmStorageBrowser(vmmGObjectUI):
|
||||||
|
self.local_args["dialog_type"] = data.get("dialog_type")
|
||||||
|
self.local_args["choose_button"] = data.get("choose_button")
|
||||||
|
|
||||||
|
- self.widget("new-volume").set_visible(self.can_new_volume)
|
||||||
|
+ self.widget("new-volume").set_visible(
|
||||||
|
+ self.can_new_volume and self.allow_create())
|
||||||
|
|
||||||
|
|
||||||
|
# Convenience helpers
|
||||||
|
@@ -302,13 +303,17 @@ class vmmStorageBrowser(vmmGObjectUI):
|
||||||
|
def pool_selected(self, src_ignore=None):
|
||||||
|
pool = self.current_pool()
|
||||||
|
|
||||||
|
- newvol = bool(pool)
|
||||||
|
+ can_new_vol = False
|
||||||
|
+ tt = ""
|
||||||
|
if pool:
|
||||||
|
pool.tick()
|
||||||
|
- newvol = pool.is_active()
|
||||||
|
+ can_new_vol = (pool.is_active() and
|
||||||
|
+ pool.supports_volume_creation())
|
||||||
|
+ if not can_new_vol:
|
||||||
|
+ tt = _("Pool does not support volume creation")
|
||||||
|
|
||||||
|
- newvol = newvol and self.allow_create()
|
||||||
|
- self.widget("new-volume").set_sensitive(newvol)
|
||||||
|
+ self.widget("new-volume").set_sensitive(can_new_vol)
|
||||||
|
+ self.widget("new-volume").set_tooltip_text(tt)
|
||||||
|
|
||||||
|
self.populate_storage_volumes()
|
||||||
|
|
@ -0,0 +1,48 @@
|
|||||||
|
Subject: connection: Handle errors when deregistering events on close (bz 1069351)
|
||||||
|
From: Cole Robinson crobinso@redhat.com Mon Mar 10 09:33:04 2014 -0400
|
||||||
|
Date: Mon Mar 10 09:35:35 2014 -0400:
|
||||||
|
Git: 081e34715ffa5a210e1e0c8670fe3a1a3ec5180b
|
||||||
|
|
||||||
|
Otherwise this interrupts the close/cleanup routine, and the connection
|
||||||
|
never appears to disconnect in the UI. This causes error dialog spamming
|
||||||
|
when libvirtd goes down.
|
||||||
|
|
||||||
|
diff --git a/virtManager/connection.py b/virtManager/connection.py
|
||||||
|
index 57e143d..4c034b8 100644
|
||||||
|
--- a/virtManager/connection.py
|
||||||
|
+++ b/virtManager/connection.py
|
||||||
|
@@ -929,16 +929,25 @@ class vmmConnection(vmmGObject):
|
||||||
|
def close(self):
|
||||||
|
def cleanup(devs):
|
||||||
|
for dev in devs.values():
|
||||||
|
- dev.cleanup()
|
||||||
|
-
|
||||||
|
- if not self._backend.is_closed():
|
||||||
|
- if self._domain_cb_id is not None:
|
||||||
|
- self._backend.domainEventDeregisterAny(self._domain_cb_id)
|
||||||
|
- self._domain_cb_id = None
|
||||||
|
+ try:
|
||||||
|
+ dev.cleanup()
|
||||||
|
+ except:
|
||||||
|
+ logging.debug("Failed to cleanup %s", exc_info=True)
|
||||||
|
|
||||||
|
- if self._network_cb_id is not None:
|
||||||
|
- self._backend.networkEventDeregisterAny(self._network_cb_id)
|
||||||
|
- self._network_cb_id = None
|
||||||
|
+ try:
|
||||||
|
+ if not self._backend.is_closed():
|
||||||
|
+ if self._domain_cb_id is not None:
|
||||||
|
+ self._backend.domainEventDeregisterAny(
|
||||||
|
+ self._domain_cb_id)
|
||||||
|
+ self._domain_cb_id = None
|
||||||
|
+
|
||||||
|
+ if self._network_cb_id is not None:
|
||||||
|
+ self._backend.networkEventDeregisterAny(
|
||||||
|
+ self._network_cb_id)
|
||||||
|
+ self._network_cb_id = None
|
||||||
|
+ except:
|
||||||
|
+ logging.debug("Failed to deregister events in conn cleanup",
|
||||||
|
+ exc_info=True)
|
||||||
|
|
||||||
|
self._backend.close()
|
||||||
|
self.record = []
|
@ -1,3 +1,27 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Mar 10 07:46:16 MDT 2014 - carnold@suse.com
|
||||||
|
|
||||||
|
- Upstream bug fixes
|
||||||
|
531db6a7-new-volume-tooltip-logic.patch
|
||||||
|
531dbfa7-handle-errors-when-deregistering-events-on-close.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Mar 7 10:26:16 MST 2014 - carnold@suse.com
|
||||||
|
|
||||||
|
- Upstream bug fixes
|
||||||
|
5318a2cd-cpu-model-fallback-failure-fix.patch
|
||||||
|
5318a626-adding-filesystem-device-fix.patch
|
||||||
|
5318aa88-invalid-libvirt-volume-XML.patch
|
||||||
|
5318b486-virtinstall-location-iso-fix.patch
|
||||||
|
5319db07-customize-add-disk-fix.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Mar 6 15:16:39 MST 2014 - carnold@suse.com
|
||||||
|
|
||||||
|
- Allow the installation repos provided by zypper to be selected
|
||||||
|
as network installation sources
|
||||||
|
virtman-show-suse-install-repos.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Mar 3 09:26:39 MST 2014 - carnold@suse.com
|
Mon Mar 3 09:26:39 MST 2014 - carnold@suse.com
|
||||||
|
|
||||||
|
@ -53,6 +53,13 @@ Patch15: 5310e3ac-set-show_arrow-to-true.patch
|
|||||||
Patch16: 5310e3ac-vmmConsolePages-toggle-visibilities-on-page-change.patch
|
Patch16: 5310e3ac-vmmConsolePages-toggle-visibilities-on-page-change.patch
|
||||||
Patch17: 5310e3ac-vmmDetails-toggle-visibilities-on-page-change.patch
|
Patch17: 5310e3ac-vmmDetails-toggle-visibilities-on-page-change.patch
|
||||||
Patch18: 5310e52d-fix-setting-default-window-size.patch
|
Patch18: 5310e52d-fix-setting-default-window-size.patch
|
||||||
|
Patch19: 5318a2cd-cpu-model-fallback-failure-fix.patch
|
||||||
|
Patch20: 5318a626-adding-filesystem-device-fix.patch
|
||||||
|
Patch21: 5318aa88-invalid-libvirt-volume-XML.patch
|
||||||
|
Patch22: 5318b486-virtinstall-location-iso-fix.patch
|
||||||
|
Patch23: 5319db07-customize-add-disk-fix.patch
|
||||||
|
Patch24: 531db6a7-new-volume-tooltip-logic.patch
|
||||||
|
Patch25: 531dbfa7-handle-errors-when-deregistering-events-on-close.patch
|
||||||
Patch50: virtman-desktop.patch
|
Patch50: virtman-desktop.patch
|
||||||
Patch51: virtman-cdrom.patch
|
Patch51: virtman-cdrom.patch
|
||||||
Patch52: virtman-kvm.patch
|
Patch52: virtman-kvm.patch
|
||||||
@ -69,6 +76,7 @@ Patch68: virtman-default-to-xen-pv.patch
|
|||||||
Patch69: virtman-allow-pv-iso-install.patch
|
Patch69: virtman-allow-pv-iso-install.patch
|
||||||
Patch70: virtman-autoyast-support.patch
|
Patch70: virtman-autoyast-support.patch
|
||||||
Patch71: virtman-vminstall.patch
|
Patch71: virtman-vminstall.patch
|
||||||
|
Patch72: virtman-show-suse-install-repos.patch
|
||||||
Patch150: virtinst-cdrom.patch
|
Patch150: virtinst-cdrom.patch
|
||||||
Patch151: virtinst-storage-ocfs2.patch
|
Patch151: virtinst-storage-ocfs2.patch
|
||||||
Patch152: virtinst-qed.patch
|
Patch152: virtinst-qed.patch
|
||||||
@ -80,11 +88,11 @@ BuildArch: noarch
|
|||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
|
|
||||||
%define verrel %{version}-%{release}
|
%define verrel %{version}-%{release}
|
||||||
Requires: virt-manager-common = %{verrel}
|
Requires: dbus-1-x11
|
||||||
|
Requires: dconf
|
||||||
Requires: gtk3
|
Requires: gtk3
|
||||||
Requires: python-gconf
|
Requires: python-gconf
|
||||||
Requires: dconf
|
Requires: virt-manager-common = %{verrel}
|
||||||
Requires: dbus-1-x11
|
|
||||||
Requires: vm-install >= 0.5.6
|
Requires: vm-install >= 0.5.6
|
||||||
|
|
||||||
# Libvirt-glib
|
# Libvirt-glib
|
||||||
@ -99,12 +107,12 @@ Requires: typelib-1_0-Vte-2_90
|
|||||||
Requires: gtk-vnc2
|
Requires: gtk-vnc2
|
||||||
Requires: libspice-client-glib-2_0-8
|
Requires: libspice-client-glib-2_0-8
|
||||||
Requires: libspice-client-gtk-3_0-4
|
Requires: libspice-client-gtk-3_0-4
|
||||||
|
Requires: python-gobject-cairo
|
||||||
|
Requires: typelib-1_0-GVnc-1_0
|
||||||
|
Requires: typelib-1_0-Gtk-3_0
|
||||||
|
Requires: typelib-1_0-GtkVnc-2_0
|
||||||
Requires: typelib-1_0-SpiceClientGlib-2_0
|
Requires: typelib-1_0-SpiceClientGlib-2_0
|
||||||
Requires: typelib-1_0-SpiceClientGtk-3_0
|
Requires: typelib-1_0-SpiceClientGtk-3_0
|
||||||
Requires: typelib-1_0-Gtk-3_0
|
|
||||||
Requires: typelib-1_0-GVnc-1_0
|
|
||||||
Requires: typelib-1_0-GtkVnc-2_0
|
|
||||||
Requires: python-gobject-cairo
|
|
||||||
Recommends: python-SpiceClientGtk
|
Recommends: python-SpiceClientGtk
|
||||||
|
|
||||||
Requires: virt-install
|
Requires: virt-install
|
||||||
@ -133,9 +141,9 @@ Group: System/Monitoring
|
|||||||
# This version not strictly required: virt-manager should work with older,
|
# This version not strictly required: virt-manager should work with older,
|
||||||
# however varying amounts of functionality will not be enabled.
|
# however varying amounts of functionality will not be enabled.
|
||||||
Requires: libvirt-python >= 0.7.0
|
Requires: libvirt-python >= 0.7.0
|
||||||
Requires: python-urlgrabber
|
|
||||||
Requires: python-ipaddr
|
Requires: python-ipaddr
|
||||||
Requires: python-libxml2
|
Requires: python-libxml2
|
||||||
|
Requires: python-urlgrabber
|
||||||
|
|
||||||
%description common
|
%description common
|
||||||
Common files used by the different virt-manager interfaces, as well as
|
Common files used by the different virt-manager interfaces, as well as
|
||||||
@ -148,10 +156,10 @@ Group: System/Monitoring
|
|||||||
|
|
||||||
Requires: virt-manager-common = %{verrel}
|
Requires: virt-manager-common = %{verrel}
|
||||||
|
|
||||||
Provides: virt-clone
|
|
||||||
Provides: virt-image
|
|
||||||
Provides: virt-convert
|
|
||||||
Provides: python-virtinst
|
Provides: python-virtinst
|
||||||
|
Provides: virt-clone
|
||||||
|
Provides: virt-convert
|
||||||
|
Provides: virt-image
|
||||||
Obsoletes: python-virtinst <= 0.600.4
|
Obsoletes: python-virtinst <= 0.600.4
|
||||||
Supplements: virt-manager
|
Supplements: virt-manager
|
||||||
|
|
||||||
@ -181,6 +189,13 @@ machine).
|
|||||||
%patch16 -p1
|
%patch16 -p1
|
||||||
%patch17 -p1
|
%patch17 -p1
|
||||||
%patch18 -p1
|
%patch18 -p1
|
||||||
|
%patch19 -p1
|
||||||
|
%patch20 -p1
|
||||||
|
%patch21 -p1
|
||||||
|
%patch22 -p1
|
||||||
|
%patch23 -p1
|
||||||
|
%patch24 -p1
|
||||||
|
%patch25 -p1
|
||||||
%patch50 -p1
|
%patch50 -p1
|
||||||
%patch51 -p1
|
%patch51 -p1
|
||||||
%patch52 -p1
|
%patch52 -p1
|
||||||
@ -198,6 +213,7 @@ machine).
|
|||||||
#%patch69 -p1 pv iso install
|
#%patch69 -p1 pv iso install
|
||||||
%patch70 -p1
|
%patch70 -p1
|
||||||
%patch71 -p1
|
%patch71 -p1
|
||||||
|
%patch72 -p1
|
||||||
#%patch150 -p1 use 'c' for cdrom
|
#%patch150 -p1 use 'c' for cdrom
|
||||||
%patch151 -p1
|
%patch151 -p1
|
||||||
%patch152 -p1
|
%patch152 -p1
|
||||||
|
@ -2,7 +2,7 @@ Index: virt-manager-1.0.0/virtinst/urlfetcher.py
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- virt-manager-1.0.0.orig/virtinst/urlfetcher.py
|
--- virt-manager-1.0.0.orig/virtinst/urlfetcher.py
|
||||||
+++ virt-manager-1.0.0/virtinst/urlfetcher.py
|
+++ virt-manager-1.0.0/virtinst/urlfetcher.py
|
||||||
@@ -287,6 +287,60 @@ def _distroFromTreeinfo(fetcher, arch, v
|
@@ -296,6 +296,60 @@ def _distroFromTreeinfo(fetcher, arch, v
|
||||||
|
|
||||||
return ob
|
return ob
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ Index: virt-manager-1.0.0/virtinst/urlfetcher.py
|
|||||||
|
|
||||||
def getDistroStore(guest, fetcher):
|
def getDistroStore(guest, fetcher):
|
||||||
stores = []
|
stores = []
|
||||||
@@ -303,6 +357,10 @@ def getDistroStore(guest, fetcher):
|
@@ -312,6 +366,10 @@ def getDistroStore(guest, fetcher):
|
||||||
if dist:
|
if dist:
|
||||||
return dist
|
return dist
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ Index: virt-manager-1.0.0/virtinst/urlfetcher.py
|
|||||||
# FIXME: This 'distro ==' doesn't cut it. 'distro' is from our os
|
# FIXME: This 'distro ==' doesn't cut it. 'distro' is from our os
|
||||||
# dictionary, so would look like 'fedora9' or 'rhel5', so this needs
|
# dictionary, so would look like 'fedora9' or 'rhel5', so this needs
|
||||||
# to be a bit more intelligent
|
# to be a bit more intelligent
|
||||||
@@ -799,12 +857,11 @@ class SLDistro(RHELDistro):
|
@@ -808,12 +866,11 @@ class SLDistro(RHELDistro):
|
||||||
|
|
||||||
class SuseDistro(Distro):
|
class SuseDistro(Distro):
|
||||||
name = "SUSE"
|
name = "SUSE"
|
||||||
@ -88,7 +88,7 @@ Index: virt-manager-1.0.0/virtinst/urlfetcher.py
|
|||||||
Distro.__init__(self, *args, **kwargs)
|
Distro.__init__(self, *args, **kwargs)
|
||||||
if re.match(r'i[4-9]86', self.arch):
|
if re.match(r'i[4-9]86', self.arch):
|
||||||
self.arch = 'i386'
|
self.arch = 'i386'
|
||||||
@@ -815,18 +872,32 @@ class SuseDistro(Distro):
|
@@ -824,18 +881,32 @@ class SuseDistro(Distro):
|
||||||
oldkern += "64"
|
oldkern += "64"
|
||||||
oldinit += "64"
|
oldinit += "64"
|
||||||
|
|
||||||
@ -131,7 +131,7 @@ Index: virt-manager-1.0.0/virtinst/urlfetcher.py
|
|||||||
if not self.fetcher.hasFile("directory.yast"):
|
if not self.fetcher.hasFile("directory.yast"):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -851,6 +922,27 @@ class SuseDistro(Distro):
|
@@ -860,6 +931,27 @@ class SuseDistro(Distro):
|
||||||
return name
|
return name
|
||||||
return self.os_variant
|
return self.os_variant
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ Index: virt-manager-1.0.0/virtManager/details.py
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- virt-manager-1.0.0.orig/virtManager/details.py
|
--- virt-manager-1.0.0.orig/virtManager/details.py
|
||||||
+++ virt-manager-1.0.0/virtManager/details.py
|
+++ virt-manager-1.0.0/virtManager/details.py
|
||||||
@@ -2017,12 +2017,10 @@ class vmmDetails(vmmGObjectUI):
|
@@ -2018,12 +2018,10 @@ class vmmDetails(vmmGObjectUI):
|
||||||
|
|
||||||
return self._change_config_helper(df, da, hf, ha)
|
return self._change_config_helper(df, da, hf, ha)
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ Index: virt-manager-1.0.0/virtManager/details.py
|
|||||||
auto = self.widget("config-autostart")
|
auto = self.widget("config-autostart")
|
||||||
try:
|
try:
|
||||||
self.vm.set_autostart(auto.get_active())
|
self.vm.set_autostart(auto.get_active())
|
||||||
@@ -2031,6 +2029,11 @@ class vmmDetails(vmmGObjectUI):
|
@@ -2032,6 +2030,11 @@ class vmmDetails(vmmGObjectUI):
|
||||||
(_("Error changing autostart value: %s") % str(e)))
|
(_("Error changing autostart value: %s") % str(e)))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ Index: virt-manager-1.0.0/virtManager/details.py
|
|||||||
if self.edited(EDIT_BOOTORDER):
|
if self.edited(EDIT_BOOTORDER):
|
||||||
bootdevs = self.get_config_boot_order()
|
bootdevs = self.get_config_boot_order()
|
||||||
add_define(self.vm.set_boot_order, bootdevs)
|
add_define(self.vm.set_boot_order, bootdevs)
|
||||||
@@ -2385,6 +2388,8 @@ class vmmDetails(vmmGObjectUI):
|
@@ -2386,6 +2389,8 @@ class vmmDetails(vmmGObjectUI):
|
||||||
buttons=Gtk.ButtonsType.OK,
|
buttons=Gtk.ButtonsType.OK,
|
||||||
dialog_type=dtype)
|
dialog_type=dtype)
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ Index: virt-manager-1.0.0/virtManager/create.py
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- virt-manager-1.0.0.orig/virtManager/create.py
|
--- virt-manager-1.0.0.orig/virtManager/create.py
|
||||||
+++ virt-manager-1.0.0/virtManager/create.py
|
+++ virt-manager-1.0.0/virtManager/create.py
|
||||||
@@ -1228,11 +1228,34 @@ class vmmCreate(vmmGObjectUI):
|
@@ -1232,11 +1232,34 @@ class vmmCreate(vmmGObjectUI):
|
||||||
variant = self.widget("install-os-version")
|
variant = self.widget("install-os-version")
|
||||||
variant.set_active(0)
|
variant.set_active(0)
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ Index: virt-manager-1.0.0/virtManager/create.py
|
|||||||
# Get previous
|
# Get previous
|
||||||
type_row = self._selected_os_row()
|
type_row = self._selected_os_row()
|
||||||
if not type_row:
|
if not type_row:
|
||||||
@@ -1587,7 +1610,10 @@ class vmmCreate(vmmGObjectUI):
|
@@ -1591,7 +1614,10 @@ class vmmCreate(vmmGObjectUI):
|
||||||
if extra:
|
if extra:
|
||||||
extraargs += extra
|
extraargs += extra
|
||||||
if ks:
|
if ks:
|
||||||
@ -49,7 +49,7 @@ Index: virt-manager-1.0.0/virtManager/create.py
|
|||||||
|
|
||||||
if extraargs:
|
if extraargs:
|
||||||
self.guest.installer.extraargs = extraargs
|
self.guest.installer.extraargs = extraargs
|
||||||
@@ -1980,6 +2006,7 @@ class vmmCreate(vmmGObjectUI):
|
@@ -1984,6 +2010,7 @@ class vmmCreate(vmmGObjectUI):
|
||||||
dl = self.set_os_val(self.widget("install-os-type"), distro_type)
|
dl = self.set_os_val(self.widget("install-os-type"), distro_type)
|
||||||
vl = self.set_os_val(self.widget("install-os-version"), distro_var)
|
vl = self.set_os_val(self.widget("install-os-version"), distro_var)
|
||||||
self.set_distro_labels(dl, vl)
|
self.set_distro_labels(dl, vl)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
Index: virt-manager-0.10.1/virtManager/create.py
|
Index: virt-manager-1.0.0/virtManager/create.py
|
||||||
===================================================================
|
===================================================================
|
||||||
--- virt-manager-0.10.1.orig/virtManager/create.py
|
--- virt-manager-1.0.0.orig/virtManager/create.py
|
||||||
+++ virt-manager-0.10.1/virtManager/create.py
|
+++ virt-manager-1.0.0/virtManager/create.py
|
||||||
@@ -21,6 +21,8 @@
|
@@ -21,6 +21,8 @@
|
||||||
import logging
|
import logging
|
||||||
import threading
|
import threading
|
||||||
@ -11,7 +11,7 @@ Index: virt-manager-0.10.1/virtManager/create.py
|
|||||||
|
|
||||||
# pylint: disable=E0611
|
# pylint: disable=E0611
|
||||||
from gi.repository import GObject
|
from gi.repository import GObject
|
||||||
@@ -1130,6 +1132,51 @@ class vmmCreate(vmmGObjectUI):
|
@@ -1130,6 +1132,55 @@ class vmmCreate(vmmGObjectUI):
|
||||||
return
|
return
|
||||||
self.start_detection(forward=forward)
|
self.start_detection(forward=forward)
|
||||||
|
|
||||||
@ -26,6 +26,10 @@ Index: virt-manager-0.10.1/virtManager/create.py
|
|||||||
+ return 'linux', 'opensuse13'
|
+ return 'linux', 'opensuse13'
|
||||||
+ if "openSUSE 12" in line:
|
+ if "openSUSE 12" in line:
|
||||||
+ return 'linux', 'opensuse12'
|
+ return 'linux', 'opensuse12'
|
||||||
|
+ if "SUSE Linux Enterprise Server 12" in line:
|
||||||
|
+ return 'linux', 'sles12'
|
||||||
|
+ if "SUSE Linux Enterprise Desktop 12" in line:
|
||||||
|
+ return 'linux', 'sled12'
|
||||||
+ if "SUSE Linux Enterprise Server 11" in line:
|
+ if "SUSE Linux Enterprise Server 11" in line:
|
||||||
+ return 'linux', 'sles11'
|
+ return 'linux', 'sles11'
|
||||||
+ if "SUSE Linux Enterprise Desktop 11" in line:
|
+ if "SUSE Linux Enterprise Desktop 11" in line:
|
||||||
@ -63,7 +67,7 @@ Index: virt-manager-0.10.1/virtManager/create.py
|
|||||||
def toggle_detect_os(self, src):
|
def toggle_detect_os(self, src):
|
||||||
dodetect = src.get_active()
|
dodetect = src.get_active()
|
||||||
|
|
||||||
@@ -1141,6 +1188,8 @@ class vmmCreate(vmmGObjectUI):
|
@@ -1141,6 +1192,8 @@ class vmmCreate(vmmGObjectUI):
|
||||||
if dodetect:
|
if dodetect:
|
||||||
self.mediaDetected = False
|
self.mediaDetected = False
|
||||||
self.detect_media_os()
|
self.detect_media_os()
|
||||||
|
@ -25,7 +25,7 @@ Index: virt-manager-1.0.0/virtManager/details.py
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- virt-manager-1.0.0.orig/virtManager/details.py
|
--- virt-manager-1.0.0.orig/virtManager/details.py
|
||||||
+++ virt-manager-1.0.0/virtManager/details.py
|
+++ virt-manager-1.0.0/virtManager/details.py
|
||||||
@@ -2278,6 +2278,17 @@ class vmmDetails(vmmGObjectUI):
|
@@ -2279,6 +2279,17 @@ class vmmDetails(vmmGObjectUI):
|
||||||
text1=(_("Are you sure you want to remove this device?"))):
|
text1=(_("Are you sure you want to remove this device?"))):
|
||||||
return
|
return
|
||||||
|
|
||||||
|
139
virtman-show-suse-install-repos.patch
Normal file
139
virtman-show-suse-install-repos.patch
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
Index: virt-manager-1.0.0/virtManager/create.py
|
||||||
|
===================================================================
|
||||||
|
--- virt-manager-1.0.0.orig/virtManager/create.py
|
||||||
|
+++ virt-manager-1.0.0/virtManager/create.py
|
||||||
|
@@ -18,6 +18,7 @@
|
||||||
|
# MA 02110-1301 USA.
|
||||||
|
#
|
||||||
|
|
||||||
|
+import traceback
|
||||||
|
import logging
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
@@ -366,7 +367,13 @@ class vmmCreate(vmmGObjectUI):
|
||||||
|
self.widget("install-url-options").set_expanded(False)
|
||||||
|
urlmodel = self.widget("install-url-box").get_model()
|
||||||
|
ksmodel = self.widget("install-ks-box").get_model()
|
||||||
|
- self.populate_media_model(urlmodel, self.config.get_media_urls())
|
||||||
|
+ urllist = self.config.get_media_urls()
|
||||||
|
+ (index, inst_repos) = util.getInstallRepos()
|
||||||
|
+ for u in urllist:
|
||||||
|
+ if u in inst_repos:
|
||||||
|
+ inst_repos.remove(u)
|
||||||
|
+ media_urllist = urllist + inst_repos
|
||||||
|
+ self.populate_media_model(urlmodel, media_urllist)
|
||||||
|
self.populate_media_model(ksmodel, self.config.get_kickstart_urls())
|
||||||
|
self.set_distro_labels("-", "-", force=True)
|
||||||
|
|
||||||
|
Index: virt-manager-1.0.0/virtinst/util.py
|
||||||
|
===================================================================
|
||||||
|
--- virt-manager-1.0.0.orig/virtinst/util.py
|
||||||
|
+++ virt-manager-1.0.0/virtinst/util.py
|
||||||
|
@@ -23,12 +23,14 @@ import os
|
||||||
|
import random
|
||||||
|
import re
|
||||||
|
import stat
|
||||||
|
+import commands
|
||||||
|
|
||||||
|
import libvirt
|
||||||
|
import libxml2
|
||||||
|
|
||||||
|
|
||||||
|
_host_blktap_capable = None
|
||||||
|
+_host_repo_url = None
|
||||||
|
|
||||||
|
|
||||||
|
def listify(l):
|
||||||
|
@@ -531,3 +533,92 @@ def convert_units(value, old_unit, new_u
|
||||||
|
power = get_power(new_unit)
|
||||||
|
|
||||||
|
return in_bytes / pow(factor, power)
|
||||||
|
+
|
||||||
|
+def getHostInstallSource():
|
||||||
|
+ global _host_repo_url
|
||||||
|
+ if _host_repo_url is not None:
|
||||||
|
+ return _host_repo_url
|
||||||
|
+
|
||||||
|
+ if os.path.exists('/var/lib/YaST2/install.inf'):
|
||||||
|
+ server_ip = server_name = server_dir = inst_mode = None
|
||||||
|
+ f = open('/var/lib/YaST2/install.inf')
|
||||||
|
+ lines = f.readlines()
|
||||||
|
+ f.close()
|
||||||
|
+ # Newer install.inf files use RepoURL. Older versions require parsing more fields
|
||||||
|
+ for line in lines:
|
||||||
|
+ if line.startswith('RepoURL:'):
|
||||||
|
+ repo_url = line[:-1].split('?', 1)[0]
|
||||||
|
+ repo_url = repo_url.split(' ')
|
||||||
|
+ if repo_url[1]:
|
||||||
|
+ if repo_url[1].startswith('ftp:') or repo_url[1].startswith('http:') or repo_url[1].startswith('smb:') or repo_url[1].startswith('nfs:'):
|
||||||
|
+ _host_repo_url = repo_url[1]
|
||||||
|
+ return repo_url[1]
|
||||||
|
+ return None
|
||||||
|
+ elif line.startswith('InstMode:'):
|
||||||
|
+ inst_mode = line[:-1].split('?', 1)[0]
|
||||||
|
+ inst_mode = inst_mode.split(' ')
|
||||||
|
+ inst_mode = inst_mode[1]
|
||||||
|
+ if inst_mode != 'ftp' and inst_mode != 'http' and inst_mode != 'smb' and inst_mode != 'nfs':
|
||||||
|
+ return None
|
||||||
|
+ elif line.startswith('ServerIP:'):
|
||||||
|
+ server_ip = line[:-1].split('?', 1)[0]
|
||||||
|
+ server_ip = server_ip.split(' ')
|
||||||
|
+ server_ip = server_ip[1]
|
||||||
|
+ elif line.startswith('ServerName:'):
|
||||||
|
+ server_name = line[:-1].split('?', 1)[0]
|
||||||
|
+ server_name = server_name.split(' ')
|
||||||
|
+ server_name = server_name[1]
|
||||||
|
+ elif line.startswith('Serverdir:'):
|
||||||
|
+ server_dir = line[:-1].split('?', 1)[0]
|
||||||
|
+ server_dir = server_dir.split(' ')
|
||||||
|
+ server_dir = server_dir[1]
|
||||||
|
+ if inst_mode:
|
||||||
|
+ repo_url = inst_mode + "://"
|
||||||
|
+ if server_name:
|
||||||
|
+ repo_url = repo_url + server_name + "/"
|
||||||
|
+ if server_dir:
|
||||||
|
+ repo_url = repo_url + server_dir
|
||||||
|
+ elif server_ip:
|
||||||
|
+ repo_url = repo_url + server_ip + "/"
|
||||||
|
+ if server_dir:
|
||||||
|
+ repo_url = repo_url + server_dir
|
||||||
|
+ _host_repo_url = repo_url
|
||||||
|
+ return repo_url
|
||||||
|
+ return None
|
||||||
|
+
|
||||||
|
+def getInstallRepos(enabled_sources_only = True):
|
||||||
|
+ dom0_inst_source = getHostInstallSource()
|
||||||
|
+ locations = commands.getoutput("/usr/bin/zypper lr -u | awk -F'|' '{ print $6 }'")
|
||||||
|
+ locations = locations[(locations.rfind('URI')):].split()
|
||||||
|
+ index = 0
|
||||||
|
+ index_dom0 = -1
|
||||||
|
+ number_of_sources = 0
|
||||||
|
+ zypper_output = []
|
||||||
|
+ # If we only want to list enabled sources
|
||||||
|
+ if enabled_sources_only == True:
|
||||||
|
+ enabled = commands.getoutput("/usr/bin/zypper lr -u | awk -F'|' '{ print $4 }'")
|
||||||
|
+ enabled = enabled[(enabled.rfind('Enabled')):].split()
|
||||||
|
+ for e in enabled:
|
||||||
|
+ if e == "Yes":
|
||||||
|
+ str = locations[index]
|
||||||
|
+ if str.startswith('ftp://') or str.startswith('http://') or str.startswith('nfs://') or str.startswith('smb://'):
|
||||||
|
+ zypper_output.append(str)
|
||||||
|
+ if dom0_inst_source is not None and str == dom0_inst_source:
|
||||||
|
+ index_dom0 = number_of_sources
|
||||||
|
+ number_of_sources += 1
|
||||||
|
+ index += 1
|
||||||
|
+ else:
|
||||||
|
+ locations.sort()
|
||||||
|
+ for l in locations:
|
||||||
|
+ str = locations[index]
|
||||||
|
+ if str.startswith('ftp://') or str.startswith('http://') or str.startswith('nfs://') or str.startswith('smb://'):
|
||||||
|
+ zypper_output.append(str)
|
||||||
|
+ if dom0_inst_source is not None and str == dom0_inst_source:
|
||||||
|
+ index_dom0 = number_of_sources
|
||||||
|
+ number_of_sources += 1
|
||||||
|
+ index += 1
|
||||||
|
+ if index_dom0 == -1 and dom0_inst_source:
|
||||||
|
+ index_dom0 = 0
|
||||||
|
+ zypper_output.insert(0, dom0_inst_source)
|
||||||
|
+ return (index_dom0, zypper_output)
|
||||||
|
+
|
Loading…
Reference in New Issue
Block a user