diff options
author | Rodolfo Carvalho <rhcarvalho@gmail.com> | 2017-01-30 18:29:06 +0100 |
---|---|---|
committer | Rodolfo Carvalho <rhcarvalho@gmail.com> | 2017-02-10 14:46:40 +0100 |
commit | bb38413fcec7fb2640939782d57e494b40e3b41e (patch) | |
tree | 89e589859935e059d899a8bc357206c6891901b2 /roles/openshift_health_checker/openshift_checks/package_availability.py | |
parent | c6ef283bbcd1ab31934fb245d0c8ffacfd05bce1 (diff) | |
download | openshift-bb38413fcec7fb2640939782d57e494b40e3b41e.tar.gz openshift-bb38413fcec7fb2640939782d57e494b40e3b41e.tar.bz2 openshift-bb38413fcec7fb2640939782d57e494b40e3b41e.tar.xz openshift-bb38413fcec7fb2640939782d57e494b40e3b41e.zip |
Replace multi-role checks with action plugin
This approach should make it easier to add new checks without having to
write lots of YAML and doing things against Ansible (e.g.
ignore_errors).
A single action plugin determines what checks to run per each host,
including arguments to the check. A check is implemented as a class with
a run method, with the same signature as an action plugin and module,
and is normally backed by a regular Ansible module.
Each check is implemented as a separate Python file. This allows whoever
adds a new check to focus solely in a single Python module, and
potentially an Ansible module within library/ too.
All checks are automatically loaded, and only active checks that are
requested by the playbook get executed.
Diffstat (limited to 'roles/openshift_health_checker/openshift_checks/package_availability.py')
-rw-r--r-- | roles/openshift_health_checker/openshift_checks/package_availability.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/roles/openshift_health_checker/openshift_checks/package_availability.py b/roles/openshift_health_checker/openshift_checks/package_availability.py new file mode 100644 index 000000000..4260cbf7c --- /dev/null +++ b/roles/openshift_health_checker/openshift_checks/package_availability.py @@ -0,0 +1,69 @@ +# pylint: disable=missing-docstring +from openshift_checks import OpenShiftCheck, OpenShiftCheckException +from openshift_checks.mixins import NotContainerized + + +class PackageAvailability(NotContainerized, OpenShiftCheck): + """Check that required RPM packages are available.""" + + name = "package_availability" + + def run(self, tmp, task_vars): + try: + rpm_prefix = task_vars["openshift"]["common"]["service_type"] + except (KeyError, TypeError): + raise OpenShiftCheckException("'openshift.common.service_type' is undefined") + + group_names = task_vars.get("group_names", []) + + packages = set() + + if "masters" in group_names: + packages.update(self.master_packages(rpm_prefix)) + if "nodes" in group_names: + packages.update(self.node_packages(rpm_prefix)) + + args = {"packages": sorted(set(packages))} + return self.module_executor("check_yum_update", args, tmp, task_vars) + + @staticmethod + def master_packages(rpm_prefix): + return [ + "{rpm_prefix}".format(rpm_prefix=rpm_prefix), + "{rpm_prefix}-clients".format(rpm_prefix=rpm_prefix), + "{rpm_prefix}-master".format(rpm_prefix=rpm_prefix), + "bash-completion", + "cockpit-bridge", + "cockpit-docker", + "cockpit-kubernetes", + "cockpit-shell", + "cockpit-ws", + "etcd", + "httpd-tools", + ] + + @staticmethod + def node_packages(rpm_prefix): + return [ + "{rpm_prefix}".format(rpm_prefix=rpm_prefix), + "{rpm_prefix}-node".format(rpm_prefix=rpm_prefix), + "{rpm_prefix}-sdn-ovs".format(rpm_prefix=rpm_prefix), + "bind", + "ceph-common", + "dnsmasq", + "docker", + "firewalld", + "flannel", + "glusterfs-fuse", + "iptables-services", + "iptables", + "iscsi-initiator-utils", + "libselinux-python", + "nfs-utils", + "ntp", + "openssl", + "pyparted", + "python-httplib2", + "PyYAML", + "yum-utils", + ] |