Ansible jinja2过滤器'|'(管道)是什么意思?

时间:2015-06-17 05:46:28

标签: ansible jinja2

我写了一个如下任务,但无法理解'|'呢?

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

如果有人可以详细解释或指向某个网址,会很棒吗?

任何帮助都将不胜感激。

感谢。

1 个答案:

答案 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未定义"。在上面的给定示例中,您输出DD[1])的第二个元素的值,如果它不存在,则sting" undefined"代替。