From 4f7ee2b6b2eb7ba7b5a8a00b4a0fdb7d483afe13 Mon Sep 17 00:00:00 2001 From: "Bryn M. Reeves" Date: Thu, 18 Jun 2015 18:38:35 +0100 Subject: [networking] improve readability of nmcli handling In order to cope with multiple versions of NetworkManager with incompatible command-line syntax the NM portions of networking's setup() method had become a bit difficult to follow. Hide as much of the version mess as possible behind a local test_nm_status() function that handles all the known versions and use template variables where common command-line text exists between the versions. Signed-off-by: Bryn M. Reeves --- sos/plugins/networking.py | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/sos/plugins/networking.py b/sos/plugins/networking.py index a6db592f..550fe1c4 100644 --- a/sos/plugins/networking.py +++ b/sos/plugins/networking.py @@ -120,30 +120,45 @@ class Networking(Plugin): # NetworkManager >= 0.9.9 will use the long names of # "nmcli" objects. - # NetworkManager >= 0.9.9 (Use long names of objects for nmcli) - nmcli_con_details_cmd = "" - nmcli_dev_details_cmd = "" - nmcli_status_cmd_v1 = "nmcli --terse --fields RUNNING general status" - nmcli_status_cmd_v0 = "nmcli --terse --fields RUNNING nm status" - if self.call_ext_prog( - nmcli_status_cmd_v1)['output'].lower().startswith("running"): + # All versions conform to the following templates with differnt + # strings for the object being operated on. + nmcli_con_details_template = "nmcli con %s id" + nmcli_dev_details_template = "nmcli dev %s" + + # test NetworkManager status for the specified major version + def test_nm_status(version=1): + status_template = "nmcli --terse --fields RUNNING %s status" + obj_table = [ + "nm", # < 0.9.9 + "general" # >= 0.9.9 + ] + status = self.call_ext_prog(status_template % obj_table[version]) + return status['output'].lower().startswith("running") + + # NetworkManager >= 0.9.9 (Use short name of objects for nmcli) + if test_nm_status(version=1): self.add_cmd_output([ "nmcli general status", "nmcli con", "nmcli con show --active", "nmcli dev"]) - nmcli_con_details_cmd = "nmcli con show id" - nmcli_dev_details_cmd = "nmcli dev show" + nmcli_con_details_cmd = nmcli_con_details_template % "show" + nmcli_dev_details_cmd = nmcli_dev_details_template % "show" + # NetworkManager < 0.9.9 (Use short name of objects for nmcli) - elif self.call_ext_prog( - nmcli_status_cmd_v0)['output'].lower().startswith("running"): + elif test_nm_status(version=0): self.add_cmd_output([ "nmcli nm status", "nmcli con", "nmcli con status", "nmcli dev"]) - nmcli_con_details_cmd = "nmcli con list id" - nmcli_dev_details_cmd = "nmcli dev list iface" + nmcli_con_details_cmd = nmcli_con_details_template % "list id" + nmcli_dev_details_cmd = nmcli_dev_details_template % "list iface" + + # No grokkable NetworkManager version present + else: + nmcli_con_details_cmd = "" + nmcli_dev_details_cmd = "" if len(nmcli_con_details_cmd) > 0: nmcli_con_show_result = self.call_ext_prog( -- cgit