summaryrefslogtreecommitdiffstats
path: root/roles/openshift_health_checker/openshift_checks/logging/curator.py
blob: c9fc5989687ab0a39da9bbba9a08096a85eacb05 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
"""
Module for performing checks on an Curator logging deployment
"""

from openshift_checks import get_var
from openshift_checks.logging.logging import LoggingCheck


class Curator(LoggingCheck):
    """Module that checks an integrated logging Curator deployment"""

    name = "curator"
    tags = ["health", "logging"]

    logging_namespace = None

    def run(self, tmp, task_vars):
        """Check various things and gather errors. Returns: result as hash"""

        self.logging_namespace = get_var(task_vars, "openshift_logging_namespace", default="logging")
        curator_pods, error = super(Curator, self).get_pods_for_component(
            self.module_executor,
            self.logging_namespace,
            "curator",
            task_vars
        )
        if error:
            return {"failed": True, "changed": False, "msg": error}
        check_error = self.check_curator(curator_pods)

        if check_error:
            msg = ("The following Curator deployment issue was found:"
                   "\n-------\n"
                   "{}".format(check_error))
            return {"failed": True, "changed": False, "msg": msg}

        # TODO(lmeyer): run it all again for the ops cluster
        return {"failed": False, "changed": False, "msg": 'No problems found with Curator deployment.'}

    def check_curator(self, pods):
        """Check to see if curator is up and working. Returns: error string"""
        if not pods:
            return (
                "There are no Curator pods for the logging stack,\n"
                "so nothing will prune Elasticsearch indexes.\n"
                "Is Curator correctly deployed?"
            )

        not_running = super(Curator, self).not_running_pods(pods)
        if len(not_running) == len(pods):
            return (
                "The Curator pod is not currently in a running state,\n"
                "so Elasticsearch indexes may increase without bound."
            )
        if len(pods) - len(not_running) > 1:
            return (
                "There is more than one Curator pod running. This should not normally happen.\n"
                "Although this doesn't cause any problems, you may want to investigate."
            )

        return None