Cleaning up some task failure detection problems

* fixed a bug in which failures from a with_* loop were not being
  caught correctly, leading to tasks continuing when they should stop
* when ignore_errors is enabled, the failure will no longer count
  towards the number of failed tasks
This commit is contained in:
James Cammarata 2015-06-17 15:38:52 -04:00
parent 5bbbec9b61
commit c3c398cffe
2 changed files with 5 additions and 2 deletions

View file

@ -43,7 +43,7 @@ class TaskResult:
return self._check_key('skipped')
def is_failed(self):
if 'failed_when_result' in self._result:
if 'results' in self._result and True in [True for x in self._result['results'] if 'failed_when_result' in x]:
return self._check_key('failed_when_result')
else:
return self._check_key('failed') or self._result.get('rc', 0) != 0
@ -57,5 +57,6 @@ class TaskResult:
for res in self._result.get('results', []):
if isinstance(res, dict):
flag |= res.get(key, False)
return flag
else:
return self._result.get(key, False)

View file

@ -155,6 +155,8 @@ class StrategyBase:
iterator.mark_host_failed(host)
self._tqm._failed_hosts[host.name] = True
self._tqm._stats.increment('failures', host.name)
else:
self._tqm._stats.increment('ok', host.name)
self._tqm.send_callback('v2_runner_on_failed', task_result)
elif result[0] == 'host_unreachable':
self._tqm._unreachable_hosts[host.name] = True