Ansible忽略任务中的错误,如果任何任务有错误,则在剧本结束时失败

Ill*_*ist 41 ansible ansible-playbook

我正在学习Ansible.我有一个清理资源的剧本,我希望剧本忽略每一个错误并一直持续到最后,如果有错误则最后失败.

我可以忽略错误

  ignore_errors: yes
Run Code Online (Sandbox Code Playgroud)

如果这是一项任务,我可以做一些事情(来自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"
Run Code Online (Sandbox Code Playgroud)

我怎么会在最后失败?我有几个任务,我的"何时"条件是什么?

cle*_*ssi 28

使用失败模块.

  1. 对于在发生错误时需要忽略的每个任务,请使用ignore_errors.
  2. 任何任务执行失败时设置一个标志(例如,result = false)
  3. 在playbook的末尾,检查是否设置了标志,并且根据该标志,执行失败
- fail: msg="The execution has failed because of errors."
  when: flag == "failed"
Run Code Online (Sandbox Code Playgroud)

更新:

使用register存储您在示例中显示的任务结果.然后,使用这样的任务:

- name: Set flag
  set_fact: flag = failed
  when: "'FAILED' in command_result.stderr"
Run Code Online (Sandbox Code Playgroud)

  • 您可能想查看“failed_when”和“command_result is failed”而不是字符串处理(它会给您一些更通用的其他命令的信息)。 (3认同)

Olg*_*ga 17

您可以将所有可能在块中失败的任务包装起来,并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 
Run Code Online (Sandbox Code Playgroud)

了解更多关于错误处理块这里.

  • 但是最后怎么会失败呢?我不认为这回答了问题。 (3认同)