From de64bbdc5fab6db3c41a1bb4d34e75d706dad63c Mon Sep 17 00:00:00 2001 From: Henry Finucane Date: Wed, 2 Jul 2014 21:14:26 -0700 Subject: [PATCH] Support a whitelisted subset of jinja2 template options --- lib/ansible/utils/template.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/ansible/utils/template.py b/lib/ansible/utils/template.py index 9203470d31f..cc1dc7fdeba 100644 --- a/lib/ansible/utils/template.py +++ b/lib/ansible/utils/template.py @@ -80,6 +80,8 @@ class Flags: FILTER_PLUGINS = None _LISTRE = re.compile(r"(\w+)\[(\d+)\]") +JINJA2_OVERRIDE = '#jinja2:' +JINJA2_ALLOWED_OVERRIDES = ['trim_blocks', 'lstrip_blocks', 'newline_sequence', 'keep_trailing_newline'] def lookup(name, *args, **kwargs): from ansible import utils @@ -230,6 +232,18 @@ def template_from_file(basedir, path, vars, vault_password=None): except: raise errors.AnsibleError("unable to read %s" % realpath) + # Get jinja env overrides from template + if data.startswith(JINJA2_OVERRIDE): + eol = data.find('\n') + line = data[len(JINJA2_OVERRIDE):eol] + data = data[eol+1:] + for pair in line.split(','): + (key,val) = pair.split(':') + key = key.strip() + if key in JINJA2_ALLOWED_OVERRIDES: + setattr(environment, key, ast.literal_eval(val.strip())) + + environment.template_class = J2Template try: t = environment.from_string(data)