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 没有列表理解,但我认为你可以使用 set
和 for
循环来实现它:
{% 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
}
]
}
我有一个数组变量[{'foo':1},{'bar':2}]
。
我想将它与以下哈希结合起来:{'baz':3}
使用一个集合事实 (?) 例如我的输出注册变量是:
[{'foo':1, 'baz':3},{'bar':2, 'baz':3}]
我研究了 combine
过滤器,但它只在我已经有一个散列可以使用时才起作用。在我的例子中,我有一个数组。
有没有办法使用 ansible 来实现?
Jinja2 没有列表理解,但我认为你可以使用 set
和 for
循环来实现它:
{% 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
}
]
}