Blame SOURCES/0001-Remove-ipaclustercheck.patch

4d5874
From 9d5f9d21442ee483044fc55a5c02039af23869d7 Mon Sep 17 00:00:00 2001
b9b3bb
From: Rob Crittenden <rcritten@redhat.com>
4d5874
Date: Thu, 1 Dec 2022 14:22:46 -0500
b9b3bb
Subject: [PATCH] Remove ipaclustercheck
b9b3bb
b9b3bb
---
b9b3bb
 setup.py                              |  12 +-
b9b3bb
 src/ipaclustercheck/__init__.py       |   5 -
b9b3bb
 src/ipaclustercheck/core/__init__.py  |   0
4d5874
 src/ipaclustercheck/core/main.py      |  32 ------
4d5874
 src/ipaclustercheck/core/output.py    |  68 -----------
b9b3bb
 src/ipaclustercheck/ipa/__init__.py   |   0
b9b3bb
 src/ipaclustercheck/ipa/crlmanager.py |  36 ------
4d5874
 src/ipaclustercheck/ipa/plugin.py     | 117 -------------------
4d5874
 src/ipaclustercheck/ipa/ruv.py        | 155 --------------------------
b9b3bb
 tests/test_cluster_ruv.py             | 106 ------------------
4d5874
 10 files changed, 1 insertion(+), 530 deletions(-)
b9b3bb
 delete mode 100644 src/ipaclustercheck/__init__.py
b9b3bb
 delete mode 100644 src/ipaclustercheck/core/__init__.py
b9b3bb
 delete mode 100644 src/ipaclustercheck/core/main.py
b9b3bb
 delete mode 100644 src/ipaclustercheck/core/output.py
b9b3bb
 delete mode 100644 src/ipaclustercheck/ipa/__init__.py
b9b3bb
 delete mode 100644 src/ipaclustercheck/ipa/crlmanager.py
b9b3bb
 delete mode 100644 src/ipaclustercheck/ipa/plugin.py
b9b3bb
 delete mode 100644 src/ipaclustercheck/ipa/ruv.py
b9b3bb
 delete mode 100644 tests/test_cluster_ruv.py
