Fail on attrs that don't work for includes (#46177)
* Fail on attrs that don't work for includes * Prefix with VALID_ to make it more clear * Sort keywords * Remove unnecessary list * Adjust dynamic/static checking
This commit is contained in:
parent
8ecc6be85c
commit
698c8059e9
1 changed files with 17 additions and 0 deletions
|
@ -19,6 +19,7 @@
|
||||||
from __future__ import (absolute_import, division, print_function)
|
from __future__ import (absolute_import, division, print_function)
|
||||||
__metaclass__ = type
|
__metaclass__ = type
|
||||||
|
|
||||||
|
import ansible.constants as C
|
||||||
from ansible.errors import AnsibleParserError
|
from ansible.errors import AnsibleParserError
|
||||||
from ansible.playbook.attribute import FieldAttribute
|
from ansible.playbook.attribute import FieldAttribute
|
||||||
from ansible.playbook.block import Block
|
from ansible.playbook.block import Block
|
||||||
|
@ -43,6 +44,8 @@ class TaskInclude(Task):
|
||||||
BASE = frozenset(('file', '_raw_params')) # directly assigned
|
BASE = frozenset(('file', '_raw_params')) # directly assigned
|
||||||
OTHER_ARGS = frozenset(('apply',)) # assigned to matching property
|
OTHER_ARGS = frozenset(('apply',)) # assigned to matching property
|
||||||
VALID_ARGS = BASE.union(OTHER_ARGS) # all valid args
|
VALID_ARGS = BASE.union(OTHER_ARGS) # all valid args
|
||||||
|
VALID_INCLUDE_KEYWORDS = frozenset(('action', 'args', 'debugger', 'ignore_errors', 'loop', 'loop_control',
|
||||||
|
'loop_with', 'name', 'no_log', 'register', 'tags', 'vars', 'when'))
|
||||||
|
|
||||||
# =================================================================================
|
# =================================================================================
|
||||||
# ATTRIBUTES
|
# ATTRIBUTES
|
||||||
|
@ -77,6 +80,20 @@ class TaskInclude(Task):
|
||||||
|
|
||||||
return task
|
return task
|
||||||
|
|
||||||
|
def preprocess_data(self, ds):
|
||||||
|
ds = super(TaskInclude, self).preprocess_data(ds)
|
||||||
|
|
||||||
|
diff = set(ds.keys()).difference(TaskInclude.VALID_INCLUDE_KEYWORDS)
|
||||||
|
for k in diff:
|
||||||
|
# This check doesn't handle ``include`` as we have no idea at this point if it is static or not
|
||||||
|
if ds[k] is not None and ds['action'] in ('include_tasks', 'include_role'):
|
||||||
|
if C.INVALID_TASK_ATTRIBUTE_FAILED:
|
||||||
|
raise AnsibleParserError("'%s' is not a valid attribute for a %s" % (k, self.__class__.__name__), obj=ds)
|
||||||
|
else:
|
||||||
|
display.warning("Ignoring invalid attribute: %s" % k)
|
||||||
|
|
||||||
|
return ds
|
||||||
|
|
||||||
def copy(self, exclude_parent=False, exclude_tasks=False):
|
def copy(self, exclude_parent=False, exclude_tasks=False):
|
||||||
new_me = super(TaskInclude, self).copy(exclude_parent=exclude_parent, exclude_tasks=exclude_tasks)
|
new_me = super(TaskInclude, self).copy(exclude_parent=exclude_parent, exclude_tasks=exclude_tasks)
|
||||||
new_me.statically_loaded = self.statically_loaded
|
new_me.statically_loaded = self.statically_loaded
|
||||||
|
|
Loading…
Reference in a new issue