使用Ansible模块时,尤其是assemble
和blockinfile
,我注意到两个模块都有一些缺点。可能缺乏对任何模块的教育,也可能不是故意设计的。
例如,当使用assemble
时,我可以读取文件目录,并将它们“组合”为一个配置文件,如下所示:
assemble:
src: <path to directory of files>
dest: <destination>
预期结果是,一个配置文件包含src
中包含的所有文件。但是,使用变量时,它们不会扩展。这也是预期的。我可以使用lookup
来扩展这些变量,但是我不知道这种查找将包含一个与assemble
一起使用的目录。
使用blockinfile
时,我可以使用lookup
扩展源文件中的变量。
blockinfile:
create: yes
block: "{{ lookup('template', '<path to file>') }}"
dest: <destination>
marker: "# {mark} Test "
backup: yes
我还可以包括多个这样的文件:
blockinfile:
create: yes
block: "{{ lookup('template', \"<path>/{{ item }}\") }}"
dest: <destination>
marker: "# {mark} Test {{ item }}"
backup: yes
with_items:
- file1.j2
- file2.j2
但是,此解决方案的缺点是,如果删除了源模板文件,则不会从dest
中指定的文件中删除它。
我想要实现的目标将显示为
{{ variable }}
在源文件中时,使其扩展为其值changed
。答案 0 :(得分:2)
您可以使用包含其他模板的主模板。
Jinja documentation for include
main.j2
的示例:
My first block
{% include block1.j2 %}
My second block
{% include block2.j2 %}