details: Allow changing disk readonly + shareable attributes.

This commit is contained in:
Cole Robinson 2009-11-04 16:30:51 -05:00
parent 6abf4f601e
commit a7ceb7ed52
3 changed files with 64 additions and 7 deletions

View File

@ -60,8 +60,8 @@ HW_LIST_TYPE_HOSTDEV = 11
HW_LIST_TYPE_VIDEO = 12
apply_pages = [ HW_LIST_TYPE_GENERAL, HW_LIST_TYPE_CPU, HW_LIST_TYPE_MEMORY,
HW_LIST_TYPE_BOOT]
remove_pages = [ HW_LIST_TYPE_DISK, HW_LIST_TYPE_NIC, HW_LIST_TYPE_INPUT,
HW_LIST_TYPE_BOOT, HW_LIST_TYPE_DISK]
remove_pages = [ HW_LIST_TYPE_NIC, HW_LIST_TYPE_INPUT,
HW_LIST_TYPE_GRAPHICS, HW_LIST_TYPE_SOUND, HW_LIST_TYPE_CHAR,
HW_LIST_TYPE_HOSTDEV, HW_LIST_TYPE_VIDEO ]
@ -176,11 +176,13 @@ class vmmDetails(gobject.GObject):
"on_overview_acpi_changed": self.config_enable_apply,
"on_overview_apic_changed": self.config_enable_apply,
"on_overview_clock_changed": self.config_enable_apply,
"on_config_vcpus_changed": self.config_vcpus_changed,
"on_config_vcpus_changed": self.config_enable_apply,
"on_config_memory_changed": self.config_memory_changed,
"on_config_maxmem_changed": self.config_maxmem_changed,
"on_config_boot_device_changed": self.config_boot_options_changed,
"on_config_autostart_changed": self.config_boot_options_changed,
"on_disk_readonly_changed": self.config_enable_apply,
"on_disk_shareable_changed": self.config_enable_apply,
"on_config_apply_clicked": self.config_apply,
@ -825,10 +827,6 @@ class vmmDetails(gobject.GObject):
self.window.get_widget("config-apply").set_sensitive(True)
self.window.get_widget("security-label").set_sensitive(not button.get_active())
# CPUS
def config_vcpus_changed(self, src):
self.window.get_widget("config-apply").set_sensitive(True)
# Memory
def config_get_maxmem(self):
maxadj = self.window.get_widget("config-maxmem").get_adjustment()
@ -901,6 +899,8 @@ class vmmDetails(gobject.GObject):
pagetype = self.get_hw_selection(HW_LIST_COL_TYPE)
ret = False
info = self.get_hw_selection(HW_LIST_COL_DEVICE)
if pagetype is HW_LIST_TYPE_GENERAL:
ret = self.config_overview_apply()
elif pagetype is HW_LIST_TYPE_CPU:
@ -909,6 +909,8 @@ class vmmDetails(gobject.GObject):
ret = self.config_memory_apply()
elif pagetype is HW_LIST_TYPE_BOOT:
ret = self.config_boot_options_apply()
elif pagetype is HW_LIST_TYPE_DISK:
ret = self.config_disk_apply(info[1])
else:
ret = False
@ -1007,6 +1009,17 @@ class vmmDetails(gobject.GObject):
self.vm.hotplug_cdrom_media,
(dev_id_info, newpath, _type))
# Disk options
def config_disk_apply(self, dev_id_info):
do_readonly = self.window.get_widget("disk-readonly").get_active()
do_shareable = self.window.get_widget("disk-shareable").get_active()
return self._change_config_helper([self.vm.define_disk_readonly,
self.vm.define_disk_shareable],
[(dev_id_info, do_readonly),
(dev_id_info, do_shareable)])
# Device removal
def remove_device(self, dev_type, dev_id_info):
@ -1282,6 +1295,8 @@ class vmmDetails(gobject.GObject):
share = diskinfo[7]
bus = diskinfo[8]
is_cdrom = (devtype == virtinst.VirtualDisk.DEVICE_CDROM)
if devtype == virtinst.VirtualDisk.DEVICE_FLOPPY:
pretty_name = "floppy"
elif bus:
@ -1294,6 +1309,7 @@ class vmmDetails(gobject.GObject):
self.window.get_widget("disk-target-type").set_text(pretty_name)
self.window.get_widget("disk-readonly").set_active(ro)
self.window.get_widget("disk-readonly").set_sensitive(not is_cdrom)
self.window.get_widget("disk-shareable").set_active(share)
bus = diskinfo[8] or _("Unknown")

View File

@ -426,6 +426,9 @@ class vmmDomain(gobject.GObject):
return doc.serialize(), disk_fragment.serialize()
def define_cdrom_media(self, dev_id_info, newpath, _type=None):
if not self.check_device_is_present("disk", dev_id_info):
return
if not newpath:
func = self._media_xml_disconnect
else:
@ -593,6 +596,7 @@ class vmmDomain(gobject.GObject):
return util.xml_parse_wrapper(xml, change_feature)
# 'Overview' section settings
def define_acpi(self, do_enable):
if do_enable == self.get_acpi():
return
@ -618,6 +622,41 @@ class vmmDomain(gobject.GObject):
return self.redefine(util.xml_parse_wrapper, change_clock, newclock)
def _change_disk_param(self, doc, ctx, dev_id_info, node_name, newvalue):
disk_node = self._get_device_xml_nodes(ctx, "disk", dev_id_info)[0]
found_node = None
for child in disk_node.children:
if child.name == node_name:
found_node = child
break
child = child.next
if bool(found_node) != newvalue:
if not newvalue:
found_node.unlinkNode()
found_node.freeNode()
else:
disk_node.newChild(None, node_name, None)
return doc.serialize()
# Disk properties
def define_disk_readonly(self, dev_id_info, do_readonly):
if not self.check_device_is_present("disk", dev_id_info):
return
return self.redefine(util.xml_parse_wrapper, self._change_disk_param,
dev_id_info, "readonly", do_readonly)
def define_disk_shareable(self, dev_id_info, do_shareable):
if not self.check_device_is_present("disk", dev_id_info):
return
return self.redefine(util.xml_parse_wrapper, self._change_disk_param,
dev_id_info, "shareable", do_shareable)
########################
# End XML Altering API #
########################

View File

@ -2465,6 +2465,7 @@ I/O:</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_disk_readonly_changed"/>
</widget>
<packing>
<property name="left_attach">1</property>
@ -2480,6 +2481,7 @@ I/O:</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_disk_shareable_changed"/>
</widget>
<packing>
<property name="left_attach">1</property>