что делает этот фильтр jinja2 в Ansible? d ({})

Я пытаюсь понять, что делает следующий кодовый блок внутри Ansible-Playbook

environment: '{{ inventory__environment | d({})
                   | combine(inventory__group_environment | d({}))
                   | combine(inventory__host_environment  | d({})) }}'

Исходя из моего понимания среды : Ключевое слово устанавливает переменные среды на целевой хост. Двойные усы {{xxx}} отмечают выражение jinja2 - Поправьте меня, если я ошибаюсь. Итак, происходит какая-то оценка того, что находится внутри этих скобок. Выражение следующего формата {{x | y}} в Ansible называется «фильтром». В Баше это работает как труба.

Так что же делает эта специальная функция d () ?

1
задан 28 February 2020 в 17:22
1 ответ

Q: «Что делает эта специальная функция d ()?»

A: d () - это ярлык для default ( ) . Например, задачи ниже

    - set_fact:
        dictX: '{{ dict1 | d({}) |
                   combine(dict2 | d({})) |
                   combine(dict3 | d({})) }}'
    - debug:
        var: dictX

, где dict1 , dict2 и dict3 не определены, дают

    "dictX": {}


Подгонщик комбайн объединяет словари. Давайте проверим это. Например
  vars:

    dict1:
      key1: 'value1'
#   dict2:
#     key2: 'value2'
    dict3:
      key3: 'value3'

  tasks:

    - set_fact:
        dictX: '{{ dict1 | d({}) |
                   combine(dict2 | d({})) |
                   combine(dict3 | d({})) }}'
    - debug:
        var: dictX

give

    "dictX": {
        "key1": "value1", 
        "key3": "value3"
    }
1
ответ дан 30 March 2020 в 00:17

Теги

Похожие вопросы