运行ansible playbooks时,您经常会遇到一个用例,其中任务(通常是shell或命令)应该返回错误代码。
到目前为止,解决方案是注册结果并添加ignore_errors: true
并稍后决定是否是真正的错误。
现在,有一个问题:它会弄乱日志,因为你会看到像
这样的红色错误fatal: ...
...ignoring
有没有办法避免这些,所以我们不会在日志中出现假错误?
答案 0 :(得分:10)
failed_when
和changed_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_when
和failed_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
污染日志更好。