我是Ansible和Jinja2的新手。任何帮助,将不胜感激!
当绝对路径指定包含角色时,Ansible不会识别位于其他角色的Jinja模板。
目录结构 .
├── files
│ └── test_2.yml
├── hosts
├── roles
│ ├── common_role
│ │ ├── tasks
│ │ │ └── main.yml
│ │ ├── templates
│ │ │ └── common.j2
│ │ └── vars
│ │ └── main.yml
│ └── role_A
│ ├── tasks
│ │ └── main.yml
│ └── templates
│ ├── mytemplate_2.j2
│ └── mytemplate.j2
└── site.yml
的 site.yml
- hosts: all
connection: local
gather_facts: no
roles:
- common_role
- role_A
的 role_A /任务/ main.yml
- name: test relative path
template:
src: mytemplate.j2
dest: "{{playbook_dir}}/files/test_1.yml"
- name: test absolute path
template:
src: mytemplate_2.j2
dest: "{{playbook_dir}}/files/test_2.yml"
的 role_A /模板/ mytemplate.j2
{% include 'roles/common_role/templates/common.j2' %}
msg: I am mytemplate.j2 and including {{common_templates}}.
的 role_A /模板/ mytemplate_2.j2
{% include playbook_dir + 'roles/common_role/templates/common.j2' %}
msg: I am mytemplate_2.j2 and including {{common_templates}}.
tsz@mylaptop:/mnt/c/Users/tsz/jinja-test$ ansible-playbook -i hosts site.yml
PLAY [all] **************************************************************
TASK [role_A : test relative path] ***************************************
changed: [localhost]
TASK [role_A : test absolute path] ***************************************
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "TemplateNotFound: /mnt/c/Users/tsz/jinja-test/roles/common_role/templates/common.j2"}
to retry, use: --limit @/mnt/c/Users/tsz/jinja-test/site.retry
PLAY RECAP ***************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=1
tsz@mylaptop:/mnt/c/Users/tsz/jinja-test$ ls -al roles/common_role/templates
total 13
drwxrwxrwx 0 root root 4096 Nov 10 15:56 .
drwxrwxrwx 0 root root 4096 Nov 10 16:04 ..
-rwxrwxrwx 1 root root 23 Nov 10 15:57 common.j2
tsz@mylaptop:/mnt/c/Users/tsz/jinja-test$ ls -al roles/role_A/templates
total 129
drwxrwxrwx 0 root root 4096 Nov 10 16:00 .
drwxrwxrwx 0 root root 4096 Nov 10 15:59 ..
-rwxrwxrwx 1 root root 133 Nov 10 16:40 mytemplate_2.j2
-rwxrwxrwx 1 root root 115 Nov 10 16:11 mytemplate.j2
答案 0 :(得分:1)
我认为这不适用于当前版本的jinja。 我的怀疑是你不能使用文字路径,因为它们包含角色空间之外的目录。 C.F. this thread
有人请证明我错了。我没时间测试它,但它很容易成为我必须使用的奇怪环境设置的神器。
模板:
$: cat roles/example/templates/tst
stuff etc
{% include '/full/path/redacted/roles/example/templates/other' %}
包含的模板存在:
$ ls -l /full/path/redacted/roles/example/templates/other
-rw-r--r-- 1 jenkins jenkins 180 Nov 10 10:06 /full/path/redacted/roles/example/templates/other
输出:
TemplateNotFound: /full/path/redacted/roles/example/templates/other
抱歉,我无法提供更多帮助。