- If connection is Xen, default to PV instead of HVM.

virtman-default-to-xen-pv.patch

- Update to virt-manager 1.0.0
  * virt-manager: Snapshot support
  * New tool virt-xml: Edit libvirt XML in one shot from the command line. Check out some examples: http://www.redhat.com/archives/libvir-list/2014-January/msg01226.html
  * Improved defaults: qcow2, USB2, host CPU model, guest agent channel, …
  * Introspect command line options like –disk=? or –network=help
  * The virt-image tool will be removed before the next release, speak up if you have a good reason not to remove it.
  * virt-manager: Support arm vexpress VM creation
  * virt-manager: Add guest memory usage graphs (Thorsten Behrens)
  * virt-manager: UI for editing devices (Cédric Bosdonnat)
  * Spice USB redirection support (Guannan Ren)
  * UI and command line support (Stefan Berger)
  * UI and command line support (Giuseppe Scrivano)
  * UI and command line support (Chen Hanxiao)
  * command line support (Chen Hanxiao)
  * virt-manager: support for glusterfs storage pools (Giuseppe Scrivano)
  * cli: New options –memory, –features, –clock, –metadata, –pm
  * Greatly improve app responsiveness when connecting to remote hosts
  * Lots of UI cleanup and improvements
  virt-manager-1.0.0.tar.bz2
- Dropped the following patches by taking a newer upstream tarball
  virt-manager-0.10.0.tar.bz2
  Add-memory-stats-widget-also-to-manager-tree-view.patch
  Attempt-empty-path-on-virDomainBlockStats.patch
  Base-mem-statistics-on-virDomainMemoryStats-if-avail.patch
  virtinst-add-cache-modes.patch
  virtinst-allow-ide-hdb.patch
  virtinst-clone-disks.patch

OBS-URL: https://build.opensuse.org/package/show/Virtualization/virt-manager?expand=0&rev=143
This commit is contained in:
Charles Arnold 2014-02-15 15:46:55 +00:00 committed by Git OBS Bridge
parent 66d8d8fc92
commit 0ab97a4010
35 changed files with 552 additions and 1245 deletions

View File

@ -1,235 +0,0 @@
From 43f0549e2f4e1479cf3e9fe9201a8224eb5b56a1 Mon Sep 17 00:00:00 2001
From: Thorsten Behrens <tbehrens@suse.com>
Date: Wed, 18 Dec 2013 14:42:42 +0100
Subject: [PATCH 1/3] Add memory stats widget also to manager tree view.
(crobinso: Fix an initialization issue)
Conflicts:
virtManager/manager.py
---
data/org.virt-manager.virt-manager.gschema.xml | 6 ++++
ui/vmm-manager.ui | 9 ++++++
virtManager/config.py | 6 ++++
virtManager/domain.py | 3 ++
virtManager/manager.py | 41 ++++++++++++++++++++++++--
5 files changed, 62 insertions(+), 3 deletions(-)
Index: virt-manager-0.10.0/data/org.virt-manager.virt-manager.gschema.xml
===================================================================
--- virt-manager-0.10.0.orig/data/org.virt-manager.virt-manager.gschema.xml
+++ virt-manager-0.10.0/data/org.virt-manager.virt-manager.gschema.xml
@@ -94,6 +94,12 @@
<description>Show the host cpu usage field in the domain list summary view</description>
</key>
+ <key name="memory-usage" type="b">
+ <default>false</default>
+ <summary>Show memory usage in summary</summary>
+ <description>Show memory usage field in the domain list summary view</description>
+ </key>
+
</schema>
<schema id="org.virt-manager.virt-manager.stats" path="/org/virt-manager/virt-manager/stats/">
Index: virt-manager-0.10.0/ui/vmm-manager.ui
===================================================================
--- virt-manager-0.10.0.orig/ui/vmm-manager.ui
+++ virt-manager-0.10.0/ui/vmm-manager.ui
@@ -190,6 +190,15 @@
</object>
</child>
<child>
+ <object class="GtkCheckMenuItem" id="menu_view_stats_memory">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Memory Usage</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_menu_view_memory_usage_activate" swapped="no"/>
+ </object>
+ </child>
+ <child>
<object class="GtkCheckMenuItem" id="menu_view_stats_disk">
<property name="visible">True</property>
<property name="can_focus">False</property>
Index: virt-manager-0.10.0/virtManager/config.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/config.py
+++ virt-manager-0.10.0/virtManager/config.py
@@ -251,6 +251,8 @@ class vmmConfig(object):
return self.conf.get("/vmlist-fields/cpu-usage")
def is_vmlist_host_cpu_usage_visible(self):
return self.conf.get("/vmlist-fields/host-cpu-usage")
+ def is_vmlist_memory_usage_visible(self):
+ return self.conf.get("/vmlist-fields/memory-usage")
def is_vmlist_disk_io_visible(self):
return self.conf.get("/vmlist-fields/disk-usage")
def is_vmlist_network_traffic_visible(self):
@@ -260,6 +262,8 @@ class vmmConfig(object):
self.conf.set("/vmlist-fields/cpu-usage", state)
def set_vmlist_host_cpu_usage_visible(self, state):
self.conf.set("/vmlist-fields/host-cpu-usage", state)
+ def set_vmlist_memory_usage_visible(self, state):
+ self.conf.set("/vmlist-fields/memory-usage", state)
def set_vmlist_disk_io_visible(self, state):
self.conf.set("/vmlist-fields/disk-usage", state)
def set_vmlist_network_traffic_visible(self, state):
@@ -269,6 +273,8 @@ class vmmConfig(object):
return self.conf.notify_add("/vmlist-fields/cpu-usage", cb)
def on_vmlist_host_cpu_usage_visible_changed(self, cb):
return self.conf.notify_add("/vmlist-fields/host-cpu-usage", cb)
+ def on_vmlist_memory_usage_visible_changed(self, cb):
+ return self.conf.notify_add("/vmlist-fields/memory-usage", cb)
def on_vmlist_disk_io_visible_changed(self, cb):
return self.conf.notify_add("/vmlist-fields/disk-usage", cb)
def on_vmlist_network_traffic_visible_changed(self, cb):
Index: virt-manager-0.10.0/virtManager/domain.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/domain.py
+++ virt-manager-0.10.0/virtManager/domain.py
@@ -1475,6 +1475,9 @@ class vmmDomain(vmmLibvirtObject):
if len(cpudata) > limit:
cpudata = cpudata[0:limit]
return cpudata
+ def memory_usage_vector_limit(self, limit):
+ return self.in_out_vector_limit(self.stats_memory_vector(),
+ limit)
def network_traffic_vector_limit(self, limit, ceil=None):
return self.in_out_vector_limit(self.network_traffic_vector(ceil),
limit)
Index: virt-manager-0.10.0/virtManager/manager.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/manager.py
+++ virt-manager-0.10.0/virtManager/manager.py
@@ -58,8 +58,9 @@ ROW_INSPECTION_OS_ICON) = range(13)
COL_NAME = 0
COL_GUEST_CPU = 1
COL_HOST_CPU = 2
-COL_DISK = 3
-COL_NETWORK = 4
+COL_MEM = 3
+COL_DISK = 4
+COL_NETWORK = 5
try:
@@ -128,6 +129,7 @@ class vmmManager(vmmGObjectUI):
# list.get_column, so avoid it
self.diskcol = None
self.netcol = None
+ self.memcol = None
self.guestcpucol = None
self.hostcpucol = None
@@ -136,6 +138,8 @@ class vmmManager(vmmGObjectUI):
self.toggle_stats_visible_guest_cpu,
"on_menu_view_host_cpu_usage_activate":
self.toggle_stats_visible_host_cpu,
+ "on_menu_view_memory_usage_activate":
+ self.toggle_stats_visible_memory_usage,
"on_menu_view_disk_io_activate" :
self.toggle_stats_visible_disk,
"on_menu_view_network_traffic_activate":
@@ -224,6 +228,7 @@ class vmmManager(vmmGObjectUI):
self.diskcol = None
self.guestcpucol = None
+ self.memcol = None
self.hostcpucol = None
self.netcol = None
@@ -256,6 +261,9 @@ class vmmManager(vmmGObjectUI):
self.config.on_vmlist_host_cpu_usage_visible_changed(
self.toggle_host_cpu_usage_visible_widget))
self.add_gconf_handle(
+ self.config.on_vmlist_memory_usage_visible_changed(
+ self.toggle_memory_usage_visible_widget))
+ self.add_gconf_handle(
self.config.on_vmlist_disk_io_visible_changed(
self.toggle_disk_io_visible_widget))
self.add_gconf_handle(
@@ -271,7 +279,6 @@ class vmmManager(vmmGObjectUI):
self.config.on_stats_enable_net_poll_changed(self.enable_polling,
COL_NETWORK))
-
self.widget("menu_view_stats_guest_cpu").set_active(
self.config.is_vmlist_guest_cpu_usage_visible())
self.widget("menu_view_stats_host_cpu").set_active(
@@ -460,6 +467,10 @@ class vmmManager(vmmGObjectUI):
self.host_cpu_usage_img,
self.config.is_vmlist_host_cpu_usage_visible(),
COL_HOST_CPU)
+ self.memcol = make_stats_column(_("Memory usage"),
+ self.memory_usage_img,
+ self.config.is_vmlist_memory_usage_visible(),
+ COL_MEM)
self.diskcol = make_stats_column(_("Disk I/O"),
self.disk_io_img,
self.config.is_vmlist_disk_io_visible(),
@@ -472,6 +483,7 @@ class vmmManager(vmmGObjectUI):
model.set_sort_func(COL_NAME, self.vmlist_name_sorter)
model.set_sort_func(COL_GUEST_CPU, self.vmlist_guest_cpu_usage_sorter)
model.set_sort_func(COL_HOST_CPU, self.vmlist_host_cpu_usage_sorter)
+ model.set_sort_func(COL_MEM, self.vmlist_memory_usage_sorter)
model.set_sort_func(COL_DISK, self.vmlist_disk_io_sorter)
model.set_sort_func(COL_NETWORK, self.vmlist_network_usage_sorter)
model.set_sort_column_id(COL_NAME, Gtk.SortType.ASCENDING)
@@ -1162,6 +1174,13 @@ class vmmManager(vmmGObjectUI):
return cmp(obj1.host_cpu_time_percentage(),
obj2.host_cpu_time_percentage())
+ def vmlist_memory_usage_sorter(self, model, iter1, iter2, ignore):
+ obj1 = model.get_value(iter1, ROW_HANDLE)
+ obj2 = model.get_value(iter2, ROW_HANDLE)
+
+ return cmp(obj1.stats_memory(),
+ obj2.stats_memory())
+
def vmlist_disk_io_sorter(self, model, iter1, iter2, ignore):
obj1 = model.get_value(iter1, ROW_HANDLE)
obj2 = model.get_value(iter2, ROW_HANDLE)
@@ -1211,6 +1230,11 @@ class vmmManager(vmmGObjectUI):
self.diskcol.set_visible(val)
self.widget("menu_view_stats_disk").set_active(val)
+ def toggle_memory_usage_visible_widget(self):
+ val = self.config.is_vmlist_memory_usage_visible()
+ self.memcol.set_visible(val)
+ self.widget("menu_view_stats_memory").set_active(val)
+
def toggle_guest_cpu_usage_visible_widget(self):
val = self.config.is_vmlist_guest_cpu_usage_visible()
self.guestcpucol.set_visible(val)
@@ -1226,6 +1250,7 @@ class vmmManager(vmmGObjectUI):
set_stats = {
COL_GUEST_CPU: self.config.set_vmlist_guest_cpu_usage_visible,
COL_HOST_CPU: self.config.set_vmlist_host_cpu_usage_visible,
+ COL_MEM: self.config.set_vmlist_memory_usage_visible,
COL_DISK: self.config.set_vmlist_disk_io_visible,
COL_NETWORK: self.config.set_vmlist_network_traffic_visible,
}
@@ -1235,6 +1260,8 @@ class vmmManager(vmmGObjectUI):
self.toggle_stats_visible(src, COL_GUEST_CPU)
def toggle_stats_visible_host_cpu(self, src):
self.toggle_stats_visible(src, COL_HOST_CPU)
+ def toggle_stats_visible_memory_usage(self, src):
+ self.toggle_stats_visible(src, COL_MEM)
def toggle_stats_visible_disk(self, src):
self.toggle_stats_visible(src, COL_DISK)
def toggle_stats_visible_network(self, src):
@@ -1256,6 +1283,14 @@ class vmmManager(vmmGObjectUI):
data = obj.host_cpu_time_vector_limit(GRAPH_LEN)
cell.set_property('data_array', data)
+ def memory_usage_img(self, column_ignore, cell, model, _iter, data):
+ obj = model[_iter][ROW_HANDLE]
+ if obj is None or not hasattr(obj, "conn"):
+ return
+
+ data = obj.memory_usage_vector_limit(GRAPH_LEN)
+ cell.set_property('data_array', data)
+
def disk_io_img(self, column_ignore, cell, model, _iter, data):
obj = model.get_value(_iter, ROW_HANDLE)
if obj is None or not hasattr(obj, "conn"):

View File

@ -1,45 +0,0 @@
From 561e7318d19adaba9ea79f6f3010bc1fe9d37d10 Mon Sep 17 00:00:00 2001
From: Thorsten Behrens <tbehrens@suse.com>
Date: Sun, 12 Jan 2014 03:13:54 +0100
Subject: [PATCH 3/3] Attempt empty path on virDomainBlockStats
libvirt for some backends yields summary domain stats for empty
disk path.
Conflicts:
virtManager/domain.py
---
virtManager/domain.py | 13 +++++++++++++
1 file changed, 13 insertions(+)
Index: virt-manager-0.10.0/virtManager/domain.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/domain.py
+++ virt-manager-0.10.0/virtManager/domain.py
@@ -196,6 +196,7 @@ class vmmDomain(vmmLibvirtObject):
self._enable_disk_poll = False
self._stats_disk_supported = True
self._stats_disk_skip = []
+ self._summary_disk_stats_skip = False
self.inspection = vmmInspectionData()
@@ -1705,6 +1706,18 @@ class vmmDomain(vmmLibvirtObject):
not self.is_active()):
return rd, wr
+ # attempt to retrieve summary stats for domain
+ if not self._summary_disk_stats_skip:
+ try:
+ io = self._backend.blockStats('')
+ if io:
+ rd = io[1]
+ wr = io[3]
+ return rd, wr
+ except libvirt.libvirtError:
+ self._summary_disk_stats_skip = True
+
+ # did not work, iterate over all disks
for disk in self.get_disk_devices(refresh_if_necc=False):
dev = disk.target
if not dev:

