Ansible:如何将默认值应用于列表的每个复杂参数

时间:2017-02-10 05:35:47

标签: list dictionary ansible yaml

我有以下列表和默认变量:

my_list_complex:
- key1: val1
  key2: val2
  key3: val3
  keyN: valN
- key1: val1
  key3: val3
  keyN: valN

key2: default2
key3: default3
key4: default4

我需要映射my_list_complex以应用所有默认值。请注意以下事项:

  • 复杂中的键列表是无限制且不可预测的。只有列表元素中存在默认值且不存在的键应设置为默认值

预期输出为:

my_list_complex_default_applied:
- key1: val1
  key2: val2
  key3: val3
  key4: default4
  keyN: valN
- key1: val1
  key2: default2
  key3: val3
  key4: default4
  keyN: valN

我已查看combinemapwith_items,但我还没有成功完成任务

如何使用Ansible任务或角色执行此操作?

1 个答案:

答案 0 :(得分:1)

使用最新版本的Ansible,您可以:

---
- hosts: localhost
  gather_facts: no
  vars:
    my_list_complex:
      - key1: val1
        key2: val2
        key3: val3
        keyN: valN
      - key1: val1
        key3: val3
        keyN: valN
    my_template:
      key2: default2
      key3: default3
      key4: default4

  tasks:
    - set_fact:
        merged_list: "{{ (merged_list | default([])) + [ my_template | combine(item) ] }}"
      with_items: "{{ my_list_complex }}"
    - debug:
        msg: "{{ merged_list }}"

我不记得,因为您可以使用set_factwith_items 成长列出哪个版本,但我认为您应该使用Ansible 2.1 +。