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

Ram*_*ena 17 jinja2 ansible

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

tasks:
 - shell: /usr/bin/foo
   register: result
   ignore_errors: True

 - debug: msg="it failed"
   when: result|failed

 - debug: msg="it changed"
   when: result|changed
Run Code Online (Sandbox Code Playgroud)

我也在网上找到了一些例子但是无法理解什么是'|' 呢?

debug: msg={{ ipaddr |replace(",", ".") }}
Run Code Online (Sandbox Code Playgroud)

还有一个例子:

- hosts: localhost
  vars:
    D:
      1 : "one"
      2 : "two"
  tasks:
    - debug: var=D
    - debug: msg="D[1] is {{ D[1]|default ('undefined') }}"
Run Code Online (Sandbox Code Playgroud)

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

任何帮助,将不胜感激.

谢谢.

udo*_*dan 30

使用管道字符,您可以将值传递给过滤器.有许多Jinja 2过滤器,但Ansible 带来了一些额外的过滤器.

术语过滤器有时可能会令人困惑,因为所有过滤器的工作方式都不同.有些例如减少散列/数组的结果集,有些修改字符串的内容,但是有些过滤器只返回true或false.

更好的解释可能是那些是修饰符,它们可以对传递的数据做任何事情.你甚至可以编写自己的过滤器.

可以链接过滤器,将结果从第一个过滤器传递到下一个过滤器,依此类推.它的工作方式与unix shell上的管道命令完全相同.

"value" | filter1 | filter2 | filterN
Run Code Online (Sandbox Code Playgroud)

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 was undefined".在上面的给定示例中,您输出D(D[1])的第二个元素的值,如果它不存在,则改为使用sting"undefined".