[Kimchi-devel] [PATCH 2/3] Implement function to check if NM is running.

Jose Ricardo Ziviani joserz at linux.vnet.ibm.com
Fri Apr 17 19:29:26 UTC 2015


 - NetworkManager does not (fully) support bridges yet and there is no
   portable/bullet-proof way to solve any possible issue that may happen
   to libvirt bridge creation due to NM problems.
 - This commit adds a new capability to inform the frontend whether the
   NM is running or not, so the frontend could inform the user about it.

Signed-off-by: Jose Ricardo Ziviani <joserz at linux.vnet.ibm.com>
---
 src/kimchi/model/config.py       |  1 +
 src/kimchi/model/featuretests.py | 28 ++++++++++++++++++++++++++++
 tests/test_rest.py               |  3 ++-
 3 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/src/kimchi/model/config.py b/src/kimchi/model/config.py
index 1c43360..a417c9b 100644
--- a/src/kimchi/model/config.py
+++ b/src/kimchi/model/config.py
@@ -140,6 +140,7 @@ class CapabilitiesModel(object):
                 'federation': kconfig.get("server", "federation"),
                 'auth': kconfig.get("authentication", "method"),
                 'kernel_vfio': self.kernel_vfio,
+                'nm_running': FeatureTests.is_nm_running(),
                 }
 
 
diff --git a/src/kimchi/model/featuretests.py b/src/kimchi/model/featuretests.py
index 4aac8ed..64f2c01 100644
--- a/src/kimchi/model/featuretests.py
+++ b/src/kimchi/model/featuretests.py
@@ -223,3 +223,31 @@ class FeatureTests(object):
             kimchi_log.warning("Unable to load Kernal module vfio-pci.")
             return False
         return True
+
+    @staticmethod
+    def is_nm_running():
+        '''Tries to determine whether NetworkManager is running.'''
+
+        # force the language to original
+        env = {'LANG': 'C'}
+
+        nmcli = ['nmcli',
+                 '-t',
+                 '--fields',
+                 'running',
+                 'general',
+                 'status']
+
+        # there are different ways to know if NM is running and it
+        # depends on the version, so if one command fails we try the
+        # next one. Otherwise we assume NM is not running.
+        out, _, rc = run_command(nmcli, timeout=1.0, env=env)
+        if rc != 0:
+            # change option from 'general' to 'nm'
+            nmcli[4] = 'nm'
+            out, _, rc = run_command(nmcli, timeout=1.0, env=env)
+
+        if rc == 0 and out.rstrip('\n') == 'running':
+            return True
+
+        return False
diff --git a/tests/test_rest.py b/tests/test_rest.py
index 16ff41d..603e531 100644
--- a/tests/test_rest.py
+++ b/tests/test_rest.py
@@ -1098,7 +1098,8 @@ class RestTests(unittest.TestCase):
 
         keys = [u'libvirt_stream_protocols', u'qemu_stream', u'qemu_spice',
                 u'screenshot', u'system_report_tool', u'update_tool',
-                u'repo_mngt_tool', u'federation', u'kernel_vfio', u'auth']
+                u'repo_mngt_tool', u'federation', u'kernel_vfio', u'auth',
+                u'nm_running']
         self.assertEquals(sorted(keys), sorted(conf.keys()))
 
     def test_peers(self):
-- 
1.9.1




More information about the Kimchi-devel mailing list