Fix tagging on explict meta tasks

Fixes #11025
This commit is contained in:
James Cammarata 2015-08-14 19:29:12 -04:00
parent 152096c85c
commit 0034a101cb
2 changed files with 34 additions and 24 deletions

View file

@ -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:

View file

@ -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
# 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)
elif type(apply_tags) in [ int, float ]:
self.tags.append(str(apply_tags))
elif type(apply_tags) == list:
self.tags.extend(apply_tags)
self.tags.extend(import_tags)
if len(self.tags) > 1:
self.tags.remove('untagged')
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 ]:
tags.append(apply_tags)
elif type(apply_tags) in [ int, float ]:
tags.append(str(apply_tags))
elif type(apply_tags) == list:
tags.extend(apply_tags)
tags.extend(import_tags)
if len(tags) > 1:
tags.remove('untagged')
return tags