Ansible主机组嵌套通过[组名:children]语法实现分层管理,支持多级嵌套与交叉引用,但不传递变量,子组须先定义,组名需符合命名规范。

Ansible 主机组嵌套就是让一个组包含其他组,而不是直接写主机,这样能按业务、环境或角色分层管理,比如把所有生产环境的 Web 和 DB 服务器统一归到 production 组里,又各自保留独立配置。
主机组嵌套的基本写法
语法很简单:用 [组名:children] 表示这是一个父组,下面列出它包含的子组名,每行一个。
-
[webservers]
web1.example.com
web2.example.com -
[dbservers]
db1.example.com
db2.example.com -
[production:children]
webservers
dbservers
这样定义后,ansible production -m ping 就会同时对 web 和 db 两组的所有主机执行操作。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
嵌套支持多级和交叉引用
一个子组可以被多个父组引用,没有限制;父组也能作为子组再被更上层的组包含。
-
[dev:children]
webservers -
[staging:children]
webservers
dbservers -
[all_envs:children]
dev
staging
production
运行 ansible all_envs --list 就能看到三层嵌套展开后的全部主机列表。
注意事项和常见问题
嵌套本身不传递变量,子组里的主机不会自动继承父组定义的变量。如果需要统一参数(比如都走特定端口或用户),得在子组里单独设,或用 group_vars/ 目录管理。
- 子组必须先定义,再被引用;否则 Ansible 启动时会报错“undefined group”
- 组名中不能含空格或特殊字符,只推荐用小写字母、数字、下划线和短横线
- 可以用
ansible-inventory --graph查看当前清单的嵌套结构,直观确认层级是否符合预期

















