Blame SOURCES/sos-collector-rhhiv-profile.patch

9e8bad
From fb8c2af36672b5868f504bae0704392f9e9b44a5 Mon Sep 17 00:00:00 2001
9e8bad
From: Jake Hunsaker <jhunsake@redhat.com>
9e8bad
Date: Fri, 12 Apr 2019 14:45:01 -0400
9e8bad
Subject: [PATCH 1/3] [clusters] Add a cluster_name class member for better
9e8bad
 identification
9e8bad
9e8bad
Adds a cluster_name class member to Cluster() so that clusters may
9e8bad
specify a well-defined name beyond the name/acronym used to enable the
9e8bad
cluster manually.
9e8bad
9e8bad
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
9e8bad
---
9e8bad
 soscollector/clusters/__init__.py | 9 +++++++++
9e8bad
 soscollector/sos_collector.py     | 3 +--
9e8bad
 soscollector/sosnode.py           | 1 -
9e8bad
 3 files changed, 10 insertions(+), 3 deletions(-)
9e8bad
9e8bad
diff --git a/soscollector/clusters/__init__.py b/soscollector/clusters/__init__.py
9e8bad
index b9d2418..c1bd360 100644
9e8bad
--- a/soscollector/clusters/__init__.py
9e8bad
+++ b/soscollector/clusters/__init__.py
9e8bad
@@ -26,6 +26,7 @@ class Cluster(object):
9e8bad
     sos_plugins = []
9e8bad
     sos_plugin_options = {}
9e8bad
     sos_preset = ''
9e8bad
+    cluster_name = None
9e8bad
 
9e8bad
     def __init__(self, config):
9e8bad
         '''This is the class that cluster profile should subclass in order to
9e8bad
@@ -50,6 +51,14 @@ class Cluster(object):
9e8bad
         self.options = []
9e8bad
         self._get_options()
9e8bad
 
9e8bad
+    @classmethod
9e8bad
+    def name(cls):
9e8bad
+        '''Returns the cluster's name as a string.
9e8bad
+        '''
9e8bad
+        if cls.cluster_name:
9e8bad
+            return cls.cluster_name
9e8bad
+        return cls.__name__.lower()
9e8bad
+
9e8bad
     def _get_options(self):
9e8bad
         '''Loads the options defined by a cluster and sets the default value'''
9e8bad
         for opt in self.option_list:
9e8bad
diff --git a/soscollector/sos_collector.py b/soscollector/sos_collector.py
9e8bad
index fee48ab..54410a2 100644
9e8bad
--- a/soscollector/sos_collector.py
9e8bad
+++ b/soscollector/sos_collector.py
9e8bad
@@ -554,8 +554,7 @@ this utility or remote systems that it connects to.
9e8bad
                             break
9e8bad
 
9e8bad
                 self.config['cluster'] = cluster
9e8bad
-                name = str(cluster.__class__.__name__).lower()
9e8bad
-                self.config['cluster_type'] = name
9e8bad
+                self.config['cluster_type'] = cluster.name()
9e8bad
                 self.log_info(
9e8bad
                     'Cluster type set to %s' % self.config['cluster_type'])
9e8bad
                 break
9e8bad
diff --git a/soscollector/sosnode.py b/soscollector/sosnode.py
9e8bad
index 405d05d..3aba0bf 100644
9e8bad
--- a/soscollector/sosnode.py
9e8bad
+++ b/soscollector/sosnode.py
9e8bad
@@ -100,7 +100,6 @@ class SosNode():
9e8bad
             return True
9e8bad
         return False
9e8bad
 
9e8bad
-
9e8bad
     def create_sos_container(self):
9e8bad
         '''If the host is containerized, create the container we'll be using
