【问题标题】:Ansible: How to apply defaults to each complex arguments of a listAnsible:如何将默认值应用于列表的每个复杂参数
【发布时间】:2017-06-28 09:03:07
【问题描述】:

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

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 任务或角色执行此操作?

【问题讨论】:

    标签: list dictionary ansible yaml


    【解决方案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+。

    【讨论】:

    • 偷偷摸摸,所以您将复杂项目应用于默认键,这是一个好主意。这应该是某种标准化功能:)
    猜你喜欢
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    相关资源
    最近更新 更多