Jinja template as variable value

Hello

I’m trying to use jinja template as value for ansible.builtin.lineinfile module in role task.

named
├── tasks
│ ├── config.yml
│ ├── main.yml
├── templates
│ ├── option.ji2
│ ├── view.ji2

ansible.builtin.lineinfile:
path: “{{ test_dir }}{{ named_config_file[‘path’] }}”
regex: “{{ item[‘key’] }}”
line: “{% set option = item %}{% include ‘option.ji2’ %}”
validate: named-checkconf %s
loop: “{{ named_options | dict2items }}”

Unfortunately ansible throws TemplateNotFound error:
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: jinja2.exceptions.TemplateNotFound: option.ji2

Using relative or absolute path to template doesn’t help.
templates/option.ji2
…/templates/option.ji2
/home/ansible/.ansible/roles/named/templates/option.ji2

Any ideas why ansible can’t find/use template option.ji2?

Hello

I'm trying to use jinja template as value for ansible.builtin.lineinfile module
<https://docs.ansible.com/ansible/latest/collections/ansible/builtin/lineinfile_module.html&gt; in role task.

named
├── tasks
│ ├── config.yml
│ ├── main.yml
├── templates
│ ├── option.ji2
│ ├── view.ji2

ansible.builtin.lineinfile:
path: "{{ test_dir }}{{ named_config_file['path'] }}"
regex: "{{ item['key'] }}"
line: "{% set option = item %}{% include 'option.ji2' %}"
validate: named-checkconf %s
loop: "{{ named_options | dict2items }}"

Unfortunately ansible throws *TemplateNotFound* error:
An exception occurred during task execution. To see the full traceback,

use -vvv. The error was:

jinja2.exceptions.TemplateNotFound: option.ji2

Using relative or absolute path to template doesn't help.
templates/option.ji2
../templates/option.ji2
/home/ansible/.ansible/roles/named/templates/option.ji2

Any ideas why ansible can't find/use template option.ji2?

I suggest to follow the advice to use -vvv and see which paths are considered by Ansible.

Regards
       Racke

Hello

I'm trying to use jinja template as value for ansible.builtin.lineinfile module
<https://docs.ansible.com/ansible/latest/collections/ansible/builtin/lineinfile_module.html&gt; in role task.

named
├── tasks
│ ├── config.yml
│ ├── main.yml
├── templates
│ ├── option.ji2
│ ├── view.ji2

ansible.builtin.lineinfile:
path: "{{ test_dir }}{{ named_config_file['path'] }}"
regex: "{{ item['key'] }}"
line: "{% set option = item %}{% include 'option.ji2' %}"
validate: named-checkconf %s
loop: "{{ named_options | dict2items }}"

Unfortunately ansible throws *TemplateNotFound* error:
An exception occurred during task execution. To see the full traceback,

use -vvv. The error was:

jinja2.exceptions.TemplateNotFound: option.ji2

Using relative or absolute path to template doesn't help.
templates/option.ji2
../templates/option.ji2
/home/ansible/.ansible/roles/named/templates/option.ji2

Any ideas why ansible can't find/use template option.ji2?

I suggest to follow the advice to use -vvv and see which paths are considered by Ansible.

Regards
       Racke

Hello,

in this case -vvv doesn't help.

I found out with strace that Ansible looks into the current directory for
the %include file.

Regards
       Racke

--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send

an email to

Thank you for checking it out.
So shouldn’t …/templates/option.ji2 work?

Anyways, I had to move on with the project and now template module is used instead of lineinfile, inside ji2 file include works as expected.

Not the most elegant solution but it does the job.

This won't work as you expect
line: "{% set option = item %}{% include 'option.ji2' %}"

do this instead

line: " {{lookup('template', 'option.j2', template_vars={'option': item}) }}