是否有一个模块来汇编配置文件,支持Jinja2模板以及在删除源模板时也删除条目?

时间:2019-06-20 15:28:34

标签: ansible

使用Ansible模块时,尤其是assembleblockinfile,我注意到两个模块都有一些缺点。可能缺乏对任何模块的教育,也可能不是故意设计的。

组装

例如,当使用assemble时,我可以读取文件目录,并将它们“组合”为一个配置文件,如下所示:

  assemble:
    src: <path to directory of files>
    dest: <destination>

预期结果是,一个配置文件包含src中包含的所有文件。但是,使用变量时,它们不会扩展。这也是预期的。我可以使用lookup来扩展这些变量,但是我不知道这种查找将包含一个与assemble一起使用的目录。

Blockinfile

使用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

1 个答案:

答案 0 :(得分:2)

您可以使用包含其他模板的主模板。

Jinja documentation for include

main.j2的示例:

My first block
{% include block1.j2 %}

My second block
{% include block2.j2 %}