ansible - Ansible - 调用救援后跳过块中的其他任务
问题描述
我故意create file-1
在块中的第一个任务()中创建一个错误以处理错误。救援块触发良好并完成工作,但create file-2
块中的第二个任务 ( ) 根本不执行。
为什么这样?如何确保执行我的块中的所有任务?
我的剧本。请注意注释行
解决方案
您的剧本行为正确。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: 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
推荐阅读
- python - 如何在python中访问xml文档中的Beautifulsoup保留字?
- jenkins - 更改 Jenkins 共享库的结帐节点
- python - 无法下载文件,只能下载网页
- javascript - 图像加载功能不起作用
- vba - 写宏的宏
- virtual-machine - 如何在 OVH 上使用 netplan 在 Ubuntu Server 18.04 上配置网络接口?
- python - Jupyter Notebook 中的交互式散景图未更新
- c# - 从 Powershell 或 C# 控制台应用程序执行 VBA Outlook 宏
- postsharp - TraceLogProvider - 使用
- ruby-on-rails - 我究竟做错了什么?由于某种原因,推送到 Heroku 失败