View File

@ -1,66 +0,0 @@
From 229c3b692e6b340951af371e0f68484bc6a8868a Mon Sep 17 00:00:00 2001
From: Thorsten Behrens <tbehrens@suse.com>
Date: Wed, 18 Dec 2013 14:42:43 +0100
Subject: [PATCH 2/3] Base mem statistics on virDomainMemoryStats if available.
Attempt to query domain memory stats via virDomainMemoryStats.
(crobinso: remove the broken fallback, since it's confusing)
---
virtManager/domain.py | 28 ++++++++++++++++++++++------
1 file changed, 22 insertions(+), 6 deletions(-)
Index: virt-manager-0.10.0/virtManager/domain.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/domain.py
+++ virt-manager-0.10.0/virtManager/domain.py
@@ -187,6 +187,8 @@ class vmmDomain(vmmLibvirtObject):
self._guest = None
self._guest_to_define = None
+ self._mem_stats_supported = True
+
self._enable_net_poll = False
self._stats_net_supported = True
self._stats_net_skip = []
@@ -1303,12 +1305,26 @@ class vmmDomain(vmmLibvirtObject):
# Stats helpers ###
###################
- def _sample_mem_stats(self, info):
- curmem = info[2]
- if not self.is_active():
- curmem = 0
+ def _sample_mem_stats(self):
+ curmem = 0
+ totalmem = 1
+
+ if self._mem_stats_supported and self.is_active():
+ try:
+ stats = self._backend.memoryStats()
+ # did we get both required stat items back?
+ if set(['actual', 'rss']).issubset(
+ set(stats.keys())):
+ curmem = stats['rss']
+ totalmem = stats['actual']
+ except libvirt.libvirtError, err:
+ if support.is_error_nosupport(err):
+ logging.debug("Mem stats not supported: %s", err)
+ self._mem_stats_supported = False
+ else:
+ logging.error("Error reading mem stats: %s", err)
- pcentCurrMem = curmem * 100.0 / self.maximum_memory()
+ pcentCurrMem = curmem * 100.0 / totalmem
pcentCurrMem = max(0.0, min(pcentCurrMem, 100.0))
return pcentCurrMem, curmem
@@ -1751,7 +1767,7 @@ class vmmDomain(vmmLibvirtObject):
(cpuTime, cpuTimeAbs,
pcentHostCpu, pcentGuestCpu) = self._sample_cpu_stats(info, now)
- pcentCurrMem, curmem = self._sample_mem_stats(info)
+ pcentCurrMem, curmem = self._sample_mem_stats()
rdBytes, wrBytes = self._sample_disk_io()
rxBytes, txBytes = self._sample_network_traffic()

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c01731f3ada1a9196966c891b6eca207d9295e00dcdbaaf40375eee1780ecf00
size 1404339

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4327f3de1848356ed4a066f6e2183775f0bb587efaef97fb89d5c1dd4d028156
size 1308101

View File

@ -1,3 +1,42 @@
-------------------------------------------------------------------
Thu Feb 14 15:45:58 MST 2014 - carnold@suse.com
- If connection is Xen, default to PV instead of HVM.
virtman-default-to-xen-pv.patch
-------------------------------------------------------------------
Thu Feb 13 16:23:58 MST 2014 - carnold@suse.com
- Update to virt-manager 1.0.0
* virt-manager: Snapshot support
* New tool virt-xml: Edit libvirt XML in one shot from the command line. Check out some examples: http://www.redhat.com/archives/libvir-list/2014-January/msg01226.html
* Improved defaults: qcow2, USB2, host CPU model, guest agent channel, …
* Introspect command line options like disk=? or network=help
* The virt-image tool will be removed before the next release, speak up if you have a good reason not to remove it.
* virt-manager: Support arm vexpress VM creation
* virt-manager: Add guest memory usage graphs (Thorsten Behrens)
* virt-manager: UI for editing devices (Cédric Bosdonnat)
* Spice USB redirection support (Guannan Ren)
* UI and command line support (Stefan Berger)
* UI and command line support (Giuseppe Scrivano)
* UI and command line support (Chen Hanxiao)
* command line support (Chen Hanxiao)
* virt-manager: support for glusterfs storage pools (Giuseppe Scrivano)
* cli: New options memory, features, clock, metadata, pm
* Greatly improve app responsiveness when connecting to remote hosts
* Lots of UI cleanup and improvements
virt-manager-1.0.0.tar.bz2
- Dropped the following patches by taking a newer upstream tarball
virt-manager-0.10.0.tar.bz2
Add-memory-stats-widget-also-to-manager-tree-view.patch
Attempt-empty-path-on-virDomainBlockStats.patch
Base-mem-statistics-on-virDomainMemoryStats-if-avail.patch
virtinst-add-cache-modes.patch
virtinst-allow-ide-hdb.patch
virtinst-clone-disks.patch
virtinst-none-arch-fix.patch
virtman-support-unsafe-migration.patch
-------------------------------------------------------------------
Mon Feb 3 13:36:52 MST 2014 - carnold@suse.com
@ -29,7 +68,7 @@ Thu Jan 07 14:25:13 MDT 2014 - carnold@suse.com
-------------------------------------------------------------------
Tue Dec 24 13:49:29 MST 2013 - carnold@suse.com
- Drop virtman-autoconnect.patch
- Drop virtman-autoconnect.patch
-------------------------------------------------------------------
Sat Dec 14 16:49:34 CET 2013 - ohering@suse.de

View File

@ -22,7 +22,7 @@
%define libvirt_packages "libvirt-daemon-qemu,libvirt-daemon-driver-network"
%define preferred_distros "opensuse,sles"
%define kvm_packages "qemu"
%define _version 0.10.0
%define _version 1.0.0
%define _release 1
Name: virt-manager
@ -47,30 +47,23 @@ Patch64: virtman-update-backend.patch
Patch65: virtman-slow-mouse.patch
Patch66: virtman-reverse-serialcon.patch
Patch67: virtman-default-guest-from-host-os.patch
Patch68: virtman-allow-pv-iso-install.patch
Patch69: virtman-autoyast-support.patch
Patch70: virtman-vminstall.patch
Patch71: virtman-support-unsafe-migration.patch
Patch68: virtman-default-to-xen-pv.patch
Patch69: virtman-allow-pv-iso-install.patch
Patch70: virtman-autoyast-support.patch
Patch71: virtman-vminstall.patch
Patch150: virtinst-cdrom.patch
Patch151: virtinst-storage-ocfs2.patch
Patch152: virtinst-qed.patch
Patch153: virtinst-add-cache-modes.patch
Patch154: virtinst-none-arch-fix.patch
Patch155: virtinst-allow-pv-iso-install.patch
Patch156: virtinst-support-suse-distros.patch
Patch157: virtinst-detect-suse-distros.patch
Patch158: virtinst-allow-ide-hdb.patch
Patch159: virtinst-xen-drive-type.patch
Patch160: virtinst-clone-disks.patch
# Pending upstream
Patch200: Add-memory-stats-widget-also-to-manager-tree-view.patch
Patch201: Base-mem-statistics-on-virDomainMemoryStats-if-avail.patch
Patch202: Attempt-empty-path-on-virDomainBlockStats.patch
Patch153: virtinst-support-suse-distros.patch
Patch154: virtinst-detect-suse-distros.patch
Patch155: virtinst-xen-drive-type.patch
Patch156: virtinst-allow-pv-iso-install.patch
BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%define verrel %{version}-%{release}
Requires: dbus-1-x11
Requires: dconf
Requires: gtk3
Requires: python-gconf
Requires: virt-manager-common = %{verrel}
@ -88,6 +81,7 @@ Requires: typelib-1_0-Vte-2_90
Requires: gtk-vnc2
Requires: libspice-client-glib-2_0-8
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
@ -140,6 +134,7 @@ Provides: virt-clone
Provides: virt-convert
Provides: virt-image
Obsoletes: python-virtinst <= 0.600.4
Supplements: virt-manager
%description -n virt-install
Package includes several command line utilities, including virt-install
@ -163,22 +158,16 @@ machine).
%patch67 -p1
%patch68 -p1
%patch69 -p1
#%patch69 -p1 pv iso install
%patch70 -p1
%patch71 -p1
%patch150 -p1
#%patch150 -p1 use 'c' for cdrom
%patch151 -p1
%patch152 -p1
%patch153 -p1
%patch154 -p1
%patch155 -p1
%patch156 -p1
%patch157 -p1
%patch158 -p1
%patch159 -p1
%patch160 -p1
%patch200 -p1
%patch201 -p1
%patch202 -p1
#%patch156 -p1 pv iso install
%build
%if %{qemu_user}
@ -257,6 +246,7 @@ fi
%{_datadir}/%{name}/icons
%{_datadir}/icons/hicolor/*/apps/*
%{_datadir}/appdata/%{name}.appdata.xml
%{_datadir}/applications/%{name}.desktop
%{_datadir}/glib-2.0/schemas/org.virt-manager.virt-manager.gschema.xml
@ -274,12 +264,14 @@ fi
%{_mandir}/man1/virt-clone.1*
%{_mandir}/man1/virt-convert.1*
%{_mandir}/man1/virt-image.1*
%{_mandir}/man1/virt-xml.1*
%{_mandir}/man5/virt-image.5*
%{_datadir}/%{name}/virt-install
%{_datadir}/%{name}/virt-clone
%{_datadir}/%{name}/virt-image
%{_datadir}/%{name}/virt-convert
%{_datadir}/%{name}/virt-xml
%dir %{_datadir}/*
%dir %{_datadir}/*/*
%{_datadir}/YaST2/clients/virt-install.rb
@ -289,5 +281,6 @@ fi
%{_bindir}/virt-clone
%{_bindir}/virt-image
%{_bindir}/virt-convert
%{_bindir}/virt-xml
%changelog

View File

