Ansible问题:仅在任务失败的实例上执行rescue块
问题分析与解决
你的Playbook核心问题是rescue块的语法错误,导致执行逻辑异常,才会出现所有服务器都触发rescue的情况。
错误原因
你在rescue块下的任务没有按照Ansible任务列表的规范编写——每个任务前必须加-标记,否则会被解析为无效的字典结构,破坏了block/rescue针对单台主机独立执行的逻辑。
修正后的Playbook
- block: - name: Set shell session shell: xyz - fail: msg: shell failed rescue: - set_fact: gist: "abc" - shell: abc
执行逻辑说明
正常情况下,Ansible的block/rescue是单台主机独立触发的:
- 只有当某台服务器上的block内任务执行失败时,这台服务器才会进入rescue块执行后续任务;
- 执行block任务成功的服务器,不会触发任何rescue内的操作。
修正语法后,就能实现你要求的“仅失败实例执行rescue”的需求。
内容的提问来源于stack exchange,提问作者user312307
相关产品推荐
相关产品推荐

