模板化字符串时ansible模板错误:没有名为';产品';

模板化字符串时ansible模板错误:没有名为';产品';,ansible,Ansible,我有下面的剧本在ansible 2.9.6版本中运行良好。但是它在ansible 2.4.2.0版本上运行时抛出错误。我的要求是在配置yaml文件中使用{{applog}}变量,并使用适当的缩进和换行 模板\appconfig.yml.j2 paths: {{ applog | indent (width=4, indentfirst=True) }} appconfig.yml的输出 paths: - /home/ketg/apps/ketg_DEV/logs/*.

我有下面的剧本在ansible 2.9.6版本中运行良好。但是它在ansible 2.4.2.0版本上运行时抛出错误。我的要求是在配置yaml文件中使用
{{applog}}
变量,并使用适当的缩进和换行

模板\appconfig.yml.j2

paths: {{ applog | indent (width=4, indentfirst=True) }} 
appconfig.yml的输出

    paths: 
       - /home/ketg/apps/ketg_DEV/logs/*.log
       - /home/ketg/apps/ketg_UAT/logs/*.log
       - /home/teng/apps/ketg_PT/logs/*.log
playbook可用于两个版本。有人能帮忙吗

示例剧本

- hosts: localhost
  vars:
    app_log_paths: "/home/ketg/apps/ketg_DEV/logs/*.log,/home/ketg/apps/ketg_UAT/logs/*.log,/home/teng/apps/ketg_PT/logs/*.log"
 
  tasks:
    - set_fact:
        logs: "{{ app_log_paths.split(',') }}"
    - set_fact:
        applogs: "{{ ['- '] | product(logs) | map ('join') | list }}"
    - set_fact:
        applog: "{{ applogs | join('\n') }}"
    - debug:
        msg: "{{ applog }}"
产出表2.9.6 输出ansible 2.4.2.0
在templates\appconfig.yml.j2中,循环数组项中逗号和模板上拆分app_log_路径的结果,如下所示。这应该能提供你想要的结果

你也不应该再需要所有的集合事实逻辑了

在我的机器上进行了本地测试,结果与预期一致。让我知道它是否适合你

paths:
{% for path in app_log_paths.split(',') %}
    - {{ path }}
{% endfor %}

2.4.x中没有
产品
过滤器。一个解决方案是在您的项目中添加一个自定义过滤器插件,该插件实现了
产品
过滤器。您好@larsks谢谢您的回复。你能详细解释一下你的方法吗。或者任何其他类似于
产品
过滤器的解决方案,这两个版本都可以使用。这里有关于编写自己插件的文档。这需要编写Python代码。你是如何在剧本中使用这些事实的?也许我们可以想出一种不需要使用产品过滤器的方法。我正在配置yaml文件中使用这个
{{applog}}
变量
templates\appconfig.yml.j2
``路径:{applog|indent(width=4,indentfirst=True)}``输出看起来像appconfig.yml`路径:-/home/ketg/apps/ketg_DEV/logs/*.log-/home/ketg/apps/ketg_UAT/logs/*.log-/home/teng/apps/ketg_PT/logs/*.log`谢谢@Aaron。它按预期工作。非常感谢您的努力和快速响应。没问题!!:)
TASK [set_fact] ********************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "template error while templating string: no filter named 'product'. String: {{ ['- '] | product(logs) | map ('join') | list }}"}
paths:
{% for path in app_log_paths.split(',') %}
    - {{ path }}
{% endfor %}