我写了一个如下任务,但无法理解'|'呢?
tasks:
- shell: /usr/bin/foo
register: result
ignore_errors: True
- debug: msg="it failed"
when: result|failed
- debug: msg="it changed"
when: result|changed
另外我在网上找到了一些例子但是无法理解'|'呢?
debug: msg={{ ipaddr |replace(",", ".") }}
又一个例子:
- hosts: localhost
vars:
D:
1 : "one"
2 : "two"
tasks:
- debug: var=D
- debug: msg="D[1] is {{ D[1]|default ('undefined') }}"
如果有人可以详细解释或指向某个网址,会很棒吗?
任何帮助都将不胜感激。
感谢。
答案 0 :(得分:25)
使用竖线字符将值传递给过滤器。有许多Jinja 2 filters但是Ansible brings some additional filters。
术语过滤器有时可能会造成混淆,因为所有过滤器的工作方式都不同。有些例如减少散列/数组的结果集,有些修改字符串的内容,但是有些过滤器只返回true或false。
更好的解释可能是那些是修饰符,他们可以对传递的数据做任何事情。你甚至可以write your own filters。
过滤器可以链接,将结果从第一个过滤器传递到下一个过滤器,依此类推。它的工作方式与unix shell上的管道命令完全相同。
"value" | filter1 | filter2 | filterN
如果传递的结果失败,failed
过滤器将返回true
。它只是从failed
检查result
属性。
changed
过滤器是相同的,但检查传递的结果是否有变化。它会从changed
检查result
属性。
ipaddr | replace(",", ".")
将所有,
替换为.
。因此,127,0,0,1
的值将转换为127.0.0.1
。
如果输入为空,default
过滤器将设置默认值,例如一个未定义的变量。 undefined_var | default("var was undefined")
- >这将打印undefined_var
的内容或字符串" var未定义"。在上面的给定示例中,您输出D
(D[1]
)的第二个元素的值,如果它不存在,则sting" undefined"代替。