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

sor*_*rin 2 ansible

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

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

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

fatal: ...
...ignoring
Run Code Online (Sandbox Code Playgroud)

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

Kon*_*rov 10

failed_when并且changed_when是为了帮助你:

- shell: echo good | grep bad
  register: res
  failed_when: false
  changed_when: false
Run Code Online (Sandbox Code Playgroud)

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


Bar*_*cki -1

最好的方法是/sf/answers/2830161281/(使用changed_whenfailed_when)。请注意,它从 Ansible 1.4 开始工作。

对于较旧的 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 
Run Code Online (Sandbox Code Playgroud)

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

  • 这是一个可怕的黑客攻击,看看@Konstantin Suvorov 的回答。 (2认同)