[virt-tools-list] [PATCH 2/2] virt-manager: Add support for filesystem Driver Type

Deepak C Shetty deepakcs at linux.vnet.ibm.com
Wed Dec 21 05:59:01 UTC 2011


This patch adds support for the user to select Driver Type
on the addhardware->filesystems page. Currently only 'path'
and 'handle' driver types are supported. When anything but
'path' is selected, the security modes do not apply, hence
they are removed from the page based on user's selected
driver type.

Note: Some changes were needed in libvirt also to ensure
smooth experience while dealing with driver and mode
fields. Related libvirt patches are posted at ...

https://www.redhat.com/archives/libvir-list/2011-December/msg00919.html

Signed-off-by: Deepak C Shetty <deepakcs at linux.vnet.ibm.com>
---

 src/virtManager/addhardware.py |   36 +++++++++++++++++++++++
 src/virtManager/details.py     |   17 ++++++++++-
 src/vmm-add-hardware.glade     |   63 ++++++++++++++++++++++++++++++++++------
 src/vmm-details.glade          |   43 ++++++++++++++++++++++-----
 4 files changed, 141 insertions(+), 18 deletions(-)

diff --git a/src/virtManager/addhardware.py b/src/virtManager/addhardware.py
index 27dfbef..5828932 100644
--- a/src/virtManager/addhardware.py
+++ b/src/virtManager/addhardware.py
@@ -94,6 +94,7 @@ class vmmAddHardware(vmmGObjectUI):
             "on_char_device_type_changed": self.change_char_device_type,
 
             "on_fs_type_combo_changed": self.change_fs_type,
+            "on_fs_driver_combo_changed": self.change_fs_driver,
             "on_fs_source_browse_clicked": self.browse_fs_source,
 
             "on_usbredir_type_changed": self.change_usbredir_type,
@@ -327,6 +328,7 @@ class vmmAddHardware(vmmGObjectUI):
                          [VirtualFilesystem.TYPE_MOUNT,
                           VirtualFilesystem.TYPE_TEMPLATE])
         simple_store_set("fs-mode-combo", VirtualFilesystem.MOUNT_MODES)
+        simple_store_set("fs-driver-combo", VirtualFilesystem.DRIVER_TYPES)
         self.show_pair_combo("fs-type", self.conn.is_openvz())
 
         # Smartcard widgets
@@ -479,6 +481,7 @@ class vmmAddHardware(vmmGObjectUI):
         # FS params
         self.widget("fs-type-combo").set_active(0)
         self.widget("fs-mode-combo").set_active(0)
+        self.widget("fs-driver-combo").set_active(0)
         self.widget("fs-source").set_text("")
         self.widget("fs-target").set_text("")
 
@@ -731,6 +734,14 @@ class vmmAddHardware(vmmGObjectUI):
 
         return combo.get_model()[combo.get_active()][0]
 
+    def get_config_fs_driver(self):
+        name = "fs-driver-combo"
+        combo = self.widget(name)
+        if not combo.get_property("visible"):
+            return None
+
+        return combo.get_model()[combo.get_active()][0]
+
     # Smartcard getters
     def get_config_smartcard_mode(self):
         mode = self.widget("smartcard-mode")
@@ -1012,6 +1023,7 @@ class vmmAddHardware(vmmGObjectUI):
         idx = src.get_active()
         fstype = None
         show_mode_combo = False
+        show_driver_combo = False
 
         if idx >= 0 and src.get_property("visible"):
             fstype = src.get_model()[idx][0]
@@ -1021,10 +1033,31 @@ class vmmAddHardware(vmmGObjectUI):
         else:
             source_text = _("_Source path:")
             show_mode_combo = self.conn.is_qemu()
+            show_driver_combo = self.conn.is_qemu()
 
         self.widget("fs-source-title").set_text(source_text)
         self.widget("fs-source-title").set_use_underline(True)
         self.show_pair_combo("fs-mode", show_mode_combo)
+        self.show_pair_combo("fs-driver", show_driver_combo)
+
+    def change_fs_driver(self, src):
+        idx = src.get_active()
+        fsdriver = None
+        combo = self.widget("fs-mode-combo")
+        label1 = self.widget("fs-mode-title")
+
+        if idx >= 0 and src.get_property("visible"):
+            fsdriver = src.get_model()[idx][0]
+
+        if (fsdriver == virtinst.VirtualFilesystem.DRIVER_PATH or
+            fsdriver == virtinst.VirtualFilesystem.DRIVER_DEFAULT):
+            combo.set_property("visible", True)
+            label1.set_property("visible", True)
+        else:
+            combo.set_property("visible", False)
+            label1.set_property("visible", False)
+
+
 
 
     ######################
