2017-02-10 1 views
0

У меня есть следующий список и по умолчанию переменного:анзибль: Как применять по умолчанию для каждого из сложных аргументов списка

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 

Я посмотрел в combine, map и with_items, но мне не удалось выполнить задачу

Как мне сделать это с помощью задачи или роли Ansible?

ответ

1

С последней версией анзибля, вы можете сделать:

--- 
- 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_fact и with_items, но я, что вы должны быть хорошо с анзиблем 2.1 +.

+0

Sneaky, поэтому вы применяете сложный элемент к клавишам по умолчанию, что отличная идея. Это должна быть какая-то стандартизованная функция :) – Stephane

Смежные вопросы