2016-12-01 187 views
0

我有一个变量,它是一个数组[{'foo':1},{'bar':2}]。 我想把它具有以下哈希合并:{'baz':3}使用一组事实如我的输出变量注册为(?):Ansible&Jinja2:将字典组合到列表的每个元素

[{'foo':1, 'baz':3},{'bar':2, 'baz':3}] 

我进去看了combine过滤器,但它仅适用时,我已经有一个哈希工作。在我的情况下,我有一个数组。

有没有一种方法可以实现使用ansible?

回答

2

其实,我已经找到一种方法。 map可以与任何过滤器一起使用,并且论点为逗号

- name: test 
    set_fact: 
    _test: "{{ [{'foo':1}, {'bar':2}] | map('combine', {'baz':3}) | list }}" 

产生后进行传递:

ok: [localhost] => { 
    "_test": [ 
     { 
      "baz": 3, 
      "foo": 1 
     }, 
     { 
      "bar": 2, 
      "baz": 3 
     } 
    ] 
} 
+0

是的,我忘了'地图'过滤器。 –

0

的Jinja2没有列表理解,但我认为你可以使用setfor循环来实现它:

{% set outputarray = [] -%} 
{% for d in inputarray -%} 
    {% set r = d|combine({'baz': 3}) -%} 
    {{ ouputarray.append(r) and '' }} 
{%- endfor %} 
+0

,谢谢,我可以放置在我ansible剧本,或者我怎么有这个?从未见过这样的代码 – Stephane

+0

您可以将它放在YAML文件的顶部,并在配置中引用'{{outputarray}}'。 –

+0

感谢您的帮助,我学到了一些东西。也发现了一个更简单的解决方案:) – Stephane

相关问题