跳到主要内容
CHENGYU

Ansible 到底会操作哪台机器:先查 inventory 和 limit

用 inventory graph 与 list-hosts 检查主机模式,再理解交集、排除和 limit。避免把连通性测试、动态清单与实际维护范围混在一起。

文章目录
LisaHost:原生与住宅IP产品,按套餐选择
腾讯云:锐驰型200Mbps峰值带宽,中国内地2核2G50元每月
DMIT:Premium中国大陆优化线路CN2GIA
晚安云:香港云服务器2核2G15元每月
雨云|国内外节点,灵活部署|云服务器 · 预装宝塔 / 1Panel
Evoxt:最高6.0GHz CPU,2.99美元每月起
搬瓦工|CN2 GIA 精品线路|洛杉矶 CN2 GIA 套餐
BRNCHost:Bursa土耳其游戏服务器,1Gbps端口,DDoS防护
WorkBuddy:交代任务,交付文件
京东云:AI进入真实业务
野草云:香港200Mbps峰值带宽,不限月流量,30元每月起
RackNerd:海外VPS21.99美元每年起

准备只改测试机,执行输出却出现生产主机。先别让剧本继续跑。Ansible 的实际目标由 inventory、剧本 hosts 和命令行 --limit 一起决定,连接地址也可能与清单里显示的名字不同。

把清单看成可检查的数据

下面是一份最小 INI 清单,地址是文档示例地址,执行前要换成自己有权限管理的机器:

[web]
web-test ansible_host=192.0.2.10
web-prod ansible_host=192.0.2.11

[test]
web-test

web-test 是 inventory 名称,ansible_host 是连接地址。对一个名称设 limit 时,用的是 inventory 里的名字或组模式,不能默认拿 IP 就能匹配这个别名。

先查看组结构与某台机器的变量:

ansible-inventory -i inventory.ini --graph
ansible-inventory -i inventory.ini --host web-test
ansible-playbook -i inventory.ini site.yml --list-hosts

主机变量可能包含敏感值,输出不要直接贴进公开工单。动态清单尤其要确认来自哪个配置文件,以及当前账户、地域或标签条件。上周保存的清单图不能代替今天的实际目标。

hosts 与 limit 是一起筛选

假设剧本用 hosts: web。--limit test 会把目标缩小到同时属于 web 和 test 的主机,而不是额外把 test 组全部加入。预览:

ansible-playbook -i inventory.ini site.yml \
  --limit test --list-hosts

命令显示的名字应该符合预期,再检查它们的 ansible_host。主机模式还支持并集、交集和排除,例如:

ansible 'web:&test' -i inventory.ini --list-hosts
ansible 'web:!web-prod' -i inventory.ini --list-hosts

给模式加引号,避免 shell 解释特殊字符。多组模式的处理顺序不能简单按字符串从左到右猜,复杂范围先打印主机列表确认。若输出为空,先修正筛选;不要为了“让命令跑起来”立即改成 all。

连通性与变更范围分别验证

确认目标之后,必要时对同一小范围做连接检查。Ansible 的 ping 模块验证连接与适用环境,不是普通 ICMP ping,也不证明业务服务健康。

首次变更尽量使用单台测试机,保存执行所用的 inventory、变量和剧本版本。--limit 不能替代阅读 delegate_to、本地任务或外部 API 调用;这些动作可能访问其他目标。剧本执行范围也要看任务本身。

完成后检查实际被修改的机器,而不只看 recap 的 changed 数量。选错目标的维护记录应明确标出,不能靠后续成功把错误范围掩盖掉。

主机模式规则见 Ansible patterns 文档,清单检查命令见 ansible-inventory 文档。

继续阅读 返回顶部