Blame SOURCES/virt-manager-prefs-Add-a-setting-to-enable-disable-libguestfs-inspection.patch

e4cbec
From b62d337031b89d9c3cfdb3ee35a618f9fdcd013d Mon Sep 17 00:00:00 2001
e4cbec
Message-Id: <b62d337031b89d9c3cfdb3ee35a618f9fdcd013d@dist-git>
e4cbec
From: Pavel Hrdina <phrdina@redhat.com>
e4cbec
Date: Tue, 13 Mar 2018 13:00:59 -0400
e4cbec
Subject: [PATCH] prefs: Add a setting to enable/disable libguestfs inspection
e4cbec
e4cbec
From: Cole Robinson <crobinso@redhat.com>
e4cbec
e4cbec
Rather than key it on the library being available. Makes it much
e4cbec
easier to test both modes of behavior.
e4cbec
e4cbec
Fix up a few inspection bugs while I'm in the area, and convert
e4cbec
it to be more singleton like.
e4cbec
e4cbec
(cherry picked from commit 6b1278ccda1bf52fd51c619858dfeaffb12a4029)
e4cbec
e4cbec
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1566187
e4cbec
e4cbec
Conflicts:
e4cbec
    - The codebase is completely different so this patch backports only
e4cbec
      the bare minimum to add setting to enable/disable inspection
e4cbec
e4cbec
Reviewed-by: Cole Robinson <crobinso@redhat.com>
e4cbec
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
e4cbec
---
e4cbec
 .../org.virt-manager.virt-manager.gschema.xml |  6 ++
e4cbec
 ui/preferences.ui                             | 65 ++++++++++++++++++-
e4cbec
 virtManager/config.py                         | 11 ++++
e4cbec
 virtManager/details.py                        |  4 +-
e4cbec
 virtManager/engine.py                         |  4 +-
e4cbec
 virtManager/preferences.py                    | 23 +++++++
e4cbec
 6 files changed, 108 insertions(+), 5 deletions(-)
e4cbec
e4cbec
diff --git a/data/org.virt-manager.virt-manager.gschema.xml b/data/org.virt-manager.virt-manager.gschema.xml
e4cbec
index d88450f5..f6db721b 100644
e4cbec
--- a/data/org.virt-manager.virt-manager.gschema.xml
e4cbec
+++ b/data/org.virt-manager.virt-manager.gschema.xml
e4cbec
@@ -47,6 +47,12 @@
e4cbec
       <description>Show system tray icon while app is running</description>
e4cbec
     </key>
e4cbec
 
e4cbec
+    <key name="enable-libguestfs-vm-inspection" type="b">
e4cbec
+      <default>true</default>
e4cbec
+      <summary>Enable libguestfs VM inspection</summary>
e4cbec
+      <description>Enable libguestfs VM inspection for things like OS icons, installed applications, etc. This only works if python libguestfs bindings are installed.</description>
e4cbec
+    </key>
e4cbec
+
e4cbec
     <key name="manager-window-height" type="i">
e4cbec
       <default>0</default>
e4cbec
       <summary>Default manager window height</summary>
e4cbec
diff --git a/ui/preferences.ui b/ui/preferences.ui
e4cbec
index 81802a28..01b54602 100644
e4cbec
--- a/ui/preferences.ui
e4cbec
+++ b/ui/preferences.ui
e4cbec
@@ -1,5 +1,5 @@
e4cbec
 
e4cbec
-
e4cbec
+
e4cbec
 <interface>
e4cbec
   <requires lib="gtk+" version="3.14"/>
e4cbec
   <object class="GtkAdjustment" id="adjustment1">
e4cbec
@@ -49,6 +49,7 @@
e4cbec
                             <property name="visible">True</property>
e4cbec
                             <property name="can_focus">True</property>
e4cbec
                             <property name="receives_default">False</property>
e4cbec
+                            <property name="halign">start</property>
e4cbec
                             <property name="use_underline">True</property>
e4cbec
                             <property name="draw_indicator">True</property>
e4cbec
                             <signal name="toggled" handler="on_prefs_system_tray_toggled" swapped="no"/>
e4cbec
@@ -58,6 +59,68 @@
e4cbec
                             <property name="top_attach">0</property>
e4cbec
                           </packing>
e4cbec
                         </child>
