diff --git a/lib/ansible/module_utils/facts.py b/lib/ansible/module_utils/facts.py index 74426b52d6..2d9a277503 100644 --- a/lib/ansible/module_utils/facts.py +++ b/lib/ansible/module_utils/facts.py @@ -261,9 +261,8 @@ class Facts(object): # try to read it as json first # if that fails read it with ConfigParser # if that fails, skip it - rc, out, err = self.module.run_command(fn) try: - out = out.decode('utf-8', 'strict') + rc, out, err = self.module.run_command(fn) except UnicodeError: fact = 'error loading fact - output of running %s was not utf-8' % fn local[fact_base] = fact @@ -394,9 +393,8 @@ class Facts(object): def get_lsb_facts(self): lsb_path = self.module.get_bin_path('lsb_release') if lsb_path: - rc, out, err = self.module.run_command([lsb_path, "-a"]) + rc, out, err = self.module.run_command([lsb_path, "-a"], errors='surrogate_or_replace') if rc == 0: - out = out.decode('utf-8', 'replace') self.facts['lsb'] = {} for line in out.split('\n'): if len(line) < 1 or ':' not in line: @@ -466,8 +464,7 @@ class Facts(object): def get_caps_facts(self): capsh_path = self.module.get_bin_path('capsh') if capsh_path: - rc, out, err = self.module.run_command([capsh_path, "--print"]) - out = out.decode('utf-8', 'replace') + rc, out, err = self.module.run_command([capsh_path, "--print"], errors='surrogate_or_replace') enforced_caps = [] enforced = 'NA' for line in out.split('\n'): @@ -1268,7 +1265,7 @@ class LinuxHardware(Hardware): def _run_findmnt(self, findmnt_path): args = ['--list', '--noheadings', '--notruncate'] cmd = [findmnt_path] + args - rc, out, err = self.module.run_command(cmd) + rc, out, err = self.module.run_command(cmd, errors='surrogate_or_replace') return rc, out, err def _find_bind_mounts(self): @@ -1280,7 +1277,6 @@ class LinuxHardware(Hardware): rc, out, err = self._run_findmnt(findmnt_path) if rc != 0: return bind_mounts - out = out.decode('utf-8', 'replace') # find bind mounts, in case /etc/mtab is a symlink to /proc/mounts for line in out.splitlines(): @@ -1359,8 +1355,7 @@ class LinuxHardware(Hardware): self.facts['devices'] = {} lspci = self.module.get_bin_path('lspci') if lspci: - rc, pcidata, err = self.module.run_command([lspci, '-D']) - pcidata = pcidata.decode('utf-8', 'replace') + rc, pcidata, err = self.module.run_command([lspci, '-D'], errors='surrogate_or_replace') else: pcidata = None @@ -2254,8 +2249,7 @@ class LinuxNetwork(Network): continue if v == 'v6' and not socket.has_ipv6: continue - rc, out, err = self.module.run_command(command[v]) - out = out.decode('utf-8', 'replace') + rc, out, err = self.module.run_command(command[v], errors='surrogate_or_replace') if not out: # v6 routing may result in # RTNETLINK answers: Invalid argument @@ -2425,12 +2419,10 @@ class LinuxNetwork(Network): ip_path = self.module.get_bin_path("ip") args = [ip_path, 'addr', 'show', 'primary', device] - rc, stdout, stderr = self.module.run_command(args) - primary_data = stdout.decode('utf-8', 'replace') + rc, primary_data, stderr = self.module.run_command(args, errors='surrogate_or_replace') args = [ip_path, 'addr', 'show', 'secondary', device] - rc, stdout, stderr = self.module.run_command(args) - secondary_data = stdout.decode('utf-8', 'decode') + rc, secondary_data, stderr = self.module.run_command(args, errors='surrogate_or_replace') parse_ip_output(primary_data) parse_ip_output(secondary_data, secondary=True) @@ -2452,8 +2444,7 @@ class LinuxNetwork(Network): ethtool_path = self.module.get_bin_path("ethtool") if ethtool_path: args = [ethtool_path, '-k', device] - rc, stdout, stderr = self.module.run_command(args) - stdout = stdout.decode('utf-8', 'replace') + rc, stdout, stderr = self.module.run_command(args, errors='surrogate_or_replace') if rc == 0: for line in stdout.strip().split('\n'): if not line or line.endswith(":"):