我正在学习Ansible。我有一个清理资源的剧本,我希望剧本忽略每一个错误并一直持续到最后,如果有错误则最后失败。
我可以用
忽略错误 ignore_errors: yes
如果是一项任务,我可以做一些事情(来自ansible错误捕获)
- name: this command prints FAILED when it fails
command: /usr/bin/example-command -x -y -z
register: command_result
ignore_errors: True
- name: fail the play if the previous command did not succeed
fail: msg="the command failed"
when: "'FAILED' in command_result.stderr"
我最终如何失败?我有几个任务,我的"当"条件是?
答案 0 :(得分:21)
使用Fail模块。
- fail: msg="The execution has failed because of errors." when: flag == "failed"
更新:
使用register存储您在示例中显示的任务结果。然后,使用这样的任务:
- name: Set flag
set_fact: flag = failed
when: "'FAILED' in command_result.stderr"
答案 1 :(得分:13)
您可以在块中包装所有可能失败的任务,并对该块使用ignore_errors: yes
。
tasks:
- name: ls
command: ls -la
- name: pwd
command: pwd
- block:
- name: ls non-existing txt file
command: ls -la no_file.txt
- name: ls non-existing pic
command: ls -la no_pic.jpg
ignore_errors: yes
详细了解块here中的错误处理。
答案 2 :(得分:1)
失败模块效果很好!感谢。
我必须在检查之前定义我的事实,否则我会得到一个未定义的变量错误。
在使用引号设置事实并且没有空格时我遇到了问题。
这有效:
set_fact: flag="failed"
这引发了错误:
set_fact: flag = failed