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