mirror of
https://github.com/virt-manager/virt-manager.git
synced 2024-10-27 10:25:25 +03:00
details: Allow changing disk readonly + shareable attributes.
This commit is contained in:
parent
6abf4f601e
commit
a7ceb7ed52
@ -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")
|
||||
|
@ -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 #
|
||||
########################
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user