我想在Ansible中将两个列表组合成一个键,值字典。
我有以下列表(AWS资源ID):
ok: [localhost] => {
"vpc_natgw_ids": [
[
"vpc-123",
"vpc-234",
"vpc-345",
"vpc-456"
],
[
"nat-098",
"nat-987",
"nat-876",
"nat-765"
]
]
}
第一个列表中的第一项与第二个列表中的第一项相对应,第二个项与另一个第二个项相对应,依此类推。
我想将两个列表结合起来,得到一个像这样的字典:
ok: [localhost] => {
"vpc_natgw_ids_dict": [
"vpc-123": "nat-098",
"vpc-234": "nat-987",
"vpc-345": "nat-876",
"vpc-456": "nat-765"
]
}
我将如何实现这样的目标?
答案 0 :(得分:2)
例如这种方式:
set_fact:
vpc_natgw_ids_dict: "{{ dict(vpc_natgw_ids[0] | zip(vpc_natgw_ids[1])) }}"
答案 1 :(得分:0)
IRC用户seschwar在freenode.net上#ansible中发布的另一种解决方案也可以通过使用Jinja2来工作:
- set_fact:
vpc_natgw_ids_dict: >-
{%- set ns = namespace(ids={}) -%}
{%- for i in vpc_natgw_ids[0] -%}
{{- ns.ids.__setitem__(vpc_natgw_ids[0][loop.index0], vpc_natgw_ids[1][loop.index0]) -}}
{%- endfor -%}
{{- ns.ids -}}
- debug:
var: vpc_natgw_ids_dict