Ansible的run_once参数是否会选中不可达主机执行任务?
Ansible
run_once 选中主机可用性问题解答 官方对run_once参数的基础用法说明如下:
若需要任务仅在当前批次主机中的第一台上运行,可为该任务设置
run_once: true
针对该机制是否能始终保证选中主机可用的问题,明确答案是不能,相关逻辑说明如下:
run_once的主机选择逻辑非常简单:任务执行前直接选取当前play执行批次内排序第一位的主机,不会在选择阶段提前校验主机的连通性、服务状态等可用性指标- 如果排序首位的主机存在SSH连通失败、执行权限不足、前置任务执行失败被标记为unreachable/failed的情况,
run_once不会自动跳过故障节点顺延选择批次内下一台可用主机,任务会直接抛出执行错误 - 举个实际场景:你的inventory里按顺序配置了node1、node2、node3三台主机,如果node1处于宕机状态,给任务加
run_once: true后,任务会直接尝试连接node1并触发连接超时错误,不会自动切换到正常运行的node2或node3上执行 - 如果你的业务要求单节点运行的任务必须落在可用主机上,不能仅依赖
run_once的默认选择逻辑,需要搭配前置主机可用性探测、delegate_to动态指定执行节点、执行前过滤故障主机等方案实现
内容的提问来源于stack exchange,提问作者Quacky dev
相关产品推荐
相关产品推荐

