Ansible inventory主机清单管理

Ansible 管理服务器靠的就是 inventory 主机清单,它决定了你要操作哪些机器、怎么分组、用什么变量。
这篇教程从零开始,带你用 INI 和 YAML 两种写法配置主机清单,实现批量服务器分组,并给出验证命令和常见报错处理。

先理清 inventory 文件和目录结构

Ansible 默认读取 /etc/ansible/hosts,但推荐在项目目录下自建 inventory 文件,方便版本管理和迁移。
常用做法是创建 inventory/ 目录,里面放 hosts.ini 或 hosts.yml。

执行 ansible --version 可以看到当前配置的 inventory 路径。
如果自定义文件,运行时加 -i 参数指定,例如 ansible all -i inventory/hosts.ini -m ping。

关键点: 主机清单支持两种格式——INI 和 YAML,INI 简单直观适合新手,YAML 结构清晰适合复杂分组和变量。

用 INI 格式做基础分组

新建文件 inventory/hosts.ini,内容如下:

[web]
192.168.1.10
192.168.1.11

[db]
192.168.1.20 ansible_user=root
192.168.1.21

[all:vars]
ansible_ssh_private_key_file=/root/.ssh/id_rsa

方括号里是组名,组下面写主机 IP 或域名。
主机后面可以直接跟变量,比如 ansible_user=root 指定登录用户。[all:vars] 给所有主机设置通用变量,这里指定了 SSH 私钥路径。

验证分组:ansible web -i inventory/hosts.ini --list-hosts 会列出 web 组下的主机。

注意: 如果主机使用非标准 SSH 端口,写成 192.168.1.10:2222 或 ansible_port=2222。

嵌套分组与多级管理

当服务器数量多时,可以定义父组包含子组。
继续在 hosts.ini 中追加:

[web]
192.168.1.10
192.168.1.11

[db]
192.168.1.20
192.168.1.21

[app:children]
web
db

[app:vars]
ansible_python_interpreter=/usr/bin/python3

[app:children] 表示 app 组包含 web 和 db 两个子组。
这样执行 ansible app -i inventory/hosts.ini -m ping 就能同时操作所有 web 和 db 机器。

验证方法: 使用 ansible-inventory -i inventory/hosts.ini --graph 可以树状显示分组结构,确认嵌套关系是否正确。

改用 YAML 格式更清晰

如果觉得 INI 容易写错,可以换成 YAML 格式,新建 inventory/hosts.yml:

all:
  children:
    web:
      hosts:
        192.168.1.10:
        192.168.1.11:
    db:
      hosts:
        192.168.1.20:
          ansible_user: root
        192.168.1.21:
  vars:
    ansible_ssh_private_key_file: /root/.ssh/id_rsa

YAML 用缩进表示层级,children 下面放子组,hosts 下面放主机,主机后面可以跟变量字典。
运行命令时指定 -i inventory/hosts.yml 即可。

两种格式选择建议: 纯静态分组且机器少用 INI;
需要动态变量、多级嵌套或与脚本集成用 YAML。

批量操作前的连通性检查

配置好清单后,先用 ping 模块测试连通性:

ansible all -i inventory/hosts.ini -m ping

成功会返回 pong,失败会显示 SSH 连接错误。
常见报错 UNREACHABLE 通常是 IP 不通、SSH 密钥未配置或用户名错误。
检查 /etc/ansible/ansible.cfg 中 remote_user 和 private_key_file 是否设置正确。

如果只想测试某个组,把 all 换成组名,例如 ansible web -i inventory/hosts.ini -m ping。

避坑提醒: 不要直接修改默认的 /etc/ansible/hosts 而不做备份,建议项目内维护独立 inventory 文件,避免影响其他任务。

常见疑问

为什么 ansible all 报错找不到主机?
检查 inventory 文件路径是否正确,运行命令时是否加了 -i 参数。默认路径可能被 ansible.cfg 覆盖,用 ansible --version 查看实际配置。

主机变量和组变量冲突时哪个生效?
主机变量优先级高于组变量,组变量高于 all 组变量。可以用 ansible-inventory --host 192.168.1.10 查看某台主机的最终变量。

动态 inventory 和静态清单怎么选?
服务器数量少、IP 固定用静态清单;云环境或频繁扩缩容建议用动态 inventory 脚本对接 API。

能否在清单里写主机名而不是 IP?
可以,但需要确保控制节点的 DNS 或 /etc/hosts 能解析这些主机名,否则同样会连接失败。

按照上面的步骤配置好 inventory 主机清单和分组后,就可以用 ansible 或 ansible-playbook 批量操作服务器了。
先从 ping 测试开始,确认分组和变量都生效,再逐步编写更复杂的 playbook。

分享到:
上一篇
Prometheus+Alertmanager告警渠道配置
下一篇
Shell脚本监控网站页面关键词,检测页面劫持
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意