Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

    "dictX": {}


The fiter combine combines the dictionaries. Let's test it. For example

  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

дайте

    "dictX": {
        "key1": "value1", 
        "key3": "value3"
    }