Ansible&Jinja2:将字典组合到列表的每个元素
问题描述:
我有一个变量,它是一个数组[{'foo':1},{'bar':2}]
。 我想把它具有以下哈希合并:{'baz':3}
使用一组事实如我的输出变量注册为(?):Ansible&Jinja2:将字典组合到列表的每个元素
[{'foo':1, 'baz':3},{'bar':2, 'baz':3}]
我进去看了combine
过滤器,但它仅适用时,我已经有一个哈希工作。在我的情况下,我有一个数组。
有没有一种方法可以实现使用ansible?
答
其实,我已经找到一种方法。 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
}
]
}
答
的Jinja2没有列表理解,但我认为你可以使用set
和for
循环来实现它:
{% set outputarray = [] -%}
{% for d in inputarray -%}
{% set r = d|combine({'baz': 3}) -%}
{{ ouputarray.append(r) and '' }}
{%- endfor %}
是的,我忘了'地图'过滤器。 –