Ansible & Jinja2:将字典与列表的每个元素结合起来

Ansible & Jinja2: combine a dictionary to each element of a list

我有一个数组变量[{'foo':1},{'bar':2}]。 我想将它与以下哈希结合起来:{'baz':3} 使用一个集合事实 (?) 例如我的输出注册变量是:

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

我研究了 combine 过滤器,但它只在我已经有一个散列可以使用时才起作用。在我的例子中,我有一个数组。

有没有办法使用 ansible 来实现?

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

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

其实我已经找到方法了。 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
        }
    ]
}