diff options
author | James Cammarata <jimi@sngx.net> | 2015-08-14 19:29:12 -0400 |
---|---|---|
committer | James Cammarata <jimi@sngx.net> | 2015-08-14 19:29:43 -0400 |
commit | 0034a101cbd0e151d79554a52759ba5cb25fd203 (patch) | |
tree | 47aba29bef995fd57991b165649b52e0e2c9f887 | |
parent | 152096c85ca476eba2ac86856280f07cd695de36 (diff) | |
download | ansible-0034a101cbd0e151d79554a52759ba5cb25fd203.tar.gz |
Fix tagging on explict meta tasks
Fixes #11025
-rw-r--r-- | lib/ansible/playbook/play.py | 2 | ||||
-rw-r--r-- | lib/ansible/playbook/task.py | 52 |
2 files changed, 32 insertions, 22 deletions
diff --git a/lib/ansible/playbook/play.py b/lib/ansible/playbook/play.py index 665f1ef091..7041da582a 100644 --- a/lib/ansible/playbook/play.py +++ b/lib/ansible/playbook/play.py @@ -598,7 +598,7 @@ class Play(object): if x['meta'] == 'flush_handlers': if role_name and 'role_name' not in x: x['role_name'] = role_name - results.append(Task(self, x, module_vars=task_vars, role_name=role_name)) + results.append(Task(self, x, module_vars=task_vars, role_name=role_name, no_tags=False)) continue if 'include' in x: diff --git a/lib/ansible/playbook/task.py b/lib/ansible/playbook/task.py index 4f07ae0436..cf99275481 100644 --- a/lib/ansible/playbook/task.py +++ b/lib/ansible/playbook/task.py @@ -43,7 +43,7 @@ class Task(object): 'async', 'connection', 'include', 'poll', ] + _t_common) - def __init__(self, play, ds, module_vars=None, play_vars=None, play_file_vars=None, role_vars=None, role_params=None, default_vars=None, additional_conditions=None, role_name=None): + def __init__(self, play, ds, module_vars=None, play_vars=None, play_file_vars=None, role_vars=None, role_params=None, default_vars=None, additional_conditions=None, role_name=None, no_tags=True): ''' constructor loads from a task or handler datastructure ''' # meta directives are used to tell things like ansible/playbook to run @@ -51,7 +51,10 @@ class Task(object): # normally. if 'meta' in ds: self.meta = ds['meta'] - self.tags = [] + if no_tags: + self.tags = [] + else: + self.tags = self._load_tags(ds, module_vars) self.module_vars = module_vars self.role_name = role_name return @@ -124,7 +127,6 @@ class Task(object): # load various attributes self.name = ds.get('name', None) - self.tags = [ 'untagged' ] self.register = ds.get('register', None) self.environment = ds.get('environment', play.environment) self.role_name = role_name @@ -291,13 +293,6 @@ class Task(object): if len(tokens) > 1: self.module_args = " ".join(tokens[1:]) - import_tags = self.module_vars.get('tags',[]) - if type(import_tags) in [int,float]: - import_tags = str(import_tags) - elif type(import_tags) in [str,unicode]: - # allow the user to list comma delimited tags - import_tags = import_tags.split(",") - # handle mutually incompatible options incompatibles = [ x for x in [ self.first_available_file, self.items_lookup_plugin ] if x is not None ] if len(incompatibles) > 1: @@ -325,22 +320,37 @@ class Task(object): self.module_vars['failed_when'] = self.failed_when self.module_vars['always_run'] = self.always_run + self.tags = self._load_tags(ds, self.module_vars) + + if additional_conditions: + new_conditions = additional_conditions[:] + if self.when: + new_conditions.append(self.when) + self.when = new_conditions + + def _load_tags(self, ds, module_vars): + tags = ['untagged'] + + import_tags = module_vars.get('tags',[]) + if type(import_tags) in [int,float]: + import_tags = str(import_tags) + elif type(import_tags) in [str,unicode]: + # allow the user to list comma delimited tags + import_tags = import_tags.split(",") + # tags allow certain parts of a playbook to be run without running the whole playbook apply_tags = ds.get('tags', None) if apply_tags is not None: if type(apply_tags) in [ str, unicode ]: - self.tags.append(apply_tags) + tags.append(apply_tags) elif type(apply_tags) in [ int, float ]: - self.tags.append(str(apply_tags)) + tags.append(str(apply_tags)) elif type(apply_tags) == list: - self.tags.extend(apply_tags) - self.tags.extend(import_tags) + tags.extend(apply_tags) - if len(self.tags) > 1: - self.tags.remove('untagged') + tags.extend(import_tags) - if additional_conditions: - new_conditions = additional_conditions[:] - if self.when: - new_conditions.append(self.when) - self.when = new_conditions + if len(tags) > 1: + tags.remove('untagged') + + return tags |