diff --git a/lib/ansible/module_utils/facts.py b/lib/ansible/module_utils/facts.py index 4842dfd13a..d00e46f109 100644 --- a/lib/ansible/module_utils/facts.py +++ b/lib/ansible/module_utils/facts.py @@ -771,6 +771,17 @@ class Facts(object): val = len(option_tokens) == 2 and option_tokens[1] or True self.facts['dns']['options'][option_tokens[0]] = val + def _get_mount_size_facts(self, mountpoint): + size_total = None + size_available = None + try: + statvfs_result = os.statvfs(mountpoint) + size_total = statvfs_result.f_bsize * statvfs_result.f_blocks + size_available = statvfs_result.f_bsize * (statvfs_result.f_bavail) + except OSError: + pass + return size_total, size_available + class Hardware(Facts): """ This is a generic Hardware subclass of Facts. This should be further @@ -1045,15 +1056,7 @@ class LinuxHardware(Hardware): if line.startswith('/'): fields = line.rstrip('\n').split() if(fields[2] != 'none'): - size_total = None - size_available = None - try: - statvfs_result = os.statvfs(fields[1]) - size_total = statvfs_result.f_bsize * statvfs_result.f_blocks - size_available = statvfs_result.f_bsize * (statvfs_result.f_bavail) - except OSError: - continue - + size_total, size_available = self._get_mount_size_facts(fields[2]) if fields[0] in uuids: uuid = uuids[fields[0]] else: @@ -1300,7 +1303,9 @@ class SunOSHardware(Hardware): if fstab: for line in fstab.split('\n'): fields = line.rstrip('\n').split('\t') - self.facts['mounts'].append({'mount': fields[1], 'device': fields[0], 'fstype' : fields[2], 'options': fields[3], 'time': fields[4]}) + size_total, size_available = self._get_mount_size_facts(fields[1]) + self.facts['mounts'].append({'mount': fields[1], 'device': fields[0], 'fstype' : fields[2], 'options': fields[3], 'time': fields[4], 'size_total': size_total, 'size_available': size_available}) + class OpenBSDHardware(Hardware): """ @@ -1350,7 +1355,9 @@ class OpenBSDHardware(Hardware): fields = re.sub(r'\s+',' ',line.rstrip('\n')).split() if fields[1] == 'none' or fields[3] == 'xx': continue - self.facts['mounts'].append({'mount': fields[1], 'device': fields[0], 'fstype' : fields[2], 'options': fields[3]}) + size_total, size_available = self._get_mount_size_facts(fields[1]) + self.facts['mounts'].append({'mount': fields[1], 'device': fields[0], 'fstype' : fields[2], 'options': fields[3], 'size_total': size_total, 'size_available': size_available}) + def get_memory_facts(self): # Get free memory. vmstat output looks like: @@ -1473,7 +1480,8 @@ class FreeBSDHardware(Hardware): if line.startswith('#') or line.strip() == '': continue fields = re.sub(r'\s+',' ',line.rstrip('\n')).split() - self.facts['mounts'].append({'mount': fields[1], 'device': fields[0], 'fstype' : fields[2], 'options': fields[3]}) + size_total, size_available = self._get_mount_size_facts(fields[1]) + self.facts['mounts'].append({'mount': fields[1], 'device': fields[0], 'fstype' : fields[2], 'options': fields[3], 'size_total': size_total, 'size_available': size_available}) def get_device_facts(self): sysdir = '/dev' @@ -1602,7 +1610,8 @@ class NetBSDHardware(Hardware): if line.startswith('#') or line.strip() == '': continue fields = re.sub(r'\s+',' ',line.rstrip('\n')).split() - self.facts['mounts'].append({'mount': fields[1], 'device': fields[0], 'fstype' : fields[2], 'options': fields[3]}) + size_total, size_available = self._get_mount_size_facts(fields[1]) + self.facts['mounts'].append({'mount': fields[1], 'device': fields[0], 'fstype' : fields[2], 'options': fields[3], 'size_total': size_total, 'size_available': size_available}) class AIX(Hardware): """