b9b3bb
b9b3bb
diff --git a/setup.py b/setup.py
4d5874
index 0cfa486..b9e1ca1 100644
b9b3bb
--- a/setup.py
b9b3bb
+++ b/setup.py
b9b3bb
@@ -4,7 +4,7 @@ from setuptools import find_packages, setup
b9b3bb
 setup(
b9b3bb
     name='ipahealthcheck',
4d5874
     version='0.12',
b9b3bb
-    namespace_packages=['ipahealthcheck', 'ipaclustercheck'],
b9b3bb
+    namespace_packages=['ipahealthcheck'],
b9b3bb
     package_dir={'': 'src'},
b9b3bb
     # packages=find_packages(where='src'),
b9b3bb
     packages=[
b9b3bb
@@ -14,14 +14,11 @@ setup(
b9b3bb
         'ipahealthcheck.ipa',
b9b3bb
         'ipahealthcheck.meta',
b9b3bb
         'ipahealthcheck.system',
b9b3bb
-        'ipaclustercheck.core',
b9b3bb
-        'ipaclustercheck.ipa',
b9b3bb
     ],
b9b3bb
     entry_points={
b9b3bb
         # creates bin/ipahealthcheck
b9b3bb
         'console_scripts': [
b9b3bb
             'ipa-healthcheck = ipahealthcheck.core.main:main',
b9b3bb
-            'ipa-clustercheck = ipaclustercheck.core.main:main',
b9b3bb
         ],
b9b3bb
         # subsystem registries
b9b3bb
         'ipahealthcheck.registry': [
4d5874
@@ -72,13 +69,6 @@ setup(
b9b3bb
         'ipahealthcheck.system': [
b9b3bb
             'filesystemspace = ipahealthcheck.system.filesystemspace',
b9b3bb
         ],
b9b3bb
-        'ipaclustercheck.registry': [
b9b3bb
-            'ipaclustercheck.ipa = ipaclustercheck.ipa.plugin:registry',
b9b3bb
-        ],
b9b3bb
-        'ipaclustercheck.ipa': [
b9b3bb
-            'crl = ipaclustercheck.ipa.crlmanager',
b9b3bb
-            'ruv = ipaclustercheck.ipa.ruv',
b9b3bb
-        ],
b9b3bb
     },
b9b3bb
     classifiers=[
b9b3bb
         'Programming Language :: Python :: 3.6',
b9b3bb
diff --git a/src/ipaclustercheck/__init__.py b/src/ipaclustercheck/__init__.py
b9b3bb
deleted file mode 100644
b9b3bb
index 6c91ef7..0000000
b9b3bb
--- a/src/ipaclustercheck/__init__.py
b9b3bb
+++ /dev/null
b9b3bb
@@ -1,5 +0,0 @@
b9b3bb
-#
b9b3bb
-# Copyright (C) 2019 FreeIPA Contributors see COPYING for license
b9b3bb
-#
b9b3bb
-
b9b3bb
-__import__('pkg_resources').declare_namespace(__name__)
b9b3bb
diff --git a/src/ipaclustercheck/core/__init__.py b/src/ipaclustercheck/core/__init__.py
b9b3bb
deleted file mode 100644
b9b3bb
index e69de29..0000000
b9b3bb
diff --git a/src/ipaclustercheck/core/main.py b/src/ipaclustercheck/core/main.py
b9b3bb
deleted file mode 100644
4d5874
index f475832..0000000
b9b3bb
--- a/src/ipaclustercheck/core/main.py
b9b3bb
+++ /dev/null
4d5874
@@ -1,32 +0,0 @@
b9b3bb
-#
b9b3bb
-# Copyright (C) 2020 FreeIPA Contributors see COPYING for license
b9b3bb
-#
b9b3bb
-
b9b3bb
-import sys
b9b3bb
-
b9b3bb
-from ipaclustercheck.core.output import output_registry
b9b3bb
-from ipahealthcheck.core.core import RunChecks
b9b3bb
-
b9b3bb
-
b9b3bb
-class ClusterChecks(RunChecks):
b9b3bb
-
b9b3bb
-    def add_options(self):
b9b3bb
-        parser = self.parser
b9b3bb
-        parser.add_argument('--directory', dest='dir',
b9b3bb
-                            help='Directory holding healthcheck logs')
b9b3bb
-
b9b3bb
-    def validate_options(self):
4d5874
-        super().validate_options()
b9b3bb
-
b9b3bb
-        if self.options.dir is None:
b9b3bb
-            print("--directory containing logs to check is required")
b9b3bb
-            return 1
b9b3bb
-
4d5874
-        return None
4d5874
-
b9b3bb
-
b9b3bb
-def main():
b9b3bb
-    clusterchecks = ClusterChecks(['ipaclustercheck.registry'],
b9b3bb
-                                   '/etc/ipa/clustercheck.conf',
b9b3bb
-                                   output_registry, 'ansible')
b9b3bb
-    sys.exit(clusterchecks.run_healthcheck())
b9b3bb
diff --git a/src/ipaclustercheck/core/output.py b/src/ipaclustercheck/core/output.py
b9b3bb
deleted file mode 100644
4d5874
index 909eac4..0000000
b9b3bb
--- a/src/ipaclustercheck/core/output.py
b9b3bb
+++ /dev/null
4d5874
@@ -1,68 +0,0 @@
b9b3bb
-#
b9b3bb
-# Copyright (C) 2019 FreeIPA Contributors see COPYING for license
b9b3bb
-#
b9b3bb
-
b9b3bb
-import json
b9b3bb
-from ipahealthcheck.core.output import OutputRegistry, Output
b9b3bb
-
b9b3bb
-
b9b3bb
-output_registry = OutputRegistry()
b9b3bb
-
b9b3bb
-class ClusterOutput(Output):
b9b3bb
-    """Base class for writing/display output of cluster results
b9b3bb
-
b9b3bb
-       severity doesn't apply in this case so exclude those.
b9b3bb
-    """
b9b3bb
-    def __init__(self, options):
4d5874
-        self.filename = options.output_file
b9b3bb
-
b9b3bb
-    def strip_output(self, results):
b9b3bb
-        """Nothing to strip out"""
4d5874
-        return list(results.output())
4d5874
-
4d5874
-    def generate(self, data):
4d5874
-        raise NotImplementedError
b9b3bb
-
b9b3bb
-
b9b3bb
-@output_registry
b9b3bb
-class Ansible(ClusterOutput):
b9b3bb
-    """Output information JSON format for consumption by Ansible
b9b3bb
-
b9b3bb
-       Required keywords in a Result:
b9b3bb
-       name - unique identifier for the return value
b9b3bb
-
b9b3bb
-       One of these is required:
b9b3bb
-       value - the return value. Type? I dunno yet
b9b3bb
-       error - if an error was returned
b9b3bb
-    """
b9b3bb
-
b9b3bb
-    options = (
b9b3bb
-        ('--indent', dict(dest='indent', type=int, default=2,
b9b3bb
-         help='Indention level of JSON output')),
b9b3bb
-    )
b9b3bb
-
b9b3bb
-    def __init__(self, options):
4d5874
-        super().__init__(options)
b9b3bb
-        self.indent = options.indent
b9b3bb
-
b9b3bb
-    def generate(self, data):
b9b3bb
-        output = []
b9b3bb
-        for line in data:
b9b3bb
-            kw = line.get('kw')
b9b3bb
-            name = kw.get('name')
b9b3bb
-            value = kw.get('value')
b9b3bb
-            error = kw.get('error')
b9b3bb
-
b9b3bb
-            if value and error:
b9b3bb
-                value = '%s: %s' % (error, value)
b9b3bb
-            elif error:
b9b3bb
-                value = error
b9b3bb
-
b9b3bb
-            rval = {'%s' % name: value}
b9b3bb
-            output.append(rval)
4d5874
-
b9b3bb
-        output = json.dumps(output, indent=self.indent)
b9b3bb
-        if self.filename is None:
b9b3bb
-            output += '\n'
b9b3bb
-
b9b3bb
-        return output
b9b3bb
diff --git a/src/ipaclustercheck/ipa/__init__.py b/src/ipaclustercheck/ipa/__init__.py
b9b3bb
deleted file mode 100644
b9b3bb
index e69de29..0000000
b9b3bb
diff --git a/src/ipaclustercheck/ipa/crlmanager.py b/src/ipaclustercheck/ipa/crlmanager.py
b9b3bb
deleted file mode 100644
b9b3bb
index 6806d74..0000000
b9b3bb
--- a/src/ipaclustercheck/ipa/crlmanager.py
b9b3bb
+++ /dev/null
b9b3bb
@@ -1,36 +0,0 @@
b9b3bb
-#
b9b3bb
-# Copyright (C) 2019 FreeIPA Contributors see COPYING for license
b9b3bb
-#
b9b3bb
-
b9b3bb
-from ipaclustercheck.ipa.plugin import ClusterPlugin, registry, find_checks
b9b3bb
-from ipahealthcheck.core.plugin import Result, duration
b9b3bb
-from ipahealthcheck.core import constants
b9b3bb
-
b9b3bb
-
b9b3bb
-@registry
b9b3bb
-class ClusterCRLManagerCheck(ClusterPlugin):
b9b3bb
-
b9b3bb
-    @duration
b9b3bb
-    def check(self):
b9b3bb
-        data = self.registry.json
b9b3bb
-        crlmanagers = []
b9b3bb
-
b9b3bb
-        for fqdn in data.keys():
b9b3bb
-             output = find_checks(data[fqdn], 'ipahealthcheck.ipa.roles',
b9b3bb
-                                 'IPACRLManagerCheck')
b9b3bb
-             enabled = output[0].get('kw').get('crlgen_enabled')
b9b3bb
-             if enabled:
b9b3bb
-                 crlmanagers.append(fqdn)
b9b3bb
-        if len(crlmanagers) == 0:
b9b3bb
-            yield Result(self, constants.ERROR,
b9b3bb
-                         name='crlmanager',
b9b3bb
-                         error='No CRL Manager defined')
b9b3bb
-        elif len(crlmanagers) == 1:
b9b3bb
-            yield Result(self, constants.SUCCESS,
b9b3bb
-                         name='crlmanager',
b9b3bb
-                         value=crlmanagers[0])
b9b3bb
-        else:
b9b3bb
-            yield Result(self, constants.ERROR,
b9b3bb
-                         name='crlmanager',
b9b3bb
-                         value=','.join(crlmanagers),
b9b3bb
-                         error='Multiple CRL Managers defined')
b9b3bb
diff --git a/src/ipaclustercheck/ipa/plugin.py b/src/ipaclustercheck/ipa/plugin.py
b9b3bb
deleted file mode 100644
4d5874
index a111988..0000000
b9b3bb
--- a/src/ipaclustercheck/ipa/plugin.py
b9b3bb
+++ /dev/null
4d5874
@@ -1,117 +0,0 @@
b9b3bb
-#
b9b3bb
-# Copyright (C) 2020 FreeIPA Contributors see COPYING for license
b9b3bb
-#
b9b3bb
-
b9b3bb
-from copy import deepcopy
b9b3bb
-import json
b9b3bb
-import logging
b9b3bb
-from os import listdir
b9b3bb
-from os.path import isfile, join
b9b3bb
-
b9b3bb
-from ipahealthcheck.core.plugin import Plugin, Registry
b9b3bb
-from ipalib import api
b9b3bb
-
b9b3bb
-
b9b3bb
-logger = logging.getLogger()
b9b3bb
-
b9b3bb
-def find_checks(data, source, check):
b9b3bb
-    """Look through the dict for a matching source and check.
b9b3bb
-
b9b3bb
-       data: dict of source and check output
b9b3bb
-       source: name of source to find
b9b3bb
-       check: name of check to find
b9b3bb
-
b9b3bb
-       Returns list of contents of source + check or empty list
b9b3bb
-    """
b9b3bb
-    rval = []
b9b3bb
-    for d in data:
b9b3bb
-        if d.get('source') == source and d.get('check') == check:
b9b3bb
-            rval.append(d)
b9b3bb
-
b9b3bb
-    return rval
b9b3bb
-
b9b3bb
-
b9b3bb
-def get_masters(data):
b9b3bb
-    """
b9b3bb
-    Return the list of known masters
b9b3bb
-
b9b3bb
-    This is determined from the list of loaded healthcheck logs. It
b9b3bb
-    is possible that mixed versions are used so some may not be
b9b3bb
-    reporting the full list of masters, so check them all, and raise
b9b3bb
-    an exception if the list cannot be determined.
b9b3bb
-    """
b9b3bb
-    test_masters = list(data)
b9b3bb
-    masters = None
b9b3bb
-    for master in test_masters:
b9b3bb
-        output = find_checks(data[master], 'ipahealthcheck.ipa.meta',
b9b3bb
-                             'IPAMetaCheck')
b9b3bb
-        if len(output) == 0:
b9b3bb
-            raise ValueError('Unable to determine full list of masters. '
b9b3bb
-                             'ipahealthcheck.ipa.meta:IPAMetaCheck not '
b9b3bb
-                             'found.')
b9b3bb
-
b9b3bb
-        masters = output[0].get('kw').get('masters')
b9b3bb
-        if masters:
4d5874
-            return masters
b9b3bb
-
b9b3bb
-    raise ValueError('Unable to determine full list of masters. '
b9b3bb
-                     'None of ipahealthcheck.ipa.meta:IPAMetaCheck '
b9b3bb
-                     'contain masters.')
b9b3bb
-
b9b3bb
-
b9b3bb
-class ClusterPlugin(Plugin):
4d5874
-    pass
b9b3bb
-
b9b3bb
-
b9b3bb
-class ClusterRegistry(Registry):
4d5874
-    def __init__(self):
4d5874
-        super().__init__()
4d5874
-        self.json = None
4d5874
-
4d5874
-    def initialize(self, framework, config, options=None):
4d5874
-        super().initialize(framework, config, options)
b9b3bb
-
b9b3bb
-        self.json = {}
b9b3bb
-
b9b3bb
-        self.load_files(options.dir)
b9b3bb
-
b9b3bb
-        if not api.isdone('finalize'):
b9b3bb
-            if not api.isdone('bootstrap'):
b9b3bb
-                api.bootstrap(in_server=True,
b9b3bb
-                              context='ipahealthcheck',
b9b3bb
-                              log=None)
b9b3bb
-            if not api.isdone('finalize'):
b9b3bb
-                api.finalize()
b9b3bb
-
b9b3bb
-    def load_files(self, dir):
b9b3bb
-        if self.json:
b9b3bb
-            return
b9b3bb
-
b9b3bb
-        files = [f for f in listdir(dir) if isfile(join(dir, f))]
b9b3bb
-        for file in files:
b9b3bb
-            fname = join(dir, file)
b9b3bb
-            logger.debug("Reading %s", fname)
b9b3bb
-            try:
b9b3bb
-                with open(fname, 'r') as fd:
b9b3bb
-                    data = fd.read()
b9b3bb
-            except Exception as e:
b9b3bb
-                logger.error("Unable to read %s: %s", fname, e)
b9b3bb
-                continue
4d5874
-
b9b3bb
-            try:
b9b3bb
-                data = json.loads(data)
b9b3bb
-            except Exception as e:
b9b3bb
-                logger.error("Unable to parse JSON in %s: %s", fname, e)
b9b3bb
-                continue
b9b3bb
-
b9b3bb
-            meta = find_checks(data, 'ipahealthcheck.meta.core',
b9b3bb
-                                   'MetaCheck')
b9b3bb
-            if meta:
b9b3bb
-                fqdn = meta[0].get('kw').get('fqdn')
b9b3bb
-                self.json[fqdn] = deepcopy(data)
b9b3bb
-            else:
b9b3bb
-                logger.error("No fqdn defined in JSON in %s", fname)
b9b3bb
-                continue
4d5874
-
4d5874
-
b9b3bb
-registry = ClusterRegistry()
b9b3bb
diff --git a/src/ipaclustercheck/ipa/ruv.py b/src/ipaclustercheck/ipa/ruv.py
b9b3bb
deleted file mode 100644
4d5874
index 6477738..0000000
b9b3bb
--- a/src/ipaclustercheck/ipa/ruv.py
b9b3bb
+++ /dev/null
4d5874
@@ -1,155 +0,0 @@
b9b3bb
-#
b9b3bb
-# Copyright (C) 2019 FreeIPA Contributors see COPYING for license
b9b3bb
-#
b9b3bb
-
b9b3bb
-import logging
b9b3bb
-
b9b3bb
-from ipaclustercheck.ipa.plugin import (
b9b3bb
-    ClusterPlugin,
b9b3bb
-    registry,
b9b3bb
-    find_checks,
b9b3bb
-    get_masters
b9b3bb
-)
b9b3bb
-from ipahealthcheck.core.plugin import Result, duration
b9b3bb
-from ipahealthcheck.core import constants
b9b3bb
-from ipalib import api
b9b3bb
-from ipapython.dn import DN
b9b3bb
-
b9b3bb
-
b9b3bb
-logger = logging.getLogger()
b9b3bb
-
b9b3bb
-
b9b3bb
-@registry
b9b3bb
-class ClusterRUVCheck(ClusterPlugin):
b9b3bb
-
b9b3bb
-    # TODO: confirm that all masters are represented, otherwise the
b9b3bb
-    #       trustworthiness of dangling RUV is mixed.
b9b3bb
-    #
b9b3bb
-    #       gah, need to provide full list of all masters in a check.
b9b3bb
-
b9b3bb
-    @duration
b9b3bb
-    def check(self):
b9b3bb
-        data = self.registry.json
b9b3bb
-
b9b3bb
-        # Start with the list of masters from the file(s) collected
b9b3bb
-        # and find a MetaCheck with a full list of masters. For
b9b3bb
-        # backwards compatibility.
b9b3bb
-        try:
b9b3bb
-            masters = get_masters(data)
b9b3bb
-        except ValueError as e:
b9b3bb
-            yield Result(self, constants.ERROR,
b9b3bb
-                         name='dangling_ruv',
b9b3bb
-                         error=str(e))
b9b3bb
-            return
b9b3bb
-
b9b3bb
-        if len(data.keys()) < len(masters):
b9b3bb
-            yield Result(self, constants.ERROR,
b9b3bb
-                         name='dangling_ruv',
b9b3bb
-                         error='Unable to determine list of RUVs, missing '
b9b3bb
-                               'some masters: %s' %
b9b3bb
-                               ''.join(set(masters) - set(data.keys())))
b9b3bb
-            return
b9b3bb
-
b9b3bb
-        # collect the full set of known RUVs for each master
b9b3bb
-        info = {}
b9b3bb
-        for master in masters:
b9b3bb
-            info[master] = {
b9b3bb
-                'ca': False,           # does the host have ca configured?
b9b3bb
-                'ruvs': set(),         # ruvs on the host
b9b3bb
-                'csruvs': set(),       # csruvs on the host
b9b3bb
-                'clean_ruv': set(),    # ruvs to be cleaned from the host
b9b3bb
-                'clean_csruv': set()   # csruvs to be cleaned from the host
b9b3bb
-                }
b9b3bb
-
b9b3bb
-        for fqdn in data.keys():
b9b3bb
-            outputs = find_checks(data[fqdn], 'ipahealthcheck.ds.ruv',
b9b3bb
-                                  'KnownRUVCheck')
b9b3bb
-            for output in outputs:
b9b3bb
-                if not 'suffix' in output.get('kw'):
b9b3bb
-                    continue
b9b3bb
-                basedn = DN(output.get('kw').get('suffix'))
b9b3bb
-
b9b3bb
-                ruvset = set()
b9b3bb
-                ruvtmp = output.get('kw').get('ruvs')
b9b3bb
-                for ruv in ruvtmp:
b9b3bb
-                    ruvset.add(tuple(ruv))
b9b3bb
-
b9b3bb
-                if basedn == DN('o=ipaca'):
b9b3bb
-                    info[fqdn]['ca'] = True
b9b3bb
-                    info[fqdn]['csruvs'] = ruvset
b9b3bb
-                elif basedn == api.env.basedn:
b9b3bb
-                    info[fqdn]['ruvs'] = ruvset
b9b3bb
-                else:
b9b3bb
-                    yield Result(self, constants.WARNING,
b9b3bb
-                                 name='dangling_ruv',
b9b3bb
-                                 error='Unknown suffix found %s expected %s'
b9b3bb
-                                       % (basedn, api.env.basedn))
b9b3bb
-
b9b3bb
-        # Collect the nsDS5ReplicaID for each master
b9b3bb
-        ruvs = set()
b9b3bb
-        csruvs = set()
b9b3bb
-        for fqdn in data.keys():
b9b3bb
-            outputs = find_checks(data[fqdn], 'ipahealthcheck.ds.ruv',
b9b3bb
-                                  'RUVCheck')
b9b3bb
-            for output in outputs:
b9b3bb
-                if not 'key' in output.get('kw'):
b9b3bb
-                    continue
b9b3bb
-                basedn = DN(output.get('kw').get('key'))
b9b3bb
-                ruv = (fqdn, (output.get('kw').get('ruv')))
b9b3bb
-                if basedn == DN('o=ipaca'):
b9b3bb
-                    csruvs.add(ruv)
b9b3bb
-                elif basedn == api.env.basedn:
b9b3bb
-                    ruvs.add(ruv)
b9b3bb
-                else:
b9b3bb
-                    yield Result(self, constants.WARNING,
b9b3bb
-                                 name='dangling_ruv',
b9b3bb
-                                 error='Unknown suffix found %s expected %s'
b9b3bb
-                                       % (basedn, api.env.basedn))
b9b3bb
-
b9b3bb
-        dangles = False
b9b3bb
-        # get the dangling RUVs
b9b3bb
-        for master_info in info.values():
b9b3bb
-            for ruv in master_info['ruvs']:
b9b3bb
-                if ruv not in ruvs:
b9b3bb
-                    master_info['clean_ruv'].add(ruv)
b9b3bb
-                    dangles = True
b9b3bb
-
b9b3bb
-            # if ca is not configured, there will be no csruvs in master_info
b9b3bb
-            for csruv in master_info['csruvs']:
b9b3bb
-                if csruv not in csruvs:
b9b3bb
-                    master_info['clean_csruv'].add(csruv)
b9b3bb
-                    dangles = True
b9b3bb
-
b9b3bb
-        clean_csruvs = set()
b9b3bb
-        clean_ruvs = set()
b9b3bb
-        if dangles:
4d5874
-            for _unused, master_info in info.items():
b9b3bb
-                for ruv in master_info['clean_ruv']:
4d5874
-                    logger.debug(
4d5874
-                        "Dangling RUV id: %s, hostname: %s", ruv[1], ruv[0]
4d5874
-                    )
b9b3bb
-                    clean_ruvs.add(ruv[1])
b9b3bb
-                for csruv in master_info['clean_csruv']:
4d5874
-                    logger.debug(
4d5874
-                        "Dangling CS RUV id: %s, hostname: %s",
4d5874
-                        csruv[1],
4d5874
-                        csruv[0]
4d5874
-                    )
b9b3bb
-                    clean_csruvs.add(csruv[1])
b9b3bb
-
b9b3bb
-        if clean_ruvs:
b9b3bb
-            yield Result(self, constants.ERROR,
b9b3bb
-                         name='dangling_ruv',
b9b3bb
-                         value=', '.join(clean_ruvs))
b9b3bb
-        else:
b9b3bb
-            yield Result(self, constants.SUCCESS,
b9b3bb
-                         name='dangling_ruv',
b9b3bb
-                         value='No dangling RUVs found')
b9b3bb
-        if clean_csruvs:
b9b3bb
-            yield Result(self, constants.ERROR,
b9b3bb
-                         name='dangling_csruv',
b9b3bb
-                         value=', '.join(clean_csruvs))
b9b3bb
-        else:
b9b3bb
-            yield Result(self, constants.SUCCESS,
b9b3bb
-                         name='dangling_csruv',
b9b3bb
-                         value='No dangling CS RUVs found')
b9b3bb
diff --git a/tests/test_cluster_ruv.py b/tests/test_cluster_ruv.py
b9b3bb
deleted file mode 100644
b9b3bb
index 7583c84..0000000
b9b3bb
--- a/tests/test_cluster_ruv.py
b9b3bb
+++ /dev/null
b9b3bb
@@ -1,106 +0,0 @@
b9b3bb
-#
b9b3bb
-# Copyright (C) 2019 FreeIPA Contributors see COPYING for license
b9b3bb
-#
b9b3bb
-
b9b3bb
-from base import BaseTest
b9b3bb
-from util import capture_results
b9b3bb
-
b9b3bb
-from ipahealthcheck.core import config
b9b3bb
-from ipaclustercheck.ipa.plugin import ClusterRegistry
b9b3bb
-from ipaclustercheck.ipa.ruv import ClusterRUVCheck
b9b3bb
-
b9b3bb
-import clusterdata
b9b3bb
-
b9b3bb
-
b9b3bb
-class RUVRegistry(ClusterRegistry):
b9b3bb
-    def load_files(self, dir):
b9b3bb
-        self.json = dir
b9b3bb
-
b9b3bb
-
b9b3bb
-class Options:
b9b3bb
-    def __init__(self, data):
b9b3bb
-        self.data = data
b9b3bb
-
b9b3bb
-    @property
b9b3bb
-    def dir(self):
b9b3bb
-        return self.data
b9b3bb
-
b9b3bb
-
b9b3bb
-registry = RUVRegistry()
b9b3bb
-
b9b3bb
-
b9b3bb
-class TestClusterRUV(BaseTest):
b9b3bb
-
b9b3bb
-    def test_no_ruvs(self):
b9b3bb
-        """Single master test that has never created a replica
b9b3bb
-
b9b3bb
-           This type of master will have no RUVs created at all.
b9b3bb
-        """
b9b3bb
-        framework = object()
b9b3bb
-        registry.initialize(framework, config.Config,
b9b3bb
-                            Options(clusterdata.ONE_MASTER))
b9b3bb
-        f = ClusterRUVCheck(registry)
b9b3bb
-
b9b3bb
-        self.results = capture_results(f)
b9b3bb
-
b9b3bb
-        assert len(self.results) == 2
b9b3bb
-        result = self.results.results[0]
b9b3bb
-        assert result.kw.get('name') == 'dangling_ruv'
b9b3bb
-        assert result.kw.get('value') == 'No dangling RUVs found'
b9b3bb
-        result = self.results.results[1]
b9b3bb
-        assert result.kw.get('name') == 'dangling_csruv'
b9b3bb
-        assert result.kw.get('value') == 'No dangling CS RUVs found'
b9b3bb
-
b9b3bb
-    def test_six_ruvs_ok(self):
b9b3bb
-        """Three master test with each having a CA, no dangling
b9b3bb
-        """
b9b3bb
-        framework = object()
b9b3bb
-        registry.initialize(framework, config.Config,
b9b3bb
-                            Options(clusterdata.THREE_MASTERS_OK))
b9b3bb
-        f = ClusterRUVCheck(registry)
b9b3bb
-
b9b3bb
-        self.results = capture_results(f)
b9b3bb
-
b9b3bb
-        assert len(self.results) == 2
b9b3bb
-        result = self.results.results[0]
b9b3bb
-        assert result.kw.get('name') == 'dangling_ruv'
b9b3bb
-        assert result.kw.get('value') == 'No dangling RUVs found'
b9b3bb
-        result = self.results.results[1]
b9b3bb
-        assert result.kw.get('name') == 'dangling_csruv'
b9b3bb
-        assert result.kw.get('value') == 'No dangling CS RUVs found'
b9b3bb
-
b9b3bb
-    def test_six_ruvs_ipa_bad(self):
b9b3bb
-        """Three master test with each having a CA, dangling IPA RUV
b9b3bb
-        """
b9b3bb
-        framework = object()
b9b3bb
-        registry.initialize(framework, config.Config,
b9b3bb
-                            Options(clusterdata.THREE_MASTERS_BAD_IPA_RUV))
b9b3bb
-        f = ClusterRUVCheck(registry)
b9b3bb
-
b9b3bb
-        self.results = capture_results(f)
b9b3bb
-
b9b3bb
-        assert len(self.results) == 2
b9b3bb
-        result = self.results.results[0]
b9b3bb
-        assert result.kw.get('name') == 'dangling_ruv'
b9b3bb
-        assert result.kw.get('value') == '9'
b9b3bb
-        result = self.results.results[1]
b9b3bb
-        assert result.kw.get('name') == 'dangling_csruv'
b9b3bb
-        assert result.kw.get('value') == 'No dangling CS RUVs found'
b9b3bb
-
b9b3bb
-    def test_six_ruvs_cs_bad(self):
b9b3bb
-        """Three master test with each having a CA, dangling CA RUV
b9b3bb
-        """
b9b3bb
-        framework = object()
b9b3bb
-        registry.initialize(framework, config.Config,
b9b3bb
-                            Options(clusterdata.THREE_MASTERS_BAD_CS_RUV))
b9b3bb
-        f = ClusterRUVCheck(registry)
b9b3bb
-
b9b3bb
-        self.results = capture_results(f)
b9b3bb
-
b9b3bb
-        assert len(self.results) == 2
b9b3bb
-        result = self.results.results[0]
b9b3bb
-        assert result.kw.get('name') == 'dangling_ruv'
b9b3bb
-        assert result.kw.get('value') == 'No dangling RUVs found'
b9b3bb
-        result = self.results.results[1]
b9b3bb
-        assert result.kw.get('name') == 'dangling_csruv'
b9b3bb
-        assert result.kw.get('value') == '9'
b9b3bb
-- 
4d5874
2.38.1
b9b3bb