9e8bad
         '''
9e8bad
-- 
9e8bad
2.17.2
9e8bad
9e8bad
9e8bad
From 8d94e9ee9162c1b7676822958a94dfcd727d6dc8 Mon Sep 17 00:00:00 2001
9e8bad
From: Jake Hunsaker <jhunsake@redhat.com>
9e8bad
Date: Fri, 12 Apr 2019 14:47:31 -0400
9e8bad
Subject: [PATCH 2/3] [clusters] Add cluster_name where appropriate
9e8bad
9e8bad
Adds a cluster_name to a few of the existing cluster profiles.
9e8bad
9e8bad
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
9e8bad
---
9e8bad
 soscollector/clusters/kubernetes.py | 1 +
9e8bad
 soscollector/clusters/ovirt.py      | 2 ++
9e8bad
 2 files changed, 3 insertions(+)
9e8bad
9e8bad
diff --git a/soscollector/clusters/kubernetes.py b/soscollector/clusters/kubernetes.py
9e8bad
index c5c2094..e18ee71 100644
9e8bad
--- a/soscollector/clusters/kubernetes.py
9e8bad
+++ b/soscollector/clusters/kubernetes.py
9e8bad
@@ -52,6 +52,7 @@ class kubernetes(Cluster):
9e8bad
 
9e8bad
 class openshift(kubernetes):
9e8bad
 
9e8bad
+    cluster_name = 'OpenShift Container Platform'
9e8bad
     packages = ('atomic-openshift',)
9e8bad
     sos_preset = 'ocp'
9e8bad
     cmd = 'oc'
9e8bad
diff --git a/soscollector/clusters/ovirt.py b/soscollector/clusters/ovirt.py
9e8bad
index 0a074ca..18cbf2e 100644
9e8bad
--- a/soscollector/clusters/ovirt.py
9e8bad
+++ b/soscollector/clusters/ovirt.py
9e8bad
@@ -23,6 +23,7 @@ from getpass import getpass
9e8bad
 
9e8bad
 class ovirt(Cluster):
9e8bad
 
9e8bad
+    cluster_name = 'oVirt'
9e8bad
     packages = ('ovirt-engine',)
9e8bad
 
9e8bad
     option_list = [
9e8bad
@@ -122,6 +123,7 @@ class ovirt(Cluster):
9e8bad
 
9e8bad
 class rhv(ovirt):
9e8bad
 
9e8bad
+    cluster_name = 'Red Hat Virtualization'
9e8bad
     packages = ('rhevm', 'rhvm')
9e8bad
     sos_preset = 'rhv'
9e8bad
 
9e8bad
-- 
9e8bad
2.17.2
9e8bad
9e8bad
9e8bad
From 4606699e9a460ebd6345444ae915ff8384619ed3 Mon Sep 17 00:00:00 2001
9e8bad
From: Jake Hunsaker <jhunsake@redhat.com>
9e8bad
Date: Tue, 16 Apr 2019 15:41:33 -0400
9e8bad
Subject: [PATCH 3/3] [ovirt] Add RHHI-V support
9e8bad
9e8bad
Adds support for RHHI-V environments which are RHV environments that
9e8bad
also use the hypervisors as gluster nodes. The new 'rhhi_virt' cluster
9e8bad
profile will be enabled when sos-collector is run against an environment
9e8bad
that is _both_ RHV and has nodes listed in the 'gluster_server' table in
9e8bad
the RHV database. Note that this means if community oVirt is in use, the
9e8bad
gluster bits enabled by 'rhhi_virt' will not be enabled for the oVirt
9e8bad
cluster type.
9e8bad
9e8bad
Included with this change is making DB queries more programmatic, and
9e8bad
making minor stylistic changes to the main query used by get_nodes() to
9e8bad
allow easier reading of the SQL query being built.
9e8bad
9e8bad
Finally, remove an unused import of getpass.
9e8bad
9e8bad
Resolves: #21
9e8bad
9e8bad
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
9e8bad
---
9e8bad
 soscollector/clusters/ovirt.py | 44 ++++++++++++++++++++++++++--------
9e8bad
 1 file changed, 34 insertions(+), 10 deletions(-)
9e8bad
9e8bad
diff --git a/soscollector/clusters/ovirt.py b/soscollector/clusters/ovirt.py
9e8bad
index 18cbf2e..8697d2e 100644
9e8bad
--- a/soscollector/clusters/ovirt.py
9e8bad
+++ b/soscollector/clusters/ovirt.py
9e8bad
@@ -18,13 +18,13 @@ import fnmatch
9e8bad
 
9e8bad
 from pipes import quote
9e8bad
 from soscollector.clusters import Cluster
9e8bad
-from getpass import getpass
9e8bad
 
9e8bad
 
9e8bad
 class ovirt(Cluster):
9e8bad
 
9e8bad
-    cluster_name = 'oVirt'
9e8bad
+    cluster_name = 'Community oVirt'
9e8bad
     packages = ('ovirt-engine',)
9e8bad
+    db_exec = '/usr/share/ovirt-engine/dbscripts/engine-psql.sh -c'
9e8bad
 
9e8bad
     option_list = [
9e8bad
         ('no-database', False, 'Do not collect a database dump'),
9e8bad
@@ -33,6 +33,14 @@ class ovirt(Cluster):
9e8bad
         ('no-hypervisors', False, 'Do not collect from hypervisors')
9e8bad
     ]
9e8bad
 
9e8bad
+    def _run_db_query(self, query):
9e8bad
+        '''
9e8bad
+        Wrapper for running DB queries on the master. Any scrubbing of the
9e8bad
+        query should be done _before_ passing the query to this method.
9e8bad
+        '''
9e8bad
+        cmd = "%s %s" % (self.db_exec, quote(query))
9e8bad
+        return self.exec_master_cmd(cmd, need_root=True)
9e8bad
+
9e8bad
     def _sql_scrub(self, val):
9e8bad
         '''
