[virt-tools-list] [virt-manager PATCH v2 2/3] details: Add SCSI persistent reservation support for LUN Passthrough

Lin Ma lma at suse.com
Wed Oct 10 09:50:34 UTC 2018


It's a common requirement for VMs to send SCSI PR commands in VM cluster
environment. This patch adds the managed mode support of scsi persistent
reservation in details page.

Signed-off-by: Lin Ma <lma at suse.com>
---
 ui/details.ui          | 25 +++++++++++++++++++++++++
 virtManager/details.py | 10 +++++++++-
 virtManager/domain.py  |  5 ++++-
 3 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/ui/details.ui b/ui/details.ui
index 6e3ec558..c18070c8 100644
--- a/ui/details.ui
+++ b/ui/details.ui
@@ -3647,6 +3647,31 @@
                                                         <property name="top_attach">2</property>
                                                       </packing>
                                                     </child>
+                                                    <child>
+                                                      <object class="GtkLabel" id="disk-pr-label">
+                                                        <property name="visible">True</property>
+                                                        <property name="can_focus">False</property>
+                                                        <property name="halign">end</property>
+                                                        <property name="label" translatable="yes">Persistent _Reservations:</property>
+                                                        <property name="use_underline">True</property>
+                                                        <property name="mnemonic_widget">disk-pr-checkbox</property>
+                                                      </object>
+                                                      <packing>
+                                                        <property name="left_attach">0</property>
+                                                        <property name="top_attach">4</property>
+                                                      </packing>
+                                                    </child>
+                                                    <child>
+                                                      <object class="GtkCheckButton" id="disk-pr-checkbox">
+                                                        <property name="visible">True</property>
+                                                        <property name="can_focus">True</property>
+                                                        <signal name="toggled" handler="on_disk_pr_checkbox_toggled" swapped="no"/>
+                                                      </object>
+                                                      <packing>
+                                                        <property name="left_attach">1</property>
+                                                        <property name="top_attach">4</property>
+                                                      </packing>
+                                                    </child>
                                                   </object>
                                                   <packing>
                                                     <property name="expand">False</property>
diff --git a/virtManager/details.py b/virtManager/details.py
index cc054e43..4640a9fb 100644
--- a/virtManager/details.py
+++ b/virtManager/details.py
@@ -66,6 +66,7 @@ from .storagebrowse import vmmStorageBrowser
  EDIT_DISK_FORMAT,
  EDIT_DISK_SGIO,
  EDIT_DISK_PATH,
+ EDIT_DISK_PR,
 
  EDIT_SOUND_MODEL,
 
@@ -100,7 +101,7 @@ from .storagebrowse import vmmStorageBrowser
 
  EDIT_FS,
 
- EDIT_HOSTDEV_ROMBAR) = range(1, 55)
+ EDIT_HOSTDEV_ROMBAR) = range(1, 56)
 
 
 # Columns in hw list model
@@ -560,6 +561,7 @@ class vmmDetails(vmmGObjectUI):
             "on_disk_format_changed": self.disk_format_changed,
             "on_disk_serial_changed": lambda *x: self.enable_apply(x, EDIT_DISK_SERIAL),
             "on_disk_sgio_entry_changed": lambda *x: self.enable_apply(x, EDIT_DISK_SGIO),
+            "on_disk_pr_checkbox_toggled": lambda *x: self.enable_apply(x, EDIT_DISK_PR),
 
             "on_network_model_combo_changed": lambda *x: self.enable_apply(x, EDIT_NET_MODEL),
             "on_network_mac_entry_changed": lambda *x: self.enable_apply(x,
@@ -2150,6 +2152,9 @@ class vmmDetails(vmmGObjectUI):
             sgio = uiutil.get_list_selection(self.widget("disk-sgio"))
             kwargs["sgio"] = sgio
 
+        if self.edited(EDIT_DISK_PR):
+            kwargs["managed_pr"] = self.widget("disk-pr-checkbox").get_active()
+
         if self.edited(EDIT_DISK_BUS):
             bus = uiutil.get_list_selection(self.widget("disk-bus"))
             addr = None
@@ -2692,9 +2697,12 @@ class vmmDetails(vmmGObjectUI):
 
         is_lun = disk.device == virtinst.DeviceDisk.DEVICE_LUN
         uiutil.set_grid_row_visible(self.widget("disk-sgio"), is_lun)
+        uiutil.set_grid_row_visible(self.widget("disk-pr-checkbox"), is_lun)
         if is_lun:
             self.build_disk_sgio(self.vm, self.widget("disk-sgio"))
             uiutil.set_list_selection(self.widget("disk-sgio"), disk.sgio)
+            managed = disk.reservations_managed == "yes"
+            self.widget("disk-pr-checkbox").set_active(managed)
 
         self.widget("disk-size").set_text(size)
         uiutil.set_list_selection(self.widget("disk-cache"), cache)
diff --git a/virtManager/domain.py b/virtManager/domain.py
index 45916ed8..c5d33b25 100644
--- a/virtManager/domain.py
+++ b/virtManager/domain.py
@@ -681,7 +681,7 @@ class vmmDomain(vmmLibvirtObject):
             shareable=_SENTINEL, removable=_SENTINEL, cache=_SENTINEL,
             io=_SENTINEL, discard=_SENTINEL, detect_zeroes=_SENTINEL,
             driver_type=_SENTINEL, bus=_SENTINEL, addrstr=_SENTINEL,
-            sgio=_SENTINEL):
+            sgio=_SENTINEL, managed_pr=_SENTINEL):
         xmlobj = self._make_xmlobj_to_define()
         editdev = self._lookup_device_to_define(xmlobj, devobj, do_hotplug)
         if not editdev:
@@ -741,6 +741,9 @@ class vmmDomain(vmmLibvirtObject):
         if sgio != _SENTINEL:
             editdev.sgio = sgio or None
 
+        if managed_pr != _SENTINEL:
+            editdev.reservations_managed = "yes" if managed_pr else None
+
         if bus != _SENTINEL:
             _change_bus()
 
-- 
2.19.0




More information about the virt-tools-list mailing list