Ansible 是否有一个模块可以组装配置文件,支持Jinja2模板,并在删除源模板时删除条目?
在使用Ansible模块时,更值得注意的是Ansible 是否有一个模块可以组装配置文件,支持Jinja2模板,并在删除源模板时删除条目?,ansible,Ansible,在使用Ansible模块时,更值得注意的是assemble和blockinfle,我注意到这两个模块都有一些缺点。这可能是由于缺乏任何一个模块的教育,或者是一个有意的设计 集合 例如,使用assemble时,我可以读取文件目录,并将它们“组装”到一个配置文件中,如下所示: assemble: src: <path to directory of files> dest: <destination> 我还可以包含多个类似以下内容的文件: block
assemble
和blockinfle
,我注意到这两个模块都有一些缺点。这可能是由于缺乏任何一个模块的教育,或者是一个有意的设计
集合
例如,使用assemble
时,我可以读取文件目录,并将它们“组装”到一个配置文件中,如下所示:
assemble:
src: <path to directory of files>
dest: <destination>
我还可以包含多个类似以下内容的文件:
blockinfile:
create: yes
block: "{{ lookup('template', \"<path>/{{ item }}\") }}"
dest: <destination>
marker: "# {mark} Test {{ item }}"
backup: yes
with_items:
- file1.j2
- file2.j2
blockinfle:
创建:是
块:“{lookup('template',\”/{{item}}\”}”
目的地:
标记:“#{mark}测试{{item}”
备份:是的
有以下项目:
-文件1.j2
-文件2.j2
但是,此解决方案的缺点是,如果删除了源模板文件,则不会将其从dest
中指定的文件中删除
最终目标
我想实现的目标如下
- 读入文件目录,并将它们组合成一个文件
- 对变量的支持。当源文件中有
时,将其展开为其值{{variable}}
- 如果先前将一个或多个源文件添加到目标文件中后缺少该源文件,请将其从目标文件中删除。同时将状态报告更改为
main.j2
的一个示例:
My first block
{% include block1.j2 %}
My second block
{% include block2.j2 %}
可以使用包含其他模板的主模板
main.j2
的一个示例:
My first block
{% include block1.j2 %}
My second block
{% include block2.j2 %}
您可以使用模板模块创建临时文件,然后使用汇编模块将所有临时文件缝合在一起(使用
remote\u src=true
),最后删除临时文件。不确定是否有更好的方法。感谢您的回复,这是解决此问题的一个好方法,我几乎忘记了存在remote\u src
。我会尝试几种不同的方法。我能请你把你发现的情况汇报一下吗?我还没有经历过这种情况,但这只是时间问题,我想知道如何应对:D.非常感谢!最后,我们使用blockinfle
在远程服务器上的临时目录中构造多个文件,然后assemble
,将remote\u src
设置为true
,指向临时目录。组装文件后,将删除临时目录。您可以使用模板模块创建临时文件,然后使用组装模块将所有临时文件缝合在一起(使用remote\u src=true
),最后删除临时文件。不确定是否有更好的方法。感谢您的回复,这是解决此问题的一个好方法,我几乎忘记了存在remote\u src
。我会尝试几种不同的方法。我能请你把你发现的情况汇报一下吗?我还没有经历过这种情况,但这只是时间问题,我想知道如何应对:D.非常感谢!最后,我们使用blockinfle
在远程服务器上的临时目录中构造多个文件,然后assemble
,将remote\u src
设置为true
,指向临时目录。组装文件后,将删除临时目录。这是一种有趣的方法,但这与最后一个要求的目标背道而驰:当一个或多个源文件在之前添加到目标文件后不存在时,将其从目标文件中删除。另外,将状态报告更改为
{%includeblock1.j2 ignore missing%}
这是一种有趣的方法,但是这违背了最后一个要求的目标:当一个或多个源文件在之前添加到目标文件后不存在时,将其从目标文件中删除。还将状态报告更改为
{%includeblock1.j2忽略缺少的%}