9e8bad
         Manually sanitize SQL queries since we can't leave this up to the
9e8bad
@@ -58,18 +66,16 @@ class ovirt(Cluster):
9e8bad
     def format_db_cmd(self):
9e8bad
         cluster = self._sql_scrub(self.get_option('cluster'))
9e8bad
         datacenter = self._sql_scrub(self.get_option('datacenter'))
9e8bad
-        query = ("select host_name from vds_static where cluster_id in "
9e8bad
-                 "(select cluster_id from cluster where name like '%s'"
9e8bad
-                 " and storage_pool_id in (select id from storage_pool "
9e8bad
-                 "where name like '%s'))" % (cluster, datacenter))
9e8bad
-        self.dbcmd = ('/usr/share/ovirt-engine/dbscripts/engine-psql.sh '
9e8bad
-                      '-c {}'.format(quote(query)))
9e8bad
-        self.log_debug('Query command for ovirt DB set to: %s' % self.dbcmd)
9e8bad
+        self.dbquery = ("SELECT host_name from vds_static where cluster_id in "
9e8bad
+                        "(select cluster_id FROM cluster WHERE name like '%s'"
9e8bad
+                        " and storage_pool_id in (SELECT id FROM storage_pool "
9e8bad
+                        "WHERE name like '%s'))" % (cluster, datacenter))
9e8bad
+        self.log_debug('Query command for ovirt DB set to: %s' % self.dbquery)
9e8bad
 
9e8bad
     def get_nodes(self):
9e8bad
         if self.get_option('no-hypervisors'):
9e8bad
             return []
9e8bad
-        res = self.exec_master_cmd(self.dbcmd, need_root=True)
9e8bad
+        res = self._run_db_query(self.dbquery)
9e8bad
         if res['status'] == 0:
9e8bad
             nodes = res['stdout'].splitlines()[2:-1]
9e8bad
             return [n.split('(')[0].strip() for n in nodes]
9e8bad
@@ -134,3 +140,21 @@ class rhv(ovirt):
9e8bad
             return 'rhvh'
9e8bad
         else:
9e8bad
             return 'rhelh'
9e8bad
+
9e8bad
+
9e8bad
+class rhhi_virt(rhv):
9e8bad
+
9e8bad
+    cluster_name = 'Red Hat Hyperconverged Infrastructure - Virtualization'
9e8bad
+    sos_plugins = ('gluster',)
9e8bad
+    sos_plugin_options = {'gluster.dump': 'on'}
9e8bad
+    sos_preset = 'rhv'
9e8bad
+
9e8bad
+    def check_enabled(self):
9e8bad
+        return (self.master.is_installed('rhvm') and self._check_for_rhhiv())
9e8bad
+
9e8bad
+    def _check_for_rhhiv(self):
9e8bad
+        ret = self._run_db_query('SELECT count(server_id) FROM gluster_server')
9e8bad
+        if ret['status'] == 0:
9e8bad
+            # if there are any entries in this table, RHHI-V is in use
9e8bad
+            return ret['stdout'].splitlines()[2].strip() != '0'
9e8bad
+        return False
9e8bad
-- 
9e8bad
2.17.2
9e8bad