summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Cammarata <jimi@sngx.net>2014-05-14 01:45:35 -0500
committerJames Cammarata <jimi@sngx.net>2014-05-21 14:58:49 -0500
commit1c5055a401a484b02d07dbea55d525fefb3af884 (patch)
treec3b609f8843b297de54b9890b3a0dc88eeb996c1
parent24d885e36845cea59bf70d1c3f2c4d2ca26eabe1 (diff)
downloadansible-1c5055a401a484b02d07dbea55d525fefb3af884.tar.gz
Properly merge role conditionals in with pre-existing conditionals
Fixes #7387
-rw-r--r--lib/ansible/playbook/play.py41
1 files changed, 21 insertions, 20 deletions
diff --git a/lib/ansible/playbook/play.py b/lib/ansible/playbook/play.py
index 1465e3f2a1..e4a44ad6c3 100644
--- a/lib/ansible/playbook/play.py
+++ b/lib/ansible/playbook/play.py
@@ -294,26 +294,24 @@ class Play(object):
else:
self.included_roles.append(dep)
+ def _merge_conditional(cur_conditionals, new_conditionals):
+ if isinstance(new_conditionals, (basestring, bool)):
+ cur_conditionals.append(new_conditionals)
+ elif isinstance(new_conditionals, list):
+ cur_conditionals.extend(new_conditionals)
+
# pass along conditionals from roles to dep roles
- if type(role) is dict:
- if 'when' in passed_vars:
- if 'when' in dep_vars:
- tmpcond = []
-
- if type(passed_vars['when']) is str:
- tmpcond.append(passed_vars['when'])
- elif type(passed_vars['when']) is list:
- tmpcond += passed_vars['when']
-
- if type(dep_vars['when']) is str:
- tmpcond.append(dep_vars['when'])
- elif type(dep_vars['when']) is list:
- tmpcond += dep_vars['when']
-
- if len(tmpcond) > 0:
- dep_vars['when'] = tmpcond
- else:
- dep_vars['when'] = passed_vars['when']
+ passed_when = passed_vars.get('when')
+ role_when = role_vars.get('when')
+ dep_when = dep_vars.get('when')
+
+ tmpcond = []
+ _merge_conditional(tmpcond, passed_when)
+ _merge_conditional(tmpcond, role_when)
+ _merge_conditional(tmpcond, dep_when)
+
+ if len(tmpcond) > 0:
+ dep_vars['when'] = tmpcond
self._build_role_dependencies([dep], dep_stack, passed_vars=dep_vars, level=level+1)
dep_stack.append([dep,dep_path,dep_vars,dep_defaults_data])
@@ -565,7 +563,10 @@ class Play(object):
task_vars = utils.combine_vars(task_vars, x['vars'])
if 'when' in x:
- included_additional_conditions.append(x['when'])
+ if isinstance(x['when'], (basestring, bool)):
+ included_additional_conditions.append(x['when'])
+ elif isinstance(x['when'], list):
+ included_additional_conditions.extend(x['when'])
new_role = None
if 'role_name' in x: