Skip to content

Commit f85bdc6

Browse files
committed
Parse ansible '#jinja2:' overrides
1 parent c540c4c commit f85bdc6

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

jinja2cli/cli.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import os
1313
import sys
14+
import ast
1415
from optparse import Option, OptionParser
1516

1617
sys.path.insert(0, os.getcwd())
@@ -246,7 +247,7 @@ def render(template_path, data, extensions, strict=False):
246247
from jinja2 import (
247248
__version__ as jinja_version,
248249
Environment,
249-
FileSystemLoader,
250+
BaseLoader,
250251
StrictUndefined,
251252
)
252253

@@ -262,7 +263,7 @@ def render(template_path, data, extensions, strict=False):
262263
extensions.append(ext)
263264

264265
env = Environment(
265-
loader=FileSystemLoader(os.path.dirname(template_path)),
266+
loader=BaseLoader(),
266267
extensions=extensions,
267268
keep_trailing_newline=True,
268269
)
@@ -273,7 +274,23 @@ def render(template_path, data, extensions, strict=False):
273274
env.globals["environ"] = lambda key: force_text(os.environ.get(key))
274275
env.globals["get_context"] = lambda: data
275276

276-
return env.get_template(os.path.basename(template_path)).render(data)
277+
# parse ansible jinja2 overrides
278+
JINJA2_OVERRIDE = '#jinja2:'
279+
with open(template_path, 'r') as f:
280+
template = f.read()
281+
if template.startswith(JINJA2_OVERRIDE):
282+
eol = template.find('\n')
283+
line = template[len(JINJA2_OVERRIDE):eol]
284+
template = template[eol + 1:]
285+
for pair in line.split(','):
286+
if ':' not in pair:
287+
raise RuntimeError("failed to parse jinja2 override '%s'."
288+
" Did you use something different from colon as key-value separator?" % pair.strip())
289+
(key, val) = pair.split(':', 1)
290+
key = key.strip()
291+
setattr(env, key, ast.literal_eval(val.strip()))
292+
293+
return env.from_string(template).render(data)
277294

278295

279296
def is_fd_alive(fd):

0 commit comments

Comments
 (0)