mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-08-22 14:01:42 -07:00
Fixing bugs in strategies
* Don't filter hosts remaining based on their failed state. Instead rely on the PlayIterator to return None/ITERATING_COMPLETE when the host is failed. * In the free strategy, make sure we wait outside the host loop for all pending results to be processed. * Use the internal _set_failed_state() instead of manually setting things when a failed child state is hit Fixes #15623
This commit is contained in:
parent
5c7ad654db
commit
09c90f7f2f
3 changed files with 10 additions and 8 deletions
|
@ -326,8 +326,7 @@ class PlayIterator:
|
|||
if self._check_failed_state(state.tasks_child_state):
|
||||
# failed child state, so clear it and move into the rescue portion
|
||||
state.tasks_child_state = None
|
||||
state.fail_state |= self.FAILED_TASKS
|
||||
state.run_state = self.ITERATING_RESCUE
|
||||
self._set_failed_state(state)
|
||||
else:
|
||||
# get the next task recursively
|
||||
if task is None or state.tasks_child_state.run_state == self.ITERATING_COMPLETE:
|
||||
|
@ -365,8 +364,7 @@ class PlayIterator:
|
|||
(state.rescue_child_state, task) = self._get_next_task_from_state(state.rescue_child_state, host=host, peek=peek)
|
||||
if self._check_failed_state(state.rescue_child_state):
|
||||
state.rescue_child_state = None
|
||||
state.fail_state |= self.FAILED_RESCUE
|
||||
state.run_state = self.ITERATING_ALWAYS
|
||||
self._set_failed_state(state)
|
||||
else:
|
||||
if task is None or state.rescue_child_state.run_state == self.ITERATING_COMPLETE:
|
||||
state.rescue_child_state = None
|
||||
|
@ -396,8 +394,7 @@ class PlayIterator:
|
|||
(state.always_child_state, task) = self._get_next_task_from_state(state.always_child_state, host=host, peek=peek)
|
||||
if self._check_failed_state(state.always_child_state):
|
||||
state.always_child_state = None
|
||||
state.fail_state |= self.FAILED_ALWAYS
|
||||
state.run_state = self.ITERATING_COMPLETE
|
||||
self._set_failed_state(state)
|
||||
else:
|
||||
if task is None or state.always_child_state.run_state == self.ITERATING_COMPLETE:
|
||||
state.always_child_state = None
|
||||
|
@ -466,7 +463,9 @@ class PlayIterator:
|
|||
|
||||
def mark_host_failed(self, host):
|
||||
s = self.get_host_state(host)
|
||||
display.debug("marking host %s failed, current state: %s" % (host, s))
|
||||
s = self._set_failed_state(s)
|
||||
display.debug("^ failed state is now: %s" % s)
|
||||
self._host_states[host.name] = s
|
||||
|
||||
def get_failed_hosts(self):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue