diff --git a/lib/ansible/module_utils/facts.py b/lib/ansible/module_utils/facts.py index 98e466ecbf6..d8223b90bee 100644 --- a/lib/ansible/module_utils/facts.py +++ b/lib/ansible/module_utils/facts.py @@ -81,16 +81,16 @@ GATHER_TIMEOUT=None class TimeoutError(Exception): pass -def timeout(seconds=10, error_message="Timer expired"): +def timeout(seconds=None, error_message="Timer expired"): + + if seconds is None: + seconds = globals().get('GATHER_TIMEOUT') or 10 def decorator(func): def _handle_timeout(signum, frame): raise TimeoutError(error_message) def wrapper(*args, **kwargs): - if 'GATHER_TIMEOUT' in globals(): - if GATHER_TIMEOUT: - seconds = GATHER_TIMEOUT signal.signal(signal.SIGALRM, _handle_timeout) signal.alarm(seconds) try: @@ -1327,7 +1327,7 @@ class LinuxHardware(Hardware): mtab_entries.append(fields) return mtab_entries - @timeout(10) + @timeout() def get_mount_facts(self): self.facts['mounts'] = [] @@ -1584,7 +1584,7 @@ class SunOSHardware(Hardware): self.facts['swap_allocated_mb'] = allocated // 1024 self.facts['swap_reserved_mb'] = reserved // 1024 - @timeout(10) + @timeout() def get_mount_facts(self): self.facts['mounts'] = [] # For a detailed format description see mnttab(4) @@ -1629,11 +1629,14 @@ class OpenBSDHardware(Hardware): self.get_memory_facts() self.get_processor_facts() self.get_device_facts() - self.get_mount_facts() + try: + self.get_mount_facts() + except TimeoutError: + pass self.get_dmi_facts() return self.facts - @timeout(10) + @timeout() def get_mount_facts(self): self.facts['mounts'] = [] fstab = get_file_content('/etc/fstab') @@ -1776,7 +1779,7 @@ class FreeBSDHardware(Hardware): self.facts['swaptotal_mb'] = int(data[1]) // 1024 self.facts['swapfree_mb'] = int(data[3]) // 1024 - @timeout(10) + @timeout() def get_mount_facts(self): self.facts['mounts'] = [] fstab = get_file_content('/etc/fstab') @@ -1907,7 +1910,7 @@ class NetBSDHardware(Hardware): val = data[1].strip().split(' ')[0] self.facts["%s_mb" % key.lower()] = int(val) // 1024 - @timeout(10) + @timeout() def get_mount_facts(self): self.facts['mounts'] = [] fstab = get_file_content('/etc/fstab') @@ -2241,7 +2244,10 @@ class HurdHardware(LinuxHardware): def populate(self): self.get_uptime_facts() self.get_memory_facts() - self.get_mount_facts() + try: + self.get_mount_facts() + except TimeoutError: + pass return self.facts class Network(Facts):