From 0c2e7fd841e9412c620f74f47476e3675e48fac2 Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Tue, 10 Apr 2018 17:23:29 -0400 Subject: [PATCH] made missing cli tools non fatal (#37194) * made missing cli tools non fatal * remove bare exceptions these shoudl not be there as they can prevent 'wanted' exits --- .../module_utils/facts/hardware/freebsd.py | 63 +++++++++++-------- .../module_utils/facts/system/chroot.py | 2 +- lib/ansible/module_utils/facts/utils.py | 2 +- 3 files changed, 39 insertions(+), 28 deletions(-) diff --git a/lib/ansible/module_utils/facts/hardware/freebsd.py b/lib/ansible/module_utils/facts/hardware/freebsd.py index 0e7002b4867..8d0bc610119 100644 --- a/lib/ansible/module_utils/facts/hardware/freebsd.py +++ b/lib/ansible/module_utils/facts/hardware/freebsd.py @@ -66,12 +66,18 @@ class FreeBSDHardware(Hardware): def get_cpu_facts(self): cpu_facts = {} cpu_facts['processor'] = [] - rc, out, err = self.module.run_command("/sbin/sysctl -n hw.ncpu") - cpu_facts['processor_count'] = out.strip() + sysctl = self.module.get_bin_path('sysctl') + if sysctl: + rc, out, err = self.module.run_command("%s -n hw.ncpu" % sysctl, check_rc=False) + cpu_facts['processor_count'] = out.strip() dmesg_boot = get_file_content(FreeBSDHardware.DMESG_BOOT) if not dmesg_boot: - rc, dmesg_boot, err = self.module.run_command("/sbin/dmesg") + try: + rc, dmesg_boot, err = self.module.run_command(self.module.get_bin_path("dmesg"), check_rc=False) + except Exception: + dmesg_boot = '' + for line in dmesg_boot.splitlines(): if 'CPU:' in line: cpu = re.sub(r'CPU:\s+', r"", line) @@ -84,29 +90,34 @@ class FreeBSDHardware(Hardware): def get_memory_facts(self): memory_facts = {} - rc, out, err = self.module.run_command("/sbin/sysctl vm.stats") - for line in out.splitlines(): - data = line.split() - if 'vm.stats.vm.v_page_size' in line: - pagesize = int(data[1]) - if 'vm.stats.vm.v_page_count' in line: - pagecount = int(data[1]) - if 'vm.stats.vm.v_free_count' in line: - freecount = int(data[1]) - memory_facts['memtotal_mb'] = pagesize * pagecount // 1024 // 1024 - memory_facts['memfree_mb'] = pagesize * freecount // 1024 // 1024 - # Get swapinfo. swapinfo output looks like: - # Device 1M-blocks Used Avail Capacity - # /dev/ada0p3 314368 0 314368 0% - # - rc, out, err = self.module.run_command("/usr/sbin/swapinfo -k") - lines = out.splitlines() - if len(lines[-1]) == 0: - lines.pop() - data = lines[-1].split() - if data[0] != 'Device': - memory_facts['swaptotal_mb'] = int(data[1]) // 1024 - memory_facts['swapfree_mb'] = int(data[3]) // 1024 + sysctl = self.module.get_bin_path('sysctl') + if sysctl: + rc, out, err = self.module.run_command("%s vm.stats" % sysctl, check_rc=False) + for line in out.splitlines(): + data = line.split() + if 'vm.stats.vm.v_page_size' in line: + pagesize = int(data[1]) + if 'vm.stats.vm.v_page_count' in line: + pagecount = int(data[1]) + if 'vm.stats.vm.v_free_count' in line: + freecount = int(data[1]) + memory_facts['memtotal_mb'] = pagesize * pagecount // 1024 // 1024 + memory_facts['memfree_mb'] = pagesize * freecount // 1024 // 1024 + + swapinfo = self.module.get_bin_path('swapinfo') + if swapinfo: + # Get swapinfo. swapinfo output looks like: + # Device 1M-blocks Used Avail Capacity + # /dev/ada0p3 314368 0 314368 0% + # + rc, out, err = self.module.run_command("%s -k" % swapinfo) + lines = out.splitlines() + if len(lines[-1]) == 0: + lines.pop() + data = lines[-1].split() + if data[0] != 'Device': + memory_facts['swaptotal_mb'] = int(data[1]) // 1024 + memory_facts['swapfree_mb'] = int(data[3]) // 1024 return memory_facts diff --git a/lib/ansible/module_utils/facts/system/chroot.py b/lib/ansible/module_utils/facts/system/chroot.py index 39ccf960c94..5eb89d695aa 100644 --- a/lib/ansible/module_utils/facts/system/chroot.py +++ b/lib/ansible/module_utils/facts/system/chroot.py @@ -20,7 +20,7 @@ def is_chroot(): # check if my file system is the root one proc_root = os.stat('/proc/1/root/.') is_chroot = my_root.st_ino != proc_root.st_ino or my_root.st_dev != proc_root.st_dev - except: + except Exception: # I'm not root or no proc, fallback to checking it is inode #2 is_chroot = (my_root.st_ino != 2) diff --git a/lib/ansible/module_utils/facts/utils.py b/lib/ansible/module_utils/facts/utils.py index 728934c1a50..5d78eab47c9 100644 --- a/lib/ansible/module_utils/facts/utils.py +++ b/lib/ansible/module_utils/facts/utils.py @@ -29,7 +29,7 @@ def get_file_content(path, default=None, strip=True): data = default finally: datafile.close() - except: + except Exception: # ignore errors as some jails/containers might have readable permissions but not allow reads to proc # done in 2 blocks for 2.4 compat pass