mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Avoid duplicate /bin/lsblk calls in the setup module.
The setup module calls /bin/lsblk once for each device appearing in the /etc/mtab file. However, the same device appears there mutliple times when the system uses bind-mounts. As a result, /bin/lsblk is being called repeatedly to get the uuid of the same device. On a system with many mounts, this leads to a TimeoutError in the get_mount_facts function of the setup module as described in #14551. Fixes #14551
This commit is contained in:
parent
517acb5773
commit
6779f91b88
1 changed files with 11 additions and 6 deletions
|
@ -1037,6 +1037,7 @@ class LinuxHardware(Hardware):
|
|||
|
||||
@timeout(10)
|
||||
def get_mount_facts(self):
|
||||
uuids = dict()
|
||||
self.facts['mounts'] = []
|
||||
mtab = get_file_content('/etc/mtab', '')
|
||||
for line in mtab.split('\n'):
|
||||
|
@ -1052,13 +1053,17 @@ class LinuxHardware(Hardware):
|
|||
except OSError:
|
||||
continue
|
||||
|
||||
uuid = 'NA'
|
||||
lsblkPath = module.get_bin_path("lsblk")
|
||||
if lsblkPath:
|
||||
rc, out, err = module.run_command("%s -ln --output UUID %s" % (lsblkPath, fields[0]), use_unsafe_shell=True)
|
||||
if fields[0] in uuids:
|
||||
uuid = uuids[fields[0]]
|
||||
else:
|
||||
uuid = 'NA'
|
||||
lsblkPath = module.get_bin_path("lsblk")
|
||||
if lsblkPath:
|
||||
rc, out, err = module.run_command("%s -ln --output UUID %s" % (lsblkPath, fields[0]), use_unsafe_shell=True)
|
||||
|
||||
if rc == 0:
|
||||
uuid = out.strip()
|
||||
if rc == 0:
|
||||
uuid = out.strip()
|
||||
uuids[fields[0]] = uuid
|
||||
|
||||
self.facts['mounts'].append(
|
||||
{'mount': fields[1],
|
||||
|
|
Loading…
Reference in a new issue