jinja2 中字典的默认值(ansible)
default value for dictionary in jinja2 (ansible)
jinja2 有过滤器 '|default()' 来处理未定义的变量。但它不适用于字典值。
如果 D 可能有或没有密钥 foo (D[foo]),那么:
{{ D[foo]|default ('no foo') }}
如果 D 未定义, 将打印 'no foo',但如果 D 已定义但 D[foo] 未定义,则会导致错误('dict object' 没有属性 'foo')。
有什么方法可以为字典项设置默认值吗?
这似乎对我使用 Ansible 1.7.2 正常工作。这是我刚写的测试剧本:
---
- hosts: localhost
vars:
D:
1 : "one"
2 : "two"
tasks:
- debug: var=D
- debug: msg="D[1] is {{ D[1]|default ('undefined') }}"
- debug: msg="D[3] is {{ D[3]|default ('undefined') }}"
这里是 运行 它的输出:
TASK: [debug var=D] ***********************************************************
ok: [localhost] => {
"D": {
"1": "one",
"2": "two"
}
}
TASK: [debug msg="D[1] is one"] ***********************************************
ok: [localhost] => {
"msg": "D[1] is one"
}
TASK: [debug msg="D[3] is undefined"] *****************************************
ok: [localhost] => {
"msg": "D[3] is undefined"
}
jinja2 有过滤器 '|default()' 来处理未定义的变量。但它不适用于字典值。
如果 D 可能有或没有密钥 foo (D[foo]),那么:
{{ D[foo]|default ('no foo') }}
如果 D 未定义,将打印 'no foo',但如果 D 已定义但 D[foo] 未定义,则会导致错误('dict object' 没有属性 'foo')。
有什么方法可以为字典项设置默认值吗?
这似乎对我使用 Ansible 1.7.2 正常工作。这是我刚写的测试剧本:
---
- hosts: localhost
vars:
D:
1 : "one"
2 : "two"
tasks:
- debug: var=D
- debug: msg="D[1] is {{ D[1]|default ('undefined') }}"
- debug: msg="D[3] is {{ D[3]|default ('undefined') }}"
这里是 运行 它的输出:
TASK: [debug var=D] ***********************************************************
ok: [localhost] => {
"D": {
"1": "one",
"2": "two"
}
}
TASK: [debug msg="D[1] is one"] ***********************************************
ok: [localhost] => {
"msg": "D[1] is one"
}
TASK: [debug msg="D[3] is undefined"] *****************************************
ok: [localhost] => {
"msg": "D[3] is undefined"
}