模板化字符串时ansible模板错误:没有名为';产品';
我有下面的剧本在ansible 2.9.6版本中运行良好。但是它在ansible 2.4.2.0版本上运行时抛出错误。我的要求是在配置yaml文件中使用模板化字符串时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/*.
{{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 %}