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

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