@@ -1373,6 +1406,7 @@ class vmmAddHardware(vmmGObjectUI):
         target = self.widget("fs-target").get_text()
         mode = self.get_config_fs_mode()
         fstype = self.get_config_fs_type()
+        driver = self.get_config_fs_driver()
 
         if not source:
             return self.err.val_err(_("A filesystem source must be specified"))
@@ -1391,6 +1425,8 @@ class vmmAddHardware(vmmGObjectUI):
                 self._dev.mode = mode
             if fstype:
                 self._dev.type = fstype
+            if driver:
+                self._dev.driver = driver
         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..038dc4a 100644
--- a/src/virtManager/details.py
+++ b/src/virtManager/details.py
@@ -3134,7 +3134,16 @@ class vmmDetails(vmmGObjectUI):
             return
 
         self.widget("fs-type").set_text(dev.type)
-        self.widget("fs-mode").set_text(dev.mode)
+
+        # mode can be irrelevant depending on the fs driver type
+        # selected.
+        if dev.mode:
+            self.show_pair("fs-mode", True)
+            self.widget("fs-mode").set_text(dev.mode)
+        else:
+            self.show_pair("fs-mode", False)
+
+        self.widget("fs-driver").set_text(dev.driver)
         self.widget("fs-source").set_text(dev.source)
         self.widget("fs-target").set_text(dev.target)
 
@@ -3462,6 +3471,12 @@ class vmmDetails(vmmGObjectUI):
             # Set a default selection
             selection.select_path("0")
 
+    def show_pair(self, basename, show):
+        combo = self.widget(basename)
+        label = self.widget(basename + "-title")
+
+        combo.set_property("visible", show)
+        label.set_property("visible", show)
 
 vmmGObjectUI.type_register(vmmDetails)
 vmmDetails.signal_new(vmmDetails, "action-save-domain", [str, str])
diff --git a/src/vmm-add-hardware.glade b/src/vmm-add-hardware.glade
index 3d13c49..0ec4df4 100644
--- a/src/vmm-add-hardware.glade
+++ b/src/vmm-add-hardware.glade
@@ -2076,7 +2076,7 @@ access in the guest.</property>
                                       </packing>
                                     </child>
                                     <child>
-                                      <widget class="GtkLabel" id="label19">
+                                      <widget class="GtkLabel" id="fs-mode-title">
                                         <property name="visible">True</property>
                                         <property name="xalign">0</property>
                                         <property name="label" translatable="yes">_Mode:</property>
@@ -2119,6 +2119,51 @@ access in the guest.</property>
                                         <property name="bottom_attach">2</property>
                                       </packing>
                                     </child>
+                                   <child>
+                                      <widget class="GtkLabel" id="fs-driver-title">
+                                        <property name="visible">True</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">_Driver:</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="mnemonic_widget">fs-driver-combo</property>
+                                      </widget>
+                                      <packing>
+                                        <property name="top_attach">2</property>
+                                        <property name="bottom_attach">3</property>
+                                        <property name="x_options">GTK_FILL</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <widget class="GtkHBox" id="hbox15">
+                                        <property name="visible">True</property>
+                                        <child>
+                                          <widget class="GtkComboBox" id="fs-driver-combo">
+                                            <property name="visible">True</property>
+                                            <signal name="changed" handler="on_fs_driver_combo_changed"/>
+                                          </widget>
+                                          <packing>
+                                            <property name="expand">False</property>
+                                            <property name="position">0</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <widget class="GtkLabel" id="fs-driver-label">
+                                            <property name="visible">True</property>
+                                            <property name="xalign">0</property>
+                                            <property name="label" translatable="yes">Default</property>
+                                          </widget>
+                                          <packing>
+                                            <property name="position">1</property>
+                                          </packing>
+                                        </child>
+                                      </widget>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                        <property name="top_attach">2</property>
+                                        <property name="bottom_attach">3</property>
+                                      </packing>
+                                    </child>
                                     <child>
                                       <widget class="GtkLabel" id="fs-source-title">
                                         <property name="visible">True</property>
@@ -2128,8 +2173,8 @@ access in the guest.</property>
                                         <property name="mnemonic_widget">fs-source</property>
                                       </widget>
                                       <packing>
