deprecate all bare variable conversions (not debug)
now deprecation message appears with variable name in all spots where this occurs debug's var= option is excluded as this is only place where bare variables shold actually be accepted.
This commit is contained in:
parent
28cf4bc00b
commit
dc15eb806e
2 changed files with 13 additions and 4 deletions
|
@ -46,7 +46,7 @@ class ActionModule(ActionBase):
|
|||
|
||||
elif 'var' in self._task.args:
|
||||
try:
|
||||
results = self._templar.template(self._task.args['var'], convert_bare=True, fail_on_undefined=True)
|
||||
results = self._templar.template(self._task.args['var'], convert_bare=True, fail_on_undefined=True, bare_deprecated=False)
|
||||
if results == self._task.args['var']:
|
||||
raise AnsibleUndefinedVariable
|
||||
except AnsibleUndefinedVariable:
|
||||
|
|
|
@ -46,6 +46,12 @@ except ImportError:
|
|||
|
||||
from numbers import Number
|
||||
|
||||
try:
|
||||
from __main__ import display
|
||||
except ImportError:
|
||||
from ansible.utils.display import Display
|
||||
display = Display()
|
||||
|
||||
__all__ = ['Templar']
|
||||
|
||||
# A regex for checking to see if a variable we're trying to
|
||||
|
@ -269,7 +275,7 @@ class Templar:
|
|||
self._available_variables = variables
|
||||
self._cached_result = {}
|
||||
|
||||
def template(self, variable, convert_bare=False, preserve_trailing_newlines=True, escape_backslashes=True, fail_on_undefined=None, overrides=None, convert_data=True, static_vars = [''], cache = True):
|
||||
def template(self, variable, convert_bare=False, preserve_trailing_newlines=True, escape_backslashes=True, fail_on_undefined=None, overrides=None, convert_data=True, static_vars = [''], cache = True, bare_deprecated=True):
|
||||
'''
|
||||
Templates (possibly recursively) any given data as input. If convert_bare is
|
||||
set to True, the given data will be wrapped as a jinja2 variable ('{{foo}}')
|
||||
|
@ -290,7 +296,7 @@ class Templar:
|
|||
|
||||
try:
|
||||
if convert_bare:
|
||||
variable = self._convert_bare_variable(variable)
|
||||
variable = self._convert_bare_variable(variable, bare_deprecated=bare_deprecated)
|
||||
|
||||
if isinstance(variable, string_types):
|
||||
result = variable
|
||||
|
@ -366,7 +372,7 @@ class Templar:
|
|||
'''
|
||||
return self.environment.block_start_string in data or self.environment.variable_start_string in data
|
||||
|
||||
def _convert_bare_variable(self, variable):
|
||||
def _convert_bare_variable(self, variable, bare_deprecated):
|
||||
'''
|
||||
Wraps a bare string, which may have an attribute portion (ie. foo.bar)
|
||||
in jinja2 variable braces so that it is evaluated properly.
|
||||
|
@ -376,6 +382,9 @@ class Templar:
|
|||
contains_filters = "|" in variable
|
||||
first_part = variable.split("|")[0].split(".")[0].split("[")[0]
|
||||
if (contains_filters or first_part in self._available_variables) and self.environment.variable_start_string not in variable:
|
||||
if bare_deprecated:
|
||||
display.deprecated("Using bare variables is deprecated. Update your playbooks so that the environment value uses the full variable syntax ('%s%s%s')" %
|
||||
(self.environment.variable_start_string, variable, self.environment.variable_end_string))
|
||||
return "%s%s%s" % (self.environment.variable_start_string, variable, self.environment.variable_end_string)
|
||||
|
||||
# the variable didn't meet the conditions to be converted,
|
||||
|
|
Loading…
Reference in a new issue