summaryrefslogtreecommitdiffstats
path: root/roles/openshift_health_checker/openshift_checks/etcd_volume.py
diff options
context:
space:
mode:
authorjuanvallejo <jvallejo@redhat.com>2017-03-10 19:14:01 -0500
committerjuanvallejo <jvallejo@redhat.com>2017-05-09 17:21:59 -0400
commita62594a2188343101d1c0ffa4588745d4a2044b4 (patch)
tree5e02fc1f98cef402643224dc75c7e0e605c073ef /roles/openshift_health_checker/openshift_checks/etcd_volume.py
parent14dbd7c24df84a0b13a79ce1901de221548442f5 (diff)
downloadopenshift-a62594a2188343101d1c0ffa4588745d4a2044b4.tar.gz
openshift-a62594a2188343101d1c0ffa4588745d4a2044b4.tar.bz2
openshift-a62594a2188343101d1c0ffa4588745d4a2044b4.tar.xz
openshift-a62594a2188343101d1c0ffa4588745d4a2044b4.zip
add etcd volume check
Diffstat (limited to 'roles/openshift_health_checker/openshift_checks/etcd_volume.py')
-rw-r--r--roles/openshift_health_checker/openshift_checks/etcd_volume.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/roles/openshift_health_checker/openshift_checks/etcd_volume.py b/roles/openshift_health_checker/openshift_checks/etcd_volume.py
new file mode 100644
index 000000000..cbdf70092
--- /dev/null
+++ b/roles/openshift_health_checker/openshift_checks/etcd_volume.py
@@ -0,0 +1,58 @@
+# vim: expandtab:tabstop=4:shiftwidth=4
+"""
+Ansible module for warning about etcd volume size past a defined threshold.
+"""
+
+from openshift_checks import OpenShiftCheck, OpenShiftCheckException, get_var
+
+
+class EtcdVolume(OpenShiftCheck):
+ """Ensure disk size for an etcd host does not exceed a defined limit"""
+
+ name = "etcd_volume"
+ tags = ["etcd", "health"]
+
+ etcd_default_size_limit_percent = 0.9
+
+ def run(self, tmp, task_vars):
+ ansible_mounts = get_var(task_vars, "ansible_mounts")
+
+ etcd_mount_path = self._get_etcd_mount_path(ansible_mounts)
+ etcd_disk_size_available = int(etcd_mount_path["size_available"])
+ etcd_disk_size_total = int(etcd_mount_path["size_total"])
+ etcd_disk_size_used = etcd_disk_size_total - etcd_disk_size_available
+
+ size_limit_percent = get_var(
+ task_vars,
+ "etcd_disk_size_limit_percent",
+ default=self.etcd_default_size_limit_percent
+ )
+
+ if float(etcd_disk_size_used) / float(etcd_disk_size_total) > size_limit_percent:
+ msg = ("Current etcd volume usage ({actual:.2f} GB) for the volume \"{volume}\" "
+ "is greater than the storage limit ({limit:.2f} GB).")
+ msg = msg.format(
+ actual=self._to_gigabytes(etcd_disk_size_used),
+ volume=etcd_mount_path["mount"],
+ limit=self._to_gigabytes(size_limit_percent * etcd_disk_size_total),
+ )
+ return {"failed": True, "msg": msg}
+
+ return {"changed": False}
+
+ @staticmethod
+ def _get_etcd_mount_path(ansible_mounts):
+ supported_mnt_paths = ["/var/lib/etcd", "/var/lib", "/var", "/"]
+ available_mnts = {mnt.get("mount"): mnt for mnt in ansible_mounts}
+
+ for path in supported_mnt_paths:
+ if path in available_mnts:
+ return available_mnts[path]
+
+ paths = ', '.join(sorted(available_mnts)) or 'none'
+ msg = "Unable to determine available disk space. Paths mounted: {}.".format(paths)
+ raise OpenShiftCheckException(msg)
+
+ @staticmethod
+ def _to_gigabytes(byte_size):
+ return float(byte_size) / 10.0**9