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

标签 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 以将所有默认值应用于它。请注意以下事项:

  • 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 任务或角色来做到这一点?

最佳答案

使用最新版本的 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+。

关于list - Ansible:如何将默认值应用于列表的每个复杂参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42152192/

相关文章:

python - ansible/jinja2 获取独特的子元素

python - 按列表中第一项分组的列表列表中元素的平均值

python - 在> 2000000个项目的列表中查找重复项索引的快速方法

java - 包含 Map<Entity, Entity> 字段的正确方法是什么

C 这个语法是字典吗?

python - ansible 无法使用 "brew install ansible"命令完美安装在 MacOS 中不起作用?错误 : -sh:/usr/local/bin/ansible: No such file or directory

python - 列表中成对的字典列表

使用\n 分隔词的 Python 字符串文本文件不会分割

Swift:将字典转换为带有换行符的字符串

redis - 在 CentOS 7 中使用 ansible 从 iptables 迁移到 firewalld 设置