From e0aa3ff2326e0b90c0dfacfc8fb96a3b75956389 Mon Sep 17 00:00:00 2001 From: Yannig Perre Date: Wed, 4 Nov 2015 22:15:02 +0100 Subject: [PATCH] Cache against hosts pattern (fix a part of problem describe in https://github.com/ansible/ansible/issues/13023). --- lib/ansible/inventory/__init__.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/ansible/inventory/__init__.py b/lib/ansible/inventory/__init__.py index a967553385d..710763a7f74 100644 --- a/lib/ansible/inventory/__init__.py +++ b/lib/ansible/inventory/__init__.py @@ -37,6 +37,8 @@ from ansible.plugins import vars_loader from ansible.utils.vars import combine_vars from ansible.parsing.utils.addresses import parse_address +HOSTS_PATTERNS_CACHE = {} + try: from __main__ import display except ImportError: @@ -156,6 +158,11 @@ class Inventory(object): 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) hosts = self._evaluate_patterns(patterns) @@ -170,6 +177,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 return hosts @classmethod