mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-05-07 05:42:50 +00:00
Fixing up host pattern caching to avoid bugs
* Always cache and return unique list objects, so that if the list is changed later it does not impact the cached results * Take additional parameters and the type of the pattern into account when building the hash string
This commit is contained in:
@@ -166,9 +166,14 @@ class Inventory(object):
|
||||
"""
|
||||
|
||||
# Check if pattern already computed
|
||||
pattern_hash = str(pattern)
|
||||
if isinstance(pattern, list):
|
||||
pattern_hash = u":".join(pattern)
|
||||
else:
|
||||
pattern_hash = pattern
|
||||
pattern_hash += u":%s" % ignore_limits_and_restrictions
|
||||
|
||||
if pattern_hash in HOSTS_PATTERNS_CACHE:
|
||||
return HOSTS_PATTERNS_CACHE[pattern_hash]
|
||||
return HOSTS_PATTERNS_CACHE[pattern_hash][:]
|
||||
|
||||
patterns = Inventory.split_host_pattern(pattern)
|
||||
hosts = self._evaluate_patterns(patterns)
|
||||
@@ -184,7 +189,7 @@ class Inventory(object):
|
||||
if self._restriction is not None:
|
||||
hosts = [ h for h in hosts if h in self._restriction ]
|
||||
|
||||
HOSTS_PATTERNS_CACHE[pattern_hash] = hosts
|
||||
HOSTS_PATTERNS_CACHE[pattern_hash] = hosts[:]
|
||||
return hosts
|
||||
|
||||
@classmethod
|
||||
|
||||
Reference in New Issue
Block a user