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