在Ansible Jinja2模板中循环遍历另一个var的同时将项目推送到var

时间:2018-06-08 09:39:57

标签: ansible jinja2

清单:

[Test]
local ansible_host=localhost

[Test:vars]
my_clusters="A,B,C"

我正在尝试编写一个迭代my_clusters var的jinja2模板。 在网上,我发现下面的迭代方式(也在这里For loop in Ansible Template):

{% for item in hostvars[groups['Test'][0]]['my_clusters'].split(',') %}
{{item}}
{% endfor %}

产生输出:

A
B
C

但是我的要求是打印字符串“Cluster”(逗号在同一行上分隔)和no一样多次。 my_clusters var中的项目 预期产出:

Cluster,Cluster,Cluster

我尝试过类似下面的内容。但它不起作用。

{% set str="" %}
{% for cluster in hostvars[groups['Test'][0]]['my_clusters'].split(',') %}
{% str += "Cluster," %}
{% endfor %}
{{str}}

1 个答案:

答案 0 :(得分:1)

这可以通过assignments introduced in Jinja2 2.10

来实现
{% set ns = namespace(str="") %}
{% for cluster in hostvars[groups['Test'][0]]['my_clusters'].split(',') %}
{% set ns.str = ns.str + "Cluster" %}
{%- if not loop.last %}{% set ns.str = ns.str + "," %}{% endif %}
{% endfor %}

以上回答了标题中的问题,但是您的代码存在一些语法问题:

  • 表达式中缺少set
  • 使用+=运算符
  • 未处理上一个,