Ansible静态主机清单是纯文本文件,用于定义受管主机、主机组及变量;支持单主机列表、分组([group])、连接参数(如ansible_host)、组变量([group:vars])、嵌套组([parent:children])等语法,常用INI格式,默认路径/etc/ansible/hosts。

Ansible 静态主机清单(Inventory)是一个纯文本文件,用来定义你要管理的主机、主机组及其相关变量。它不执行代码,只描述结构,因此编写时重点是语法准确、层级清晰、变量合理。
基本格式:主机与组的定义
最简清单只需列出主机名或 IP 地址:
web01.example.com db01.example.com 192.168.1.10 192.168.1.11
也可以按逻辑分组,用方括号 [group_name] 标识:
- [webservers] 下面换行写属于该组的主机(每行一个)
- 同一台主机可同时属于多个组(无需重复写主机名,Ansible 自动识别)
- 组名不能含空格、特殊字符,推荐小写字母+下划线
为节点添加连接参数(常用场景)
如果目标主机不是默认 SSH 用户/端口,可在主机行后追加键值对:
web01 ansible_host=192.168.1.20 ansible_user=deploy ansible_port=2222 db01 ansible_host=192.168.1.30 ansible_user=admin ansible_ssh_private_key_file=~/.ssh/id_rsa_db
这些是 Ansible 内置的连接变量,常见有:
- ansible_host:实际连接的 IP 或域名(别名主机名可不同)
- ansible_user:SSH 登录用户名
- ansible_port:SSH 端口,默认 22
- ansible_ssh_private_key_file:私钥路径(避免每次输密码)
在组级别设置变量(提升复用性)
用 [group_name:vars] 语法为整个组统一赋值:
[webservers:vars] ansible_user=www ansible_become=true ansible_become_method=sudo [appservers] app01.example.com app02.example.com [appservers:vars] app_env=production app_version=2.4.1
这样组内所有主机自动继承这些变量,无需逐台写。若某台主机需覆盖该值,直接在主机行后重定义即可(如 app01 app_env=staging)。
嵌套组与子组(适合复杂环境)
用 [parent:children] 把已有组归入更大逻辑组:
[production] [staging] [webservers] web-prod-01 web-prod-02 [webservers:children] production [appservers] app-staging-01 [appservers:children] staging
此时运行 ansible production -m ping 会同时命中 web-prod-01 和 web-prod-02;而 ansible webservers 效果相同,但 production 更体现环境维度。
静态清单文件通常保存为 inventory.ini 或 hosts,使用时通过 -i 指定路径,例如:ansible -i inventory.ini webservers -m ping。注意避免缩进错误、等号前后加空格(key = value 不合法,必须是 key=value),也不支持注释嵌在键值对中间。











