jinja2中字典的默认值(ansible)

时间:2015-03-05 18:33:44

标签: jinja2 ansible

jinja2有过滤器'| default()'来处理未定义的变量。但它不适用于字典值。

如果D可能有或没有密钥foo(D [foo]),而不是:

{{ D[foo]|default ('no foo') }}
如果D未定义,

将打印'no foo',但如果定义了D,则会导致错误('dict对象'没有属性'foo'),但D [foo]未定义。

是否可以为字典项设置默认值?

1 个答案:

答案 0 :(得分:14)

这似乎对我使用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"
}