首页 > 解决方案 > Ansible - 调用救援后跳过块中的其他任务

问题描述

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

我的剧本。请注意注释行 在此处输入图像描述

标签: ansible

解决方案


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

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

- 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: truecreate 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

推荐阅读