e4cbec
+                        <child>
e4cbec
+                          <object class="GtkGrid">
e4cbec
+                            <property name="visible">True</property>
e4cbec
+                            <property name="can_focus">False</property>
e4cbec
+                            <property name="row_spacing">3</property>
e4cbec
+                            <child>
e4cbec
+                              <object class="GtkCheckButton" id="prefs-libguestfs">
e4cbec
+                                <property name="label" translatable="yes">Enable libgues_tfs VM introspection</property>
e4cbec
+                                <property name="visible">True</property>
e4cbec
+                                <property name="can_focus">True</property>
e4cbec
+                                <property name="receives_default">False</property>
e4cbec
+                                <property name="halign">start</property>
e4cbec
+                                <property name="use_underline">True</property>
e4cbec
+                                <property name="draw_indicator">True</property>
e4cbec
+                                <signal name="toggled" handler="on_prefs_libguestfs_toggled" swapped="no"/>
e4cbec
+                              </object>
e4cbec
+                              <packing>
e4cbec
+                                <property name="left_attach">0</property>
e4cbec
+                                <property name="top_attach">0</property>
e4cbec
+                              </packing>
e4cbec
+                            </child>
e4cbec
+                            <child>
e4cbec
+                              <object class="GtkBox" id="prefs-libguestfs-warn-box">
e4cbec
+                                <property name="can_focus">False</property>
e4cbec
+                                <property name="spacing">3</property>
e4cbec
+                                <child>
e4cbec
+                                  <object class="GtkImage">
e4cbec
+                                    <property name="visible">True</property>
e4cbec
+                                    <property name="can_focus">False</property>
e4cbec
+                                    <property name="stock">gtk-dialog-warning</property>
e4cbec
+                                  </object>
e4cbec
+                                  <packing>
e4cbec
+                                    <property name="expand">False</property>
e4cbec
+                                    <property name="fill">True</property>
e4cbec
+                                    <property name="position">0</property>
e4cbec
+                                  </packing>
e4cbec
+                                </child>
e4cbec
+                                <child>
e4cbec
+                                  <object class="GtkLabel" id="prefs-libguestfs-warn-label">
e4cbec
+                                    <property name="visible">True</property>
e4cbec
+                                    <property name="can_focus">False</property>
e4cbec
+                                    <property name="label"><small>You must restart the application for this change to take effect</small></property>
e4cbec
+                                    <property name="use_markup">True</property>
e4cbec
+                                  </object>
e4cbec
+                                  <packing>
e4cbec
+                                    <property name="expand">False</property>
e4cbec
+                                    <property name="fill">True</property>
e4cbec
+                                    <property name="position">1</property>
e4cbec
+                                  </packing>
e4cbec
+                                </child>
e4cbec
+                              </object>
e4cbec
+                              <packing>
e4cbec
+                                <property name="left_attach">0</property>
e4cbec
+                                <property name="top_attach">1</property>
e4cbec
+                              </packing>
e4cbec
+                            </child>
e4cbec
+                          </object>
e4cbec
+                          <packing>
e4cbec
+                            <property name="left_attach">0</property>
e4cbec
+                            <property name="top_attach">1</property>
e4cbec
+                          </packing>
e4cbec
+                        </child>
e4cbec
                       </object>
e4cbec
                     </child>
e4cbec
                   </object>
e4cbec
diff --git a/virtManager/config.py b/virtManager/config.py
e4cbec
index a3daf341..b7bee29b 100644
e4cbec
--- a/virtManager/config.py
e4cbec
+++ b/virtManager/config.py
e4cbec
@@ -233,6 +233,9 @@ class vmmConfig(object):
e4cbec
         ret = ["vnc", "spice"]
e4cbec
         return ret
e4cbec
 
e4cbec
+    def inspection_supported(self):
e4cbec
+        return self.support_inspection and self.get_libguestfs_inspect_vms()
e4cbec
+
e4cbec
     def remove_notifier(self, h):
e4cbec
         self.conf.notify_remove(h)
e4cbec
 
e4cbec
@@ -395,6 +398,14 @@ class vmmConfig(object):
e4cbec
     def set_view_system_tray(self, val):
e4cbec
         self.conf.set("/system-tray", val)
e4cbec
 
e4cbec
+    # Libguestfs VM inspection
e4cbec
+    def on_libguestfs_inspect_vms_changed(self, cb):
e4cbec
+        return self.conf.notify_add("/enable-libguestfs-vm-inspection", cb)
e4cbec
+    def get_libguestfs_inspect_vms(self):
e4cbec
+        return self.conf.get("/enable-libguestfs-vm-inspection")
e4cbec
+    def set_libguestfs_inspect_vms(self, val):
e4cbec
+        self.conf.set("/enable-libguestfs-vm-inspection", val)
e4cbec
+
e4cbec
 
e4cbec
     # Stats history and interval length
e4cbec
     def get_stats_history_length(self):
e4cbec
diff --git a/virtManager/details.py b/virtManager/details.py
e4cbec
index be0f25c9..65fea500 100644
e4cbec
--- a/virtManager/details.py
e4cbec
+++ b/virtManager/details.py
e4cbec
@@ -2420,7 +2420,7 @@ class vmmDetails(vmmGObjectUI):
e4cbec
                 self.widget(name).set_value(int(IdMap_proper))
e4cbec
 
e4cbec
     def refresh_inspection_page(self):
e4cbec
-        inspection_supported = self.config.support_inspection
e4cbec
+        inspection_supported = self.config.inspection_supported()
e4cbec
         uiutil.set_grid_row_visible(self.widget("details-overview-error"),
e4cbec
                                        self.vm.inspection.error)
e4cbec
         if self.vm.inspection.error:
e4cbec
@@ -3120,7 +3120,7 @@ class vmmDetails(vmmGObjectUI):
e4cbec
 
