Ansible-调用救援后,将跳过块中的其他任务

时间:2019-11-23 18:33:18

标签: ansible

我故意在第一个任务(create file-1)中创建错误以处理错误。救援块可以正常触发并完成工作,但是该块中的第二个任务(create file-2)根本没有执行。
为什么这样做?如何确保执行块中的所有任务?

我的剧本。请注意注释行 enter image description here

1 个答案:

答案 0 :(得分:0)

您的剧本行为正常。 rescue块是异常处理的一种形式。它允许您捕获并响应错误,否则该错误会导致您的剧本退出,但该块中的所有其他任务都将被跳过。剧本的执行将在当前块之后 继续。

如果要确保执行第二个任务,可以将它们放在两个单独的块中:

- block:
    - name: create file-1
      command: touch /path/to/file-1.txt
  rescue:
    - name: handle error
      debug:
        msg: do some error handling here

- block:
    - name: create file-2
      command: touch /path/to/file-2.txt
      register: file1
  rescue:
    - name: handle error
      debug:
        msg: do some error handling here

或在ignore_errors: true块上设置create file-<n>,并在它们都执行后显式检查错误:

- name: create file-1
  command: touch /path/to/file-1.txt
  register: file1
  ignore_errors: true

- name: handle errors creating file-1
  debug:
    msg: do something here
  when: file1 is failed

- name: create file-2
  command: touch /path/to/file-2.txt
  register: file2
  ignore_errors: true

- name: handle errors creating file-1
  debug:
    msg: do something here
  when: file2 is failed