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

时间:2016-11-04 18:36:42

标签: ansible

运行ansible playbooks时,您经常会遇到一个用例,其中任务(通常是shell或命令)应该返回错误代码。

到目前为止,解决方案是注册结果并添加ignore_errors: true并稍后决定是否是真正的错误。

现在,有一个问题:它会弄乱日志,因为你会看到像

这样的红色错误
fatal: ...
...ignoring

有没有办法避免这些,所以我们不会在日志中出现假错误?

2 个答案:

答案 0 :(得分:10)

failed_whenchanged_when可以帮助您:

- shell: echo good | grep bad
  register: res
  failed_when: false
  changed_when: false

尽管shell命令失败,但这仍然是好的和绿色的 您还可以根据已注册的变量定义复杂的failed_when语句。

答案 1 :(得分:-1)

最好的方法是https://stackoverflow.com/a/40430875/1849837(使用changed_whenfailed_when)。请注意,它从1.4开始就适用于Ansible。

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

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

- 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: ... ...ignoring污染日志更好。