Adds configurable jinja2 extension loading
Jinja extensions adds features to the jinja2 templating engine. This patch allows module loading for the templating engine vian an ansible.cfg configuration key (jinja_extensions). The default behaviour doesn't change (no module loading). Requested modules can be added coma separated in ansible.cfg Adds whitespace handling in jinja_extension config Added whitespace handling in jinja_extension configuration directive, so things stay safe if user adds spaces around comas in the directives list. Adds config example for jinja_extensions Added config example with multiple extentions for jinja_extensions
This commit is contained in:
parent
83ce1b2dc5
commit
1c22f2146e
3 changed files with 22 additions and 1 deletions
|
@ -89,6 +89,13 @@ sudo_exe=sudo
|
||||||
#
|
#
|
||||||
# hash_behaviour=replace
|
# hash_behaviour=replace
|
||||||
|
|
||||||
|
# if you need to use jinja2 extensions, you can list them here
|
||||||
|
# use a coma to separate extensions, e.g. :
|
||||||
|
# jinja_extensions=jinja2.ext.do,jinja2.ext.i18n
|
||||||
|
# no extensions are loaded by default
|
||||||
|
|
||||||
|
#jinja_extensions=
|
||||||
|
|
||||||
# if set, always use this private key file for authentication, same as if passing
|
# if set, always use this private key file for authentication, same as if passing
|
||||||
# --private-key to ansible or ansible-playbook
|
# --private-key to ansible or ansible-playbook
|
||||||
|
|
||||||
|
|
|
@ -94,6 +94,7 @@ DEFAULT_KEEP_REMOTE_FILES = get_config(p, DEFAULTS, 'keep_remote_files', 'ANSIBL
|
||||||
DEFAULT_SUDO_EXE = get_config(p, DEFAULTS, 'sudo_exe', 'ANSIBLE_SUDO_EXE', 'sudo')
|
DEFAULT_SUDO_EXE = get_config(p, DEFAULTS, 'sudo_exe', 'ANSIBLE_SUDO_EXE', 'sudo')
|
||||||
DEFAULT_SUDO_FLAGS = get_config(p, DEFAULTS, 'sudo_flags', 'ANSIBLE_SUDO_FLAGS', '-H')
|
DEFAULT_SUDO_FLAGS = get_config(p, DEFAULTS, 'sudo_flags', 'ANSIBLE_SUDO_FLAGS', '-H')
|
||||||
DEFAULT_HASH_BEHAVIOUR = get_config(p, DEFAULTS, 'hash_behaviour', 'ANSIBLE_HASH_BEHAVIOUR', 'replace')
|
DEFAULT_HASH_BEHAVIOUR = get_config(p, DEFAULTS, 'hash_behaviour', 'ANSIBLE_HASH_BEHAVIOUR', 'replace')
|
||||||
|
DEFAULT_JINA_EXTENSIONS = get_config(p, DEFAULTS, 'jinja_extensions', 'ANSIBLE_JINA_EXTENSIONS', None)
|
||||||
|
|
||||||
DEFAULT_ACTION_PLUGIN_PATH = shell_expand_path(get_config(p, DEFAULTS, 'action_plugins', 'ANSIBLE_ACTION_PLUGINS', '/usr/share/ansible_plugins/action_plugins'))
|
DEFAULT_ACTION_PLUGIN_PATH = shell_expand_path(get_config(p, DEFAULTS, 'action_plugins', 'ANSIBLE_ACTION_PLUGINS', '/usr/share/ansible_plugins/action_plugins'))
|
||||||
DEFAULT_CALLBACK_PLUGIN_PATH = shell_expand_path(get_config(p, DEFAULTS, 'callback_plugins', 'ANSIBLE_CALLBACK_PLUGINS', '/usr/share/ansible_plugins/callback_plugins'))
|
DEFAULT_CALLBACK_PLUGIN_PATH = shell_expand_path(get_config(p, DEFAULTS, 'callback_plugins', 'ANSIBLE_CALLBACK_PLUGINS', '/usr/share/ansible_plugins/callback_plugins'))
|
||||||
|
|
|
@ -313,7 +313,20 @@ def template_from_file(basedir, path, vars):
|
||||||
from ansible import utils
|
from ansible import utils
|
||||||
realpath = utils.path_dwim(basedir, path)
|
realpath = utils.path_dwim(basedir, path)
|
||||||
loader=jinja2.FileSystemLoader([basedir,os.path.dirname(realpath)])
|
loader=jinja2.FileSystemLoader([basedir,os.path.dirname(realpath)])
|
||||||
environment = jinja2.Environment(loader=loader, trim_blocks=True)
|
|
||||||
|
'''
|
||||||
|
if some extensions are set via jinja_extensions in ansible.cfg, we try
|
||||||
|
to load them with the jinja environment
|
||||||
|
'''
|
||||||
|
jinja_exts = []
|
||||||
|
if C.DEFAULT_JINA_EXTENSIONS:
|
||||||
|
'''
|
||||||
|
Let's make sure the configuration directive doesn't contain spaces
|
||||||
|
and split extensions in an array
|
||||||
|
'''
|
||||||
|
jinja_exts = C.DEFAULT_JINA_EXTENSIONS.replace(" ", "").split(',')
|
||||||
|
|
||||||
|
environment = jinja2.Environment(loader=loader, trim_blocks=True, extensions=jinja_exts)
|
||||||
for filter_plugin in utils.plugins.filter_loader.all():
|
for filter_plugin in utils.plugins.filter_loader.all():
|
||||||
filters = filter_plugin.filters()
|
filters = filter_plugin.filters()
|
||||||
if not isinstance(filters, dict):
|
if not isinstance(filters, dict):
|
||||||
|
|
Loading…
Reference in a new issue