Allow variables to be passed in to template lookup plugin (#18662)
This allows a single template to be evaluated with different values in the same task. For example, with a template like 'x:{{a}}', one could do something like this: - foo: a: "{{ lookup('template', 'x.j2', template_vars=dict(a=foo[item])) }}" b: "{{ lookup('template', 'x.j2', template_vars=dict(a=bar[item])) }}" with_items: - x - y …and "a" and "b" would expand to different strings based on what we passed in to the template lookup.
This commit is contained in:
parent
517c91df18
commit
20b0716948
2 changed files with 12 additions and 4 deletions
|
@ -556,6 +556,9 @@ Here are some examples::
|
||||||
|
|
||||||
- debug: msg="{{ lookup('template', './some_template.j2') }} is a value from evaluation of this template"
|
- debug: msg="{{ lookup('template', './some_template.j2') }} is a value from evaluation of this template"
|
||||||
|
|
||||||
|
# Since 2.4, you can pass in variables during evaluation
|
||||||
|
- debug: msg="{{ lookup('template', './some_template.j2', template_vars=dict(x=42)) }} is evaluated with x=42"
|
||||||
|
|
||||||
- name: loading a json file from a template as a string
|
- name: loading a json file from a template as a string
|
||||||
debug: msg="{{ lookup('template', './some_json.json.j2', convert_data=False) }} is a value from evaluation of this template"
|
debug: msg="{{ lookup('template', './some_json.json.j2', convert_data=False) }} is a value from evaluation of this template"
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@ class LookupModule(LookupBase):
|
||||||
def run(self, terms, variables, **kwargs):
|
def run(self, terms, variables, **kwargs):
|
||||||
|
|
||||||
convert_data_p = kwargs.get('convert_data', True)
|
convert_data_p = kwargs.get('convert_data', True)
|
||||||
|
lookup_template_vars = kwargs.get('template_vars', {})
|
||||||
ret = []
|
ret = []
|
||||||
|
|
||||||
for term in terms:
|
for term in terms:
|
||||||
|
@ -62,10 +63,14 @@ class LookupModule(LookupBase):
|
||||||
searchpath = [self._loader._basedir, os.path.dirname(lookupfile)]
|
searchpath = [self._loader._basedir, os.path.dirname(lookupfile)]
|
||||||
self._templar.environment.loader.searchpath = searchpath
|
self._templar.environment.loader.searchpath = searchpath
|
||||||
|
|
||||||
# add ansible 'template' vars
|
# The template will have access to all existing variables,
|
||||||
temp_vars = variables.copy()
|
# plus some added by ansible (e.g., template_{path,mtime}),
|
||||||
temp_vars.update(generate_ansible_template_vars(lookupfile))
|
# plus anything passed to the lookup with the template_vars=
|
||||||
self._templar.set_available_variables(temp_vars)
|
# argument.
|
||||||
|
vars = variables.copy()
|
||||||
|
vars.update(generate_ansible_template_vars(lookupfile))
|
||||||
|
vars.update(lookup_template_vars)
|
||||||
|
self._templar.set_available_variables(vars)
|
||||||
|
|
||||||
# do the templating
|
# do the templating
|
||||||
res = self._templar.template(template_data, preserve_trailing_newlines=True,
|
res = self._templar.template(template_data, preserve_trailing_newlines=True,
|
||||||
|
|
Loading…
Reference in a new issue