@ -1,28 +0,0 @@
Index: virt-manager-0.10.0/virtinst/VirtualDisk.py
===================================================================
--- virt-manager-0.10.0.orig/virtinst/VirtualDisk.py
+++ virt-manager-0.10.0/virtinst/VirtualDisk.py
@@ -312,10 +312,13 @@ class VirtualDisk(VirtualDevice):
driver_types = [DRIVER_TAP_RAW, DRIVER_TAP_QCOW,
DRIVER_TAP_QED, DRIVER_TAP_VMDK, DRIVER_TAP_VDISK]
+ CACHE_MODE_DIRECTSYNC = "directsync"
CACHE_MODE_NONE = "none"
+ CACHE_MODE_UNSAFE = "unsafe"
CACHE_MODE_WRITETHROUGH = "writethrough"
CACHE_MODE_WRITEBACK = "writeback"
- cache_types = [CACHE_MODE_NONE, CACHE_MODE_WRITETHROUGH,
+ cache_types = [CACHE_MODE_DIRECTSYNC, CACHE_MODE_NONE,
+ CACHE_MODE_UNSAFE, CACHE_MODE_WRITETHROUGH,
CACHE_MODE_WRITEBACK]
DEVICE_DISK = "disk"
@@ -599,7 +602,7 @@ class VirtualDisk(VirtualDevice):
@type bus: C{str}
@param shareable: If disk can be shared among VMs
@type shareable: C{bool}
- @param driverCache: Disk cache mode (none, writethrough, writeback)
+ @param driverCache: Disk cache mode (none, directsync, unsafe, writethrough, writeback)
@type driverCache: member of cache_types
@param format: Storage volume format to use when creating storage
@type format: C{str}

View File

@ -1,21 +0,0 @@
Index: virt-manager-0.10.0/virtinst/VirtualDisk.py
===================================================================
--- virt-manager-0.10.0.orig/virtinst/VirtualDisk.py
+++ virt-manager-0.10.0/virtinst/VirtualDisk.py
@@ -1742,14 +1742,8 @@ class VirtualDisk(VirtualDevice):
if gen_t in except_targets:
continue
if gen_t not in skip_targets:
- if self.device != self.DEVICE_CDROM:
- if i != ord('c') - ord('a'):
- self.target = gen_t
- return self.target
- else:
- if i >= ord('c') - ord('a'):
- self.target = gen_t
- return self.target
+ self.target = gen_t
+ return self.target
# Check except_targets for any options
for t in except_targets:

View File

@ -1,32 +1,66 @@
Index: virt-manager-0.10.0/virtinst/DistroInstaller.py
Index: virt-manager-1.0.0/virtinst/distroinstaller.py
===================================================================
--- virt-manager-0.10.0.orig/virtinst/DistroInstaller.py
+++ virt-manager-0.10.0/virtinst/DistroInstaller.py
@@ -442,7 +442,7 @@ class DistroInstaller(Installer.Installe
return False
is_url = not self._location_is_path
- mount_dvd = self._location_is_path and not self.cdrom
+ mount_dvd = self._location_is_path and self.cdrom
return bool(is_url or mount_dvd)
@@ -451,11 +451,14 @@ class DistroInstaller(Installer.Installe
--- virt-manager-1.0.0.orig/virtinst/distroinstaller.py
+++ virt-manager-1.0.0/virtinst/distroinstaller.py
@@ -421,8 +421,14 @@ class DistroInstaller(Installer):
dev = None
if self.cdrom:
- if self.location:
- dev = self._prepare_cdrom(guest, meter)
+ if self.is_xenpv() and guest._lookup_osdict_key('pv_cdrom_install'):
+ dev = self._prepare_kernel_and_initrd(guest, meter)
else:
- # Booting from a cdrom directly allocated to the guest
- pass
+ if self.location:
+ dev = self._prepare_cdrom(guest, meter)
+ else:
+ # Booting from a cdrom directly allocated to the guest
+ pass
else:
dev = self._prepare_kernel_and_initrd(guest, meter)
if mediatype == MEDIA_CDROM_PATH:
- dev = self._prepare_local()
- else:
+ if guest.os.is_xenpv() and guest._lookup_osdict_key('pv_cdrom_install', False):
+ fetcher = urlfetcher.fetcherForURI(self.location,
+ scratchdir, meter)
+ dev = self._prepare_kernel_url(guest, fetcher)
+ else:
+ dev = self._prepare_local()
+
+ if dev is None:
fetcher = urlfetcher.fetcherForURI(self.location,
scratchdir, meter)
try:
Index: virt-manager-1.0.0/virtinst/osdict.py
===================================================================
--- virt-manager-1.0.0.orig/virtinst/osdict.py
+++ virt-manager-1.0.0/virtinst/osdict.py
@@ -143,6 +143,8 @@ class _OSVariant(object):
@xen_disable_acpi: If True, disable acpi/apic for this OS if on old xen.
This corresponds with the SUPPORT_CONN_CAN_DEFAULT_ACPI check
@qemu_ga: If True, this distro has qemu_ga available by default
+ @pv_cdrom_install: If True, this distro can be installed from an ISO or
+ cdrom as a para-virtualized guest.
The rest of the parameters are about setting device/guest defaults
based on the OS. They should be self explanatory. See guest.py for
@@ -158,7 +160,7 @@ class _OSVariant(object):
videomodel=_SENTINEL, virtionet=_SENTINEL,
virtiodisk=_SENTINEL, virtiommio=_SENTINEL,
virtioconsole=_SENTINEL, xen_disable_acpi=_SENTINEL,
- qemu_ga=_SENTINEL):
+ qemu_ga=_SENTINEL, pv_cdrom_install=_SENTINEL):
if is_type:
if parent != _SENTINEL:
raise RuntimeError("OS types must not specify parent")
@@ -218,6 +220,7 @@ class _OSVariant(object):
self.virtiommio = _get_default("virtiommio", virtiommio)
self.virtioconsole = _get_default("virtioconsole", virtioconsole)
self.qemu_ga = _get_default("qemu_ga", qemu_ga)
+ self.pv_cdrom_install = _get_default("pv_cdrom_install", pv_cdrom_install)
def _add_type(*args, **kwargs):
@@ -259,12 +262,12 @@ _add_var("fedora18", "Fedora 18", suppor
_add_var("fedora19", "Fedora 19", virtiommio=True, parent="fedora18")
_add_var("fedora20", "Fedora 20 (or later)", parent="fedora19")
-_add_var("opensuse11", "openSUSE 11", urldistro="opensuse", supported=True, virtiodisk=True, virtionet=True, parent="linux")
+_add_var("opensuse11", "openSUSE 11", urldistro="opensuse", supported=True, pv_cdrom_install=True, virtiodisk=True, virtionet=True, parent="linux")
_add_var("opensuse12", "openSUSE 12", parent="opensuse11")
_add_var("opensuse13", "openSUSE 13 (or later)", parent="opensuse12")
_add_var("sles", "Suse Linux Enterprise Server", urldistro="suse", supported=True, parent="linux")
-_add_var("sles10", "Suse Linux Enterprise Server 10", supported=True, virtiodisk=True, virtionet=True, parent="sles")
+_add_var("sles10", "Suse Linux Enterprise Server 10", supported=True, pv_cdrom_install=True, virtiodisk=True, virtionet=True, parent="sles")
_add_var("sles11", "Suse Linux Enterprise Server 11", supported=True, virtiodisk=True, virtionet=True, parent="sles10")
_add_var("sles12", "Suse Linux Enterprise Server 12 (or later)", supported=True, virtiodisk=True, virtionet=True, parent="sles11")

View File

@ -1,30 +1,20 @@
Index: virt-manager-0.10.0/virtinst/VirtualDisk.py
Index: virt-manager-0.10.1/virtinst/devicedisk.py
===================================================================
--- virt-manager-0.10.0.orig/virtinst/VirtualDisk.py
+++ virt-manager-0.10.0/virtinst/VirtualDisk.py
@@ -1712,7 +1712,7 @@ class VirtualDisk(VirtualDevice):
if maxnode > (26 * 26 * 26):
raise RuntimeError("maxnode value is too high")
- # Regular scanning
+ # Start cdrom at 'c' and skip 'c' for non-cdrom
for i in range(1, maxnode + 1):
gen_t = prefix
@@ -1738,8 +1738,14 @@ class VirtualDisk(VirtualDevice):
if gen_t in except_targets:
continue
if gen_t not in skip_targets:
- self.target = gen_t
- return self.target
+ if self.device != self.DEVICE_CDROM:
+ if i != ord('c') - ord('a'):
+ self.target = gen_t
+ return self.target
--- virt-manager-0.10.1.orig/virtinst/devicedisk.py
+++ virt-manager-0.10.1/virtinst/devicedisk.py
@@ -848,6 +848,15 @@ class VirtualDisk(VirtualDevice):
if gen_t in skip_targets:
skip_targets.remove(gen_t)
continue
+ else:
+ if i >= ord('c') - ord('a'):
+ self.target = gen_t
+ return self.target
# Check except_targets for any options
for t in except_targets:
+ if self.device != self.DEVICE_CDROM:
+ if i != ord('c') - ord('a'):
+ self.target = gen_t
+ return gen_t
+ else:
+ if i >= ord('c') - ord('a'):
+ self.target = gen_t
+ return gen_t
if not skip_targets:
return gen_t
elif not first_found:

View File

@ -1,36 +0,0 @@
Index: virt-manager-0.10.0/virtinst/CloneManager.py
===================================================================
--- virt-manager-0.10.0.orig/virtinst/CloneManager.py
+++ virt-manager-0.10.0/virtinst/CloneManager.py
@@ -530,6 +530,7 @@ class CloneDesign(object):
xmldisk.type = clone_disk.type
xmldisk.path = clone_disk.path
xmldisk.driver_type = orig_disk.driver_type
+ xmldisk.driver_name = orig_disk.driver_name
# Save altered clone xml
self._clone_xml = self._guest.get_xml_config()
Index: virt-manager-0.10.0/virtinst/VirtualDisk.py
===================================================================
--- virt-manager-0.10.0.orig/virtinst/VirtualDisk.py
+++ virt-manager-0.10.0/virtinst/VirtualDisk.py
@@ -1203,6 +1203,10 @@ class VirtualDisk(VirtualDevice):
if util.is_vdisk(self.path):
drvname = self.DRIVER_TAP
drvtype = self.DRIVER_TAP_VDISK
+ elif drvname is None and drvtype:
+ drvtypes = ['qcow2', 'vmdk']
+ if drvtype in drvtypes:
+ drvname = 'tap'
return drvname or None, drvtype or None
@@ -1543,6 +1547,8 @@ class VirtualDisk(VirtualDevice):
if drvxml and self.driver_name is None:
if self.is_qemu():
self.driver_name = "qemu"
+ else:
+ self.driver_name = self.get_driver_name()
if not self.driver_name is None:
drvxml = (" name='%s'" % self.driver_name) + drvxml

View File

@ -1,28 +1,12 @@
Index: virt-manager-0.10.0/virtinst/OSDistro.py
Index: virt-manager-1.0.0/virtinst/urlfetcher.py
===================================================================
--- virt-manager-0.10.0.orig/virtinst/OSDistro.py
+++ virt-manager-0.10.0/virtinst/OSDistro.py
@@ -70,8 +70,14 @@ def _storeForDistro(fetcher, baseuri, ty
arch, typ, scratchdir)
if dist:
return dist
+
skip_treeinfo = True
+ dist = virtinst.OSDistro.distroFromContent(fetcher, progresscb, baseuri,
+ arch, typ, scratchdir)
+ if dist:
+ return dist
+
# FIXME: This 'distro ==' doesn't cut it. 'distro' is from our os
# dictionary, so would look like 'fedora9' or 'rhel5', so this needs
# to be a bit more intelligent
@@ -236,6 +242,57 @@ def distroFromTreeinfo(fetcher, progress
--- virt-manager-1.0.0.orig/virtinst/urlfetcher.py
+++ virt-manager-1.0.0/virtinst/urlfetcher.py
@@ -287,6 +287,60 @@ def _distroFromTreeinfo(fetcher, arch, v
return ob
+def distroFromContent(fetcher, progresscb, uri, arch, vmtype=None,
+ scratchdir=None):
+def _distroFromContent(fetcher, arch, vmtype=None):
+ # Parse content file for the 'LABEL' field containing the distribution name
+ # None if no content, GenericDistro if unknown label type.
+ if not fetcher.hasFile("content"):
@ -30,7 +14,7 @@ Index: virt-manager-0.10.0/virtinst/OSDistro.py
+
+ distribution = None
+ distro_version = None
+ filename = fetcher.acquireFile("content", progresscb)
+ filename = fetcher.acquireFile("content")
+ cbuf = f = None
+ try:
+ f = open(filename, "r")
@ -53,37 +37,58 @@ Index: virt-manager-0.10.0/virtinst/OSDistro.py
+ distro_version = line.split(' ', 1)
+ if distribution:
+ break
+
+ if re.match(".*SUSE Linux Enterprise Server*", distribution[1]) or \
+ re.match(".*SUSE SLES*", distribution[1]):
+ dclass = SLESDistro
+ if distro_version is None:
+ distro_version = ['VERSION', distribution[1].strip().rsplit(' ')[4]]
+ elif re.match(".*SUSE Linux Enterprise Desktop*", distribution[1]):
+ dclass = SLEDDistro
+ if distro_version is None:
+ distro_version = ['VERSION', distribution[1].strip().rsplit(' ')[4]]
+ elif re.match(".*openSUSE.*", distribution[1]):
+ dclass = OpensuseDistro
+ else:
+ dclass = GenericDistro
+
+ ob = dclass(uri, arch, vmtype, scratchdir)
+ ob = dclass(fetcher, arch, vmtype)
+ if dclass != GenericDistro:
+ ob.content = distro_version
+
+ # Explictly call this, so we populate os_type/variant info
+ ob.isValidStore(fetcher, progresscb)
+ ob.isValidStore()
+
+ return ob
+
# An image store is a base class for retrieving either a bootable
# ISO image, or a kernel+initrd pair for a particular OS distribution
@@ -689,6 +746,7 @@ class SuseDistro(Distro):
def getDistroStore(guest, fetcher):
stores = []
@@ -303,6 +357,10 @@ def getDistroStore(guest, fetcher):
if dist:
return dist
+ dist = _distroFromContent(fetcher, arch, _type)
+ if dist:
+ return dist
+
# FIXME: This 'distro ==' doesn't cut it. 'distro' is from our os
# dictionary, so would look like 'fedora9' or 'rhel5', so this needs
# to be a bit more intelligent
@@ -799,12 +857,11 @@ class SLDistro(RHELDistro):
class SuseDistro(Distro):
name = "SUSE"
- urldistro = "suse"
- os_variant = "linux"
_boot_iso_paths = ["boot/boot.iso"]
def __init__(self, uri, arch, vmtype=None, scratchdir=None):
def __init__(self, *args, **kwargs):
+ self.content = None
Distro.__init__(self, uri, arch, vmtype, scratchdir)
if re.match(r'i[4-9]86', arch):
Distro.__init__(self, *args, **kwargs)
if re.match(r'i[4-9]86', self.arch):
self.arch = 'i386'
@@ -699,18 +757,32 @@ class SuseDistro(Distro):
@@ -815,18 +872,32 @@ class SuseDistro(Distro):
oldkern += "64"
oldinit += "64"
@ -114,7 +119,7 @@ Index: virt-manager-0.10.0/virtinst/OSDistro.py
+ self._xen_kernel_paths = [ ("boot/%s/vmlinuz-xen" % self.arch,
+ "boot/%s/initrd-xen" % self.arch) ]
def isValidStore(self, fetcher, progresscb):
def isValidStore(self):
+ # self.content is the VERSION line from the contents file
+ distro_version = self.content[1]
+ version = distro_version.split('.', 1)[0].strip()
@ -123,26 +128,34 @@ Index: virt-manager-0.10.0/virtinst/OSDistro.py
+ else:
+ self.os_variant += "9"
+
# Suse distros always have a 'directory.yast' file in the top
# level of install tree, which we use as the magic check
if fetcher.hasFile("directory.yast"):
@@ -915,6 +987,19 @@ class SuseDistro(Distro):
# pass
os.system("rm -rf " + cpiodir)
if not self.fetcher.hasFile("directory.yast"):
return False
@@ -851,6 +922,27 @@ class SuseDistro(Distro):
return name
return self.os_variant
+class SLESDistro(SuseDistro):
+
+ urldistro = "sles"
+ os_variant = "sles"
+
+class SLEDDistro(SuseDistro):
+
+ urldistro = "sled"
+ os_variant = "sled"
+
+# Suse image store is harder - we fetch the kernel RPM and a helper
+# RPM and then munge bits together to generate a initrd
+class OpensuseDistro(SuseDistro):
+
+ urldistro = "opensuse"
+ os_variant = "opensuse"
+
+class OESDistro(SuseDistro):
+
+ urldistro = "oes"
+ os_variant = "oes"
class DebianDistro(Distro):
# ex. http://ftp.egr.msu.edu/debian/dists/sarge/main/installer-i386/

View File

@ -1,15 +0,0 @@
Index: virt-manager-0.10.0/virtinst/CapabilitiesParser.py
===================================================================
--- virt-manager-0.10.0.orig/virtinst/CapabilitiesParser.py
+++ virt-manager-0.10.0/virtinst/CapabilitiesParser.py
@@ -130,7 +130,9 @@ class CPUValues(object):
child = child.next
def get_arch(self, arch):
- if re.match(r'i[4-9]86', arch):
+ if arch is None:
+ arch = "x86"
+ elif re.match(r'i[4-9]86', arch):
arch = "x86"
elif arch == "x86_64":
arch = "x86"

View File

@ -1,8 +1,8 @@
Index: virt-manager-0.10.0/virtinst/VirtualDisk.py
Index: virt-manager-0.10.1/virtinst/devicedisk.py
===================================================================
--- virt-manager-0.10.0.orig/virtinst/VirtualDisk.py
+++ virt-manager-0.10.0/virtinst/VirtualDisk.py
@@ -306,10 +306,11 @@ class VirtualDisk(VirtualDevice):
--- virt-manager-0.10.1.orig/virtinst/devicedisk.py
+++ virt-manager-0.10.1/virtinst/devicedisk.py
@@ -156,10 +156,11 @@ class VirtualDisk(VirtualDevice):
DRIVER_TAP_RAW = "aio"
DRIVER_TAP_QCOW = "qcow"
@ -15,81 +15,25 @@ Index: virt-manager-0.10.0/virtinst/VirtualDisk.py
CACHE_MODE_NONE = "none"
CACHE_MODE_WRITETHROUGH = "writethrough"
Index: virt-manager-0.10.0/virtinst/ImageParser.py
Index: virt-manager-0.10.1/virtinst/virtimage.py
===================================================================
--- virt-manager-0.10.0.orig/virtinst/ImageParser.py
+++ virt-manager-0.10.0/virtinst/ImageParser.py
@@ -208,6 +208,7 @@ class Disk:
FORMAT_ISO = "iso"
FORMAT_QCOW = "qcow"
--- virt-manager-0.10.1.orig/virtinst/virtimage.py
+++ virt-manager-0.10.1/virtinst/virtimage.py
@@ -209,6 +209,7 @@ class Disk(object):
FORMAT_QCOW2 = "qcow2"
+ FORMAT_QED = "qed"
FORMAT_VMDK = "vmdk"
FORMAT_VDI = "vdi"
+ FORMAT_QED = "qed"
@@ -239,6 +240,7 @@ class Disk:
formats = [Disk.FORMAT_RAW,
Disk.FORMAT_QCOW,
USE_SYSTEM = "system"
USE_USER = "user"
@@ -240,7 +241,8 @@ class Disk(object):
Disk.FORMAT_QCOW2,
+ Disk.FORMAT_QED,
Disk.FORMAT_VMDK,
Disk.FORMAT_ISO,
Disk.FORMAT_VDI]
Index: virt-manager-0.10.0/virtconv/diskcfg.py
===================================================================
--- virt-manager-0.10.0.orig/virtconv/diskcfg.py
+++ virt-manager-0.10.0/virtconv/diskcfg.py
@@ -36,6 +36,7 @@ DISK_FORMAT_QCOW = 4
DISK_FORMAT_QCOW2 = 5
DISK_FORMAT_COW = 6
DISK_FORMAT_VDI = 7
+DISK_FORMAT_QED = 8
DISK_TYPE_DISK = 0
DISK_TYPE_CDROM = 1
@@ -52,6 +53,7 @@ disk_suffixes = {
DISK_FORMAT_QCOW2: ".qcow2",
DISK_FORMAT_COW: ".cow",
DISK_FORMAT_VDI: ".vdi",
+ DISK_FORMAT_QED: ".qed",
}
qemu_formats = {
@@ -62,6 +64,7 @@ qemu_formats = {
DISK_FORMAT_QCOW2: "qcow2",
DISK_FORMAT_COW: "cow",
DISK_FORMAT_VDI: "vdi",
+ DISK_FORMAT_QED: "qed",
}
disk_format_names = {
@@ -73,6 +76,7 @@ disk_format_names = {
"qcow2": DISK_FORMAT_QCOW2,
"cow": DISK_FORMAT_COW,
"vdi": DISK_FORMAT_VDI,
+ "qed": DISK_FORMAT_QED,
}
checksum_types = {
@@ -268,7 +272,8 @@ class disk(object):
out_format == DISK_FORMAT_VMDK or
out_format == DISK_FORMAT_QCOW or
out_format == DISK_FORMAT_QCOW2 or
- out_format == DISK_FORMAT_COW):
+ out_format == DISK_FORMAT_COW or
+ out_format == DISK_FORMAT_QED):
raise NotImplementedError(_("Cannot convert to disk format %s") %
output_format)
Index: virt-manager-0.10.0/virtconv/parsers/virtimage.py
===================================================================
--- virt-manager-0.10.0.orig/virtconv/parsers/virtimage.py
+++ virt-manager-0.10.0/virtconv/parsers/virtimage.py
@@ -250,6 +250,7 @@ class virtimage_parser(formats.parser):
ImageParser.Disk.FORMAT_QCOW: diskcfg.DISK_FORMAT_QCOW,
ImageParser.Disk.FORMAT_QCOW2: diskcfg.DISK_FORMAT_QCOW2,
ImageParser.Disk.FORMAT_VDI: diskcfg.DISK_FORMAT_VDI,
+ ImageParser.Disk.FORMAT_QED: diskcfg.DISK_FORMAT_QED,
}
fmt = None
- Disk.FORMAT_VDI]
+ Disk.FORMAT_VDI,
+ Disk.FORMAT_QED]
validate(formats.count(self.format) > 0,
_("The format for disk %s must be one of %s") %
(self.file, ",".join(formats)))

View File

@ -1,13 +1,13 @@
Index: virt-manager-0.10.0/virtinst/Storage.py
Index: virt-manager-1.0.0/virtinst/storage.py
===================================================================
--- virt-manager-0.10.0.orig/virtinst/Storage.py
+++ virt-manager-0.10.0/virtinst/Storage.py
@@ -539,7 +539,7 @@ class FilesystemPool(StoragePool):
get_volume_class = staticmethod(get_volume_class)
formats = ["auto", "ext2", "ext3", "ext4", "ufs", "iso9660", "udf",
- "gfs", "gfs2", "vfat", "hfs+", "xfs"]
+ "gfs", "gfs2", "vfat", "hfs+", "xfs", "ocfs2"]
# Register applicable property methods from parent class
perms = property(StorageObject.get_perms, StorageObject.set_perms)
--- virt-manager-1.0.0.orig/virtinst/storage.py
+++ virt-manager-1.0.0/virtinst/storage.py
@@ -403,7 +403,7 @@ class StoragePool(_StorageObject):
def list_formats(self):
if self.type == self.TYPE_FS:
return ["auto", "ext2", "ext3", "ext4", "ufs", "iso9660", "udf",
- "gfs", "gfs2", "vfat", "hfs+", "xfs"]
+ "gfs", "gfs2", "vfat", "hfs+", "xfs", "ocfs2"]
if self.type == self.TYPE_NETFS:
return ["auto", "nfs", "glusterfs"]
if self.type == self.TYPE_DISK:

