Commit ff4119ad by Serge van Ginderachter Committed by James Cammarata

Performance optimization in resolving host patterns

Avoid resolving a pattern that is a plain host. When matching a hostname in the
hosts_cache, just use the host object from there.

When running a task on say 750 hosts, this yields a huge improvement.
parent 539426f6
...@@ -213,15 +213,18 @@ class Inventory(object): ...@@ -213,15 +213,18 @@ class Inventory(object):
hosts = [] hosts = []
for p in patterns: for p in patterns:
that = self.__get_hosts(p) # avoid resolving a pattern that is a plain host
if p.startswith("!"): if p in self._hosts_cache:
hosts = [ h for h in hosts if h not in that ] hosts.append(self.get_host(p))
elif p.startswith("&"):
hosts = [ h for h in hosts if h in that ]
else: else:
to_append = [ h for h in that if h.name not in [ y.name for y in hosts ] ] that = self.__get_hosts(p)
hosts.extend(to_append) if p.startswith("!"):
hosts = [ h for h in hosts if h not in that ]
elif p.startswith("&"):
hosts = [ h for h in hosts if h in that ]
else:
to_append = [ h for h in that if h.name not in [ y.name for y in hosts ] ]
hosts.extend(to_append)
return hosts return hosts
def __get_hosts(self, pattern): def __get_hosts(self, pattern):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment