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)
|
@timeout(10)
|
||||||
def get_mount_facts(self):
|
def get_mount_facts(self):
|
||||||
|
uuids = dict()
|
||||||
self.facts['mounts'] = []
|
self.facts['mounts'] = []
|
||||||
mtab = get_file_content('/etc/mtab', '')
|
mtab = get_file_content('/etc/mtab', '')
|
||||||
for line in mtab.split('\n'):
|
for line in mtab.split('\n'):
|
||||||
|
@ -1052,13 +1053,17 @@ class LinuxHardware(Hardware):
|
||||||
except OSError:
|
except OSError:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
uuid = 'NA'
|
if fields[0] in uuids:
|
||||||
lsblkPath = module.get_bin_path("lsblk")
|
uuid = uuids[fields[0]]
|
||||||
if lsblkPath:
|
else:
|
||||||
rc, out, err = module.run_command("%s -ln --output UUID %s" % (lsblkPath, fields[0]), use_unsafe_shell=True)
|
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:
|
if rc == 0:
|
||||||
uuid = out.strip()
|
uuid = out.strip()
|
||||||
|
uuids[fields[0]] = uuid
|
||||||
|
|
||||||
self.facts['mounts'].append(
|
self.facts['mounts'].append(
|
||||||
{'mount': fields[1],
|
{'mount': fields[1],
|
||||||
|
|
Loading…
Reference in a new issue