View File

@ -1,182 +1,53 @@
Index: virt-manager-0.10.0/virtinst/osdict.py
Index: virt-manager-0.10.1/virtinst/osdict.py
===================================================================
--- virt-manager-0.10.0.orig/virtinst/osdict.py
+++ virt-manager-0.10.0/virtinst/osdict.py
@@ -408,33 +408,113 @@ OS_TYPES = {
},
--- virt-manager-0.10.1.orig/virtinst/osdict.py
+++ virt-manager-0.10.1/virtinst/osdict.py
@@ -259,11 +259,23 @@ _add_var("fedora18", "Fedora 18", suppor
_add_var("fedora19", "Fedora 19", virtiommio=True, parent="fedora18")
_add_var("fedora20", "Fedora 20 (or later)", parent="fedora19")
"opensuse11": {
- "label": "openSuse 11",
+ "label": "openSUSE 11",
"distro": "suse",
"supported": True,
+ "pv_cdrom_install": True,
"devices" : {
DISK : VIRTIO_DISK,
NET : VIRTIO_NET,
},
},
"opensuse12": {
- "label": "openSuse 12",
+ "label": "openSUSE 12",
+ "distro": "suse",
+ "supported": True,
+ "pv_cdrom_install": True,
+ "devices" : {
+ DISK : VIRTIO_DISK,
+ NET : VIRTIO_NET,
+ },
+ },
+ "opensuse13": {
+ "label": "openSUSE 13",
"distro": "suse",
"supported": True,
+ "pv_cdrom_install": True,
"devices" : {
DISK : VIRTIO_DISK,
NET : VIRTIO_NET,
},
},
+ "oes2l": {
+ "label": "Novell Open Enterprise Server 2",
+ "distro": "suse",
+ "supported": True,
+ "pv_cdrom_install": True,
+ },
+ "oes11": {
+ "label": "Novell Open Enterprise Server 11",
+ "distro": "suse",
+ "supported": True,
+ "pv_cdrom_install": True,
+ "devices" : {
+ DISK : VIRTIO_DISK,
+ NET : VIRTIO_NET,
+ },
+ },
-_add_var("opensuse11", "openSuse 11", urldistro="suse", supported=True, virtiodisk=True, virtionet=True, parent="linux")
-_add_var("opensuse12", "openSuse 12 (or later)", parent="opensuse11")
+_add_var("opensuse11", "openSUSE 11", urldistro="opensuse", supported=True, virtiodisk=True, virtionet=True, parent="linux")
+_add_var("opensuse12", "openSUSE 12", parent="opensuse11")
+_add_var("opensuse13", "openSUSE 13 (or later)", parent="opensuse12")
+
+ "sles9": {
+ "label": "Suse Linux Enterprise Server 9",
+ "distro": "suse",
+ "supported": True,
+ "pv_cdrom_install": False,
+ },
"sles10": {
- "label": "Suse Linux Enterprise Server",
+ "label": "Suse Linux Enterprise Server 10",
"distro": "suse",
"supported": True,
+ "pv_cdrom_install": True,
+ "devices" : {
+ DISK : VIRTIO_DISK,
+ },
},
"sles11": {
"label": "Suse Linux Enterprise Server 11",
"distro": "suse",
"supported": True,
+ "pv_cdrom_install": True,
+ "devices" : {
+ DISK : VIRTIO_DISK,
+ NET : VIRTIO_NET,
+ },
+ },
+ "sles12": {
+ "label": "Suse Linux Enterprise Server 12",
+ "distro": "suse",
+ "supported": True,
+ "pv_cdrom_install": True,
+ "devices" : {
+ DISK : VIRTIO_DISK,
+ NET : VIRTIO_NET,
+ },
+ },
+_add_var("sles", "Suse Linux Enterprise Server", urldistro="suse", supported=True, parent="linux")
+_add_var("sles10", "Suse Linux Enterprise Server 10", supported=True, virtiodisk=True, virtionet=True, parent="sles")
+_add_var("sles11", "Suse Linux Enterprise Server 11", supported=True, virtiodisk=True, virtionet=True, parent="sles10")
+_add_var("sles12", "Suse Linux Enterprise Server 12 (or later)", supported=True, virtiodisk=True, virtionet=True, parent="sles11")
+
+ "sled10": {
+ "label": "Suse Linux Enterprise Desktop 10",
+ "distro": "suse",
+ "supported": True,
+ "pv_cdrom_install": True,
+ "devices" : {
+ DISK : VIRTIO_DISK,
+ },
+ },
+ "sled11": {
+ "label": "Suse Linux Enterprise Desktop 11",
+ "distro": "suse",
+ "supported": True,
+ "pv_cdrom_install": True,
+ "devices" : {
+ DISK : VIRTIO_DISK,
+ NET : VIRTIO_NET,
+ },
+ },
+ "sled12": {
+ "label": "Suse Linux Enterprise Desktop 12",
+ "distro": "suse",
+ "supported": True,
+ "pv_cdrom_install": True,
"devices" : {
DISK : VIRTIO_DISK,
NET : VIRTIO_NET,
@@ -619,6 +699,12 @@ OS_TYPES = {
VIDEO : VMVGA_VIDEO,
},
},
+ "win8": {
+ "label": "Microsoft Windows 8",
+ "supported": True,
+ "sortby": "mswin8",
+ "distro": "win",
+ },
+_add_var("sled10", "Suse Linux Enterprise Desktop 10", supported=True, virtiodisk=True, virtionet=True, parent="sles10")
+_add_var("sled11", "Suse Linux Enterprise Desktop 11", supported=True, virtiodisk=True, virtionet=True, parent="sles11")
+_add_var("sled12", "Suse Linux Enterprise Desktop 12 (or later)", supported=True, virtiodisk=True, virtionet=True, parent="sles12")
"generic24": {
"label": "Generic 2.4.x kernel"
@@ -682,6 +768,12 @@ OS_TYPES = {
"sortby": "mswinserv2008",
"distro": "winserv",
},
+ "win2k12": {
+ "label": "Microsoft Windows Server 2012",
+ "supported": True,
+ "sortby": "mswinserv2012",
+ "distro": "winserv",
+ },
"vista": {
"label": "Microsoft Windows Vista",
"supported": True,
@@ -694,6 +786,12 @@ OS_TYPES = {
"sortby": "mswin7",
"distro": "win",
},
+ "win8": {
+ "label": "Microsoft Windows 8",
+ "supported": True,
+ "sortby": "mswin8",
+ "distro": "win",
+ },
},
},
@@ -770,6 +868,13 @@ OS_TYPES = {
"apic": False,
},
+ "rear": {
+ "label": "Relax and Recover",
+ "distro": "suse",
+ "supported": True,
+ "pv_cdrom_install": True,
+ },
-_add_var("sles10", "Suse Linux Enterprise Server", urldistro="suse", supported=True, parent="linux")
-_add_var("sles11", "Suse Linux Enterprise Server 11 (or later)", supported=True, virtiodisk=True, virtionet=True, parent="sles10")
+_add_var("oes2l", "Novell Open Enterprise Server 2", supported=True, virtiodisk=True, virtionet=True, parent="sles10")
+_add_var("oes11", "Novell Open Enterprise Server 11 (or later)", supported=True, virtiodisk=True, virtionet=True, parent="sles11")
+
"netware4": {
"label": "Novell Netware 4",
},
@@ -778,6 +883,7 @@ OS_TYPES = {
},
"netware6": {
"label": "Novell Netware 6",
+ "supported": True,
"pv_cdrom_install": True,
},
+_add_var("rear", "Relax and Recover", supported=True, virtiodisk=True, virtionet=True, parent="sles11")
_add_var("mandriva2009", "Mandriva Linux 2009 and earlier", urldistro="mandriva", parent="linux")
_add_var("mandriva2010", "Mandriva Linux 2010 (or later)", virtiodisk=True, virtionet=True, parent="mandriva2009")
@@ -304,9 +316,11 @@ _add_var("win2k", "Microsoft Windows 200
_add_var("winxp", "Microsoft Windows XP", sortby="mswin5", supported=True, xen_disable_acpi=True, parent="windows")
_add_var("winxp64", "Microsoft Windows XP (x86_64)", supported=True, sortby="mswin564", parent="windows")
_add_var("win2k3", "Microsoft Windows Server 2003", supported=True, sortby="mswinserv2003", parent="windows")
-_add_var("win2k8", "Microsoft Windows Server 2008 (or later)", supported=True, sortby="mswinserv2008", parent="windows")
+_add_var("win2k8", "Microsoft Windows Server 2008", supported=True, sortby="mswinserv2008", parent="windows")
+_add_var("win2k12", "Microsoft Windows Server 2012 (or later)", supported=True, sortby="mswinserv2012", parent="windows")
_add_var("vista", "Microsoft Windows Vista", supported=True, sortby="mswin6", parent="windows")
-_add_var("win7", "Microsoft Windows 7 (or later)", supported=True, sortby="mswin7", parent="windows")
+_add_var("win7", "Microsoft Windows 7", supported=True, sortby="mswin7", parent="windows")
+_add_var("win8", "Microsoft Windows 8 (or later)", supported=True, sortby="mswin8", parent="windows")
_add_type("solaris", "Solaris", clock="localtime")
@@ -333,5 +347,5 @@ _add_type("other", "Other")
_add_var("msdos", "MS-DOS", acpi=False, apic=False, parent="other")
_add_var("netware4", "Novell Netware 4", parent="other")
_add_var("netware5", "Novell Netware 5", parent="other")
-_add_var("netware6", "Novell Netware 6 (or later)", parent="other")
+_add_var("netware6", "Novell Netware 6 (or later)", supported=True, parent="other")
_add_var("generic", "Generic", supported=True, parent="other")

View File

@ -1,18 +1,28 @@
Reference: bnc#813082
Index: virt-manager-0.10.0/virtinst/VirtualDisk.py
Index: virt-manager-0.10.1/virtinst/devicedisk.py
===================================================================
--- virt-manager-0.10.0.orig/virtinst/VirtualDisk.py
+++ virt-manager-0.10.0/virtinst/VirtualDisk.py
@@ -1177,6 +1177,11 @@ class VirtualDisk(VirtualDevice):
if drvname == self.DRIVER_QEMU:
drvtype = _qemu_sanitize_drvtype(self.type, self.format,
manual_format=True)
--- virt-manager-0.10.1.orig/virtinst/devicedisk.py
+++ virt-manager-0.10.1/virtinst/devicedisk.py
@@ -555,6 +555,12 @@ class VirtualDisk(VirtualDevice):
return None
if self.conn.is_qemu():
return self.DRIVER_QEMU
+ else:
+ drvtypes = ['qcow2', 'vmdk']
+ if self.type in drvtypes:
+ return 'tap'
+ else:
+ drvtype = self.format
+ drvtypes = ['qcow2', 'vmdk']
+ if drvtype in drvtypes and drvname is None:
+ drvname = 'tap'
+ return self.DRIVER_QEMU
return None
elif self.vol_object:
fmt = util.get_xml_path(self.vol_object.XMLDesc(0),
def _get_default_driver_type(self):
@@ -568,6 +574,8 @@ class VirtualDisk(VirtualDevice):
http://lists.gnu.org/archive/html/qemu-devel/2008-04/msg00675.html
"""
if self.driver_name != self.DRIVER_QEMU:
+ if self.type != 'file':
+ return self.type
return None
if self._storage_creator:

View File

@ -1,24 +1,37 @@
Index: virt-manager-0.10.0/virtManager/create.py
Index: virt-manager-1.0.0/virtManager/create.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/create.py
+++ virt-manager-0.10.0/virtManager/create.py
@@ -666,11 +666,18 @@ class vmmCreate(vmmGObjectUI):
default = len(model)
--- virt-manager-1.0.0.orig/virtManager/create.py
+++ virt-manager-1.0.0/virtManager/create.py
@@ -419,8 +419,8 @@ class vmmCreate(vmmGObjectUI):
if gtype == "xen":
+ pv_cdrom = False
+ if self.guest and self.guest._lookup_osdict_key('pv_cdrom_install'):
+ pv_cdrom = True
method_tree.set_sensitive((is_local or can_remote_url) and
installable_arch)
- method_local.set_sensitive(not is_pv and can_storage and
- installable_arch)
+ # Allow PV ISO/CDROM install for SLES
+ method_local.set_sensitive(can_storage and installable_arch)
method_pxe.set_sensitive(not is_pv and installable_arch)
method_import.set_sensitive(can_storage)
virt_methods = [method_local, method_tree, method_pxe, method_import]
@@ -637,6 +637,21 @@ class vmmCreate(vmmGObjectUI):
self.capsdomain.hypervisor_type == domtype):
default = len(model)
+ if gtype == "xen":
+ pv_cdrom = False
+ if self.guest and self.guest._lookup_osdict_key('pv_cdrom_install', False):
+ pv_cdrom = True
+
if (instmethod == INSTALL_PAGE_PXE or
- instmethod == INSTALL_PAGE_ISO):
+ instmethod == INSTALL_PAGE_ISO and
+ pv_cdrom == False):
sensitive = False
tooltip = _("Only URL or import installs are supported "
"for paravirt.")
+ else:
+ default = 0
model.append([label, gtype, domtype, sensitive])
+ instmethod = self.get_config_install_page()
+ if (instmethod == INSTALL_PAGE_PXE or
+ instmethod == INSTALL_PAGE_ISO and
+ pv_cdrom == False):
+ sensitive = False
+ tooltip = _("Only URL or import installs are supported "
+ "for paravirt.")
+ else:
+ default = 0
+
model.append([label, gtype])
show = bool(guests)

View File

@ -1,8 +1,8 @@
Index: virt-manager-0.10.0/virtManager/details.py
Index: virt-manager-0.10.1/virtManager/details.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/details.py
+++ virt-manager-0.10.0/virtManager/details.py
@@ -2215,12 +2215,10 @@ class vmmDetails(vmmGObjectUI):
--- virt-manager-0.10.1.orig/virtManager/details.py
+++ virt-manager-0.10.1/virtManager/details.py
@@ -2009,12 +2009,10 @@ class vmmDetails(vmmGObjectUI):
return self._change_config_helper(df, da, hf, ha)
@ -11,15 +11,15 @@ Index: virt-manager-0.10.0/virtManager/details.py
- df, da, add_define, hf, ha, add_hotplug = self.make_apply_data()
- ignore = add_hotplug
-
- if self.editted(EDIT_AUTOSTART):
- if self.edited(EDIT_AUTOSTART):
+ # Autostart - See bnc#624250 - L3: virt-manager doesn't update
+ # "Autostart" setting in vm configuration correctly
+ def update_on_xend_start(self):
+ if self.editted(EDIT_AUTOSTART) or self.vm.conn.is_xen():
+ if self.edited(EDIT_AUTOSTART) or self.vm.conn.is_xen():
auto = self.widget("config-autostart")
try:
self.vm.set_autostart(auto.get_active())
@@ -2229,6 +2227,11 @@ class vmmDetails(vmmGObjectUI):
@@ -2023,6 +2021,11 @@ class vmmDetails(vmmGObjectUI):
(_("Error changing autostart value: %s") % str(e)))
return False
@ -28,10 +28,10 @@ Index: virt-manager-0.10.0/virtManager/details.py
+ df, da, add_define, hf, ha, add_hotplug = self.make_apply_data()
+ ignore = add_hotplug
+
if self.editted(EDIT_BOOTORDER):
bootdevs = self.get_config_boot_devs()
add_define(self.vm.set_boot_device, bootdevs)
@@ -2597,6 +2600,8 @@ class vmmDetails(vmmGObjectUI):
if self.edited(EDIT_BOOTORDER):
bootdevs = self.get_config_boot_order()
add_define(self.vm.set_boot_order, bootdevs)
@@ -2377,6 +2380,8 @@ class vmmDetails(vmmGObjectUI):
buttons=Gtk.ButtonsType.OK,
dialog_type=dtype)

View File

@ -1,8 +1,8 @@
Index: virt-manager-0.10.0/virtManager/create.py
Index: virt-manager-1.0.0/virtManager/create.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/create.py
+++ virt-manager-0.10.0/virtManager/create.py
@@ -1237,12 +1237,35 @@ class vmmCreate(vmmGObjectUI):
--- virt-manager-1.0.0.orig/virtManager/create.py
+++ virt-manager-1.0.0/virtManager/create.py
@@ -1228,11 +1228,34 @@ class vmmCreate(vmmGObjectUI):
variant = self.widget("install-os-version")
variant.set_active(0)
@ -28,17 +28,16 @@ Index: virt-manager-0.10.0/virtManager/create.py
+ label.show()
+
def change_os_version(self, box):
model = box.get_model()
idx = box.get_active()
if idx == -1:
show_all = uiutil.get_list_selection(box, 3)
if not show_all:
return
+ self._update_kickstart_label()
+
# Get previous
os_type_list = self.widget("install-os-type")
os_type_model = os_type_list.get_model()
@@ -1633,7 +1656,10 @@ class vmmCreate(vmmGObjectUI):
type_row = self._selected_os_row()
if not type_row:
@@ -1586,7 +1609,10 @@ class vmmCreate(vmmGObjectUI):
if extra:
extraargs += extra
if ks:
@ -50,19 +49,19 @@ Index: virt-manager-0.10.0/virtManager/create.py
if extraargs:
self.guest.installer.extraargs = extraargs
@@ -2091,6 +2117,7 @@ class vmmCreate(vmmGObjectUI):
dl = self.set_os_val(self.widget("install-os-type"), distro)
vl = self.set_os_val(self.widget("install-os-version"), ver)
@@ -1979,6 +2005,7 @@ class vmmCreate(vmmGObjectUI):
dl = self.set_os_val(self.widget("install-os-type"), distro_type)
vl = self.set_os_val(self.widget("install-os-version"), distro_var)
self.set_distro_labels(dl, vl)
+ self._update_kickstart_label()
def check_detection(self, idx, forward):
results = None
Index: virt-manager-0.10.0/ui/vmm-create.ui
Index: virt-manager-1.0.0/ui/create.ui
===================================================================
--- virt-manager-0.10.0.orig/ui/vmm-create.ui
+++ virt-manager-0.10.0/ui/vmm-create.ui
@@ -825,7 +825,7 @@
--- virt-manager-1.0.0.orig/ui/create.ui
+++ virt-manager-1.0.0/ui/create.ui
@@ -869,7 +869,7 @@ bar</property>
<property name="column_spacing">6</property>
<property name="row_spacing">4</property>
<child>

View File

@ -1,13 +1,13 @@
Index: virt-manager-0.10.0/virtManager/addhardware.py
Index: virt-manager-0.10.1/virtManager/addhardware.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/addhardware.py
+++ virt-manager-0.10.0/virtManager/addhardware.py
@@ -546,6 +546,8 @@ class vmmAddHardware(vmmGObjectUI):
add_dev("virtio-scsi", virtinst.VirtualDisk.DEVICE_LUN,
_("Virtio SCSI lun"))
if self.conn.is_xen() or self.conn.is_test_conn():
+ add_dev("xen", virtinst.VirtualDisk.DEVICE_CDROM,
+ _("Xen Virtual disk (read only)"))
add_dev("xen", virtinst.VirtualDisk.DEVICE_DISK,
_("Xen virtual disk"))
--- virt-manager-0.10.1.orig/virtManager/addhardware.py
+++ virt-manager-0.10.1/virtManager/addhardware.py
@@ -778,7 +778,7 @@ class vmmAddHardware(vmmGObjectUI):
disk_buses = ["ide", "sata", "scsi", "sd",
"usb", "virtio", "virtio-scsi", "xen"]
floppy_buses = ["fdc"]
- cdrom_buses = ["ide", "scsi"]
+ cdrom_buses = ["ide", "scsi", "xen"]
lun_buses = ["virtio-scsi"]
if bus in disk_buses:

View File

@ -1,17 +1,17 @@
Index: virt-manager-0.10.0/virtManager/create.py
Index: virt-manager-0.10.1/virtManager/create.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/create.py
+++ virt-manager-0.10.0/virtManager/create.py
@@ -20,6 +20,8 @@
import threading
--- virt-manager-0.10.1.orig/virtManager/create.py
+++ virt-manager-0.10.1/virtManager/create.py
@@ -21,6 +21,8 @@
import logging
import threading
import time
+import sys
+import os
# pylint: disable=E0611
from gi.repository import GObject
@@ -1143,6 +1145,51 @@ class vmmCreate(vmmGObjectUI):
@@ -1130,6 +1132,51 @@ class vmmCreate(vmmGObjectUI):
return
self.start_detection(forward=forward)
@ -63,11 +63,12 @@ Index: virt-manager-0.10.0/virtManager/create.py
def toggle_detect_os(self, src):
dodetect = src.get_active()
@@ -1158,6 +1205,7 @@ class vmmCreate(vmmGObjectUI):
self.widget("install-os-version-label").hide()
self.widget("install-os-type").show()
self.widget("install-os-version").show()
@@ -1141,6 +1188,8 @@ class vmmCreate(vmmGObjectUI):
if dodetect:
self.mediaDetected = False
self.detect_media_os()
+ else:
+ self.detect_host_os()
def _selected_os_row(self):
box = self.widget("install-os-type")
return uiutil.get_list_selection(self.widget("install-os-type"))

View File

@ -0,0 +1,17 @@
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
@@ -855,7 +855,12 @@ class vmmCreate(vmmGObjectUI):
# If none specified, prefer HVM. This way, the default install
# options won't be limited because we default to PV. If hvm not
# supported, differ to guest_lookup
+ # If xen connection, favor PV installation
+ conn_is_xen = self.conn.is_xen()
for g in self.caps.guests:
+ if conn_is_xen and g.os_type == "xen":
+ gtype = "xen"
+ break
if g.os_type == "hvm":
gtype = "hvm"
break

View File

@ -16,7 +16,7 @@ Index: virt-manager-0.10.0/data/virt-manager.desktop.in
Terminal=false
-Categories=System;
+Encoding=UTF-8
+Categories=Qt;X-SuSE-YaST;
+Categories=Qt;X-SuSE-YaST;X-SuSE-YaST-Virtualization;
+X-KDE-ModuleType=Library
+X-KDE-RootOnly=true
+X-KDE-HasReadOnlyMode=false

View File

@ -1,11 +1,11 @@
Index: virt-manager-0.10.0/virtManager/addhardware.py
Index: virt-manager-0.10.1/virtManager/addhardware.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/addhardware.py
+++ virt-manager-0.10.0/virtManager/addhardware.py
@@ -1162,6 +1162,19 @@ class vmmAddHardware(vmmGObjectUI):
--- virt-manager-0.10.1.orig/virtManager/addhardware.py
+++ virt-manager-0.10.1/virtManager/addhardware.py
@@ -1287,6 +1287,18 @@ class vmmAddHardware(vmmGObjectUI):
if controller is not None:
logging.debug("Adding controller:\n%s",
self._dev.vmm_controller.get_xml_config())
controller.get_xml_config())
+
+ # If vm is active, Try to hotplug the device and modify persistent
+ # config in one go
@ -18,15 +18,14 @@ Index: virt-manager-0.10.0/virtManager/addhardware.py
+ "config at the same time: %s" % str(e))
+ logging.debug("Trying the operations seperately ...")
+
+ # Try hotplug then modify persistent config
# Hotplug device
attach_err = False
try:
Index: virt-manager-0.10.0/virtManager/details.py
Index: virt-manager-0.10.1/virtManager/details.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/details.py
+++ virt-manager-0.10.0/virtManager/details.py
@@ -2483,6 +2483,17 @@ class vmmDetails(vmmGObjectUI):
--- virt-manager-0.10.1.orig/virtManager/details.py
+++ virt-manager-0.10.1/virtManager/details.py
@@ -2270,6 +2270,17 @@ class vmmDetails(vmmGObjectUI):
text1=(_("Are you sure you want to remove this device?"))):
return
@ -44,11 +43,11 @@ Index: virt-manager-0.10.0/virtManager/details.py
# Define the change
try:
self.vm.remove_device(dev_id_info)
Index: virt-manager-0.10.0/virtManager/domain.py
Index: virt-manager-0.10.1/virtManager/domain.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/domain.py
+++ virt-manager-0.10.0/virtManager/domain.py
@@ -840,6 +840,10 @@ class vmmDomain(vmmLibvirtObject):
--- virt-manager-0.10.1.orig/virtManager/domain.py
+++ virt-manager-0.10.1/virtManager/domain.py
@@ -897,6 +897,10 @@ class vmmDomain(vmmLibvirtObject):
devxml = devobj.get_xml_config()
self._backend.attachDevice(devxml)
@ -59,7 +58,7 @@ Index: virt-manager-0.10.0/virtManager/domain.py
def detach_device(self, devobj):
"""
Hotunplug device from running guest
@@ -858,6 +862,10 @@ class vmmDomain(vmmLibvirtObject):
@@ -915,6 +919,10 @@ class vmmDomain(vmmLibvirtObject):
xml = devobj.get_xml_config()
self._backend.updateDeviceFlags(xml, flags)

View File

@ -1,12 +1,12 @@
Index: virt-manager-0.10.0/virtManager/uihelpers.py
Index: virt-manager-0.10.1/virtManager/addhardware.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/uihelpers.py
+++ virt-manager-0.10.0/virtManager/uihelpers.py
@@ -332,6 +332,7 @@ def populate_netmodel_combo(vm, combo):
if vm.is_hvm():
mod_list = ["rtl8139", "ne2k_pci", "pcnet", "e1000"]
if vm.get_hv_type() in ["kvm", "qemu", "test"]:
+ mod_list.append("eepro100")
mod_list.append("virtio")
if (vm.get_hv_type() == "kvm" and
vm.get_machtype() == "pseries"):
--- virt-manager-0.10.1.orig/virtManager/addhardware.py
+++ virt-manager-0.10.1/virtManager/addhardware.py
@@ -553,6 +553,7 @@ class vmmAddHardware(vmmGObjectUI):
if vm.is_hvm():
mod_list = ["rtl8139", "ne2k_pci", "pcnet", "e1000"]
if vm.get_hv_type() in ["kvm", "qemu", "test"]:
+ mod_list.append("eepro100")
mod_list.append("virtio")
if (vm.get_hv_type() == "kvm" and
vm.get_machtype() == "pseries"):

View File

@ -1,21 +1,21 @@
Index: virt-manager-0.10.0/virtManager/uihelpers.py
Index: virt-manager-0.10.1/virtManager/console.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/uihelpers.py
+++ virt-manager-0.10.0/virtManager/uihelpers.py
@@ -1018,6 +1018,16 @@ def build_keycombo_menu(cb):
make_item("Ctrl+Alt+_Backspace", ["Control_L", "Alt_L", "BackSpace"])
make_item("Ctrl+Alt+_Delete", ["Control_L", "Alt_L", "Delete"])
menu.add(Gtk.SeparatorMenuItem())
+ make_item("Ctrl+Scroll+Scroll", ["Control_L", "Scroll" + "Scroll"])
+ make_item("Alt+F_10", ["Alt_L", "F10"])
+ make_item("Alt+Tab", ["Alt_L", "Tab"])
+ make_item("Alt+Escape", ["Alt_L", "Escape"])
+ make_item("Ctrl+Escape", ["Control_L", "Escape"])
+ make_item("Ctrl+Alt+Escape", ["Control_L", "Alt_L", "Escape"])
+ make_item("Alt+Shift+Shift+Escape", ["Alt_R", "Shift_R", "Shift_L", "Escape"])
+ make_item("F_8", ["F8"])
+ make_item("F_10", ["F10"])
+ menu.add(Gtk.SeparatorMenuItem())
--- virt-manager-0.10.1.orig/virtManager/console.py
+++ virt-manager-0.10.1/virtManager/console.py
@@ -922,6 +922,16 @@ class vmmConsolePages(vmmGObjectUI):
make_item("Ctrl+Alt+_Backspace", ["Control_L", "Alt_L", "BackSpace"])
make_item("Ctrl+Alt+_Delete", ["Control_L", "Alt_L", "Delete"])
menu.add(Gtk.SeparatorMenuItem())
+ make_item("Ctrl+Scroll+Scroll", ["Control_L", "Scroll" + "Scroll"])
+ make_item("Alt+F_10", ["Alt_L", "F10"])
+ make_item("Alt+Tab", ["Alt_L", "Tab"])
+ make_item("Alt+Escape", ["Alt_L", "Escape"])
+ make_item("Ctrl+Escape", ["Control_L", "Escape"])
+ make_item("Ctrl+Alt+Escape", ["Control_L", "Alt_L", "Escape"])
+ make_item("Alt+Shift+Shift+Escape", ["Alt_R", "Shift_R", "Shift_L", "Escape"])
+ make_item("F_8", ["F8"])
+ make_item("F_10", ["F10"])
+ menu.add(Gtk.SeparatorMenuItem())
for i in range(1, 13):
make_item("Ctrl+Alt+F_%d" % i, ["Control_L", "Alt_L", "F%d" % i])
for i in range(1, 13):
make_item("Ctrl+Alt+F_%d" % i, ["Control_L", "Alt_L", "F%d" % i])

View File

@ -1,12 +1,12 @@
Index: virt-manager-0.10.0/virtManager/engine.py
Index: virt-manager-0.10.1/virtManager/connect.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/engine.py
+++ virt-manager-0.10.0/virtManager/engine.py
@@ -63,6 +63,7 @@ def default_uri():
os.path.exists("/usr/bin/qemu") or
os.path.exists("/usr/bin/qemu-kvm") or
os.path.exists("/usr/bin/kvm") or
+ os.path.exists("/dev/kvm") or
os.path.exists("/usr/libexec/qemu-kvm")):
tryuri = "qemu:///system"
--- virt-manager-0.10.1.orig/virtManager/connect.py
+++ virt-manager-0.10.1/virtManager/connect.py
@@ -111,6 +111,7 @@ class vmmConnect(vmmGObjectUI):
if (os.path.exists("/usr/bin/qemu") or
os.path.exists("/usr/bin/qemu-kvm") or
os.path.exists("/usr/bin/kvm") or
+ os.path.exists("/dev/kvm") or
os.path.exists("/usr/libexec/qemu-kvm")):
if always_system or os.geteuid() == 0:
return "qemu:///system"

View File

@ -1,24 +1,23 @@
Index: virt-manager-0.10.0/virtManager/uihelpers.py
Index: virt-manager-0.10.1/virtManager/addhardware.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/uihelpers.py
+++ virt-manager-0.10.0/virtManager/uihelpers.py
@@ -426,13 +426,12 @@ def build_storage_format_combo(vm, combo
combo.set_model(dev_model)
combo.set_entry_text_column(0)
--- virt-manager-0.10.1.orig/virtManager/addhardware.py
+++ virt-manager-0.10.1/virtManager/addhardware.py
@@ -717,11 +717,14 @@ class vmmAddHardware(vmmGObjectUI):
combo.set_model(model)
uiutil.set_combo_text_column(combo, 0)
- formats = ["raw", "qcow2", "qed"]
- if vm.rhel6_defaults():
- formats.append("vmdk")
- formats.append("vdi")
-
- for m in formats:
- dev_model.append([m])
+ if vm.conn.is_xen():
+ for m in ["raw", "qcow2", "vmdk"]:
+ dev_model.append([m])
+ else:
+ for m in ["raw", "qcow2", "qed", "vmdk", "vdi"]:
+ dev_model.append([m])
combo.set_active(0)
- formats = ["raw", "qcow2", "qed"]
no_create_formats = []
- if not vm.stable_defaults():
- formats.append("vmdk")
- no_create_formats.append("vdi")
+ if vm.conn.is_xen():
+ formats = ["raw", "qcow2", "qed", "vmdk", "vdi"]
+ else:
+ formats = ["raw", "qcow2", "qed"]
+ if not vm.stable_defaults():
+ formats.append("vmdk")
+ no_create_formats.append("vdi")
for m in formats:
model.append([m])

View File

@ -2,11 +2,11 @@ Reverses upstream patch: serialcon: Don't open a console with name=None
Git: ce94126b707f157d88de113a8c591e628d55db63
bnc#780859
Index: virt-manager-0.10.0/virtManager/serialcon.py
Index: virt-manager-0.10.1/virtManager/serialcon.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/serialcon.py
+++ virt-manager-0.10.0/virtManager/serialcon.py
@@ -199,8 +199,9 @@ class LibvirtConsoleConnection(ConsoleCo
--- virt-manager-0.10.1.orig/virtManager/serialcon.py
+++ virt-manager-0.10.1/virtManager/serialcon.py
@@ -207,8 +207,9 @@ class LibvirtConsoleConnection(ConsoleCo
name = dev and dev.alias.name or None
logging.debug("Opening console stream for dev=%s alias=%s",
dev, name)
@ -16,5 +16,5 @@ Index: virt-manager-0.10.0/virtManager/serialcon.py
+ #if not name:
+ # raise RuntimeError(_("Cannot open a device with no alias name"))
self.stream = self.conn.vmm.newStream(libvirt.VIR_STREAM_NONBLOCK)
stream = self.conn.get_backend().newStream(libvirt.VIR_STREAM_NONBLOCK)
self.vm.open_console(name, stream)

View File

@ -6,25 +6,25 @@ From: Cole Robinson crobinso@redhat.com Mon Sep 26 11:05:55 2011 -0400
Date: Mon Sep 26 11:07:52 2011 -0400:
Git: 0a7640c593a54a6a3f558583d82f8b27c7a7d1d1
Index: virt-manager-0.10.0/virtManager/manager.py
Index: virt-manager-0.10.1/virtManager/manager.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/manager.py
+++ virt-manager-0.10.0/virtManager/manager.py
@@ -813,7 +813,7 @@ class vmmManager(vmmGObjectUI):
row.insert(ROW_STATUS, vm.run_status())
row.insert(ROW_STATUS_ICON, vm.run_status_icon_name())
row.insert(ROW_KEY, vm.get_uuid())
- row.insert(ROW_HINT, util.xml_escape(vm.get_description()))
+ row.insert(ROW_HINT, vm.get_description())
row.insert(ROW_IS_CONN, False)
row.insert(ROW_IS_CONN_CONNECTED, True)
row.insert(ROW_IS_VM, True)
@@ -965,7 +965,7 @@ class vmmManager(vmmGObjectUI):
--- virt-manager-0.10.1.orig/virtManager/manager.py
+++ virt-manager-0.10.1/virtManager/manager.py
@@ -676,7 +676,7 @@ class vmmManager(vmmGObjectUI):
row.insert(ROW_SORT_KEY, name)
row.insert(ROW_MARKUP, markup)
row.insert(ROW_STATUS_ICON, status_icon)
- row.insert(ROW_HINT, util.xml_escape(hint))
+ row.insert(ROW_HINT, hint)
row.insert(ROW_IS_CONN, bool(conn))
row.insert(ROW_IS_CONN_CONNECTED,
bool(conn) and conn.state != conn.STATE_DISCONNECTED)
@@ -789,7 +789,7 @@ class vmmManager(vmmGObjectUI):
desc = vm.get_description()
if not can_set_row_none:
if not uiutil.can_set_row_none:
desc = desc or ""
- row[ROW_HINT] = util.xml_escape(desc)
+ row[ROW_HINT] = desc
model.row_changed(row.path, row.iter)
except libvirt.libvirtError, e:
if util.exception_is_libvirt_error(e, "VIR_ERR_NO_DOMAIN"):
return

View File

@ -1,174 +0,0 @@
bnc#847641
Index: virt-manager-0.10.0/ui/vmm-migrate.ui
===================================================================
--- virt-manager-0.10.0.orig/ui/vmm-migrate.ui
+++ virt-manager-0.10.0/ui/vmm-migrate.ui
@@ -296,6 +296,53 @@
</packing>
</child>
<child>
+ <object class="GtkAlignment" id="alignment7">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">6</property>
+ <child>
+ <object class="GtkHBox" id="migrate-unsafe-box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label17">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Allow unsafe migration:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">migrate-unsafe</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="migrate-unsafe">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkHBox" id="migrate-maxdowntime-box">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -408,7 +455,7 @@
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
<child>
@@ -659,7 +706,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">2</property>
+ <property name="position">3</property>
</packing>
</child>
</object>
Index: virt-manager-0.10.0/virtManager/migrate.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/migrate.py
+++ virt-manager-0.10.0/virtManager/migrate.py
@@ -147,6 +147,7 @@ class vmmMigrateDialog(vmmGObjectUI):
self.widget("migrate-rate").set_value(0)
self.widget("migrate-secure").set_active(False)
+ self.widget("migrate-unsafe").set_active(False)
downtime_box = self.widget("migrate-maxdowntime-box")
support_downtime = self.vm.support_downtime()
@@ -174,6 +175,16 @@ class vmmMigrateDialog(vmmGObjectUI):
secure_box.set_sensitive(support_secure)
secure_box.set_tooltip_text(secure_tooltip)
+ unsafe_box = self.widget("migrate-unsafe-box")
+ support_unsafe = hasattr(libvirt, "VIR_MIGRATE_UNSAFE")
+ unsafe_tooltip = ""
+ if not support_unsafe:
+ unsafe_tooltip = _("Libvirt version does not support unsafe "
+ "migration.")
+
+ unsafe_box.set_sensitive(support_unsafe)
+ unsafe_box.set_tooltip_text(unsafe_tooltip)
+
self.rebuild_dest_rows()
def set_state(self, vm):
@@ -234,6 +245,9 @@ class vmmMigrateDialog(vmmGObjectUI):
def get_config_secure(self):
return self.widget("migrate-secure").get_active()
+ def get_config_unsafe(self):
+ return self.widget("migrate-unsafe").get_active()
+
def get_config_max_downtime_enabled(self):
return self.widget("migrate-max-downtime").get_sensitive()
@@ -456,6 +470,7 @@ class vmmMigrateDialog(vmmGObjectUI):
max_downtime = self.get_config_max_downtime()
live = not self.get_config_offline()
secure = self.get_config_secure()
+ unsafe = self.get_config_unsafe()
uri = self.build_migrate_uri(destconn, srcuri)
rate = self.get_config_rate()
if rate:
@@ -476,7 +491,7 @@ class vmmMigrateDialog(vmmGObjectUI):
progWin = vmmAsyncJob(self._async_migrate,
[self.vm, destconn, uri, rate, live, secure,
- max_downtime],
+ unsafe, max_downtime],
_("Migrating VM '%s'" % self.vm.get_name()),
(_("Migrating VM '%s' from %s to %s. "
"This may take a while.") %
@@ -528,7 +543,7 @@ class vmmMigrateDialog(vmmGObjectUI):
def _async_migrate(self, asyncjob,
origvm, origdconn, migrate_uri, rate, live,
- secure, max_downtime):
+ secure, unsafe, max_downtime):
meter = asyncjob.get_meter()
srcconn = util.dup_conn(origvm.conn)
@@ -548,6 +563,6 @@ class vmmMigrateDialog(vmmGObjectUI):
timer = self.timeout_add(100, self._async_set_max_downtime,
vm, max_downtime, current_thread)
- vm.migrate(dstconn, migrate_uri, rate, live, secure, meter=meter)
+ vm.migrate(dstconn, migrate_uri, rate, live, secure, unsafe, meter=meter)
if timer:
self.idle_add(GLib.source_remove, timer)
Index: virt-manager-0.10.0/virtManager/domain.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/domain.py
+++ virt-manager-0.10.0/virtManager/domain.py
@@ -1269,7 +1269,7 @@ class vmmDomain(vmmLibvirtObject):
self._backend.migrateSetMaxDowntime(max_downtime, flag)
def migrate(self, destconn, interface=None, rate=0,
- live=False, secure=False, meter=None):
+ live=False, secure=False, unsafe=False, meter=None):
self._install_abort = True
newname = None
@@ -1282,6 +1282,9 @@ class vmmDomain(vmmLibvirtObject):
flags |= libvirt.VIR_MIGRATE_PEER2PEER
flags |= libvirt.VIR_MIGRATE_TUNNELLED
+ if unsafe:
+ flags |= libvirt.VIR_MIGRATE_UNSAFE
+
logging.debug("Migrating: conn=%s flags=%s dname=%s uri=%s rate=%s",
destconn.vmm, flags, newname, interface, rate)

View File

@ -1,20 +1,20 @@
Index: virt-manager-0.10.0/virtManager/domain.py
Index: virt-manager-1.0.0/virtManager/domain.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/domain.py
+++ virt-manager-0.10.0/virtManager/domain.py
@@ -1722,7 +1722,14 @@ class vmmDomain(vmmLibvirtObject):
# Invalidate cached values
self._invalidate_xml()
--- virt-manager-1.0.0.orig/virtManager/domain.py
+++ virt-manager-1.0.0/virtManager/domain.py
@@ -1836,7 +1836,14 @@ class vmmDomain(vmmLibvirtObject):
- info = self._backend.info()
+ try:
+ info = self._backend.info()
+ except:
+ self._backend = self.conn.vmm.lookupByName(self.get_name())
+ info = self._backend.info()
+ if info[0] == libvirt.VIR_DOMAIN_NOSTATE:
+ self._backend = self.conn.vmm.lookupByName(self.get_name())
+ info = self._backend.info()
expected = self.config.get_stats_history_length()
current = len(self.record)
if current > expected:
info = []
if not self._using_events() or self._enable_cpu_stats:
- info = self._backend.info()
+ try:
+ info = self._backend.info()
+ except:
+ self._backend = self.conn.vmm.lookupByName(self.get_name())
+ info = self._backend.info()
+ if info[0] == libvirt.VIR_DOMAIN_NOSTATE:
+ self._backend = self.conn.vmm.lookupByName(self.get_name())
+ info = self._backend.info()
if stats_update:
self._tick_stats(info)

View File

@ -1,8 +1,8 @@
Index: virt-manager-0.10.0/ui/vmm-manager.ui
Index: virt-manager-0.10.1/ui/manager.ui
===================================================================
--- virt-manager-0.10.0.orig/ui/vmm-manager.ui
+++ virt-manager-0.10.0/ui/vmm-manager.ui
@@ -258,7 +258,7 @@
--- virt-manager-0.10.1.orig/ui/manager.ui
+++ virt-manager-0.10.1/ui/manager.ui
@@ -277,7 +277,7 @@
<property name="can_focus">False</property>
<property name="show_arrow">False</property>
<child>
@ -11,7 +11,7 @@ Index: virt-manager-0.10.0/ui/vmm-manager.ui
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="has_tooltip">True</property>
@@ -270,7 +270,6 @@
@@ -289,7 +289,6 @@
</object>
<packing>
<property name="expand">False</property>
@ -19,11 +19,11 @@ Index: virt-manager-0.10.0/ui/vmm-manager.ui
</packing>
</child>
<child>
Index: virt-manager-0.10.0/virtManager/manager.py
Index: virt-manager-0.10.1/virtManager/manager.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/manager.py
+++ virt-manager-0.10.0/virtManager/manager.py
@@ -85,6 +85,7 @@ class vmmManager(vmmGObjectUI):
--- virt-manager-0.10.1.orig/virtManager/manager.py
+++ virt-manager-0.10.1/virtManager/manager.py
@@ -95,6 +95,7 @@ class vmmManager(vmmGObjectUI):
"action-show-host": (GObject.SignalFlags.RUN_FIRST, None, [str]),
"action-show-preferences": (GObject.SignalFlags.RUN_FIRST, None, []),
"action-show-create": (GObject.SignalFlags.RUN_FIRST, None, [str]),
@ -31,17 +31,17 @@ Index: virt-manager-0.10.0/virtManager/manager.py
"action-suspend-domain": (GObject.SignalFlags.RUN_FIRST, None, [str, str]),
"action-resume-domain": (GObject.SignalFlags.RUN_FIRST, None, [str, str]),
"action-run-domain": (GObject.SignalFlags.RUN_FIRST, None, [str, str]),
@@ -281,7 +282,8 @@ class vmmManager(vmmGObjectUI):
self.config.is_vmlist_network_traffic_visible())
@@ -298,7 +299,8 @@ class vmmManager(vmmGObjectUI):
def init_toolbar(self):
- self.widget("vm-new").set_icon_name("vm_new")
+ uihelpers.build_new_button_menu(self.widget("vm-new"),
+ vmmenu.build_new_button_menu(self.widget("vm-new"),
+ self.vminstall_new_vm)
self.widget("vm-open").set_icon_name("icon_console")
uihelpers.build_shutdown_button_menu(self.widget("vm-shutdown"),
self.poweroff_vm,
@@ -548,6 +550,9 @@ class vmmManager(vmmGObjectUI):
menu = vmmenu.VMShutdownMenu(self, self.current_vm)
@@ -489,6 +491,9 @@ class vmmManager(vmmGObjectUI):
def new_vm(self, src_ignore=None):
self.emit("action-show-create", self.current_conn_uri())
@ -51,11 +51,15 @@ Index: virt-manager-0.10.0/virtManager/manager.py
def show_about(self, src_ignore):
self.emit("action-show-about")
Index: virt-manager-0.10.0/virtManager/uihelpers.py
Index: virt-manager-0.10.1/virtManager/vmmenu.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/uihelpers.py
+++ virt-manager-0.10.0/virtManager/uihelpers.py
@@ -877,6 +877,24 @@ def mediadev_set_default_selection(widge
--- virt-manager-0.10.1.orig/virtManager/vmmenu.py
+++ virt-manager-0.10.1/virtManager/vmmenu.py
@@ -21,9 +21,28 @@
# pylint: disable=E0611
from gi.repository import Gtk
# pylint: enable=E0611
+from virtManager import config
####################################################################
@ -63,7 +67,7 @@ Index: virt-manager-0.10.0/virtManager/uihelpers.py
+####################################################################
+
+def build_new_button_menu(widget, vminstall_cb):
+ icon_name = util.running_config.get_new_icon_name()
+ icon_name = config.running_config.get_new_icon_name()
+ widget.set_icon_name(icon_name)
+ menu = Gtk.Menu()
+ widget.set_menu(menu)
@ -80,11 +84,11 @@ Index: virt-manager-0.10.0/virtManager/uihelpers.py
# Build toolbar shutdown button menu (manager and details toolbar) #
####################################################################
Index: virt-manager-0.10.0/virtManager/config.py
Index: virt-manager-0.10.1/virtManager/config.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/config.py
+++ virt-manager-0.10.0/virtManager/config.py
@@ -192,6 +192,13 @@ class vmmConfig(object):
--- virt-manager-0.10.1.orig/virtManager/config.py
+++ virt-manager-0.10.1/virtManager/config.py
@@ -191,6 +191,13 @@ class vmmConfig(object):
# General app wide helpers (gconf agnostic)
@ -98,20 +102,20 @@ Index: virt-manager-0.10.0/virtManager/config.py
def get_appname(self):
return self.appname
def get_appversion(self):
Index: virt-manager-0.10.0/virtManager/engine.py
Index: virt-manager-0.10.1/virtManager/engine.py
===================================================================
--- virt-manager-0.10.0.orig/virtManager/engine.py
+++ virt-manager-0.10.0/virtManager/engine.py
@@ -27,6 +27,8 @@ from gi.repository import Gtk
import logging
--- virt-manager-0.10.1.orig/virtManager/engine.py
+++ virt-manager-0.10.1/virtManager/engine.py
@@ -28,6 +28,8 @@ import logging
import re
import Queue
import threading
import os
+import traceback
+from subprocess import *
import libvirt
import virtinst
@@ -89,6 +91,7 @@ class vmmEngine(vmmGObject):
from virtinst import util
@@ -76,6 +78,7 @@ class vmmEngine(vmmGObject):
self.windowCreate = None
self.windowManager = None
self.windowMigrate = None
@ -119,15 +123,15 @@ Index: virt-manager-0.10.0/virtManager/engine.py
self.conns = {}
self.err = vmmErrorDialog()
@@ -663,6 +666,7 @@ class vmmEngine(vmmGObject):
obj.connect("action-show-vm", self._do_show_vm)
@@ -832,6 +835,7 @@ class vmmEngine(vmmGObject):
obj.connect("action-show-domain", self._do_show_vm)
obj.connect("action-show-preferences", self._do_show_preferences)
obj.connect("action-show-create", self._do_show_create)
+ obj.connect("action-show-create-vminstall", self._do_show_create_vminstall)
obj.connect("action-show-about", self._do_show_about)
obj.connect("action-show-host", self._do_show_host)
obj.connect("action-show-connect", self._do_show_connect)
@@ -703,11 +707,41 @@ class vmmEngine(vmmGObject):
@@ -872,11 +876,42 @@ class vmmEngine(vmmGObject):
self.windowCreate = obj
return self.windowCreate
@ -151,6 +155,7 @@ Index: virt-manager-0.10.0/virtManager/engine.py
+ try:
+ if do_remote or not use_vminstall:
+ self._get_create_dialog().show(src.topwin, uri)
+ self.remote_install = True
+ else:
+ args = ['/usr/bin/vm-install']
+ logging.debug("Launching: %s" % str(args))