【问题标题】:Pushing items to a var while looping over another var in Ansible Jinja2 template在 Ansible Jinja2 模板中循环另一个 var 时将项目推送到一个 var
【发布时间】:2018-06-08 09:39:56
【问题描述】:

库存:

[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}}

【问题讨论】:

    标签: ansible jinja2


    【解决方案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
    • 使用+= 运算符,
    • 未处理最后一个,

    【讨论】:

      猜你喜欢
      • 2016-04-10
      • 2015-12-26
      • 2012-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      相关资源
      最近更新 更多