diff options
| author | Luke Meyer <lmeyer@redhat.com> | 2017-10-19 11:47:56 -0400 | 
|---|---|---|
| committer | Luke Meyer <lmeyer@redhat.com> | 2017-10-20 10:44:08 -0400 | 
| commit | 4fb35642a47550021fed3e455bedc9b6fdf2b9c9 (patch) | |
| tree | 824ecdef1668084e074810f5b9867046896a44e3 /roles | |
| parent | 61cca52ea383d75aa4c20cf0e96936a5188084e9 (diff) | |
| download | openshift-4fb35642a47550021fed3e455bedc9b6fdf2b9c9.tar.gz openshift-4fb35642a47550021fed3e455bedc9b6fdf2b9c9.tar.bz2 openshift-4fb35642a47550021fed3e455bedc9b6fdf2b9c9.tar.xz openshift-4fb35642a47550021fed3e455bedc9b6fdf2b9c9.zip  | |
disk_availability check: include submount storage
Fixes bug 1491566
https://bugzilla.redhat.com/show_bug.cgi?id=1491566
In order to determine how much storage is under a path, include any
mounts that are below it in addition to the path itself.
Diffstat (limited to 'roles')
| -rw-r--r-- | roles/openshift_health_checker/openshift_checks/disk_availability.py | 13 | ||||
| -rw-r--r-- | roles/openshift_health_checker/test/disk_availability_test.py | 23 | 
2 files changed, 33 insertions, 3 deletions
diff --git a/roles/openshift_health_checker/openshift_checks/disk_availability.py b/roles/openshift_health_checker/openshift_checks/disk_availability.py index 7956559c6..87e6146d4 100644 --- a/roles/openshift_health_checker/openshift_checks/disk_availability.py +++ b/roles/openshift_health_checker/openshift_checks/disk_availability.py @@ -1,6 +1,7 @@  """Check that there is enough disk space in predefined paths."""  import tempfile +import os.path  from openshift_checks import OpenShiftCheck, OpenShiftCheckException @@ -121,11 +122,21 @@ class DiskAvailability(OpenShiftCheck):          return {} +    def find_ansible_submounts(self, path): +        """Return a list of ansible_mounts that are below the given path.""" +        base = os.path.join(path, "") +        return [ +            mount +            for mount in self.get_var("ansible_mounts") +            if mount["mount"].startswith(base) +        ] +      def free_bytes(self, path):          """Return the size available in path based on ansible_mounts.""" +        submounts = sum(mnt.get('size_available', 0) for mnt in self.find_ansible_submounts(path))          mount = self.find_ansible_mount(path)          try: -            return mount['size_available'] +            return mount['size_available'] + submounts          except KeyError:              raise OpenShiftCheckException(                  'Unable to retrieve disk availability for "{path}".\n' diff --git a/roles/openshift_health_checker/test/disk_availability_test.py b/roles/openshift_health_checker/test/disk_availability_test.py index 29a325a17..7acdb40ec 100644 --- a/roles/openshift_health_checker/test/disk_availability_test.py +++ b/roles/openshift_health_checker/test/disk_availability_test.py @@ -96,6 +96,24 @@ def test_cannot_determine_available_disk(desc, ansible_mounts, expect_chunks):              'size_available': 20 * 10**9 + 1,          }],      ), +    ( +        ['oo_masters_to_config'], +        0, +        [{ +            'mount': '/', +            'size_available': 2 * 10**9, +        }, {  # not enough directly on /var +            'mount': '/var', +            'size_available': 10 * 10**9 + 1, +        }, { +            # but subdir mounts add up to enough +            'mount': '/var/lib/docker', +            'size_available': 20 * 10**9 + 1, +        }, { +            'mount': '/var/lib/origin', +            'size_available': 20 * 10**9 + 1, +        }], +    ),  ])  def test_succeeds_with_recommended_disk_space(group_names, configured_min, ansible_mounts):      task_vars = dict( @@ -104,9 +122,10 @@ def test_succeeds_with_recommended_disk_space(group_names, configured_min, ansib          ansible_mounts=ansible_mounts,      ) -    result = DiskAvailability(fake_execute_module, task_vars).run() +    check = DiskAvailability(fake_execute_module, task_vars) +    check.run() -    assert not result.get('failed', False) +    assert not check.failures  @pytest.mark.parametrize('name,group_names,configured_min,ansible_mounts,expect_chunks', [  | 
