![这个 jinja2 过滤器在 Ansible 中起什么作用?d({})](https://linux22.com/image/749141/%E8%BF%99%E4%B8%AA%20jinja2%20%E8%BF%87%E6%BB%A4%E5%99%A8%E5%9C%A8%20Ansible%20%E4%B8%AD%E8%B5%B7%E4%BB%80%E4%B9%88%E4%BD%9C%E7%94%A8%EF%BC%9Fd(%7B%7D).png)
我尝试理解以下代码块在 Ansible-Playbook 中的作用
environment: '{{ inventory__environment | d({})
| combine(inventory__group_environment | d({}))
| combine(inventory__host_environment | d({})) }}'
据我所知,environment:
关键字在目标主机上设置环境变量。双胡须{{ xxx }}
标记了一个 jinja2 表达式 - 如果我错了请纠正我。因此,会对括号内的内容进行某种评估。以下格式的表达式{{ x | y }}
在 Ansible 中称为“过滤器”。它就像 Bash 中的管道一样工作。
那么这个特殊的函数是起什么作用d()
的呢?
答案1
问:“这个名为 d() 的特殊函数有什么作用?”
A:d()
是快捷方式default()
.例如下面的任务
- set_fact:
dictX: '{{ dict1 | d({}) |
combine(dict2 | d({})) |
combine(dict3 | d({})) }}'
- debug:
var: dictX
其中dict1
,dict2
和dict3
未定义,则
"dictX": {}
过滤器
combine
结合了词典。让我们测试一下。例如
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"
}