From 7067bb32b8eb0a6dc53c0278b8452594744a6f13 Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Sun, 6 Mar 2016 10:47:15 -0500 Subject: [PATCH] make all conditionals lists this brings them to equivalence with when: fixes #13905 --- lib/ansible/executor/task_executor.py | 18 +++++++++++------- lib/ansible/playbook/task.py | 6 +++--- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/ansible/executor/task_executor.py b/lib/ansible/executor/task_executor.py index a0881cc222b..1ed03ed2b2b 100644 --- a/lib/ansible/executor/task_executor.py +++ b/lib/ansible/executor/task_executor.py @@ -452,19 +452,23 @@ class TaskExecutor: # helper methods for use below in evaluating changed/failed_when def _evaluate_changed_when_result(result): - if self._task.changed_when is not None: + if self._task.changed_when: cond = Conditional(loader=self._loader) - cond.when = [ self._task.changed_when ] + cond.when = self._task.changed_when result['changed'] = cond.evaluate_conditional(templar, vars_copy) + else: + result['changed'] = False def _evaluate_failed_when_result(result): - if self._task.failed_when is not None: + if self._task.failed_when: cond = Conditional(loader=self._loader) - cond.when = [ self._task.failed_when ] + cond.when = self._task.failed_when failed_when_result = cond.evaluate_conditional(templar, vars_copy) result['failed_when_result'] = result['failed'] = failed_when_result - return failed_when_result - return False + else: + failed_when_result = False + result['failed'] = False + return failed_when_result if 'ansible_facts' in result: vars_copy.update(result['ansible_facts']) @@ -482,7 +486,7 @@ class TaskExecutor: if attempt < retries - 1: cond = Conditional(loader=self._loader) - cond.when = [ self._task.until ] + cond.when = self._task.until if cond.evaluate_conditional(templar, vars_copy): break else: diff --git a/lib/ansible/playbook/task.py b/lib/ansible/playbook/task.py index c97e81e9648..8ee440386b6 100644 --- a/lib/ansible/playbook/task.py +++ b/lib/ansible/playbook/task.py @@ -70,11 +70,11 @@ class Task(Base, Conditional, Taggable, Become): _any_errors_fatal = FieldAttribute(isa='bool') _async = FieldAttribute(isa='int', default=0) - _changed_when = FieldAttribute(isa='string') + _changed_when = FieldAttribute(isa='list', default=[]) _delay = FieldAttribute(isa='int', default=5) _delegate_to = FieldAttribute(isa='string') _delegate_facts = FieldAttribute(isa='bool', default=False) - _failed_when = FieldAttribute(isa='string') + _failed_when = FieldAttribute(isa='list', default=[]) _first_available_file = FieldAttribute(isa='list') _loop = FieldAttribute(isa='string', private=True) _loop_args = FieldAttribute(isa='list', private=True) @@ -83,7 +83,7 @@ class Task(Base, Conditional, Taggable, Become): _poll = FieldAttribute(isa='int') _register = FieldAttribute(isa='string') _retries = FieldAttribute(isa='int', default=3) - _until = FieldAttribute(isa='string') + _until = FieldAttribute(isa='list', default=[]) def __init__(self, block=None, role=None, task_include=None): ''' constructors a task, without the Task.load classmethod, it will be pretty blank '''