Я пытаюсь понять, что делает следующий кодовый блок внутри Ansible-Playbook
environment: '{{ inventory__environment | d({})
| combine(inventory__group_environment | d({}))
| combine(inventory__host_environment | d({})) }}'
Исходя из моего понимания среды :
Ключевое слово устанавливает переменные среды на целевой хост.
Двойные усы {{xxx}}
отмечают выражение jinja2 - Поправьте меня, если я ошибаюсь. Итак, происходит какая-то оценка того, что находится внутри этих скобок.
Выражение следующего формата {{x | y}}
в Ansible называется «фильтром». В Баше это работает как труба.
Так что же делает эта специальная функция d ()
?
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"
}