- Update to release 0.8.1
- VM Migration wizard, exposing various migration options - Enumerate CDROM and bridge devices on remote connections - Support storage pool source enumeration for LVM, NFS, and SCSI
This commit is contained in:
parent
3b71f3d7ab
commit
2a9a33433c
@ -1 +1 @@
|
|||||||
virt-manager-0.8.0.tar.gz
|
virt-manager-0.8.1.tar.gz
|
||||||
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
0b6cb9144e3933f2c9af07e2d409842d virt-manager-0.8.0.tar.gz
|
6e461e91d679dc87d9fc506f34832d90 virt-manager-0.8.1.tar.gz
|
||||||
|
BIN
state_paused.png
BIN
state_paused.png
Binary file not shown.
Before Width: | Height: | Size: 921 B |
Binary file not shown.
Before Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
Before Width: | Height: | Size: 828 B |
@ -1,44 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Paul W. Frields <stickster@gmail.com>
|
|
||||||
# Date 1251729959 14400
|
|
||||||
# Node ID d34def55dbd78e2ad5f099d6a38c1f358c798555
|
|
||||||
# Parent b70858b9f8c6f9fea21f6e66a10e7b9498f11e5e
|
|
||||||
addhardware: Fix error message syntax typo
|
|
||||||
|
|
||||||
diff -r b70858b9f8c6 -r d34def55dbd7 AUTHORS
|
|
||||||
--- a/AUTHORS Mon Aug 31 10:19:49 2009 -0400
|
|
||||||
+++ b/AUTHORS Mon Aug 31 10:45:59 2009 -0400
|
|
||||||
@@ -59,6 +59,7 @@
|
|
||||||
Emmanuel Lacour <elacour-at-home-dn-dot-net>
|
|
||||||
Laurent Léonard <laurent-at-open-minds-dot-org>
|
|
||||||
Michal Novotny <minovotn-at-redhat-dot-com>
|
|
||||||
+ Paul W. Frields <stickster-at-gmail-dot-com>
|
|
||||||
|
|
||||||
<...send a patch & get your name here...>
|
|
||||||
|
|
||||||
diff -r b70858b9f8c6 -r d34def55dbd7 src/virtManager/addhardware.py
|
|
||||||
--- a/src/virtManager/addhardware.py Mon Aug 31 10:19:49 2009 -0400
|
|
||||||
+++ b/src/virtManager/addhardware.py Mon Aug 31 10:45:59 2009 -0400
|
|
||||||
@@ -1186,8 +1186,8 @@
|
|
||||||
conn = self.vm.get_connection().vmm,
|
|
||||||
name = nodedev_name)
|
|
||||||
except Exception, e:
|
|
||||||
- return self.err.val_err(_("Host device parameter error",
|
|
||||||
- str(e)))
|
|
||||||
+ return self.err.val_err(_("Host device parameter error"),
|
|
||||||
+ str(e))
|
|
||||||
|
|
||||||
elif page_num == PAGE_CHAR:
|
|
||||||
chartype = self.get_char_type()
|
|
||||||
diff -r b70858b9f8c6 -r d34def55dbd7 src/vmm-manager.glade
|
|
||||||
--- a/src/vmm-manager.glade Mon Aug 31 10:19:49 2009 -0400
|
|
||||||
+++ b/src/vmm-manager.glade Mon Aug 31 10:45:59 2009 -0400
|
|
||||||
@@ -118,7 +118,7 @@
|
|
||||||
<child>
|
|
||||||
<widget class="GtkImageMenuItem" id="menu_edit_delete">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
- <property name="label" translatable="yes">Delete Virtual Machine</property>
|
|
||||||
+ <property name="label" translatable="yes">Delete</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
<signal name="activate" handler="on_menu_edit_delete_activate"/>
|
|
||||||
<child internal-child="image">
|
|
@ -1,70 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1251727555 14400
|
|
||||||
# Node ID c0de24094ca26b8da900d29746adba056f4114f7
|
|
||||||
# Parent 37a986ce54ceac389573d763c78f633a10ec1ab7
|
|
||||||
Don't mangle QEMU driver name on cdrom connect (bz 516116)
|
|
||||||
|
|
||||||
diff -r 37a986ce54ce -r c0de24094ca2 src/virtManager/domain.py
|
|
||||||
--- a/src/virtManager/domain.py Thu Aug 27 11:07:35 2009 -0400
|
|
||||||
+++ b/src/virtManager/domain.py Mon Aug 31 10:05:55 2009 -0400
|
|
||||||
@@ -1291,19 +1291,28 @@
|
|
||||||
xml = self.get_device_xml("disk", dev_id_info)
|
|
||||||
|
|
||||||
def cdrom_xml_connect(doc, ctx):
|
|
||||||
- disk_fragment = ctx.xpathEval("/disk")
|
|
||||||
+ disk_fragment = ctx.xpathEval("/disk")[0]
|
|
||||||
driver_fragment = ctx.xpathEval("/disk/driver")
|
|
||||||
- disk_fragment[0].setProp("type", _type)
|
|
||||||
- elem = disk_fragment[0].newChild(None, "source", None)
|
|
||||||
+ disk_fragment.setProp("type", _type)
|
|
||||||
+ elem = disk_fragment.newChild(None, "source", None)
|
|
||||||
+
|
|
||||||
if _type == "file":
|
|
||||||
elem.setProp("file", source)
|
|
||||||
- if driver_fragment:
|
|
||||||
- driver_fragment[0].setProp("name", _type)
|
|
||||||
+ driver_name = _type
|
|
||||||
else:
|
|
||||||
elem.setProp("dev", source)
|
|
||||||
- if driver_fragment:
|
|
||||||
- driver_fragment[0].setProp("name", "phy")
|
|
||||||
- return disk_fragment[0].serialize()
|
|
||||||
+ driver_name = "phy"
|
|
||||||
+
|
|
||||||
+ if driver_fragment:
|
|
||||||
+ driver_fragment = driver_fragment[0]
|
|
||||||
+ orig_name = driver_fragment.prop("name")
|
|
||||||
+
|
|
||||||
+ # For Xen, the driver name is dependent on the storage type
|
|
||||||
+ # (file or phys).
|
|
||||||
+ if orig_name and orig_name in [ "file", "phy" ]:
|
|
||||||
+ driver_fragment.setProp("name", driver_name)
|
|
||||||
+
|
|
||||||
+ return disk_fragment.serialize()
|
|
||||||
|
|
||||||
result = util.xml_parse_wrapper(xml, cdrom_xml_connect)
|
|
||||||
logging.debug("connect_cdrom produced: %s" % result)
|
|
||||||
@@ -1313,17 +1322,19 @@
|
|
||||||
xml = self.get_device_xml("disk", dev_id_info)
|
|
||||||
|
|
||||||
def cdrom_xml_disconnect(doc, ctx):
|
|
||||||
- disk_fragment = ctx.xpathEval("/disk")
|
|
||||||
+ disk_fragment = ctx.xpathEval("/disk")[0]
|
|
||||||
sourcenode = None
|
|
||||||
- for child in disk_fragment[0].children:
|
|
||||||
+
|
|
||||||
+ for child in disk_fragment.children:
|
|
||||||
if child.name == "source":
|
|
||||||
sourcenode = child
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
continue
|
|
||||||
+
|
|
||||||
sourcenode.unlinkNode()
|
|
||||||
sourcenode.freeNode()
|
|
||||||
- return disk_fragment[0].serialize()
|
|
||||||
+ return disk_fragment.serialize()
|
|
||||||
|
|
||||||
result = util.xml_parse_wrapper(xml, cdrom_xml_disconnect)
|
|
||||||
logging.debug("eject_cdrom produced: %s" % result)
|
|
@ -1,49 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1253131339 14400
|
|
||||||
# Node ID 1c886d1863f72e7ddd5fb99050362296be6a9deb
|
|
||||||
# Parent 9242a7fe76b16c6505bdd3d3d328ae8f0c56da10
|
|
||||||
Don't close connection on all libvirt errors: only if libvirtd goes away.
|
|
||||||
|
|
||||||
diff -r 9242a7fe76b1 -r 1c886d1863f7 src/virtManager/connection.py
|
|
||||||
--- a/src/virtManager/connection.py Wed Sep 16 16:01:54 2009 -0400
|
|
||||||
+++ b/src/virtManager/connection.py Wed Sep 16 16:02:19 2009 -0400
|
|
||||||
@@ -941,7 +941,15 @@
|
|
||||||
updateVMs = newVMs
|
|
||||||
|
|
||||||
for uuid in updateVMs:
|
|
||||||
- self.vms[uuid].tick(now)
|
|
||||||
+ vm = self.vms[uuid]
|
|
||||||
+ try:
|
|
||||||
+ vm.tick(now)
|
|
||||||
+ except libvirt.libvirtError, e:
|
|
||||||
+ if e.get_error_code() == libvirt.VIR_ERR_SYSTEM_ERROR:
|
|
||||||
+ raise
|
|
||||||
+ logging.exception("Tick for VM '%s' failed" % vm.get_name())
|
|
||||||
+ except Exception, e:
|
|
||||||
+ logging.exception("Tick for VM '%s' failed" % vm.get_name())
|
|
||||||
|
|
||||||
if not noStatsUpdate:
|
|
||||||
self._recalculate_stats(now)
|
|
||||||
diff -r 9242a7fe76b1 -r 1c886d1863f7 src/virtManager/engine.py
|
|
||||||
--- a/src/virtManager/engine.py Wed Sep 16 16:01:54 2009 -0400
|
|
||||||
+++ b/src/virtManager/engine.py Wed Sep 16 16:02:19 2009 -0400
|
|
||||||
@@ -199,10 +199,14 @@
|
|
||||||
self.connections[uri]["connection"].tick()
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
raise
|
|
||||||
- except:
|
|
||||||
- logging.exception("Could not refresh connection %s." % uri)
|
|
||||||
- logging.debug("Closing connection since refresh failed.")
|
|
||||||
- self.connections[uri]["connection"].close()
|
|
||||||
+ except libvirt.libvirtError, e:
|
|
||||||
+ if e.get_error_code() == libvirt.VIR_ERR_SYSTEM_ERROR:
|
|
||||||
+ logging.exception("Could not refresh connection %s." % uri)
|
|
||||||
+ logging.debug("Closing connection since libvirtd "
|
|
||||||
+ "appears to have stopped.")
|
|
||||||
+ self.connections[uri]["connection"].close()
|
|
||||||
+ else:
|
|
||||||
+ raise
|
|
||||||
return 1
|
|
||||||
|
|
||||||
def change_timer_interval(self,ignore1,ignore2,ignore3,ignore4):
|
|
@ -1,73 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1254757810 14400
|
|
||||||
# Node ID 97c40c4fb29f7b1b1aadcebd42781f0d471d4697
|
|
||||||
# Parent c0cffb13680c120ceff22386754104f66bb01d25
|
|
||||||
create-vol: Don't allow allocation to be higher than capacity.
|
|
||||||
|
|
||||||
Also tweak the spin button climb rates to be more useful.
|
|
||||||
|
|
||||||
diff -r c0cffb13680c -r 97c40c4fb29f src/virtManager/createvol.py
|
|
||||||
--- a/src/virtManager/createvol.py Mon Oct 05 11:34:39 2009 -0400
|
|
||||||
+++ b/src/virtManager/createvol.py Mon Oct 05 11:50:10 2009 -0400
|
|
||||||
@@ -63,6 +63,8 @@
|
|
||||||
"on_vol_cancel_clicked" : self.close,
|
|
||||||
"on_vol_create_clicked" : self.finish,
|
|
||||||
"on_vol_name_changed" : self.vol_name_changed,
|
|
||||||
+ "on_vol_allocation_value_changed" : self.vol_allocation_changed,
|
|
||||||
+ "on_vol_capacity_value_changed" : self.vol_capacity_changed,
|
|
||||||
})
|
|
||||||
|
|
||||||
format_list = self.window.get_widget("vol-format")
|
|
||||||
@@ -144,6 +146,24 @@
|
|
||||||
text = src.get_text()
|
|
||||||
self.window.get_widget("vol-create").set_sensitive(bool(text))
|
|
||||||
|
|
||||||
+ def vol_allocation_changed(self, src):
|
|
||||||
+ cap_widget = self.window.get_widget("vol-capacity")
|
|
||||||
+
|
|
||||||
+ alloc = src.get_value()
|
|
||||||
+ cap = cap_widget.get_value()
|
|
||||||
+
|
|
||||||
+ if alloc > cap:
|
|
||||||
+ cap_widget.set_value(alloc)
|
|
||||||
+
|
|
||||||
+ def vol_capacity_changed(self, src):
|
|
||||||
+ alloc_widget = self.window.get_widget("vol-allocation")
|
|
||||||
+
|
|
||||||
+ cap = src.get_value()
|
|
||||||
+ alloc = self.window.get_widget("vol-allocation").get_value()
|
|
||||||
+
|
|
||||||
+ if cap < alloc:
|
|
||||||
+ alloc_widget.set_value(cap)
|
|
||||||
+
|
|
||||||
def finish(self, src):
|
|
||||||
# validate input
|
|
||||||
try:
|
|
||||||
diff -rup old/src/vmm-create-vol.glade virt-manager-0.8.0/src/vmm-create-vol.glade
|
|
||||||
--- old/src/vmm-create-vol.glade 2009-10-05 13:18:10.212062000 -0400
|
|
||||||
+++ virt-manager-0.8.0/src/vmm-create-vol.glade 2009-10-05 13:19:57.343395000 -0400
|
|
||||||
@@ -237,8 +237,9 @@
|
|
||||||
<widget class="GtkSpinButton" id="vol-capacity">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
- <property name="adjustment">1 0 100000 1 10 0</property>
|
|
||||||
- <property name="climb_rate">1</property>
|
|
||||||
+ <property name="adjustment">1 0 100000 1 1000 0</property>
|
|
||||||
+ <property name="climb_rate">10</property>
|
|
||||||
+ <signal name="value_changed" handler="on_vol_capacity_value_changed"/>
|
|
||||||
</widget>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">1</property>
|
|
||||||
@@ -251,8 +252,9 @@
|
|
||||||
<widget class="GtkSpinButton" id="vol-allocation">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
- <property name="adjustment">1 0 100000 1 10 0</property>
|
|
||||||
- <property name="climb_rate">1</property>
|
|
||||||
+ <property name="adjustment">1 0 100000 1 1000 0</property>
|
|
||||||
+ <property name="climb_rate">10</property>
|
|
||||||
+ <signal name="value_changed" handler="on_vol_allocation_value_changed"/>
|
|
||||||
</widget>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">1</property>
|
|
@ -1,48 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1254756879 14400
|
|
||||||
# Node ID c0cffb13680c120ceff22386754104f66bb01d25
|
|
||||||
# Parent 67d5721a535f204db27f532e59f491f562c8ff18
|
|
||||||
create-vol: Don't allow creating vol without a name entered
|
|
||||||
|
|
||||||
diff -r 67d5721a535f -r c0cffb13680c src/virtManager/createvol.py
|
|
||||||
--- a/src/virtManager/createvol.py Mon Oct 05 10:06:29 2009 -0400
|
|
||||||
+++ b/src/virtManager/createvol.py Mon Oct 05 11:34:39 2009 -0400
|
|
||||||
@@ -62,6 +62,7 @@
|
|
||||||
"on_vmm_create_vol_delete_event" : self.close,
|
|
||||||
"on_vol_cancel_clicked" : self.close,
|
|
||||||
"on_vol_create_clicked" : self.finish,
|
|
||||||
+ "on_vol_name_changed" : self.vol_name_changed,
|
|
||||||
})
|
|
||||||
|
|
||||||
format_list = self.window.get_widget("vol-format")
|
|
||||||
@@ -99,6 +100,7 @@
|
|
||||||
|
|
||||||
def reset_state(self):
|
|
||||||
self.window.get_widget("vol-name").set_text("")
|
|
||||||
+ self.window.get_widget("vol-create").set_sensitive(False)
|
|
||||||
self.populate_vol_format()
|
|
||||||
self.populate_vol_suffix()
|
|
||||||
|
|
||||||
@@ -138,6 +140,10 @@
|
|
||||||
suffix = ".img"
|
|
||||||
self.window.get_widget("vol-name-suffix").set_text(suffix)
|
|
||||||
|
|
||||||
+ def vol_name_changed(self, src):
|
|
||||||
+ text = src.get_text()
|
|
||||||
+ self.window.get_widget("vol-create").set_sensitive(bool(text))
|
|
||||||
+
|
|
||||||
def finish(self, src):
|
|
||||||
# validate input
|
|
||||||
try:
|
|
||||||
diff -rup new/src/vmm-create-vol.glade virt-manager-0.8.0/src/vmm-create-vol.glade
|
|
||||||
--- new/src/vmm-create-vol.glade 2009-10-05 13:15:48.335564000 -0400
|
|
||||||
+++ virt-manager-0.8.0/src/vmm-create-vol.glade 2009-10-05 13:16:48.288704000 -0400
|
|
||||||
@@ -96,6 +96,7 @@
|
|
||||||
<widget class="GtkEntry" id="vol-name">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
+ <signal name="changed" handler="on_vol_name_changed"/>
|
|
||||||
</widget>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
@ -1,349 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1253738576 14400
|
|
||||||
# Node ID e7ee75a8f1353f2c42df93b5090b05fbdf89720a
|
|
||||||
# Parent 292a065aad7e4e5e5d50a71337efab2361378313
|
|
||||||
Add dialog-with-checkbox helper functions.
|
|
||||||
|
|
||||||
Useful for things like "Don't show this again'.
|
|
||||||
|
|
||||||
diff -r 292a065aad7e -r e7ee75a8f135 src/virtManager/error.py
|
|
||||||
--- a/src/virtManager/error.py Wed Sep 23 11:49:35 2009 -0400
|
|
||||||
+++ b/src/virtManager/error.py Wed Sep 23 16:42:56 2009 -0400
|
|
||||||
@@ -131,3 +131,61 @@
|
|
||||||
def ok_cancel(self, text1, text2=None):
|
|
||||||
return self._show_warning(gtk.BUTTONS_OK_CANCEL, text1, text2)
|
|
||||||
|
|
||||||
+ def warn_chkbox(self, text1, text2=None, chktext=None):
|
|
||||||
+ chkbox = vmmCheckDialog(self.parent, gtk.MESSAGE_WARNING)
|
|
||||||
+ return chkbox.show_chkbox(text1, text2, chktext)
|
|
||||||
+
|
|
||||||
+ def err_chkbox(self, text1, text2=None, chktext=None):
|
|
||||||
+ chkbox = vmmCheckDialog(self.parent, gtk.MESSAGE_ERROR)
|
|
||||||
+ return chkbox.show_chkbox(text1, text2, chktext)
|
|
||||||
+
|
|
||||||
+class vmmCheckDialog (gtk.MessageDialog):
|
|
||||||
+ def __init__ (self, parent=None, typ=gtk.MESSAGE_INFO):
|
|
||||||
+ if typ == gtk.MESSAGE_WARNING:
|
|
||||||
+ buttons = gtk.BUTTONS_OK_CANCEL
|
|
||||||
+ else:
|
|
||||||
+ buttons = gtk.BUTTONS_OK
|
|
||||||
+
|
|
||||||
+ gtk.MessageDialog.__init__ (self, parent, 0, typ, buttons)
|
|
||||||
+
|
|
||||||
+ self.connect("response", self.response_cb)
|
|
||||||
+ self.connect("delete-event", self.hide_on_delete)
|
|
||||||
+ self.set_title("")
|
|
||||||
+
|
|
||||||
+ self.chk_vbox = gtk.VBox(False, False)
|
|
||||||
+ self.chk_vbox.set_spacing(0)
|
|
||||||
+
|
|
||||||
+ self.chk_align = gtk.Alignment()
|
|
||||||
+ self.chk_align.set_padding(0, 0, 62, 0)
|
|
||||||
+ self.chk_align.add(self.chk_vbox)
|
|
||||||
+
|
|
||||||
+ self.chk_align.show_all()
|
|
||||||
+ self.vbox.pack_start(self.chk_align)
|
|
||||||
+
|
|
||||||
+ def response_cb(self, src, ignore):
|
|
||||||
+ src.hide()
|
|
||||||
+
|
|
||||||
+ def show_chkbox(self, text1, text2=None, chktext=None):
|
|
||||||
+ chkbox = None
|
|
||||||
+ res = None
|
|
||||||
+ chkres = None
|
|
||||||
+
|
|
||||||
+ self.hide()
|
|
||||||
+ for c in self.chk_vbox.get_children():
|
|
||||||
+ self.chk_vbox.remove(c)
|
|
||||||
+
|
|
||||||
+ self.set_property("text", text1)
|
|
||||||
+
|
|
||||||
+ if text2:
|
|
||||||
+ self.format_secondary_text(text2)
|
|
||||||
+
|
|
||||||
+ if chktext:
|
|
||||||
+ chkbox = gtk.CheckButton(chktext)
|
|
||||||
+ self.chk_vbox.add(chkbox)
|
|
||||||
+ chkbox.show()
|
|
||||||
+
|
|
||||||
+ res = self.run() in [ gtk.RESPONSE_YES, gtk.RESPONSE_OK ]
|
|
||||||
+ if chktext:
|
|
||||||
+ res = [res, chkbox.get_active()]
|
|
||||||
+
|
|
||||||
+ return res
|
|
||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1253738620 14400
|
|
||||||
# Node ID f5f3ff4f8942d631234f8e008d806bd502c58bc3
|
|
||||||
# Parent e7ee75a8f1353f2c42df93b5090b05fbdf89720a
|
|
||||||
connection: Add is_qemu_system helper.
|
|
||||||
|
|
||||||
diff -r e7ee75a8f135 -r f5f3ff4f8942 src/virtManager/connection.py
|
|
||||||
--- a/src/virtManager/connection.py Wed Sep 23 16:42:56 2009 -0400
|
|
||||||
+++ b/src/virtManager/connection.py Wed Sep 23 16:43:40 2009 -0400
|
|
||||||
@@ -201,6 +201,13 @@
|
|
||||||
def is_nodedev_capable(self):
|
|
||||||
return virtinst.NodeDeviceParser.is_nodedev_capable(self.vmm)
|
|
||||||
|
|
||||||
+ def is_qemu_system(self):
|
|
||||||
+ (scheme, ignore, ignore,
|
|
||||||
+ path, ignore, ignore) = virtinst.util.uri_split(self.uri)
|
|
||||||
+ if path == "/system" and scheme.startswith("qemu"):
|
|
||||||
+ return True
|
|
||||||
+ return False
|
|
||||||
+
|
|
||||||
def is_qemu_session(self):
|
|
||||||
(scheme, ignore, ignore,
|
|
||||||
path, ignore, ignore) = virtinst.util.uri_split(self.uri)
|
|
||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1253806909 14400
|
|
||||||
# Node ID cfcd19d057ddc973a129e7816cd4ea39f0d4365a
|
|
||||||
# Parent f5f3ff4f8942d631234f8e008d806bd502c58bc3
|
|
||||||
create: Don't prompt with same dialog multiple times.
|
|
||||||
|
|
||||||
diff -r f5f3ff4f8942 -r cfcd19d057dd src/virtManager/create.py
|
|
||||||
--- a/src/virtManager/create.py Wed Sep 23 16:43:40 2009 -0400
|
|
||||||
+++ b/src/virtManager/create.py Thu Sep 24 11:41:49 2009 -0400
|
|
||||||
@@ -1122,7 +1122,7 @@
|
|
||||||
if pagenum == PAGE_NAME:
|
|
||||||
return self.validate_name_page()
|
|
||||||
elif pagenum == PAGE_INSTALL:
|
|
||||||
- return self.validate_install_page()
|
|
||||||
+ return self.validate_install_page(revalidate=False)
|
|
||||||
elif pagenum == PAGE_MEM:
|
|
||||||
return self.validate_mem_page()
|
|
||||||
elif pagenum == PAGE_STORAGE:
|
|
||||||
@@ -1135,7 +1135,7 @@
|
|
||||||
return False
|
|
||||||
elif not self.validate_mem_page():
|
|
||||||
return False
|
|
||||||
- return self.validate_storage_page()
|
|
||||||
+ return self.validate_storage_page(revalidate=False)
|
|
||||||
|
|
||||||
elif pagenum == PAGE_FINISH:
|
|
||||||
# Since we allow the user to change to change HV type + arch
|
|
||||||
@@ -1169,7 +1169,7 @@
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
- def validate_install_page(self):
|
|
||||||
+ def validate_install_page(self, revalidate=True):
|
|
||||||
instmethod = self.get_config_install_page()
|
|
||||||
installer = None
|
|
||||||
location = None
|
|
||||||
@@ -1270,7 +1270,7 @@
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
- def validate_storage_page(self):
|
|
||||||
+ def validate_storage_page(self, revalidate=True):
|
|
||||||
use_storage = self.window.get_widget("enable-storage").get_active()
|
|
||||||
|
|
||||||
self.guest.disks = []
|
|
||||||
@@ -1296,19 +1296,21 @@
|
|
||||||
return self.verr(_("Storage parameter error."), str(e))
|
|
||||||
|
|
||||||
isfatal, errmsg = disk.is_size_conflict()
|
|
||||||
- if not isfatal and errmsg:
|
|
||||||
+ if not revalidate and not isfatal and errmsg:
|
|
||||||
# Fatal errors are reported when setting 'size'
|
|
||||||
res = self.err.ok_cancel(_("Not Enough Free Space"), errmsg)
|
|
||||||
if not res:
|
|
||||||
return False
|
|
||||||
|
|
||||||
# Disk collision
|
|
||||||
- if disk.is_conflict_disk(self.guest.conn):
|
|
||||||
- return self.err.yes_no(_('Disk "%s" is already in use by another '
|
|
||||||
- 'guest!' % disk.path),
|
|
||||||
- _("Do you really want to use the disk?"))
|
|
||||||
- else:
|
|
||||||
- return True
|
|
||||||
+ if not revalidate and disk.is_conflict_disk(self.guest.conn):
|
|
||||||
+ res = self.err.yes_no(_('Disk "%s" is already in use by another '
|
|
||||||
+ 'guest!' % disk.path),
|
|
||||||
+ _("Do you really want to use the disk?"))
|
|
||||||
+ if not res:
|
|
||||||
+ return False
|
|
||||||
+
|
|
||||||
+ return True
|
|
||||||
|
|
||||||
def validate_final_page(self):
|
|
||||||
nettype, devname, macaddr = self.get_config_network_info()
|
|
||||||
diff -r 343b42ebee5b src/virtManager/addhardware.py
|
|
||||||
--- a/src/virtManager/addhardware.py Thu Sep 24 11:41:49 2009 -0400
|
|
||||||
+++ b/src/virtManager/addhardware.py Thu Sep 24 11:44:49 2009 -0400
|
|
||||||
@@ -31,6 +31,7 @@
|
|
||||||
import virtinst
|
|
||||||
from virtinst import VirtualCharDevice, VirtualDevice, VirtualVideoDevice
|
|
||||||
|
|
||||||
+import virtManager.create
|
|
||||||
import virtManager.util as vmmutil
|
|
||||||
from virtManager.asyncjob import vmmAsyncJob
|
|
||||||
from virtManager.error import vmmErrorDialog
|
|
||||||
@@ -1054,6 +1055,7 @@
|
|
||||||
return self.err.val_err(_("Hardware Type Required"), \
|
|
||||||
_("You must specify what type of hardware to add."))
|
|
||||||
self._dev = None
|
|
||||||
+
|
|
||||||
elif page_num == PAGE_DISK:
|
|
||||||
path = self.get_config_disk_image()
|
|
||||||
if path == None or len(path) == 0:
|
|
||||||
@@ -1102,6 +1104,11 @@
|
|
||||||
_("Do you really want to use the disk?"))
|
|
||||||
return res
|
|
||||||
|
|
||||||
+ # Make sure qemu can access path
|
|
||||||
+ virtManager.create.check_path_search_for_qemu(self,
|
|
||||||
+ self.vm.connection,
|
|
||||||
+ self._dev.path)
|
|
||||||
+
|
|
||||||
elif page_num == PAGE_NETWORK:
|
|
||||||
net = self.get_config_network()
|
|
||||||
if self.window.get_widget("net-type-network").get_active():
|
|
||||||
diff -r 343b42ebee5b src/virtManager/choosecd.py
|
|
||||||
--- a/src/virtManager/choosecd.py Thu Sep 24 11:41:49 2009 -0400
|
|
||||||
+++ b/src/virtManager/choosecd.py Thu Sep 24 11:44:49 2009 -0400
|
|
||||||
@@ -24,6 +24,7 @@
|
|
||||||
import virtinst
|
|
||||||
|
|
||||||
import virtManager.opticalhelper
|
|
||||||
+import virtManager.create
|
|
||||||
from virtManager.storagebrowse import vmmStorageBrowser
|
|
||||||
from virtManager.error import vmmErrorDialog
|
|
||||||
|
|
||||||
@@ -108,6 +109,10 @@
|
|
||||||
except Exception, e:
|
|
||||||
return self.err.val_err(_("Invalid Media Path"), str(e))
|
|
||||||
|
|
||||||
+ # Make sure qemu can access the path
|
|
||||||
+ virtManager.create.check_path_search_for_qemu(self, self.conn,
|
|
||||||
+ disk.path)
|
|
||||||
+
|
|
||||||
self.emit("cdrom-chosen", disk.type, disk.path, self.dev_id_info)
|
|
||||||
self.cancel()
|
|
||||||
|
|
||||||
diff -r 343b42ebee5b src/virtManager/config.py
|
|
||||||
--- a/src/virtManager/config.py Thu Sep 24 11:41:49 2009 -0400
|
|
||||||
+++ b/src/virtManager/config.py Thu Sep 24 11:44:49 2009 -0400
|
|
||||||
@@ -558,3 +558,15 @@
|
|
||||||
else:
|
|
||||||
return os.getcwd()
|
|
||||||
|
|
||||||
+ def add_perms_fix_ignore(self, pathlist):
|
|
||||||
+ current_list = self.get_perms_fix_ignore() or []
|
|
||||||
+ for path in pathlist:
|
|
||||||
+ if path in current_list:
|
|
||||||
+ continue
|
|
||||||
+ current_list.append(path)
|
|
||||||
+ self.conf.set_list(self.conf_dir + "/paths/perms_fix_ignore",
|
|
||||||
+ gconf.VALUE_STRING,
|
|
||||||
+ current_list)
|
|
||||||
+ def get_perms_fix_ignore(self):
|
|
||||||
+ return self.conf.get_list(self.conf_dir + "/paths/perms_fix_ignore",
|
|
||||||
+ gconf.VALUE_STRING)
|
|
||||||
diff -r 343b42ebee5b src/virtManager/create.py
|
|
||||||
--- a/src/virtManager/create.py Thu Sep 24 11:41:49 2009 -0400
|
|
||||||
+++ b/src/virtManager/create.py Thu Sep 24 11:44:49 2009 -0400
|
|
||||||
@@ -30,6 +30,7 @@
|
|
||||||
|
|
||||||
import virtinst
|
|
||||||
from virtinst import VirtualNetworkInterface
|
|
||||||
+from virtinst import VirtualDisk
|
|
||||||
|
|
||||||
import virtManager.opticalhelper
|
|
||||||
from virtManager import util
|
|
||||||
@@ -53,6 +54,54 @@
|
|
||||||
INSTALL_PAGE_URL = 1
|
|
||||||
INSTALL_PAGE_PXE = 2
|
|
||||||
|
|
||||||
+def check_path_search_for_qemu(vmm_obj, conn, path):
|
|
||||||
+ if conn.is_remote() or not conn.is_qemu_system():
|
|
||||||
+ return
|
|
||||||
+
|
|
||||||
+ user = "qemu"
|
|
||||||
+
|
|
||||||
+ skip_paths = vmm_obj.config.get_perms_fix_ignore()
|
|
||||||
+ broken_paths = VirtualDisk.check_path_search_for_user(conn.vmm, path, user)
|
|
||||||
+ for p in broken_paths:
|
|
||||||
+ if p in skip_paths:
|
|
||||||
+ broken_paths.remove(p)
|
|
||||||
+
|
|
||||||
+ if not broken_paths:
|
|
||||||
+ return
|
|
||||||
+
|
|
||||||
+ logging.debug("No search access for dirs: %s" % broken_paths)
|
|
||||||
+ resp, chkres = vmm_obj.err.warn_chkbox(
|
|
||||||
+ _("The emulator may not have search permissions "
|
|
||||||
+ "for the path '%s'.") % path,
|
|
||||||
+ _("Do you want to correct this now?"),
|
|
||||||
+ _("Don't ask about these directories again."))
|
|
||||||
+
|
|
||||||
+ if chkres:
|
|
||||||
+ vmm_obj.config.add_perms_fix_ignore(broken_paths)
|
|
||||||
+ if not resp:
|
|
||||||
+ return
|
|
||||||
+
|
|
||||||
+ logging.debug("Attempting to correct permission issues.")
|
|
||||||
+ errors = VirtualDisk.fix_path_search_for_user(conn.vmm, path, user)
|
|
||||||
+ if not errors:
|
|
||||||
+ return
|
|
||||||
+
|
|
||||||
+ errmsg = _("Errors were encountered changing permissions for the "
|
|
||||||
+ "following directories:")
|
|
||||||
+ details = ""
|
|
||||||
+ for path, error in errors.items():
|
|
||||||
+ if path not in broken_paths:
|
|
||||||
+ continue
|
|
||||||
+ details += "%s : %s\n" % (path, error)
|
|
||||||
+
|
|
||||||
+ logging.debug("Permission errors:\n%s" % details)
|
|
||||||
+
|
|
||||||
+ ignore, chkres = vmm_obj.err.err_chkbox(errmsg, details,
|
|
||||||
+ _("Don't ask about these directories again."))
|
|
||||||
+
|
|
||||||
+ if chkres:
|
|
||||||
+ vmm_obj.config.add_perms_fix_ignore(errors.keys())
|
|
||||||
+
|
|
||||||
class vmmCreate(gobject.GObject):
|
|
||||||
__gsignals__ = {
|
|
||||||
"action-show-console": (gobject.SIGNAL_RUN_FIRST,
|
|
||||||
@@ -1245,6 +1294,11 @@
|
|
||||||
return self.err.val_err(_("Error setting OS information."),
|
|
||||||
str(e))
|
|
||||||
|
|
||||||
+ if instmethod == INSTALL_PAGE_ISO and not revalidate:
|
|
||||||
+ # Check if 'qemu' user can access disk
|
|
||||||
+ check_path_search_for_qemu(self, self.conn,
|
|
||||||
+ self.guest.installer.location)
|
|
||||||
+
|
|
||||||
# Validation passed, store the install path (if there is one) in
|
|
||||||
# gconf
|
|
||||||
self.get_config_local_media(store_media=True)
|
|
||||||
@@ -1286,10 +1340,10 @@
|
|
||||||
if not diskpath:
|
|
||||||
return self.verr(_("A storage path must be specified."))
|
|
||||||
|
|
||||||
- disk = virtinst.VirtualDisk(conn = self.conn.vmm,
|
|
||||||
- path = diskpath,
|
|
||||||
- size = disksize,
|
|
||||||
- sparse = sparse)
|
|
||||||
+ disk = VirtualDisk(conn = self.conn.vmm,
|
|
||||||
+ path = diskpath,
|
|
||||||
+ size = disksize,
|
|
||||||
+ sparse = sparse)
|
|
||||||
|
|
||||||
self.guest.disks.append(disk)
|
|
||||||
except Exception, e:
|
|
||||||
@@ -1310,6 +1364,10 @@
|
|
||||||
if not res:
|
|
||||||
return False
|
|
||||||
|
|
||||||
+ if not revalidate:
|
|
||||||
+ # Check if 'qemu' user can access disk
|
|
||||||
+ check_path_search_for_qemu(self, self.conn, disk.path)
|
|
||||||
+
|
|
||||||
return True
|
|
||||||
|
|
||||||
def validate_final_page(self):
|
|
@ -1,19 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1253823268 14400
|
|
||||||
# Node ID d78b7e7131439dc9f22c8e7391e82c5f29888fe8
|
|
||||||
# Parent cfcd19d057ddc973a129e7816cd4ea39f0d4365a
|
|
||||||
Fix vcpu hotplug.
|
|
||||||
|
|
||||||
diff -r cfcd19d057dd -r d78b7e713143 src/virtManager/domain.py
|
|
||||||
--- a/src/virtManager/domain.py Thu Sep 24 11:41:49 2009 -0400
|
|
||||||
+++ b/src/virtManager/domain.py Thu Sep 24 16:14:28 2009 -0400
|
|
||||||
@@ -1355,7 +1355,7 @@
|
|
||||||
self._change_cdrom(result, dev_id_info)
|
|
||||||
|
|
||||||
def hotplug_vcpu(self, vcpus):
|
|
||||||
- self.vm.setVcpus()
|
|
||||||
+ self.vm.setVcpus(int(vcpus))
|
|
||||||
|
|
||||||
def hotplug_vcpus(self, vcpus):
|
|
||||||
vcpus = int(vcpus)
|
|
@ -1,152 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1254248737 14400
|
|
||||||
# Node ID 65951459abe9efb9fc5f58a243ddcfd49deba0a5
|
|
||||||
# Parent 59f3d7a2ec289145c41437b7f12bcd730e17f340
|
|
||||||
Hide access to help docs: they are out of date to the point of uselessness.
|
|
||||||
|
|
||||||
diff -r 59f3d7a2ec28 -r 65951459abe9 src/virtManager/addhardware.py
|
|
||||||
--- a/src/virtManager/addhardware.py Tue Sep 29 14:02:28 2009 -0400
|
|
||||||
+++ b/src/virtManager/addhardware.py Tue Sep 29 14:25:37 2009 -0400
|
|
||||||
@@ -115,6 +115,9 @@
|
|
||||||
"char_telnet_focus_in": (self.update_doc, "protocol"),
|
|
||||||
})
|
|
||||||
|
|
||||||
+ # XXX: Help docs useless/out of date
|
|
||||||
+ self.window.get_widget("create-help").hide()
|
|
||||||
+
|
|
||||||
self.set_initial_state()
|
|
||||||
|
|
||||||
def update_doc(self, ignore1, ignore2, param):
|
|
||||||
diff -r 59f3d7a2ec28 -r 65951459abe9 src/virtManager/clone.py
|
|
||||||
--- a/src/virtManager/clone.py Tue Sep 29 14:02:28 2009 -0400
|
|
||||||
+++ b/src/virtManager/clone.py Tue Sep 29 14:25:37 2009 -0400
|
|
||||||
@@ -129,6 +129,9 @@
|
|
||||||
"on_clone_help_clicked" : self.show_help,
|
|
||||||
})
|
|
||||||
|
|
||||||
+ # XXX: Help docs useless/out of date
|
|
||||||
+ self.window.get_widget("clone-help").hide()
|
|
||||||
+
|
|
||||||
self.set_initial_state()
|
|
||||||
|
|
||||||
def show(self):
|
|
||||||
diff -r 59f3d7a2ec28 -r 65951459abe9 src/virtManager/createnet.py
|
|
||||||
--- a/src/virtManager/createnet.py Tue Sep 29 14:02:28 2009 -0400
|
|
||||||
+++ b/src/virtManager/createnet.py Tue Sep 29 14:25:37 2009 -0400
|
|
||||||
@@ -68,6 +68,9 @@
|
|
||||||
"on_create_help_clicked": self.show_help,
|
|
||||||
})
|
|
||||||
|
|
||||||
+ # XXX: Help docs useless/out of date
|
|
||||||
+ self.window.get_widget("create-help").hide()
|
|
||||||
+
|
|
||||||
self.set_initial_state()
|
|
||||||
|
|
||||||
def show(self):
|
|
||||||
diff -r 59f3d7a2ec28 -r 65951459abe9 src/virtManager/createpool.py
|
|
||||||
--- a/src/virtManager/createpool.py Tue Sep 29 14:02:28 2009 -0400
|
|
||||||
+++ b/src/virtManager/createpool.py Tue Sep 29 14:25:37 2009 -0400
|
|
||||||
@@ -88,6 +88,9 @@
|
|
||||||
"on_pool_build_focus_in_event": (self.update_build_doc)
|
|
||||||
})
|
|
||||||
|
|
||||||
+ # XXX: Help docs useless/out of date
|
|
||||||
+ self.window.get_widget("pool-help").hide()
|
|
||||||
+
|
|
||||||
self.set_initial_state()
|
|
||||||
|
|
||||||
def show(self):
|
|
||||||
diff -r 59f3d7a2ec28 -r 65951459abe9 src/virtManager/createvol.py
|
|
||||||
--- a/src/virtManager/createvol.py Tue Sep 29 14:02:28 2009 -0400
|
|
||||||
+++ b/src/virtManager/createvol.py Tue Sep 29 14:25:37 2009 -0400
|
|
||||||
@@ -72,6 +72,10 @@
|
|
||||||
format_list.add_attribute(text2, 'text', 1)
|
|
||||||
self.window.get_widget("vol-info-view").modify_bg(gtk.STATE_NORMAL,
|
|
||||||
gtk.gdk.color_parse("grey"))
|
|
||||||
+
|
|
||||||
+ # XXX: Help docs useless/out of date
|
|
||||||
+ self.window.get_widget("pool-help").hide()
|
|
||||||
+
|
|
||||||
self.reset_state()
|
|
||||||
|
|
||||||
|
|
||||||
diff -r 59f3d7a2ec28 -r 65951459abe9 src/virtManager/details.py
|
|
||||||
--- a/src/virtManager/details.py Tue Sep 29 14:02:28 2009 -0400
|
|
||||||
+++ b/src/virtManager/details.py Tue Sep 29 14:25:37 2009 -0400
|
|
||||||
@@ -313,6 +313,9 @@
|
|
||||||
"on_security_model_changed": self.security_model_changed,
|
|
||||||
})
|
|
||||||
|
|
||||||
+ # XXX: Help docs useless/out of date
|
|
||||||
+ self.window.get_widget("help1").hide()
|
|
||||||
+
|
|
||||||
self.vm.connect("status-changed", self.update_widget_states)
|
|
||||||
self.vm.connect("resources-sampled", self.refresh_resources)
|
|
||||||
self.vm.connect("config-changed", self.refresh_vm_info)
|
|
||||||
@@ -575,7 +578,7 @@
|
|
||||||
if self.is_visible():
|
|
||||||
self.topwin.present()
|
|
||||||
return
|
|
||||||
- self.topwin.show_all()
|
|
||||||
+ self.topwin.show()
|
|
||||||
self.topwin.present()
|
|
||||||
|
|
||||||
self.engine.increment_window_counter()
|
|
||||||
diff -r 59f3d7a2ec28 -r 65951459abe9 src/virtManager/host.py
|
|
||||||
--- a/src/virtManager/host.py Tue Sep 29 14:02:28 2009 -0400
|
|
||||||
+++ b/src/virtManager/host.py Tue Sep 29 14:25:37 2009 -0400
|
|
||||||
@@ -169,6 +169,9 @@
|
|
||||||
"on_config_autoconnect_toggled": self.toggle_autoconnect,
|
|
||||||
})
|
|
||||||
|
|
||||||
+ # XXX: Help docs useless/out of date
|
|
||||||
+ self.window.get_widget("help1").hide()
|
|
||||||
+
|
|
||||||
self.conn.connect("resources-sampled", self.refresh_resources)
|
|
||||||
self.reset_state()
|
|
||||||
|
|
||||||
diff -r 59f3d7a2ec28 -r 65951459abe9 src/virtManager/manager.py
|
|
||||||
--- a/src/virtManager/manager.py Tue Sep 29 14:02:28 2009 -0400
|
|
||||||
+++ b/src/virtManager/manager.py Tue Sep 29 14:25:37 2009 -0400
|
|
||||||
@@ -188,6 +188,7 @@
|
|
||||||
filename = self.config.get_icon_dir() + "/%s" % iconfile
|
|
||||||
pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(filename, l, w)
|
|
||||||
image = gtk.image_new_from_pixbuf(pixbuf)
|
|
||||||
+ image.show_all()
|
|
||||||
self.window.get_widget(widget).set_icon_widget(image)
|
|
||||||
|
|
||||||
set_toolbar_image("vm-new", "vm_new_wizard.png", 28, 28)
|
|
||||||
@@ -356,6 +357,9 @@
|
|
||||||
"on_menu_help_activate": self.show_help,
|
|
||||||
})
|
|
||||||
|
|
||||||
+ # XXX: Help docs useless/out of date
|
|
||||||
+ self.window.get_widget("menu_help").hide()
|
|
||||||
+
|
|
||||||
self.vm_selected(None)
|
|
||||||
self.window.get_widget("vm-list").get_selection().connect("changed", self.vm_selected)
|
|
||||||
|
|
||||||
@@ -391,7 +395,8 @@
|
|
||||||
if self.is_visible():
|
|
||||||
win.present()
|
|
||||||
return
|
|
||||||
- win.show_all()
|
|
||||||
+ win.show()
|
|
||||||
+ win.present()
|
|
||||||
self.engine.increment_window_counter()
|
|
||||||
|
|
||||||
if self.startup_error:
|
|
||||||
diff -r 59f3d7a2ec28 -r 65951459abe9 src/virtManager/preferences.py
|
|
||||||
--- a/src/virtManager/preferences.py Tue Sep 29 14:02:28 2009 -0400
|
|
||||||
+++ b/src/virtManager/preferences.py Tue Sep 29 14:25:37 2009 -0400
|
|
||||||
@@ -75,6 +75,9 @@
|
|
||||||
"on_prefs_stats_enable_net_toggled": self.change_net_poll,
|
|
||||||
})
|
|
||||||
|
|
||||||
+ # XXX: Help docs useless/out of date
|
|
||||||
+ self.window.get_widget("prefs-help").hide()
|
|
||||||
+
|
|
||||||
def close(self, ignore1=None, ignore2=None):
|
|
||||||
self.topwin.hide()
|
|
||||||
return 1
|
|
@ -1,249 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1253201058 14400
|
|
||||||
# Node ID a6f055361d165bea5fbb3c62ec54a820987a7dde
|
|
||||||
# Parent 1c886d1863f72e7ddd5fb99050362296be6a9deb
|
|
||||||
Update new VM status icons.
|
|
||||||
|
|
||||||
Previous round didn't convey state very well, and looked too much like
|
|
||||||
buttons.
|
|
||||||
|
|
||||||
diff -r 1c886d1863f7 -r a6f055361d16 pixmaps/state_paused.png
|
|
||||||
Binary file pixmaps/state_paused.png has changed
|
|
||||||
diff -r 1c886d1863f7 -r a6f055361d16 pixmaps/state_running.png
|
|
||||||
Binary file pixmaps/state_running.png has changed
|
|
||||||
diff -r 1c886d1863f7 -r a6f055361d16 pixmaps/state_shutoff.png
|
|
||||||
Binary file pixmaps/state_shutoff.png has changed
|
|
||||||
diff -r 1c886d1863f7 -r a6f055361d16 src/virtManager/config.py
|
|
||||||
--- a/src/virtManager/config.py Wed Sep 16 16:02:19 2009 -0400
|
|
||||||
+++ b/src/virtManager/config.py Thu Sep 17 11:24:18 2009 -0400
|
|
||||||
@@ -90,7 +90,16 @@
|
|
||||||
libvirt.VIR_DOMAIN_SHUTOFF: gtk.gdk.pixbuf_new_from_file_at_size(self.get_icon_dir() + "/state_shutoff.png", 18, 18),
|
|
||||||
libvirt.VIR_DOMAIN_NOSTATE: gtk.gdk.pixbuf_new_from_file_at_size(self.get_icon_dir() + "/state_running.png", 18, 18),
|
|
||||||
}
|
|
||||||
- #initialize the help stuff
|
|
||||||
+ self.status_icons_large = {
|
|
||||||
+ libvirt.VIR_DOMAIN_BLOCKED: gtk.gdk.pixbuf_new_from_file_at_size(self.get_icon_dir() + "/state_running.png", 32, 32),
|
|
||||||
+ libvirt.VIR_DOMAIN_CRASHED: gtk.gdk.pixbuf_new_from_file_at_size(self.get_icon_dir() + "/state_crashed.png", 32, 32),
|
|
||||||
+ libvirt.VIR_DOMAIN_PAUSED: gtk.gdk.pixbuf_new_from_file_at_size(self.get_icon_dir() + "/state_paused.png", 32, 32),
|
|
||||||
+ libvirt.VIR_DOMAIN_RUNNING: gtk.gdk.pixbuf_new_from_file_at_size(self.get_icon_dir() + "/state_running.png", 32, 32),
|
|
||||||
+ libvirt.VIR_DOMAIN_SHUTDOWN: gtk.gdk.pixbuf_new_from_file_at_size(self.get_icon_dir() + "/state_shutoff.png", 32, 32),
|
|
||||||
+ libvirt.VIR_DOMAIN_SHUTOFF: gtk.gdk.pixbuf_new_from_file_at_size(self.get_icon_dir() + "/state_shutoff.png", 32, 32),
|
|
||||||
+ libvirt.VIR_DOMAIN_NOSTATE: gtk.gdk.pixbuf_new_from_file_at_size(self.get_icon_dir() + "/state_running.png", 32, 32),
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
props = { gnome.PARAM_APP_DATADIR : self.get_data_dir()}
|
|
||||||
gnome.program_init(self.get_appname(), self.get_appversion(), \
|
|
||||||
properties=props)
|
|
||||||
@@ -100,6 +109,9 @@
|
|
||||||
def get_vm_status_icon(self, state):
|
|
||||||
return self.status_icons[state]
|
|
||||||
|
|
||||||
+ def get_vm_status_icon_large(self, state):
|
|
||||||
+ return self.status_icons_large[state]
|
|
||||||
+
|
|
||||||
def get_shutdown_icon_name(self):
|
|
||||||
theme = gtk.icon_theme_get_default()
|
|
||||||
if theme.has_icon("system-shutdown"):
|
|
||||||
diff -r 1c886d1863f7 -r a6f055361d16 src/virtManager/domain.py
|
|
||||||
--- a/src/virtManager/domain.py Wed Sep 16 16:02:19 2009 -0400
|
|
||||||
+++ b/src/virtManager/domain.py Thu Sep 17 11:24:18 2009 -0400
|
|
||||||
@@ -728,6 +728,8 @@
|
|
||||||
|
|
||||||
def run_status_icon(self):
|
|
||||||
return self.config.get_vm_status_icon(self.status())
|
|
||||||
+ def run_status_icon_large(self):
|
|
||||||
+ return self.config.get_vm_status_icon_large(self.status())
|
|
||||||
|
|
||||||
def _is_serial_console_tty_accessible(self, path):
|
|
||||||
# pty serial scheme doesn't work over remote
|
|
||||||
diff -r 1c886d1863f7 -r a6f055361d16 src/virtManager/manager.py
|
|
||||||
--- a/src/virtManager/manager.py Wed Sep 16 16:02:19 2009 -0400
|
|
||||||
+++ b/src/virtManager/manager.py Thu Sep 17 11:24:18 2009 -0400
|
|
||||||
@@ -493,7 +493,7 @@
|
|
||||||
row.insert(ROW_NAME, vm.get_name())
|
|
||||||
row.insert(ROW_MARKUP, row[ROW_NAME])
|
|
||||||
row.insert(ROW_STATUS, vm.run_status())
|
|
||||||
- row.insert(ROW_STATUS_ICON, vm.run_status_icon())
|
|
||||||
+ row.insert(ROW_STATUS_ICON, vm.run_status_icon_large())
|
|
||||||
row.insert(ROW_KEY, vm.get_uuid())
|
|
||||||
row.insert(ROW_HINT, None)
|
|
||||||
row.insert(ROW_IS_CONN, False)
|
|
||||||
@@ -575,7 +575,7 @@
|
|
||||||
|
|
||||||
row = self.rows[self.vm_row_key(vm)]
|
|
||||||
row[ROW_STATUS] = vm.run_status()
|
|
||||||
- row[ROW_STATUS_ICON] = vm.run_status_icon()
|
|
||||||
+ row[ROW_STATUS_ICON] = vm.run_status_icon_large()
|
|
||||||
row[ROW_IS_VM_RUNNING] = vm.is_active()
|
|
||||||
model.row_changed(row.path, row.iter)
|
|
||||||
|
|
||||||
@@ -850,7 +850,6 @@
|
|
||||||
statusCol.add_attribute(status_icon, 'cell-background', ROW_COLOR)
|
|
||||||
statusCol.add_attribute(status_icon, 'pixbuf', ROW_STATUS_ICON)
|
|
||||||
statusCol.add_attribute(status_icon, 'visible', ROW_IS_VM)
|
|
||||||
- statusCol.add_attribute(status_icon, 'sensitive', ROW_IS_VM_RUNNING)
|
|
||||||
|
|
||||||
name_txt = gtk.CellRendererText()
|
|
||||||
nameCol.pack_start(name_txt, True)
|
|
||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1253205341 14400
|
|
||||||
# Node ID cdbe1da3ce75a5ad06b8e07e891ac35d1b246685
|
|
||||||
# Parent a6f055361d165bea5fbb3c62ec54a820987a7dde
|
|
||||||
Change VM name text arrangement in manager view.
|
|
||||||
|
|
||||||
Shrink text size, add a second row that shows the VM status. Fills the
|
|
||||||
display up a bit so it doesn't look so sparse.
|
|
||||||
|
|
||||||
diff -r a6f055361d16 -r cdbe1da3ce75 src/virtManager/manager.py
|
|
||||||
--- a/src/virtManager/manager.py Thu Sep 17 11:24:18 2009 -0400
|
|
||||||
+++ b/src/virtManager/manager.py Thu Sep 17 12:35:41 2009 -0400
|
|
||||||
@@ -486,12 +486,26 @@
|
|
||||||
else:
|
|
||||||
self.emit("action-refresh-console", uri, vmuuid)
|
|
||||||
|
|
||||||
+ def _build_conn_markup(self, conn, row):
|
|
||||||
+ if conn.state == conn.STATE_DISCONNECTED:
|
|
||||||
+ markup = ("<span font='9' color='#5b5b5b'>%s - "
|
|
||||||
+ "Not Connected</span>" % row[ROW_NAME])
|
|
||||||
+ else:
|
|
||||||
+ markup = ("<span font='9'>%s</span>" % row[ROW_NAME])
|
|
||||||
+ return markup
|
|
||||||
+
|
|
||||||
+ def _build_vm_markup(self, vm, row):
|
|
||||||
+ markup = ("<span font='10'>%s</span>\n"
|
|
||||||
+ "<span font='9' color='#989898'>%s</span>" %
|
|
||||||
+ (row[ROW_NAME], row[ROW_STATUS]))
|
|
||||||
+ return markup
|
|
||||||
+
|
|
||||||
def _append_vm(self, model, vm, conn):
|
|
||||||
parent = self.rows[conn.get_uri()].iter
|
|
||||||
row = []
|
|
||||||
row.insert(ROW_HANDLE, vm)
|
|
||||||
row.insert(ROW_NAME, vm.get_name())
|
|
||||||
- row.insert(ROW_MARKUP, row[ROW_NAME])
|
|
||||||
+ row.insert(ROW_MARKUP, "")
|
|
||||||
row.insert(ROW_STATUS, vm.run_status())
|
|
||||||
row.insert(ROW_STATUS_ICON, vm.run_status_icon_large())
|
|
||||||
row.insert(ROW_KEY, vm.get_uuid())
|
|
||||||
@@ -502,6 +516,8 @@
|
|
||||||
row.insert(ROW_IS_VM_RUNNING, vm.is_active())
|
|
||||||
row.insert(ROW_COLOR, "white")
|
|
||||||
|
|
||||||
+ row[ROW_MARKUP] = self._build_vm_markup(vm, row)
|
|
||||||
+
|
|
||||||
_iter = model.append(parent, row)
|
|
||||||
path = model.get_path(_iter)
|
|
||||||
self.rows[self.vm_row_key(vm)] = model[path]
|
|
||||||
@@ -512,12 +528,7 @@
|
|
||||||
row = []
|
|
||||||
row.insert(ROW_HANDLE, conn)
|
|
||||||
row.insert(ROW_NAME, conn.get_pretty_desc_inactive(False))
|
|
||||||
- if conn.state == conn.STATE_DISCONNECTED:
|
|
||||||
- markup = ("<span font='9.5' color='#5b5b5b'>%s - "
|
|
||||||
- "Not Connected</span>" % row[ROW_NAME])
|
|
||||||
- else:
|
|
||||||
- markup = ("<span font='9.5'>%s</span>" % row[ROW_NAME])
|
|
||||||
- row.insert(ROW_MARKUP, markup)
|
|
||||||
+ row.insert(ROW_MARKUP, self._build_conn_markup(conn, row))
|
|
||||||
row.insert(ROW_STATUS, ("<span font='9'>%s</span>" %
|
|
||||||
conn.get_state_text()))
|
|
||||||
row.insert(ROW_STATUS_ICON, None)
|
|
||||||
@@ -589,12 +600,7 @@
|
|
||||||
model = vmlist.get_model()
|
|
||||||
row = self.rows[conn.get_uri()]
|
|
||||||
|
|
||||||
- if conn.state == conn.STATE_DISCONNECTED:
|
|
||||||
- markup = ("<span font='9.5' color='#5b5b5b'>%s - "
|
|
||||||
- "Not Connected</span>" % row[ROW_NAME])
|
|
||||||
- else:
|
|
||||||
- markup = ("<span font='9.5'>%s</span>" % row[ROW_NAME])
|
|
||||||
- row[ROW_MARKUP] = markup
|
|
||||||
+ row[ROW_MARKUP] = self._build_conn_markup(conn, row)
|
|
||||||
row[ROW_STATUS] = "<span font='9'>%s</span>" % conn.get_state_text()
|
|
||||||
row[ROW_IS_CONN_CONNECTED] = conn.state != conn.STATE_DISCONNECTED
|
|
||||||
|
|
||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1253201111 14400
|
|
||||||
# Node ID 739a6876af4692d6f86d8813f6dd3aa046bf6a8b
|
|
||||||
# Parent cdbe1da3ce75a5ad06b8e07e891ac35d1b246685
|
|
||||||
Drop row coloring for managed connection rows.
|
|
||||||
|
|
||||||
Looks kind of funky with lots of dark colored rows for a user with multiple
|
|
||||||
connections.
|
|
||||||
|
|
||||||
diff -r cdbe1da3ce75 -r 739a6876af46 src/virtManager/manager.py
|
|
||||||
--- a/src/virtManager/manager.py Thu Sep 17 12:35:41 2009 -0400
|
|
||||||
+++ b/src/virtManager/manager.py Thu Sep 17 11:25:11 2009 -0400
|
|
||||||
@@ -49,8 +49,6 @@
|
|
||||||
ROW_IS_CONN_CONNECTED = 8
|
|
||||||
ROW_IS_VM = 9
|
|
||||||
ROW_IS_VM_RUNNING = 10
|
|
||||||
-ROW_COLOR = 11
|
|
||||||
-ROW_HEIGHT = 12
|
|
||||||
|
|
||||||
# Columns in the tree view
|
|
||||||
COL_NAME = 0
|
|
||||||
@@ -514,7 +512,6 @@
|
|
||||||
row.insert(ROW_IS_CONN_CONNECTED, True)
|
|
||||||
row.insert(ROW_IS_VM, True)
|
|
||||||
row.insert(ROW_IS_VM_RUNNING, vm.is_active())
|
|
||||||
- row.insert(ROW_COLOR, "white")
|
|
||||||
|
|
||||||
row[ROW_MARKUP] = self._build_vm_markup(vm, row)
|
|
||||||
|
|
||||||
@@ -539,7 +536,6 @@
|
|
||||||
conn.state != conn.STATE_DISCONNECTED)
|
|
||||||
row.insert(ROW_IS_VM, False)
|
|
||||||
row.insert(ROW_IS_VM_RUNNING, False)
|
|
||||||
- row.insert(ROW_COLOR, "#d4d2d2")
|
|
||||||
|
|
||||||
_iter = model.append(None, row)
|
|
||||||
path = model.get_path(_iter)
|
|
||||||
@@ -823,9 +819,9 @@
|
|
||||||
vmlist = self.window.get_widget("vm-list")
|
|
||||||
|
|
||||||
# Handle, name, markup, status, status icon, key/uuid, hint, is conn,
|
|
||||||
- # is conn connected, is vm, is vm running, color
|
|
||||||
+ # is conn connected, is vm, is vm running
|
|
||||||
model = gtk.TreeStore(object, str, str, str, gtk.gdk.Pixbuf, str, str,
|
|
||||||
- bool, bool, bool, bool, str)
|
|
||||||
+ bool, bool, bool, bool)
|
|
||||||
vmlist.set_model(model)
|
|
||||||
util.tooltip_wrapper(vmlist, ROW_HINT, "set_tooltip_column")
|
|
||||||
|
|
||||||
@@ -834,7 +830,7 @@
|
|
||||||
|
|
||||||
nameCol = gtk.TreeViewColumn(_("Name"))
|
|
||||||
nameCol.set_expand(True)
|
|
||||||
- nameCol.set_spacing(12)
|
|
||||||
+ nameCol.set_spacing(6)
|
|
||||||
cpuUsageCol = gtk.TreeViewColumn(_("CPU usage"))
|
|
||||||
cpuUsageCol.set_min_width(150)
|
|
||||||
|
|
||||||
@@ -853,13 +849,11 @@
|
|
||||||
|
|
||||||
status_icon = gtk.CellRendererPixbuf()
|
|
||||||
statusCol.pack_start(status_icon, False)
|
|
||||||
- statusCol.add_attribute(status_icon, 'cell-background', ROW_COLOR)
|
|
||||||
statusCol.add_attribute(status_icon, 'pixbuf', ROW_STATUS_ICON)
|
|
||||||
statusCol.add_attribute(status_icon, 'visible', ROW_IS_VM)
|
|
||||||
|
|
||||||
name_txt = gtk.CellRendererText()
|
|
||||||
nameCol.pack_start(name_txt, True)
|
|
||||||
- nameCol.add_attribute(name_txt, 'cell-background', ROW_COLOR)
|
|
||||||
nameCol.add_attribute(name_txt, 'markup', ROW_MARKUP)
|
|
||||||
nameCol.set_sort_column_id(VMLIST_SORT_NAME)
|
|
||||||
|
|
||||||
@@ -870,9 +864,7 @@
|
|
||||||
cpuUsage_img.set_property("reversed", True)
|
|
||||||
cpuUsageCol.pack_start(cpuUsage_img, True)
|
|
||||||
cpuUsageCol.pack_start(cpuUsage_txt, False)
|
|
||||||
- cpuUsageCol.add_attribute(cpuUsage_img, 'cell-background', ROW_COLOR)
|
|
||||||
cpuUsageCol.add_attribute(cpuUsage_img, 'visible', ROW_IS_VM)
|
|
||||||
- cpuUsageCol.add_attribute(cpuUsage_txt, 'cell-background', ROW_COLOR)
|
|
||||||
cpuUsageCol.add_attribute(cpuUsage_txt, 'visible', ROW_IS_CONN)
|
|
||||||
cpuUsageCol.set_sort_column_id(VMLIST_SORT_STATS)
|
|
||||||
self.stats_sparkline = cpuUsage_img
|
|
File diff suppressed because it is too large
Load Diff
@ -1,72 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1252939197 14400
|
|
||||||
# Node ID 486cd6791c3926420786d30401a690884acdf653
|
|
||||||
# Parent 043ca66e19aabcdb89b8bbe76ef5ded8b0c0fc54
|
|
||||||
Fix populating text box with storage browser selection in 'New VM' (bz 517263)
|
|
||||||
|
|
||||||
We were only properly setting the 'finish' callback for the first time the
|
|
||||||
storage browser was launched. All subsequent runs would not enter anything
|
|
||||||
in the associated text box.
|
|
||||||
|
|
||||||
diff -r 043ca66e19aa -r 486cd6791c39 src/virtManager/addhardware.py
|
|
||||||
--- a/src/virtManager/addhardware.py Mon Sep 14 10:14:41 2009 -0400
|
|
||||||
+++ b/src/virtManager/addhardware.py Mon Sep 14 10:39:57 2009 -0400
|
|
||||||
@@ -80,7 +80,6 @@
|
|
||||||
_("An unexpected error occurred"))
|
|
||||||
|
|
||||||
self.storage_browser = None
|
|
||||||
- self._browse_cb_id = None
|
|
||||||
|
|
||||||
self._dev = None
|
|
||||||
|
|
||||||
@@ -911,10 +910,8 @@
|
|
||||||
conn = self.vm.get_connection()
|
|
||||||
if self.storage_browser == None:
|
|
||||||
self.storage_browser = vmmStorageBrowser(self.config, conn, False)
|
|
||||||
- if self._browse_cb_id:
|
|
||||||
- self.storage_browser.disconnect(self._browse_cb_id)
|
|
||||||
|
|
||||||
- self._browse_cb_id = self.storage_browser.connect("storage-browse-finish", set_storage_cb)
|
|
||||||
+ self.storage_browser.set_finish_cb(set_storage_cb)
|
|
||||||
self.storage_browser.local_args = { "dialog_name": dialog_name,
|
|
||||||
"confirm_func": confirm_func,
|
|
||||||
"browse_reason":
|
|
||||||
diff -r 043ca66e19aa -r 486cd6791c39 src/virtManager/create.py
|
|
||||||
--- a/src/virtManager/create.py Mon Sep 14 10:14:41 2009 -0400
|
|
||||||
+++ b/src/virtManager/create.py Mon Sep 14 10:39:57 2009 -0400
|
|
||||||
@@ -1644,8 +1644,9 @@
|
|
||||||
if self.storage_browser == None:
|
|
||||||
self.storage_browser = vmmStorageBrowser(self.config, self.conn,
|
|
||||||
is_media)
|
|
||||||
- self.storage_browser.connect("storage-browse-finish",
|
|
||||||
- callback)
|
|
||||||
+
|
|
||||||
+ self.storage_browser.set_finish_cb(callback)
|
|
||||||
+
|
|
||||||
if is_media:
|
|
||||||
reason = self.config.CONFIG_DIR_MEDIA
|
|
||||||
else:
|
|
||||||
diff -r 043ca66e19aa -r 486cd6791c39 src/virtManager/storagebrowse.py
|
|
||||||
--- a/src/virtManager/storagebrowse.py Mon Sep 14 10:14:41 2009 -0400
|
|
||||||
+++ b/src/virtManager/storagebrowse.py Mon Sep 14 10:39:57 2009 -0400
|
|
||||||
@@ -47,6 +47,7 @@
|
|
||||||
self.config = config
|
|
||||||
self.conn = conn
|
|
||||||
self.conn_signal_ids = []
|
|
||||||
+ self.finish_cb_id = None
|
|
||||||
|
|
||||||
self.topwin = self.window.get_widget("vmm-storage-browse")
|
|
||||||
self.err = vmmErrorDialog(self.topwin,
|
|
||||||
@@ -89,6 +90,11 @@
|
|
||||||
self.addvol.close()
|
|
||||||
return 1
|
|
||||||
|
|
||||||
+ def set_finish_cb(self, callback):
|
|
||||||
+ if self.finish_cb_id:
|
|
||||||
+ self.disconnect(self.finish_cb_id)
|
|
||||||
+ self.finish_cb_id = self.connect("storage-browse-finish", callback)
|
|
||||||
+
|
|
||||||
def set_initial_state(self):
|
|
||||||
pool_list = self.window.get_widget("pool-list")
|
|
||||||
virtManager.host.init_pool_list(pool_list, self.pool_selected)
|
|
@ -1,20 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1251728389 14400
|
|
||||||
# Node ID b70858b9f8c6f9fea21f6e66a10e7b9498f11e5e
|
|
||||||
# Parent 0bdea2b6c30e3b9ac7ca7b35f957598e66fd8c36
|
|
||||||
Don't allow deleting an active VM (bz 518536)
|
|
||||||
|
|
||||||
diff -r 0bdea2b6c30e -r b70858b9f8c6 src/virtManager/manager.py
|
|
||||||
--- a/src/virtManager/manager.py Mon Aug 31 10:07:06 2009 -0400
|
|
||||||
+++ b/src/virtManager/manager.py Mon Aug 31 10:19:49 2009 -0400
|
|
||||||
@@ -684,7 +684,8 @@
|
|
||||||
show_open = bool(vm)
|
|
||||||
show_details = bool(vm)
|
|
||||||
host_details = bool(vm or conn)
|
|
||||||
- delete = bool((vm and vm.is_runable()) or conn)
|
|
||||||
+ delete = bool((vm and vm.is_runable()) or
|
|
||||||
+ (not vm and conn))
|
|
||||||
show_run = bool(vm and vm.is_runable())
|
|
||||||
is_paused = bool(vm and vm.is_paused())
|
|
||||||
if is_paused:
|
|
@ -1,18 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1252937681 14400
|
|
||||||
# Node ID 043ca66e19aabcdb89b8bbe76ef5ded8b0c0fc54
|
|
||||||
# Parent d34def55dbd78e2ad5f099d6a38c1f358c798555
|
|
||||||
Try to avoid 'maximum recursion depth' errors from pylint script.
|
|
||||||
|
|
||||||
diff -r d34def55dbd7 -r 043ca66e19aa tests/pylint-virt-manager.sh
|
|
||||||
--- a/tests/pylint-virt-manager.sh Mon Aug 31 10:45:59 2009 -0400
|
|
||||||
+++ b/tests/pylint-virt-manager.sh Mon Sep 14 10:14:41 2009 -0400
|
|
||||||
@@ -95,6 +95,7 @@
|
|
||||||
-ve "$BUILTIN_TYPE" \
|
|
||||||
-ve "$ERROR_VBOX" \
|
|
||||||
-ve "$UNABLE_IMPORT" \
|
|
||||||
+ -ve "$MAX_RECURSION" \
|
|
||||||
-ve "$EXCEPTHOOK" | \
|
|
||||||
$AWK '\
|
|
||||||
# Strip out any "*** Module name" lines if we dont list any errors for them
|
|
@ -1,96 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1253563791 14400
|
|
||||||
# Node ID f75237b0a84e73552a55ef0121215633c4530879
|
|
||||||
# Parent d3b377306a994f66cd1c03f3bcbef17c4b060720
|
|
||||||
Use timer to refresh available disk space in 'New VM' wizard (bz 502777)
|
|
||||||
|
|
||||||
diff -r d3b377306a99 -r f75237b0a84e src/virtManager/create.py
|
|
||||||
--- a/src/virtManager/create.py Thu Sep 17 13:45:53 2009 -0400
|
|
||||||
+++ b/src/virtManager/create.py Mon Sep 21 16:09:51 2009 -0400
|
|
||||||
@@ -93,6 +93,10 @@
|
|
||||||
# 'Guest' class from the previous failed install
|
|
||||||
self.failed_guest = None
|
|
||||||
|
|
||||||
+ # Host space polling
|
|
||||||
+ self.host_storage_timer = None
|
|
||||||
+ self.host_storage = None
|
|
||||||
+
|
|
||||||
self.window.signal_autoconnect({
|
|
||||||
"on_vmm_newcreate_delete_event" : self.close,
|
|
||||||
|
|
||||||
@@ -136,8 +140,18 @@
|
|
||||||
|
|
||||||
def close(self, ignore1=None, ignore2=None):
|
|
||||||
self.topwin.hide()
|
|
||||||
+ self.remove_timers()
|
|
||||||
+
|
|
||||||
return 1
|
|
||||||
|
|
||||||
+ def remove_timers(self):
|
|
||||||
+ try:
|
|
||||||
+ if self.host_storage_timer:
|
|
||||||
+ gobject.source_remote(self.host_storage_timer)
|
|
||||||
+ self.host_storage_timer = None
|
|
||||||
+ except:
|
|
||||||
+ pass
|
|
||||||
+
|
|
||||||
def set_conn(self, newconn):
|
|
||||||
if self.conn == newconn:
|
|
||||||
return
|
|
||||||
@@ -303,9 +317,11 @@
|
|
||||||
self.window.get_widget("config-cpus").set_value(1)
|
|
||||||
|
|
||||||
# Storage
|
|
||||||
+ if not self.host_storage_timer:
|
|
||||||
+ self.host_storage_timer = gobject.timeout_add(3 * 1000,
|
|
||||||
+ self.host_space_tick)
|
|
||||||
self.window.get_widget("enable-storage").set_active(True)
|
|
||||||
self.window.get_widget("config-storage-create").set_active(True)
|
|
||||||
- # FIXME: Make sure this doesn't exceed host?
|
|
||||||
self.window.get_widget("config-storage-size").set_value(8)
|
|
||||||
self.window.get_widget("config-storage-entry").set_text("")
|
|
||||||
self.window.get_widget("config-storage-nosparse").set_active(True)
|
|
||||||
@@ -437,11 +453,6 @@
|
|
||||||
# Storage
|
|
||||||
have_storage = (is_local or is_storage_capable)
|
|
||||||
storage_tooltip = None
|
|
||||||
- max_storage = self.host_disk_space()
|
|
||||||
- hd_label = "%s available on the host" % self.pretty_storage(max_storage)
|
|
||||||
- hd_label = ("<span color='#484848'>%s</span>" % hd_label)
|
|
||||||
- self.window.get_widget("phys-hd-label").set_markup(hd_label)
|
|
||||||
- self.window.get_widget("config-storage-size").set_range(1, max_storage)
|
|
||||||
|
|
||||||
use_storage = self.window.get_widget("config-storage-select")
|
|
||||||
storage_area = self.window.get_widget("config-storage-area")
|
|
||||||
@@ -863,6 +874,7 @@
|
|
||||||
# FIXME: use a conn specific function after we send pool-added
|
|
||||||
pool = virtinst.util.lookup_pool_by_path(self.conn.vmm, path)
|
|
||||||
if pool:
|
|
||||||
+ pool.refresh(0)
|
|
||||||
avail = int(virtinst.util.get_xml_path(pool.XMLDesc(0),
|
|
||||||
"/pool/available"))
|
|
||||||
|
|
||||||
@@ -870,7 +882,21 @@
|
|
||||||
vfs = os.statvfs(os.path.dirname(path))
|
|
||||||
avail = vfs[statvfs.F_FRSIZE] * vfs[statvfs.F_BAVAIL]
|
|
||||||
|
|
||||||
- return int(avail / 1024.0 / 1024.0 / 1024.0)
|
|
||||||
+ return float(avail / 1024.0 / 1024.0 / 1024.0)
|
|
||||||
+
|
|
||||||
+ def host_space_tick(self):
|
|
||||||
+ max_storage = self.host_disk_space()
|
|
||||||
+ if self.host_storage == max_storage:
|
|
||||||
+ return 1
|
|
||||||
+ self.host_storage = max_storage
|
|
||||||
+
|
|
||||||
+ hd_label = ("%s available in the default location" %
|
|
||||||
+ self.pretty_storage(max_storage))
|
|
||||||
+ hd_label = ("<span color='#484848'>%s</span>" % hd_label)
|
|
||||||
+ self.window.get_widget("phys-hd-label").set_markup(hd_label)
|
|
||||||
+ self.window.get_widget("config-storage-size").set_range(1, self.host_storage)
|
|
||||||
+
|
|
||||||
+ return 1
|
|
||||||
|
|
||||||
def get_config_network_info(self):
|
|
||||||
netidx = self.window.get_widget("config-netdev").get_active()
|
|
@ -1,60 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1253131314 14400
|
|
||||||
# Node ID 9242a7fe76b16c6505bdd3d3d328ae8f0c56da10
|
|
||||||
# Parent 6aa2dc9ada0c43e19680af5b922cd643e35602d0
|
|
||||||
Better logging and error avoidance with net/disk stats routines.
|
|
||||||
|
|
||||||
diff -r 6aa2dc9ada0c -r 9242a7fe76b1 src/virtManager/domain.py
|
|
||||||
--- a/src/virtManager/domain.py Wed Sep 16 16:00:47 2009 -0400
|
|
||||||
+++ b/src/virtManager/domain.py Wed Sep 16 16:01:54 2009 -0400
|
|
||||||
@@ -337,8 +337,12 @@
|
|
||||||
return rx, tx
|
|
||||||
|
|
||||||
for netdev in self.get_network_devices(refresh_if_necc=False):
|
|
||||||
+ dev = netdev[4]
|
|
||||||
+ if not dev:
|
|
||||||
+ continue
|
|
||||||
+
|
|
||||||
try:
|
|
||||||
- io = self.vm.interfaceStats(netdev[4])
|
|
||||||
+ io = self.vm.interfaceStats(dev)
|
|
||||||
if io:
|
|
||||||
rx += io[0]
|
|
||||||
tx += io[4]
|
|
||||||
@@ -347,7 +351,9 @@
|
|
||||||
logging.debug("Net stats not supported: %s" % err)
|
|
||||||
self._stats_net_supported = False
|
|
||||||
else:
|
|
||||||
- logging.error("Error reading net stats: %s" % err)
|
|
||||||
+ logging.error("Error reading net stats for "
|
|
||||||
+ "'%s' dev '%s': %s" %
|
|
||||||
+ (self.get_name(), dev, err))
|
|
||||||
return rx, tx
|
|
||||||
|
|
||||||
def _sample_disk_io_dummy(self):
|
|
||||||
@@ -360,8 +366,12 @@
|
|
||||||
return rd, wr
|
|
||||||
|
|
||||||
for disk in self.get_disk_devices(refresh_if_necc=False):
|
|
||||||
+ dev = disk[2]
|
|
||||||
+ if not dev:
|
|
||||||
+ continue
|
|
||||||
+
|
|
||||||
try:
|
|
||||||
- io = self.vm.blockStats(disk[2])
|
|
||||||
+ io = self.vm.blockStats(dev)
|
|
||||||
if io:
|
|
||||||
rd += io[1]
|
|
||||||
wr += io[3]
|
|
||||||
@@ -370,7 +380,9 @@
|
|
||||||
logging.debug("Disk stats not supported: %s" % err)
|
|
||||||
self._stats_disk_supported = False
|
|
||||||
else:
|
|
||||||
- logging.error("Error reading disk stats: %s" % err)
|
|
||||||
+ logging.error("Error reading disk stats for "
|
|
||||||
+ "'%s' dev '%s': %s" %
|
|
||||||
+ (self.get_name(), dev, err))
|
|
||||||
return rd, wr
|
|
||||||
|
|
||||||
def _get_cur_rate(self, what):
|
|
@ -1,101 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1254762221 14400
|
|
||||||
# Node ID 7df46187c156c7697b9b93e46e3b391a19c4fbb2
|
|
||||||
# Parent 97c40c4fb29f7b1b1aadcebd42781f0d471d4697
|
|
||||||
Add tooltips for toolbar buttons in manager and details.
|
|
||||||
|
|
||||||
diff -r 97c40c4fb29f -r 7df46187c156 src/vmm-details.glade
|
|
||||||
--- a/src/vmm-details.glade Mon Oct 05 11:50:10 2009 -0400
|
|
||||||
+++ b/src/vmm-details.glade Mon Oct 05 13:03:41 2009 -0400
|
|
||||||
@@ -430,6 +430,7 @@
|
|
||||||
<child>
|
|
||||||
<widget class="GtkRadioToolButton" id="control-vm-console">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
+ <property name="tooltip" translatable="yes">Show the graphical console</property>
|
|
||||||
<property name="label" translatable="yes">Console</property>
|
|
||||||
<property name="icon_name">icon_console</property>
|
|
||||||
<property name="active">True</property>
|
|
||||||
@@ -443,6 +444,7 @@
|
|
||||||
<child>
|
|
||||||
<widget class="GtkRadioToolButton" id="control-vm-details">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
+ <property name="tooltip" translatable="yes">Show virtual hardware details</property>
|
|
||||||
<property name="label" translatable="yes">Details</property>
|
|
||||||
<property name="stock_id">gtk-info</property>
|
|
||||||
<property name="group">control-vm-console</property>
|
|
||||||
@@ -465,6 +467,7 @@
|
|
||||||
<child>
|
|
||||||
<widget class="GtkToolButton" id="control-run">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
+ <property name="tooltip" translatable="yes">Power on the virtual machine</property>
|
|
||||||
<property name="is_important">True</property>
|
|
||||||
<property name="label" translatable="yes">Run</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
@@ -479,6 +482,7 @@
|
|
||||||
<child>
|
|
||||||
<widget class="GtkToggleToolButton" id="control-pause">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
+ <property name="tooltip" translatable="yes">Pause the virtual machine</property>
|
|
||||||
<property name="is_important">True</property>
|
|
||||||
<property name="label" translatable="yes">Pause</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
@@ -493,6 +497,7 @@
|
|
||||||
<child>
|
|
||||||
<widget class="GtkMenuToolButton" id="control-shutdown">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
+ <property name="tooltip" translatable="yes">Shutdown the virtual machine</property>
|
|
||||||
<property name="is_important">True</property>
|
|
||||||
<property name="label" translatable="yes">Shut Down</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
@@ -514,6 +519,7 @@
|
|
||||||
<child>
|
|
||||||
<widget class="GtkToggleToolButton" id="control-fullscreen">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
+ <property name="tooltip" translatable="yes">Switch to fullscreen view</property>
|
|
||||||
<property name="stock_id">gtk-fullscreen</property>
|
|
||||||
<signal name="toggled" handler="on_control_fullscreen_toggled"/>
|
|
||||||
</widget>
|
|
||||||
diff -r 97c40c4fb29f -r 7df46187c156 src/vmm-manager.glade
|
|
||||||
--- a/src/vmm-manager.glade Mon Oct 05 11:50:10 2009 -0400
|
|
||||||
+++ b/src/vmm-manager.glade Mon Oct 05 13:03:41 2009 -0400
|
|
||||||
@@ -229,6 +229,7 @@
|
|
||||||
<child>
|
|
||||||
<widget class="GtkToolButton" id="vm-new">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
+ <property name="tooltip" translatable="yes">Create a new virtual machine</property>
|
|
||||||
<property name="label" translatable="yes">_New</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
<property name="icon_name">vm_new_large</property>
|
|
||||||
@@ -251,6 +252,7 @@
|
|
||||||
<child>
|
|
||||||
<widget class="GtkToolButton" id="vm-open">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
+ <property name="tooltip" translatable="yes">Show the virtual machine's details</property>
|
|
||||||
<property name="label" translatable="yes">_Open</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
<property name="icon_name">icon_console</property>
|
|
||||||
@@ -264,6 +266,7 @@
|
|
||||||
<child>
|
|
||||||
<widget class="GtkToolButton" id="vm-run">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
+ <property name="tooltip" translatable="yes">Power on the virtual machine</property>
|
|
||||||
<property name="label" translatable="yes">_Run</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
<property name="stock_id">gtk-media-play</property>
|
|
||||||
@@ -277,6 +280,7 @@
|
|
||||||
<child>
|
|
||||||
<widget class="GtkToggleToolButton" id="vm-pause">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
+ <property name="tooltip" translatable="yes">Pause the virtual machine</property>
|
|
||||||
<property name="label" translatable="yes">_Pause</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
<property name="stock_id">gtk-media-pause</property>
|
|
||||||
@@ -290,6 +294,7 @@
|
|
||||||
<child>
|
|
||||||
<widget class="GtkMenuToolButton" id="vm-shutdown">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
+ <property name="tooltip" translatable="yes">Shutdown the virtual machine</property>
|
|
||||||
<property name="label" translatable="yes">_Shutdown</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
<signal name="clicked" handler="on_vm_shutdown_clicked"/>
|
|
File diff suppressed because it is too large
Load Diff
@ -1,18 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User Cole Robinson <crobinso@redhat.com>
|
|
||||||
# Date 1254247348 14400
|
|
||||||
# Node ID 59f3d7a2ec289145c41437b7f12bcd730e17f340
|
|
||||||
# Parent 6d219a6db4fbcb343d41a959dac7a8623f3dcbb3
|
|
||||||
manager: Actually update VM state text when state changes
|
|
||||||
|
|
||||||
diff -r 6d219a6db4fb -r 59f3d7a2ec28 src/virtManager/manager.py
|
|
||||||
--- a/src/virtManager/manager.py Tue Sep 29 14:00:50 2009 -0400
|
|
||||||
+++ b/src/virtManager/manager.py Tue Sep 29 14:02:28 2009 -0400
|
|
||||||
@@ -584,6 +584,7 @@
|
|
||||||
row[ROW_STATUS] = vm.run_status()
|
|
||||||
row[ROW_STATUS_ICON] = vm.run_status_icon_large()
|
|
||||||
row[ROW_IS_VM_RUNNING] = vm.is_active()
|
|
||||||
+ row[ROW_MARKUP] = self._build_vm_markup(vm, row)
|
|
||||||
model.row_changed(row.path, row.iter)
|
|
||||||
|
|
||||||
|
|
12
virt-manager-0.8.1-perms-qemu-user.patch
Normal file
12
virt-manager-0.8.1-perms-qemu-user.patch
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
diff -rup virt-manager-0.8.1/src/virtManager/uihelpers.py new/src/virtManager/uihelpers.py
|
||||||
|
--- virt-manager-0.8.1/src/virtManager/uihelpers.py 2009-12-03 16:15:01.000000000 -0500
|
||||||
|
+++ new/src/virtManager/uihelpers.py 2009-12-03 17:15:09.101994000 -0500
|
||||||
|
@@ -38,7 +38,7 @@ OPTICAL_MEDIA_KEY = 4
|
||||||
|
# may use a nonroot user, so simply changing this will cause several UI
|
||||||
|
# pieces to attempt to verify that permissions are correct. Eventually this
|
||||||
|
# should be exposed via capabilities so we can determine this programmatically.
|
||||||
|
-QEMU_SYSTEM_EMULATOR_USER = "root"
|
||||||
|
+QEMU_SYSTEM_EMULATOR_USER = "qemu"
|
||||||
|
|
||||||
|
##############################################################
|
||||||
|
# Initialize an error object to use for validation functions #
|
@ -7,55 +7,18 @@
|
|||||||
%define _extra_release %{?dist:%{dist}}%{!?dist:%{?extra_release:%{extra_release}}}
|
%define _extra_release %{?dist:%{dist}}%{!?dist:%{?extra_release:%{extra_release}}}
|
||||||
|
|
||||||
Name: virt-manager
|
Name: virt-manager
|
||||||
Version: 0.8.0
|
Version: 0.8.1
|
||||||
Release: 8%{_extra_release}
|
Release: 1%{_extra_release}
|
||||||
Summary: Virtual Machine Manager
|
Summary: Virtual Machine Manager
|
||||||
|
|
||||||
Group: Applications/Emulators
|
Group: Applications/Emulators
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
URL: http://virt-manager.org/
|
URL: http://virt-manager.org/
|
||||||
Source0: http://virt-manager.org/download/sources/%{name}/%{name}-%{version}.tar.gz
|
Source0: http://virt-manager.org/download/sources/%{name}/%{name}-%{version}.tar.gz
|
||||||
Source1: state_paused.png
|
|
||||||
Source2: state_running.png
|
|
||||||
Source3: state_shutoff.png
|
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
# Fix disk XML mangling via connect/eject cdrom (bz 516116)
|
# Check QEMU permissions against the qemu user
|
||||||
Patch1: %{name}-%{version}-cdrom-eject-driver.patch
|
Patch1: %{name}-%{version}-perms-qemu-user.patch
|
||||||
# Fix delete button sensitivity (bz 518536)
|
|
||||||
Patch2: %{name}-%{version}-no-delete-active.patch
|
|
||||||
# Fix populating text box from storage browser in 'New VM' (bz 517263)
|
|
||||||
Patch3: %{name}-%{version}-newvm-storage-cb.patch
|
|
||||||
# Fix a traceback in an 'Add Hardware' error path (bz 517286)
|
|
||||||
Patch4: %{name}-%{version}-addhw-errmsg-typo.patch
|
|
||||||
# Fixes for pylint script to return nicer results on F11/F12
|
|
||||||
Patch5: %{name}-%{version}-pylint-tweak.patch
|
|
||||||
# Don't close libvirt connection for non-fatal errors (bz 522168)
|
|
||||||
Patch6: %{name}-%{version}-conn-close-exception.patch
|
|
||||||
# Manager UI tweaks
|
|
||||||
Patch7: %{name}-%{version}-manager-ui-tweaks.patch
|
|
||||||
# Generate better errors is disk/net stats polling fails
|
|
||||||
Patch8: %{name}-%{version}-stats-logging.patch
|
|
||||||
# Refresh host disk space in create wizard (bz 502777)
|
|
||||||
Patch9: %{name}-%{version}-refresh-disk-space.patch
|
|
||||||
# Offer to fix disk permission issues (bz 517379)
|
|
||||||
Patch10: %{name}-%{version}-fix-path-perms.patch
|
|
||||||
# Fix VCPU hotplug
|
|
||||||
Patch11: %{name}-%{version}-fix-vcpu-hotplug.patch
|
|
||||||
# Remove access to outdated docs (bz 522823, bz 524805)
|
|
||||||
Patch12: %{name}-%{version}-hide-help-docs.patch
|
|
||||||
# Update VM state text in manager view (bz 526182)
|
|
||||||
Patch13: %{name}-%{version}-update-vm-state.patch
|
|
||||||
# Update translations (bz 493795)
|
|
||||||
Patch14: %{name}-%{version}-update-translations.patch
|
|
||||||
# More translations (bz 493795)
|
|
||||||
Patch15: %{name}-%{version}-more-translations.patch
|
|
||||||
# Don't allow creating a volume without a name (bz 526111)
|
|
||||||
Patch16: %{name}-%{version}-createvol-name.patch
|
|
||||||
# Don't allow volume allocation > capacity (bz 526077)
|
|
||||||
Patch17: %{name}-%{version}-createvol-alloc.patch
|
|
||||||
# Add tooltips for toolbar buttons (bz 524083)
|
|
||||||
Patch18: %{name}-%{version}-toolbar-tooltips.patch
|
|
||||||
|
|
||||||
# These two are just the oldest version tested
|
# These two are just the oldest version tested
|
||||||
Requires: pygtk2 >= 1.99.12-6
|
Requires: pygtk2 >= 1.99.12-6
|
||||||
@ -72,12 +35,6 @@ Requires: gnome-keyring >= 0.4.9
|
|||||||
# will work just fine - keyring functionality will simply be
|
# will work just fine - keyring functionality will simply be
|
||||||
# disabled
|
# disabled
|
||||||
Requires: gnome-python2-gnomekeyring >= 2.15.4
|
Requires: gnome-python2-gnomekeyring >= 2.15.4
|
||||||
Requires: gnome-python2-gnomevfs >= 2.15.4
|
|
||||||
%if 0%{?fedora} <= 9
|
|
||||||
Requires: gnome-python2
|
|
||||||
%else
|
|
||||||
Requires: gnome-python2-gnome
|
|
||||||
%endif
|
|
||||||
# Minimum we've tested with
|
# Minimum we've tested with
|
||||||
Requires: libxml2-python >= 2.6.23
|
Requires: libxml2-python >= 2.6.23
|
||||||
# Required to install Xen & QEMU guests
|
# Required to install Xen & QEMU guests
|
||||||
@ -120,27 +77,7 @@ management API.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
cp %{SOURCE1} pixmaps
|
|
||||||
cp %{SOURCE2} pixmaps
|
|
||||||
cp %{SOURCE3} pixmaps
|
|
||||||
%patch1 -p1
|
%patch1 -p1
|
||||||
%patch2 -p1
|
|
||||||
%patch3 -p1
|
|
||||||
%patch4 -p1
|
|
||||||
%patch5 -p1
|
|
||||||
%patch6 -p1
|
|
||||||
%patch7 -p1
|
|
||||||
%patch8 -p1
|
|
||||||
%patch9 -p1
|
|
||||||
%patch10 -p1
|
|
||||||
%patch11 -p1
|
|
||||||
%patch12 -p1
|
|
||||||
%patch13 -p1
|
|
||||||
%patch14 -p1
|
|
||||||
%patch15 -p1
|
|
||||||
%patch16 -p1
|
|
||||||
%patch17 -p1
|
|
||||||
%patch18 -p1
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%configure
|
%configure
|
||||||
@ -214,6 +151,12 @@ fi
|
|||||||
%{_datadir}/dbus-1/services/%{name}.service
|
%{_datadir}/dbus-1/services/%{name}.service
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Dec 3 2009 Cole Robinson <crobinso@redhat.com> - 0.8.1-1.fc13
|
||||||
|
- Update to release 0.8.1
|
||||||
|
- VM Migration wizard, exposing various migration options
|
||||||
|
- Enumerate CDROM and bridge devices on remote connections
|
||||||
|
- Support storage pool source enumeration for LVM, NFS, and SCSI
|
||||||
|
|
||||||
* Mon Oct 05 2009 Cole Robinson <crobinso@redhat.com> - 0.8.0-8.fc13
|
* Mon Oct 05 2009 Cole Robinson <crobinso@redhat.com> - 0.8.0-8.fc13
|
||||||
- Don't allow creating a volume without a name (bz 526111)
|
- Don't allow creating a volume without a name (bz 526111)
|
||||||
- Don't allow volume allocation > capacity (bz 526077)
|
- Don't allow volume allocation > capacity (bz 526077)
|
||||||
|
Loading…
Reference in New Issue
Block a user