Cache against hosts pattern (fix a part of problem describe in https://github.com/ansible/ansible/issues/13023).

This commit is contained in:
Yannig Perre 2015-11-04 22:15:02 +01:00
parent 30f827d92d
commit e0aa3ff232

View file

@ -37,6 +37,8 @@ from ansible.plugins import vars_loader
from ansible.utils.vars import combine_vars from ansible.utils.vars import combine_vars
from ansible.parsing.utils.addresses import parse_address from ansible.parsing.utils.addresses import parse_address
HOSTS_PATTERNS_CACHE = {}
try: try:
from __main__ import display from __main__ import display
except ImportError: except ImportError:
@ -156,6 +158,11 @@ class Inventory(object):
or applied subsets or applied subsets
""" """
# Check if pattern already computed
pattern_hash = str(pattern)
if pattern_hash in HOSTS_PATTERNS_CACHE:
return HOSTS_PATTERNS_CACHE[pattern_hash]
patterns = Inventory.split_host_pattern(pattern) patterns = Inventory.split_host_pattern(pattern)
hosts = self._evaluate_patterns(patterns) hosts = self._evaluate_patterns(patterns)
@ -170,6 +177,7 @@ class Inventory(object):
if self._restriction is not None: if self._restriction is not None:
hosts = [ h for h in hosts if h in self._restriction ] hosts = [ h for h in hosts if h in self._restriction ]
HOSTS_PATTERNS_CACHE[pattern_hash] = hosts
return hosts return hosts
@classmethod @classmethod