17.ansible的error处理机制
·
ansible的error处理机制
ignore_errors忽略错误
ansible的
错误处理机制
- 和python一样,程序自上而下运行,默认情况下,ansible在遇到错误时会立刻停止playbook,后续所有的任务都不会再执行
单任务忽略错误
- 使用
ignore_errors可以忽略错误,继续后续的任务
---
- name: 单任务error处理演示剧本
hosts: all
tasks:
- name: 开启一个不存在的服务
service:
# 没有这个服务名
name: noname
state: started
# 针对这个tasks忽略错误,不停止后续任务
ignores_errors: true
- name: 创建一个文件
file:
path: /tmp/service.txt
state: touch
- 执行结果显示忽略了这个tasks的错误
ansible-playbook error.yml

全局忽略错误
单任务忽略错误,只能忽略一个任务的错误,全局忽略错误,不论哪一步出现错误都会忽略错误并继续执行脚本。
---
- name: 全局error处理演示剧本
hosts: all
# 全局忽略错误,所有tasks都不会报错
ignore_errors: yes
tasks:
- name: 开启一个不存在的服务
service:
# 不存在的服务
name: noname
state: started
- name: 创建一个文件
file:
path: /tmp/service.txt
state: touch
错误控制和handlers的结合
fore_handlers: yes参数在生产环境中是必加的- 使用该配置,即使后续任务失败,也
强制执行已触发的handlers fore_handlers只有当paly中的所有tasks都运行正确,在程序结束时才会通知执行handlers,如果play运行中遇到了错误,handlers不会被通知执行
---
- name: 错误控制和 handlers 的结合
hosts: all
# 默认情况下,如果 playbook 中有任务失败,Ansible 会跳过所有 pending 的 handlers
# !!!关键配置:即使后续任务失败,也强制执行已触发的 handlers
# 启用此选项可确保关键操作(如服务重启)即使在出错后仍能执行
force_handlers: yes
tasks:
- name: 一个绝对成功的任务
command: /bin/true
# 此任务总是成功,并触发 "restart the database" handler
notify: restart the database
- name: 一个绝对失败的任务
yum:
name: notpkg
state: latest
# 此任务会因软件包不存在而失败,导致整个 play 中断
handlers:
# 即使前面的任务失败,由于设置了 force_handlers: yes,
# 此 handler 仍会在任务失败前被 Ansible 执行(在所有 tasks 尝试完成后)
- name: restart the database
service:
name: database
state: restarted
更多推荐
所有评论(0)