Ansible 2.11.4多任务Handler执行异常:文件删除步骤未运行
Ansible Handler多任务执行失败问题解决
问题原因
你当前的写法存在两个核心问题:
- Handler内部不能通过
notify触发另一个Handler:Ansible的Handler机制仅接受playbook普通任务的触发,所有被触发的Handler会在主任务全部执行完成后统一运行,Handler内部的notify操作不会被处理,因此删除文件的第二个任务永远不会被执行。 find模块参数错误:重复定义paths参数会导致后一个值覆盖前一个,原代码只会在/tmp/目录下查找文件(虽调试信息中找到了目标文件,但属于语法疏漏)。
修复后的Handler代码
将两个任务合并到同一个Handler中,直接顺序执行即可:
--- # handlers file for removal - name: Remove installer files block: - name: Find installer files find: paths: - /etc/wild_card/example - /tmp/ patterns: "Installer*" use_regex: true register: wildcard_files_to_delete - name: Delete found installer files file: path: "{{ item.path }}" state: absent with_items: "{{ wildcard_files_to_delete.files }}" when: wildcard_files_to_delete.files | length > 0
关键修改说明
- 合并任务到单个Handler:用
block包裹两个任务,作为一个Handler的完整逻辑,触发该Handler时会依次执行查找和删除操作。 - 修正
paths参数:改用列表形式定义多个路径,避免参数覆盖问题。 - 增加条件判断:添加
when条件,确保仅在找到目标文件时执行删除操作,避免空列表引发报错。
内容的提问来源于stack exchange,提问作者andrew
相关产品推荐
相关产品推荐

