Jinja2默认过滤器中可以使用变量吗?

时间:2019-01-29 15:10:30

标签: ansible

我猜想在使用时不可能引用item变量 Jinja2“默认”过滤器?

就像这个示例剧本一样:

---
- hosts: localhost
  become: no
  gather_facts: no

  vars:
    users:
      - foo:
        name: "foo"
        home: /home/foo
      - bar:
        name: "bar"

  tasks:

    - name: debug
      debug:
        msg: "{{ item.home | default('/home/{{ item.name }}') }}"
      loop: "{{ users }}"

如果尝试过,我会得到如下输出:

$ ansible-playbook test.yml |grep item
ok: [localhost] => (item={u'home': u'/home/foo', u'foo': None, u'name': u'foo'}) => {
ok: [localhost] => (item={u'bar': None, u'name': u'bar'}) => {
    "msg": "/home/{{ item.name }}"

很明显,我希望“ / home / bar”而不是“ / home / {{item.name}}”。

1 个答案:

答案 0 :(得分:3)

只在表达式中使用字符串连接,不要使用嵌套的把手...

"{{ item.home | default('/home/' + item.name) }}"

这会将item.name变量添加到静态/home部分。