-                                        <property name="top_attach">2</property>
-                                        <property name="bottom_attach">3</property>
+                                        <property name="top_attach">3</property>
+                                        <property name="bottom_attach">4</property>
                                         <property name="x_options">GTK_FILL</property>
                                       </packing>
                                     </child>
@@ -2142,8 +2187,8 @@ access in the guest.</property>
                                         <property name="mnemonic_widget">fs-target</property>
                                       </widget>
                                       <packing>
-                                        <property name="top_attach">3</property>
-                                        <property name="bottom_attach">4</property>
+                                        <property name="top_attach">4</property>
+                                        <property name="bottom_attach">5</property>
                                         <property name="x_options">GTK_FILL</property>
                                       </packing>
                                     </child>
@@ -2156,8 +2201,8 @@ access in the guest.</property>
                                       <packing>
                                         <property name="left_attach">1</property>
                                         <property name="right_attach">2</property>
-                                        <property name="top_attach">3</property>
-                                        <property name="bottom_attach">4</property>
+                                        <property name="top_attach">4</property>
+                                        <property name="bottom_attach">5</property>
                                       </packing>
                                     </child>
                                     <child>
@@ -2192,8 +2237,8 @@ access in the guest.</property>
                                       <packing>
                                         <property name="left_attach">1</property>
                                         <property name="right_attach">2</property>
-                                        <property name="top_attach">2</property>
-                                        <property name="bottom_attach">3</property>
+                                        <property name="top_attach">3</property>
+                                        <property name="bottom_attach">4</property>
                                       </packing>
                                     </child>
                                   </widget>
diff --git a/src/vmm-details.glade b/src/vmm-details.glade
index 852db1f..b89f518 100644
--- a/src/vmm-details.glade
+++ b/src/vmm-details.glade
@@ -5676,7 +5676,7 @@ I/O:</property>
                                         <property name="column_spacing">6</property>
                                         <property name="row_spacing">6</property>
                                         <child>
-                                          <widget class="GtkLabel" id="label63">
+                                          <widget class="GtkLabel" id="fs-mode-title">
                                             <property name="visible">True</property>
                                             <property name="xalign">0</property>
                                             <property name="label" translatable="yes">Mode:</property>
@@ -5689,10 +5689,10 @@ I/O:</property>
                                           </packing>
                                         </child>
                                         <child>
-                                          <widget class="GtkLabel" id="label65">
+                                          <widget class="GtkLabel" id="label64">
                                             <property name="visible">True</property>
                                             <property name="xalign">0</property>
-                                            <property name="label" translatable="yes">Source:</property>
+                                            <property name="label" translatable="yes">Driver:</property>
                                           </widget>
                                           <packing>
                                             <property name="top_attach">2</property>
@@ -5702,10 +5702,10 @@ I/O:</property>
                                           </packing>
                                         </child>
                                         <child>
-                                          <widget class="GtkLabel" id="label66">
+                                          <widget class="GtkLabel" id="label65">
                                             <property name="visible">True</property>
                                             <property name="xalign">0</property>
-                                            <property name="label" translatable="yes">Target:</property>
+                                            <property name="label" translatable="yes">Source:</property>
                                           </widget>
                                           <packing>
                                             <property name="top_attach">3</property>
@@ -5715,6 +5715,19 @@ I/O:</property>
                                           </packing>
                                         </child>
                                         <child>
+                                          <widget class="GtkLabel" id="label66">
+                                            <property name="visible">True</property>
+                                            <property name="xalign">0</property>
+                                            <property name="label" translatable="yes">Target:</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>
@@ -5729,11 +5742,10 @@ I/O:</property>
                                           </packing>
                                         </child>
                                         <child>
-                                          <widget class="GtkLabel" id="fs-source">
+                                          <widget class="GtkLabel" id="fs-driver">
                                             <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>
@@ -5744,7 +5756,7 @@ I/O:</property>
                                           </packing>
                                         </child>
                                         <child>
-                                          <widget class="GtkLabel" id="fs-target">
+                                          <widget class="GtkLabel" id="fs-source">
                                             <property name="visible">True</property>
                                             <property name="xalign">0</property>
                                             <property name="label">label</property>
@@ -5759,6 +5771,21 @@ I/O:</property>
                                           </packing>
                                         </child>
                                         <child>
+                                          <widget class="GtkLabel" id="fs-target">
+                                            <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>




More information about the virt-tools-list mailing list