Ansible:将两个列表转换为键值dict

时间:2019-07-27 22:37:55

标签: ansible

我有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"
]

谢谢。

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"
    }
}

希望有帮助