如何避免使用ansible跳过致命的任务错误?

如何避免使用ansible跳过致命的任务错误?,ansible,Ansible,在运行ansible playbooks时,您经常会遇到任务(通常是shell或命令)返回错误代码的用例 到目前为止,解决方案是注册结果并添加ignore\u errors:true,然后决定它是否是真正的错误 现在,这有一个问题:它会扰乱日志记录,因为您会看到红色错误,如 fatal: ... ...ignoring 有没有办法避免这些错误,这样我们就不会在日志中出现假错误?最好的办法是(当时使用更改,\u当时使用失败\u)。请注意,它从Ansible 1.4开始工作 对于较早的Ansibl

在运行ansible playbooks时,您经常会遇到任务(通常是shell或命令)返回错误代码的用例

到目前为止,解决方案是注册结果并添加
ignore\u errors:true
,然后决定它是否是真正的错误

现在,这有一个问题:它会扰乱日志记录,因为您会看到红色错误,如

fatal: ...
...ignoring
有没有办法避免这些错误,这样我们就不会在日志中出现假错误?

最好的办法是(当
时使用
更改,\u当
时使用
失败\u)。请注意,它从Ansible 1.4开始工作

对于较早的Ansible版本,我看到(和使用)的唯一方法是根本不运行可能失败的任务。您可以为此使用条件(
时)

首先,您需要检查条件并将检查结果分配给变量

- name: "check if condition is met"
  command: some condition that populates result
  register: result

- name: "some operation"
   command: operation that runs only if result is not failed.
  when: result|failed 

这包括一些样板代码(您需要人工步骤来测试条件),但我看不到更好的替代方案。我相信这比用
fatal:……污染日志要好。。。当
时忽略

失败,\u当
时忽略
更改\u将帮助您:

- shell: echo good | grep bad
  register: res
  failed_when: false
  changed_when: false
尽管shell命令失败,但它始终是良好的绿色。

当基于注册变量的
语句出现时,您也可以定义一个复杂的
失败。\

这是一个可怕的黑客行为,请看@Konstantin Suvorov answer。我同意您的答案更好。但在ansible 1.4之后可用时失败。我编辑了我的答案和你的答案以指定该答案。与