e4cbec
         add_hw_list_option(_("Overview"), HW_LIST_TYPE_GENERAL, "computer")
e4cbec
         if not self.is_customize_dialog:
e4cbec
-            if self.config.support_inspection:
e4cbec
+            if self.config.inspection_supported():
e4cbec
                 add_hw_list_option(_("OS information"),
e4cbec
                     HW_LIST_TYPE_INSPECTION, "computer")
e4cbec
             add_hw_list_option(_("Performance"), HW_LIST_TYPE_STATS,
e4cbec
diff --git a/virtManager/engine.py b/virtManager/engine.py
e4cbec
index 90ff97e9..10e04e03 100644
e4cbec
--- a/virtManager/engine.py
e4cbec
+++ b/virtManager/engine.py
e4cbec
@@ -497,8 +497,8 @@ class vmmEngine(vmmGObject):
e4cbec
 
e4cbec
     def _create_inspection_thread(self):
e4cbec
         logging.debug("libguestfs inspection support: %s",
e4cbec
-                      self.config.support_inspection)
e4cbec
-        if not self.config.support_inspection:
e4cbec
+                      self.config.inspection_supported())
e4cbec
+        if not self.config.inspection_supported():
e4cbec
             return
e4cbec
 
e4cbec
         from .inspection import vmmInspection
e4cbec
diff --git a/virtManager/preferences.py b/virtManager/preferences.py
e4cbec
index 5739af29..fbffa1b5 100644
e4cbec
--- a/virtManager/preferences.py
e4cbec
+++ b/virtManager/preferences.py
e4cbec
@@ -35,7 +35,10 @@ class vmmPreferences(vmmGObjectUI):
e4cbec
 
e4cbec
         self._init_ui()
e4cbec
 
e4cbec
+        self._orig_libguestfs_val = None
e4cbec
+
e4cbec
         self.refresh_view_system_tray()
e4cbec
+        self.refresh_libguestfs()
e4cbec
         self.refresh_update_interval()
e4cbec
         self.refresh_console_accels()
e4cbec
         self.refresh_console_scaling()
e4cbec
@@ -63,6 +66,7 @@ class vmmPreferences(vmmGObjectUI):
e4cbec
             "on_prefs_close_clicked": self.close,
e4cbec
 
e4cbec
             "on_prefs_system_tray_toggled": self.change_view_system_tray,
e4cbec
+            "on_prefs_libguestfs_toggled": self.change_libguestfs,
e4cbec
             "on_prefs_stats_update_interval_changed": self.change_update_interval,
e4cbec
             "on_prefs_console_accels_toggled": self.change_console_accels,
e4cbec
             "on_prefs_console_scaling_changed": self.change_console_scaling,
e4cbec
@@ -173,6 +177,11 @@ class vmmPreferences(vmmGObjectUI):
e4cbec
         combo.set_model(model)
e4cbec
         uiutil.init_combo_text_column(combo, 1)
e4cbec
 
e4cbec
+        if not self.config.support_inspection:
e4cbec
+            self.widget("prefs-libguestfs").set_sensitive(False)
e4cbec
+            self.widget("prefs-libguestfs").set_tooltip_text(
e4cbec
+                    _("python libguestfs support is not installed"))
e4cbec
+
e4cbec
 
e4cbec
     #########################
e4cbec
     # Config Change Options #
e4cbec
@@ -182,6 +191,12 @@ class vmmPreferences(vmmGObjectUI):
e4cbec
         val = self.config.get_view_system_tray()
e4cbec
         self.widget("prefs-system-tray").set_active(bool(val))
e4cbec
 
e4cbec
+    def refresh_libguestfs(self):
e4cbec
+        val = self.config.get_libguestfs_inspect_vms()
e4cbec
+        if self._orig_libguestfs_val is None:
e4cbec
+            self._orig_libguestfs_val = val
e4cbec
+        self.widget("prefs-libguestfs").set_active(bool(val))
e4cbec
+
e4cbec
     def refresh_update_interval(self):
e4cbec
         self.widget("prefs-stats-update-interval").set_value(
e4cbec
             self.config.get_stats_update_interval())
e4cbec
@@ -333,6 +348,14 @@ class vmmPreferences(vmmGObjectUI):
e4cbec
 
e4cbec
     def change_view_system_tray(self, src):
e4cbec
         self.config.set_view_system_tray(src.get_active())
e4cbec
+    def change_libguestfs(self, src):
e4cbec
+        val = src.get_active()
e4cbec
+        self.config.set_libguestfs_inspect_vms(val)
e4cbec
+
e4cbec
+        vis = (val != self._orig_libguestfs_val and
e4cbec
+               self.widget("prefs-libguestfs").get_sensitive())
e4cbec
+        uiutil.set_grid_row_visible(
e4cbec
+                self.widget("prefs-libguestfs-warn-box"), vis)
e4cbec
 
e4cbec
     def change_update_interval(self, src):
e4cbec
         self.config.set_stats_update_interval(src.get_value_as_int())
e4cbec
-- 
e4cbec
2.20.1
e4cbec