Enables exporting filesytem as a readonly mount for guest, by default read-write access is given (currently only works for QEMU/KVM driver) The support for the same in libvirt was added recently at ... https://www.redhat.com/archives/libvir-list/2011-December/msg00937.html Signed-off-by: Deepak C Shetty <deepakcs@xxxxxxxxxxxxxxxxxx> --- src/virtManager/addhardware.py | 17 +++++++++++++++++ src/virtManager/details.py | 4 ++++ src/vmm-add-hardware.glade | 16 ++++++++++++++++ src/vmm-details.glade | 28 ++++++++++++++++++++++++++++ 4 files changed, 65 insertions(+), 0 deletions(-) diff --git a/src/virtManager/addhardware.py b/src/virtManager/addhardware.py index 1b0f004..3e746d5 100644 --- a/src/virtManager/addhardware.py +++ b/src/virtManager/addhardware.py @@ -328,6 +328,7 @@ class vmmAddHardware(vmmGObjectUI): VirtualFilesystem.TYPE_TEMPLATE]) simple_store_set("fs-mode-combo", VirtualFilesystem.MOUNT_MODES) self.show_pair_combo("fs-type", self.conn.is_openvz()) + self.show_check_button("fs-readonly", self.conn.is_qemu()) # Smartcard widgets combo = self.widget("smartcard-mode") @@ -481,6 +482,7 @@ class vmmAddHardware(vmmGObjectUI): self.widget("fs-mode-combo").set_active(0) self.widget("fs-source").set_text("") self.widget("fs-target").set_text("") + self.widget("fs-readonly").set_active(False) # Hide all notebook pages, so the wizard isn't as big as the largest # page @@ -731,6 +733,14 @@ class vmmAddHardware(vmmGObjectUI): return combo.get_model()[combo.get_active()][0] + def get_config_fs_readonly(self): + name = "fs-readonly" + check = self.widget(name) + if not check.get_property("visible"): + return None + + return check.get_active() + # Smartcard getters def get_config_smartcard_mode(self): mode = self.widget("smartcard-mode") @@ -862,6 +872,10 @@ class vmmAddHardware(vmmGObjectUI): combo.set_property("visible", show_combo) label.set_property("visible", not show_combo) + def show_check_button(self, basename, show): + check = self.widget(basename) + check.set_property("visible", show) + # Storage listeners def browse_storage(self, ignore1): self._browse_file(self.widget("config-storage-entry")) @@ -1373,6 +1387,7 @@ class vmmAddHardware(vmmGObjectUI): target = self.widget("fs-target").get_text() mode = self.get_config_fs_mode() fstype = self.get_config_fs_type() + readonly = self.get_config_fs_readonly() if not source: return self.err.val_err(_("A filesystem source must be specified")) @@ -1387,6 +1402,8 @@ class vmmAddHardware(vmmGObjectUI): self._dev.mode = mode if fstype: self._dev.type = fstype + if readonly: + self._dev.readonly = readonly except Exception, e: return self.err.val_err(_("Filesystem parameter error"), e) diff --git a/src/virtManager/details.py b/src/virtManager/details.py index fcd0652..2b45dc1 100644 --- a/src/virtManager/details.py +++ b/src/virtManager/details.py @@ -3137,6 +3137,10 @@ class vmmDetails(vmmGObjectUI): self.widget("fs-mode").set_text(dev.mode) self.widget("fs-source").set_text(dev.source) self.widget("fs-target").set_text(dev.target) + if dev.readonly: + self.widget("fs-readonly").set_text("Yes") + else: + self.widget("fs-readonly").set_text("No") def refresh_boot_page(self): # Refresh autostart diff --git a/src/vmm-add-hardware.glade b/src/vmm-add-hardware.glade index 3d13c49..a0b463f 100644 --- a/src/vmm-add-hardware.glade +++ b/src/vmm-add-hardware.glade @@ -2161,6 +2161,22 @@ access in the guest.</property> </packing> </child> <child> + <widget class="GtkCheckButton" id="fs-readonly"> + <property name="label" translatable="yes">E_xport filesystem as readonly mount</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + </packing> + </child> + <child> <widget class="GtkHBox" id="hbox13"> <property name="visible">True</property> <property name="spacing">6</property> diff --git a/src/vmm-details.glade b/src/vmm-details.glade index 852db1f..660f4b9 100644 --- a/src/vmm-details.glade +++ b/src/vmm-details.glade @@ -5715,6 +5715,19 @@ I/O:</property> </packing> </child> <child> + <widget class="GtkLabel" id="fs-readonly-title"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Readonly Filesystem:</property> + </widget> + <packing> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> <widget class="GtkLabel" id="fs-mode"> <property name="visible">True</property> <property name="xalign">0</property> @@ -5759,6 +5772,21 @@ I/O:</property> </packing> </child> <child> + <widget class="GtkLabel" id="fs-readonly"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label">label</property> + <property name="ellipsize">end</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> <widget class="GtkLabel" id="label67"> <property name="visible">True</property> <property name="xalign">0</property>