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
|
HW_LIST_TYPE_VIDEO = 12
|
||||||
|
|
||||||
apply_pages = [ HW_LIST_TYPE_GENERAL, HW_LIST_TYPE_CPU, HW_LIST_TYPE_MEMORY,
|
apply_pages = [ HW_LIST_TYPE_GENERAL, HW_LIST_TYPE_CPU, HW_LIST_TYPE_MEMORY,
|
||||||
HW_LIST_TYPE_BOOT]
|
HW_LIST_TYPE_BOOT, HW_LIST_TYPE_DISK]
|
||||||
remove_pages = [ HW_LIST_TYPE_DISK, HW_LIST_TYPE_NIC, HW_LIST_TYPE_INPUT,
|
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_GRAPHICS, HW_LIST_TYPE_SOUND, HW_LIST_TYPE_CHAR,
|
||||||
HW_LIST_TYPE_HOSTDEV, HW_LIST_TYPE_VIDEO ]
|
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_acpi_changed": self.config_enable_apply,
|
||||||
"on_overview_apic_changed": self.config_enable_apply,
|
"on_overview_apic_changed": self.config_enable_apply,
|
||||||
"on_overview_clock_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_memory_changed": self.config_memory_changed,
|
||||||
"on_config_maxmem_changed": self.config_maxmem_changed,
|
"on_config_maxmem_changed": self.config_maxmem_changed,
|
||||||
"on_config_boot_device_changed": self.config_boot_options_changed,
|
"on_config_boot_device_changed": self.config_boot_options_changed,
|
||||||
"on_config_autostart_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,
|
"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("config-apply").set_sensitive(True)
|
||||||
self.window.get_widget("security-label").set_sensitive(not button.get_active())
|
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
|
# Memory
|
||||||
def config_get_maxmem(self):
|
def config_get_maxmem(self):
|
||||||
maxadj = self.window.get_widget("config-maxmem").get_adjustment()
|
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)
|
pagetype = self.get_hw_selection(HW_LIST_COL_TYPE)
|
||||||
ret = False
|
ret = False
|
||||||
|
|
||||||
|
info = self.get_hw_selection(HW_LIST_COL_DEVICE)
|
||||||
|
|
||||||
if pagetype is HW_LIST_TYPE_GENERAL:
|
if pagetype is HW_LIST_TYPE_GENERAL:
|
||||||
ret = self.config_overview_apply()
|
ret = self.config_overview_apply()
|
||||||
elif pagetype is HW_LIST_TYPE_CPU:
|
elif pagetype is HW_LIST_TYPE_CPU:
|
||||||
@ -909,6 +909,8 @@ class vmmDetails(gobject.GObject):
|
|||||||
ret = self.config_memory_apply()
|
ret = self.config_memory_apply()
|
||||||
elif pagetype is HW_LIST_TYPE_BOOT:
|
elif pagetype is HW_LIST_TYPE_BOOT:
|
||||||
ret = self.config_boot_options_apply()
|
ret = self.config_boot_options_apply()
|
||||||
|
elif pagetype is HW_LIST_TYPE_DISK:
|
||||||
|
ret = self.config_disk_apply(info[1])
|
||||||
else:
|
else:
|
||||||
ret = False
|
ret = False
|
||||||
|
|
||||||
@ -1007,6 +1009,17 @@ class vmmDetails(gobject.GObject):
|
|||||||
self.vm.hotplug_cdrom_media,
|
self.vm.hotplug_cdrom_media,
|
||||||
(dev_id_info, newpath, _type))
|
(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
|
# Device removal
|
||||||
def remove_device(self, dev_type, dev_id_info):
|
def remove_device(self, dev_type, dev_id_info):
|
||||||
@ -1282,6 +1295,8 @@ class vmmDetails(gobject.GObject):
|
|||||||
share = diskinfo[7]
|
share = diskinfo[7]
|
||||||
bus = diskinfo[8]
|
bus = diskinfo[8]
|
||||||
|
|
||||||
|
is_cdrom = (devtype == virtinst.VirtualDisk.DEVICE_CDROM)
|
||||||
|
|
||||||
if devtype == virtinst.VirtualDisk.DEVICE_FLOPPY:
|
if devtype == virtinst.VirtualDisk.DEVICE_FLOPPY:
|
||||||
pretty_name = "floppy"
|
pretty_name = "floppy"
|
||||||
elif bus:
|
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-target-type").set_text(pretty_name)
|
||||||
|
|
||||||
self.window.get_widget("disk-readonly").set_active(ro)
|
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)
|
self.window.get_widget("disk-shareable").set_active(share)
|
||||||
|
|
||||||
bus = diskinfo[8] or _("Unknown")
|
bus = diskinfo[8] or _("Unknown")
|
||||||
|
@ -426,6 +426,9 @@ class vmmDomain(gobject.GObject):
|
|||||||
return doc.serialize(), disk_fragment.serialize()
|
return doc.serialize(), disk_fragment.serialize()
|
||||||
|
|
||||||
def define_cdrom_media(self, dev_id_info, newpath, _type=None):
|
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:
|
if not newpath:
|
||||||
func = self._media_xml_disconnect
|
func = self._media_xml_disconnect
|
||||||
else:
|
else:
|
||||||
@ -593,6 +596,7 @@ class vmmDomain(gobject.GObject):
|
|||||||
|
|
||||||
return util.xml_parse_wrapper(xml, change_feature)
|
return util.xml_parse_wrapper(xml, change_feature)
|
||||||
|
|
||||||
|
# 'Overview' section settings
|
||||||
def define_acpi(self, do_enable):
|
def define_acpi(self, do_enable):
|
||||||
if do_enable == self.get_acpi():
|
if do_enable == self.get_acpi():
|
||||||
return
|
return
|
||||||
@ -618,6 +622,41 @@ class vmmDomain(gobject.GObject):
|
|||||||
|
|
||||||
return self.redefine(util.xml_parse_wrapper, change_clock, newclock)
|
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 #
|
# End XML Altering API #
|
||||||
########################
|
########################
|
||||||
|
@ -2465,6 +2465,7 @@ I/O:</property>
|
|||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
|
<signal name="toggled" handler="on_disk_readonly_changed"/>
|
||||||
</widget>
|
</widget>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
@ -2480,6 +2481,7 @@ I/O:</property>
|
|||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
|
<signal name="toggled" handler="on_disk_shareable_changed"/>
|
||||||
</widget>
|
</widget>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
|
Loading…
Reference in New Issue
Block a user