Ansible提供了一个failed_when
模块,允许用户在其任务中指定某些失败条件,例如在stdout或stderr中找到某个字符串。
我正在尝试做相反的事情:如果在stdout或stderr中找到任何一组字符串,我希望我的任务不失败。换句话说,我喜欢接近passed_when
模块功能的东西。
我的推理是这样的:
这项任务可以有很多原因 失败 - 但其中一些,取决于输出,我不考虑 作为当前背景下的失败。
有人知道如何实现这一目标吗?
答案 0 :(得分:9)
看看这里:
Is there some Ansible equivalent to "failed_when" for success
- name: ping pong redis
command: redis-cli ping
register: command_result
failed_when:
- "'PONG' not in command_result.stderr"
- "command_result.rc != 0"
如果任何列表为False
,则通过答案 1 :(得分:2)
您原来的问题是这样的(使用布尔逻辑使其更容易):
如果在stdout或stderr
中找到一组字符串,则成功执行命令
改写你的逻辑:
如果在stdout或stderr中找不到一组字符串,会失败。使用这个逻辑,使用failed_when很容易。这是一个片段:
---
- name: Test failed_when as succeed_if
hosts: localhost
connection: local
gather_facts: no
tasks:
- name: "'succeed_if' set of strings in stdout"
command: /bin/echo succeed1
register: command_result
failed_when: "command_result.stdout not in ['succeed1',]"
- name: "'succeed_if' set of strings in stdout (multiple values)"
command: /bin/echo succeed2
register: command_result
failed_when: "command_result.stdout not in ['succeed1', 'succeed2']"
- name: "'succeed_if' set of strings in stderr (multiple values)"
shell: ">&2 /bin/echo succeed2 "
register: command_result
failed_when: "command_result.stderr not in ['succeed1', 'succeed2']"
- name: "'succeed_if' set of strings in stderr (multiple values) or rc != 0"
shell: ">&2 /bin/echo succeed2; /bin/false"
register: command_result
failed_when: "command_result.stderr not in ['succeed1', 'succeed2'] and command_result.rc != 0"
# vim: set ts=2 sts=2 fenc=utf-8 expandtab list:
您可能正在寻找的文件是Jinja2 Expressions