You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在基于角色的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:50:53