如何在基于角色的Ansible Playbook中利用rescue保障watchdog启用?
解决Ansible Playbook中确保watchdog始终启用的问题
你可以利用Ansible的block/always结构实现需求:把核心执行的角色放到block块中,将启用watchdog的逻辑独立放到always块里。always块内的任务会无条件执行,无论block中的角色执行成功还是失败,都能保证watchdog被启用。
修改后的Playbook示例如下:
- hosts: master gather_facts: True environment: http_proxy: "{{ lookup('env','http_proxy') }}" https_proxy: "{{ lookup('env','https_proxy') }}" tasks: - block: # 这里放原来需要执行的所有核心角色(除了最后启用watchdog的步骤) - name: 执行核心角色流程 include_role: name: "{{ item.role }}" vars: "{{ item | omit('role') }}" loop: - { role: watchdog, status: 'disabled' } - { role: use-my-version } - { role: services-action, action: 'stopped', acme_services: "{{stop_services_before_install}}", become: yes } ... # 补充剩余需要执行的角色 always: # 无论block执行结果如何,都会执行此步骤启用watchdog - name: 强制启用watchdog include_role: name: watchdog vars: status: 'enabled'
关键说明:
- 用
include_role配合循环遍历原有的角色列表,完整保留每个角色的参数(比如become: yes这类配置通过omit('role')过滤掉role字段后,其余参数会传递给角色)。 always块的优先级最高,即使block中某个角色执行失败导致Playbook中断,always内的启用watchdog操作依然会执行。
内容的提问来源于stack exchange,提问作者yi1
相关产品推荐
相关产品推荐

