代码之家  ›  专栏  ›  技术社区  ›  ImGroot

在ansibejinja2模板中循环另一个var时将项推送到var

  •  0
  • ImGroot  · 技术社区  · 7 年前

    库存:

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

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

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

    产生输出:

    A
    B
    C
    

    但我的要求是将字符串“cluster”(逗号分隔在同一行)打印为 My-团簇 VAR 预期产量:

    Cluster,Cluster,Cluster
    

    我试过下面这样的东西。但没用。

    {% set str="" %}
    {% for cluster in hostvars[groups['Test'][0]]['my_clusters'].split(',') %}
    {% str += "Cluster," %}
    {% endfor %}
    {{str}}
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   techraf    7 年前

    这可以通过 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 在表达式内部,
    • 使用 += 运算符,
    • 不处理最后一个 , .