mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-05-06 13:22:48 +00:00
Don't restrict local jinja2 variables to those that start with l_
Per a change in jinja2 2.9, local variables no longer are prefixed with l_, so this updates AnsibleJ2Vars to pull in all locals (while excluding some) regardless of name. Fixes #20063 (cherry picked from commit 4d49b317929b86e1fc1b0cbace825ff73b372dc7)
This commit is contained in:
@@ -30,7 +30,7 @@ from numbers import Number
|
||||
from jinja2 import Environment
|
||||
from jinja2.loaders import FileSystemLoader
|
||||
from jinja2.exceptions import TemplateSyntaxError, UndefinedError
|
||||
from jinja2.utils import concat as j2_concat
|
||||
from jinja2.utils import concat as j2_concat, missing
|
||||
from jinja2.runtime import Context, StrictUndefined
|
||||
from ansible import constants as C
|
||||
from ansible.compat.six import string_types, text_type
|
||||
@@ -154,15 +154,22 @@ class AnsibleContext(Context):
|
||||
return True
|
||||
return False
|
||||
|
||||
def _update_unsafe(self, val):
|
||||
if val is not None and not self.unsafe and self._is_unsafe(val):
|
||||
self.unsafe = True
|
||||
|
||||
def resolve(self, key):
|
||||
'''
|
||||
The intercepted resolve(), which uses the helper above to set the
|
||||
internal flag whenever an unsafe variable value is returned.
|
||||
'''
|
||||
val = super(AnsibleContext, self).resolve(key)
|
||||
if val is not None and not self.unsafe:
|
||||
if self._is_unsafe(val):
|
||||
self.unsafe = True
|
||||
self._update_unsafe(val)
|
||||
return val
|
||||
|
||||
def resolve_or_missing(self, key):
|
||||
val = super(AnsibleContext, self).resolve_or_missing(key)
|
||||
self._update_unsafe(val)
|
||||
return val
|
||||
|
||||
class AnsibleEnvironment(Environment):
|
||||
|
||||
@@ -50,8 +50,11 @@ class AnsibleJ2Vars:
|
||||
self._locals = dict()
|
||||
if isinstance(locals, dict):
|
||||
for key, val in iteritems(locals):
|
||||
if key[:2] == 'l_' and val is not missing:
|
||||
self._locals[key[2:]] = val
|
||||
if val is not missing:
|
||||
if key[:2] == 'l_':
|
||||
self._locals[key[2:]] = val
|
||||
elif key not in ('context', 'environment', 'template'):
|
||||
self._locals[key] = val
|
||||
|
||||
def __contains__(self, k):
|
||||
if k in self._templar._available_variables:
|
||||
|
||||
Reference in New Issue
Block a user