Я пытаюсь понять, что делает следующий кодовый блок внутри 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": {}
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"
}