Ansible jinja2 过滤器'|'(管道)是什么意思?
Ansible jinja2 filters '|'(pipe) what does it mean?
我写了一个任务如下,但是不明白'|'是什么是吗?
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') }}"
如果有人可以详细解释或指出一些我会很棒 URL?
如有任何帮助,我们将不胜感激。
谢谢。
使用竖线字符,您可以将值传递给过滤器。有很多Jinja 2 filters but Ansible brings some additional filters.
术语 过滤器 有时可能会令人困惑,因为所有过滤器的工作方式都大不相同。例如,一些减少 hash/array 的结果集,一些修改字符串的内容,但还有一些过滤器只是 return 真或假。
更好的解释可能是那些是修饰符,它们可以对您传递的数据做任何事情。你甚至可以 write your own filters.
过滤器可以链接起来,将第一个过滤器的结果传递给下一个过滤器,依此类推。它的工作原理与 unix 上的管道命令完全相同 shell.
"value" | filter1 | filter2 | filterN
failed
过滤器returns true
如果传递结果失败。它只是从 result
.
检查 failed
属性
changed
过滤器同理,只是检查传递的结果是否有变化。它从 result
.
检查 changed
属性
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]
) 的第二个元素的值,如果它不存在,则改为 "undefined"。
任何遇到这个问题的更新,试图弄清楚为什么 when: result|failed
等行停止工作,
tl;dr:尝试用 is
替换 |
所以,
when: result|failed
变成,
when: result is failed
从 Ansible 2.9 开始(“使用 Ansible 提供的 jinja 测试作为过滤器将是 removed in Ansible 2.9.”),在条件语句中使用 |
因为 when: result|failed
会触发错误。 |
是(曾经)让 Ansible 使用 jinja2 filter,但这些现在被 jinja2 tests 取代,它有语法略有不同,旧的 jinja2 filter 名称保留为 jinja2 test names.
在某些情况下,将 |
替换为 is
看起来有点奇怪,因此尽管(例如)when: result is success
有效,但 success
和 successful
是别名所以 when: result is successful
看起来更好。
Ansible 2.5 Porting Guide 中有更多详细信息。
我写了一个任务如下,但是不明白'|'是什么是吗?
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') }}"
如果有人可以详细解释或指出一些我会很棒 URL?
如有任何帮助,我们将不胜感激。
谢谢。
使用竖线字符,您可以将值传递给过滤器。有很多Jinja 2 filters but Ansible brings some additional filters.
术语 过滤器 有时可能会令人困惑,因为所有过滤器的工作方式都大不相同。例如,一些减少 hash/array 的结果集,一些修改字符串的内容,但还有一些过滤器只是 return 真或假。
更好的解释可能是那些是修饰符,它们可以对您传递的数据做任何事情。你甚至可以 write your own filters.
过滤器可以链接起来,将第一个过滤器的结果传递给下一个过滤器,依此类推。它的工作原理与 unix 上的管道命令完全相同 shell.
"value" | filter1 | filter2 | filterN
failed
过滤器returns true
如果传递结果失败。它只是从 result
.
failed
属性
changed
过滤器同理,只是检查传递的结果是否有变化。它从 result
.
changed
属性
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]
) 的第二个元素的值,如果它不存在,则改为 "undefined"。
任何遇到这个问题的更新,试图弄清楚为什么 when: result|failed
等行停止工作,
tl;dr:尝试用 is
替换 |
所以,
when: result|failed
变成,
when: result is failed
从 Ansible 2.9 开始(“使用 Ansible 提供的 jinja 测试作为过滤器将是 removed in Ansible 2.9.”),在条件语句中使用 |
因为 when: result|failed
会触发错误。 |
是(曾经)让 Ansible 使用 jinja2 filter,但这些现在被 jinja2 tests 取代,它有语法略有不同,旧的 jinja2 filter 名称保留为 jinja2 test names.
在某些情况下,将 |
替换为 is
看起来有点奇怪,因此尽管(例如)when: result is success
有效,但 success
和 successful
是别名所以 when: result is successful
看起来更好。
Ansible 2.5 Porting Guide 中有更多详细信息。