如何基于Ansible任务结果的stderr内容重试任务?
解决Ansible apt任务仅网络超时失败时重试的问题
直接给你可用的Playbook代码,核心是用default()过滤器避免stderr不存在的报错,同时精准控制重试条件:
- name: 安装基础依赖包 apt: name: "{{ base_packages }}" # 替换成你的依赖包列表 state: present register: apt_task_result until: apt_task_result is success or ('Connection timed out' not in apt_task_result.stderr | default('')) retries: 5 # 最多重试5次,可按需调整 delay: 10 # 每次重试间隔10秒,可按需调整
逻辑说明
- 用
register把任务执行结果存到apt_task_result变量里 apt_task_result.stderr | default(''):任务成功时stderr字段不存在,用default('')转为空字符串,避免报错until条件的含义:- 如果任务执行成功,直接停止重试
- 如果任务失败,但错误信息里没有“Connection timed out”,说明是其他问题(比如包不存在、权限错误),停止重试并标记任务失败
- 只有当任务失败且错误信息包含超时内容时,才会触发重试,直到达到重试次数上限或任务成功
内容的提问来源于stack exchange,提问作者stev-e
相关产品推荐
相关产品推荐

