diff options
author | James Cammarata <jimi@sngx.net> | 2014-05-14 01:45:35 -0500 |
---|---|---|
committer | James Cammarata <jimi@sngx.net> | 2014-05-21 14:58:49 -0500 |
commit | 1c5055a401a484b02d07dbea55d525fefb3af884 (patch) | |
tree | c3b609f8843b297de54b9890b3a0dc88eeb996c1 | |
parent | 24d885e36845cea59bf70d1c3f2c4d2ca26eabe1 (diff) | |
download | ansible-1c5055a401a484b02d07dbea55d525fefb3af884.tar.gz |
Properly merge role conditionals in with pre-existing conditionals
Fixes #7387
-rw-r--r-- | lib/ansible/playbook/play.py | 41 |
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: |