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

如何在嵌套for循环中使用ansible-playbook并解决inventory告警问题

问题原因
  • 循环逻辑错误:你编写的嵌套内层循环完全多余。rebootlist存储的4个文件名本身就是符合要求的Ansible inventory清单,直接传给-i参数即可。内层循环读取了每个清单文件里的服务器主机名,把单个主机名作为inventory文件路径传给Ansible,Ansible找不到对应名称的文件,就会判定inventory为空,触发告警。
  • 补充注意:你提供的rebootlist内容里缺少reboot01文件,如果是遗漏需要补上,否则会漏处理对应100台服务器。
解决方案

方案1:简化循环(直接按批次执行)

删除多余的内层循环即可,示例脚本如下:

# 先定义日志输出路径,避免$output变量为空
output=./reboot_run.log
for j in $(cat rebootlist); do
    ansible-playbook -i "$j" reboot.yml >> "$output"
done

方案2:增加批次间隔(可选,避免业务受影响)

如果需要每批次重启后预留业务恢复时间,可增加等待逻辑:

output=./reboot_run.log
# 每批次重启后等待180秒再执行下一批,可根据实际需求调整时长
wait_time=180
for j in $(cat rebootlist); do
    echo "===== 开始执行批次 $j 重启任务 =====" >> "$output"
    ansible-playbook -i "$j" reboot.yml >> "$output"
    echo "===== 批次 $j 执行完成,等待 ${wait_time}s 后执行下一批 =====" >> "$output"
    sleep $wait_time
done
验证方法

执行以下命令验证inventory可被正常解析,输出对应100台主机即代表配置正确:
ansible -i reboot00 all --list-hosts

内容的提问来源于stack exchange,提问作者Raal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:24:01