1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

Merge pull request #4429 from sergevanginderachter/cache_pattern_enumeration

Add caching to pattern enumeration
This commit is contained in:
Michael DeHaan 2013-10-10 07:53:47 -07:00
commit c2572b0379

View file

@ -38,7 +38,7 @@ class Inventory(object):
__slots__ = [ 'host_list', 'groups', '_restriction', '_also_restriction', '_subset', __slots__ = [ 'host_list', 'groups', '_restriction', '_also_restriction', '_subset',
'parser', '_vars_per_host', '_vars_per_group', '_hosts_cache', '_groups_list', 'parser', '_vars_per_host', '_vars_per_group', '_hosts_cache', '_groups_list',
'_vars_plugins', '_playbook_basedir'] '_pattern_hosts', '_vars_plugins', '_playbook_basedir']
def __init__(self, host_list=C.DEFAULT_HOST_LIST): def __init__(self, host_list=C.DEFAULT_HOST_LIST):
@ -53,6 +53,7 @@ class Inventory(object):
self._vars_per_group = {} self._vars_per_group = {}
self._hosts_cache = {} self._hosts_cache = {}
self._groups_list = {} self._groups_list = {}
self._pattern_hosts = {}
# to be set by calling set_playbook_basedir by ansible-playbook # to be set by calling set_playbook_basedir by ansible-playbook
self._playbook_basedir = None self._playbook_basedir = None
@ -247,7 +248,6 @@ class Inventory(object):
else: else:
return [ hosts[left] ] return [ hosts[left] ]
# TODO: cache this logic so if called a second time the result is not recalculated
def _hosts_in_unenumerated_pattern(self, pattern): def _hosts_in_unenumerated_pattern(self, pattern):
""" Get all host names matching the pattern """ """ Get all host names matching the pattern """
@ -255,6 +255,7 @@ class Inventory(object):
# ignore any negative checks here, this is handled elsewhere # ignore any negative checks here, this is handled elsewhere
pattern = pattern.replace("!","").replace("&", "") pattern = pattern.replace("!","").replace("&", "")
if pattern not in self._pattern_hosts:
results = [] results = []
groups = self.get_groups() groups = self.get_groups()
for group in groups: for group in groups:
@ -262,7 +263,8 @@ class Inventory(object):
if pattern == 'all' or self._match(group.name, pattern) or self._match(host.name, pattern): if pattern == 'all' or self._match(group.name, pattern) or self._match(host.name, pattern):
if host not in results: if host not in results:
results.append(host) results.append(host)
return results self._pattern_hosts[pattern] = results
return self._pattern_hosts[pattern]
def groups_for_host(self, host): def groups_for_host(self, host):
results = [] results = []