我有2个列表作为set_fact,并且想要创建一个字典
我正在运行ansible 2.8 我有如下的list1
"inventory_devices": [
"device0",
"device1"
]
和list2如下
"inventory_ips": [
"10.1.1.1",
"10.1.1.2"
]
我想获得类似
的输出显示"inventory_dict": [
"device0": "10.1.1.1",
"device1": "10.1.1.2"
]
谢谢。
答案 0 :(得分:1)
您可以使用zip
filter built into ansible使用jinja2完全做到这一点。
要获得结合其他列表元素的列表,请使用zip
- name: give me list combo of two lists debug: msg: "{{ [1,2,3,4,5] | zip(['a','b','c','d','e','f']) | list }}"
...
类似于上述items2dict过滤器的输出,这些过滤器可以是 用于构造
dict
:{{ dict(keys_list | zip(values_list)) }}
zip
过滤器按顺序组合成对列表中的项目,而dict
构造根据成对列表创建字典。
inventory_dict: "{{ dict(inventory_devices | zip(inventory_ips)) }}"
答案 1 :(得分:0)
这是要执行的任务,在下面的PB中populate combined var
:
---
- hosts: localhost
gather_facts: false
vars:
inventory_devices:
- device0
- device1
inventory_ips:
- 10.1.1.1
- 10.1.1.2
tasks:
- name: populate combined var
set_fact:
combined_var: "{{ combined_var|default({}) | combine({ item.0: item.1 }) }}"
loop: "{{ query('together', inventory_devices, inventory_ips) }}"
- name: print combined var
debug:
var: combined_var
结果:
TASK [print combined var] **********************************************************************************************************************************************************************************************
ok: [localhost] => {
"combined_var": {
"device0": "10.1.1.1",
"device1": "10.1.1.2"
}
}
希望有帮助