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"
}