我猜想在使用时不可能引用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}}”。
答案 0 :(得分:3)
只在表达式中使用字符串连接,不要使用嵌套的把手...
"{{ item.home | default('/home/' + item.name) }}"
这会将item.name
变量添加到静态/home
部分。