From 998b7596c8aa7cccbcb94ebffe9fb72a4609bce4 Mon Sep 17 00:00:00 2001 From: Bryan Quigley Date: Mon, 15 Oct 2018 16:52:50 -0700 Subject: [PATCH] [Hosts] Add Debian and Ubuntu as hosts Currently Debian and Ubuntu share a hosts file but we can further split them out if needed. Needed to define both a package name and bin path variable so that the differences between RH and U/D could be handled. Signed-off-by: Bryan Quigley --- soscollector/hosts/__init__.py | 2 ++ soscollector/hosts/debian.py | 36 ++++++++++++++++++++++++++++++++++++ soscollector/hosts/redhat.py | 2 ++ soscollector/sosnode.py | 4 ++-- 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 soscollector/hosts/debian.py diff --git a/soscollector/hosts/__init__.py b/soscollector/hosts/__init__.py index 02b1d71..2e93094 100644 --- a/soscollector/hosts/__init__.py +++ b/soscollector/hosts/__init__.py @@ -41,6 +41,8 @@ class SosHost(): container_runtime = None container_image = None sos_path_strip = None + sos_pkg_name = None # package name in deb/rpm/etc + sos_bin_path = None # path to sosreport binary def __init__(self, address): self.address = address diff --git a/soscollector/hosts/debian.py b/soscollector/hosts/debian.py new file mode 100644 index 0000000..7b67c83 --- /dev/null +++ b/soscollector/hosts/debian.py @@ -0,0 +1,36 @@ +# Copyright Canonical 2018, Bryan Quigley +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +from soscollector.hosts import SosHost + + +class DebianHost(SosHost): + '''Base class for defining Debian based systems''' + + distribution = 'Debian' + releases = ['ubuntu', 'debian'] + package_manager = { + 'name': 'dpkg', + 'query': "dpkg-query -W -f='${Package}-${Version}\\\n' " + } + sos_pkg_name = 'sosreport' + sos_bin_path = '/usr/bin/sosreport' + + def check_enabled(self, rel_string): + for release in self.releases: + if release in rel_string: + return True + return False +# vim:ts=4 et sw=4 diff --git a/soscollector/hosts/redhat.py b/soscollector/hosts/redhat.py index 20db16a..f077d03 100644 --- a/soscollector/hosts/redhat.py +++ b/soscollector/hosts/redhat.py @@ -26,6 +26,8 @@ class RedHatHost(SosHost): 'name': 'rpm', 'query': 'rpm -q' } + sos_pkg_name = 'sos' + sos_bin_path = '/usr/sbin/sosreport' def check_enabled(self, rel_string): for release in self.releases: diff --git a/soscollector/sosnode.py b/soscollector/sosnode.py index 98f1765..fc674b0 100644 --- a/soscollector/sosnode.py +++ b/soscollector/sosnode.py @@ -154,7 +154,7 @@ class SosNode(): def _load_sos_info(self): '''Queries the node for information about the installed version of sos ''' - cmd = self.host.prefix + self.host.pkg_query('sos') + cmd = self.host.prefix + self.host.pkg_query(self.host.sos_pkg_name) res = self.run_command(cmd) if res['status'] == 0: ver = res['stdout'].splitlines()[-1].split('-')[1] @@ -275,7 +275,7 @@ class SosNode(): def run_command(self, cmd, timeout=180, get_pty=False, need_root=False): '''Runs a given cmd, either via the SSH session or locally''' if cmd.startswith('sosreport'): - cmd = cmd.replace('sosreport', '/usr/sbin/sosreport') + cmd = cmd.replace('sosreport', self.host.sos_bin_path) need_root = True if need_root: get_pty = True -- 2.14.4