From 506510301740a12fc9272b17b8d93887ded5a643 Mon Sep 17 00:00:00 2001 From: Daniel Hokka Zakrisson Date: Wed, 28 Nov 2012 00:54:08 +0100 Subject: [PATCH 1/2] Skip already failed hosts Fixes #1699. --- lib/ansible/playbook/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ansible/playbook/__init__.py b/lib/ansible/playbook/__init__.py index fe4a3711ce7..019d36e91ff 100644 --- a/lib/ansible/playbook/__init__.py +++ b/lib/ansible/playbook/__init__.py @@ -390,7 +390,8 @@ class PlayBook(object): # now with that data, handle contentional variable file imports! - all_hosts = self.inventory.list_hosts(play.hosts) + all_hosts = [ h for h in self.inventory.list_hosts(play.hosts) + if not (h in self.stats.failures or h in self.stats.dark) ] play.update_vars_files(all_hosts) serialized_batch = [] From 9070875a6f9bc3700d228a820b63ee291f6020cc Mon Sep 17 00:00:00 2001 From: Daniel Hokka Zakrisson Date: Wed, 28 Nov 2012 01:03:18 +0100 Subject: [PATCH 2/2] Move available hosts gathering to a common function --- lib/ansible/playbook/__init__.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/ansible/playbook/__init__.py b/lib/ansible/playbook/__init__.py index 019d36e91ff..e5fee92ec9d 100644 --- a/lib/ansible/playbook/__init__.py +++ b/lib/ansible/playbook/__init__.py @@ -239,10 +239,17 @@ class PlayBook(object): # ***************************************************** + def _list_available_hosts(self): + ''' returns a list of hosts that haven't failed and aren't dark ''' + + return [ h for h in self.inventory.list_hosts() if (h not in self.stats.failures) and (h not in self.stats.dark)] + + # ***************************************************** + def _run_task_internal(self, task): ''' run a particular module step in a playbook ''' - hosts = [ h for h in self.inventory.list_hosts() if (h not in self.stats.failures) and (h not in self.stats.dark)] + hosts = self._list_available_hosts() self.inventory.restrict_to(hosts) runner = ansible.runner.Runner( @@ -340,8 +347,7 @@ class PlayBook(object): def _do_setup_step(self, play): ''' get facts from the remote system ''' - host_list = [ h for h in self.inventory.list_hosts(play.hosts) - if not (h in self.stats.failures or h in self.stats.dark) ] + host_list = self._list_available_hosts() if play.gather_facts is False: return {} @@ -390,8 +396,7 @@ class PlayBook(object): # now with that data, handle contentional variable file imports! - all_hosts = [ h for h in self.inventory.list_hosts(play.hosts) - if not (h in self.stats.failures or h in self.stats.dark) ] + all_hosts = self._list_available_hosts() play.update_vars_files(all_hosts) serialized_batch = [] @@ -426,8 +431,7 @@ class PlayBook(object): # just didn't match anything and that's ok return False - host_list = [ h for h in self.inventory.list_hosts(play.hosts) - if not (h in self.stats.failures or h in self.stats.dark) ] + host_list = self._list_available_hosts() # if no hosts remain, drop out if not host_list: