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
pull/11305/head
James Cammarata 10 years ago
parent 5bbbec9b61
commit c3c398cffe

@ -43,7 +43,7 @@ class TaskResult:
return self._check_key('skipped') return self._check_key('skipped')
def is_failed(self): 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') return self._check_key('failed_when_result')
else: else:
return self._check_key('failed') or self._result.get('rc', 0) != 0 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', []): for res in self._result.get('results', []):
if isinstance(res, dict): if isinstance(res, dict):
flag |= res.get(key, False) flag |= res.get(key, False)
return flag
else: else:
return self._result.get(key, False) return self._result.get(key, False)

@ -154,7 +154,9 @@ class StrategyBase:
debug("marking %s as failed" % host.name) debug("marking %s as failed" % host.name)
iterator.mark_host_failed(host) iterator.mark_host_failed(host)
self._tqm._failed_hosts[host.name] = True self._tqm._failed_hosts[host.name] = True
self._tqm._stats.increment('failures', host.name) 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) self._tqm.send_callback('v2_runner_on_failed', task_result)
elif result[0] == 'host_unreachable': elif result[0] == 'host_unreachable':
self._tqm._unreachable_hosts[host.name] = True self._tqm._unreachable_hosts[host.name] = True

Loading…
Cancel
Save