Ansible:如果存在则包含文件,如果不存在则不执行任何操作

标签 ansible jinja2

我在 Ansible 中有一个 Jinja2 模板,我需要有条件地包含一些文件。

基本上,我有一个 for 循环,其中包含可能存在也可能不存在的“子部分”。以下示例演示了在所有工具实际上都有一个“pbr.j2”文件的情况下可以工作的基本代码,但由于 Ansible 找不到某些文件而崩溃:

{% for tool in tools %}
   {% set template = 'tools/' + tool.name + '/pbr.j2' %}
   {% include template %}
{% endfor %}

我也试过existsis_file过滤器,但即使文件存在,我也总是得到“假”。这是我尝试过的示例代码:
{% for tool in tools %}
   {% set template = 'tools/' + tool.name + '/pbr.j2' %}
   {% if template|exists %}
      {% include template %}
   {% endif %}
{% endfor %}

最后一个示例的结果是没有包含任何文件。如果我更换 existsis_file ,我得到了同样的行为。

我需要改变什么才能实现我想要的?

最佳答案

我找到了解决问题的方法:使用 ignore missing在包含指令中。

在这种情况下,我会使用:

{% for tool in tools %}
   {% set template = 'tools/' + tool.name + '/pbr.j2' %}
   {% include template ignore missing %}
{% endfor %}

Ansible 将忽略丢失的文件,并且只会包含该循环中的现有文件。

关于Ansible:如果存在则包含文件,如果不存在则不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46593974/

相关文章:

ansible - 在 Ansible 的字典列表中搜索键

python - 在 Flask/SQLAlchemy/jinja 中使用外连接引用查询结果

jquery - 动态添加表单元素后表单提交

linux - Ansible 无法识别 mvn 命令,但已安装 Maven

regex - 使用 Ansible 中的替换模块用正则表达式替换字符串

linux - Jinja 模板中的 Ansible 多个事实

python - 如何通过HTML表单插入关联表?

python - YAML 库存解析错误

ansible - 发现管理 IP 并在模板中使用它

python - Jinja2模板编译信息