在 ansible inventory 文件中定义组变量最直接,用 [组名:vars] 语法,变量仅对本组主机生效,支持任意 yaml 值,但优先级较低,易被 group_vars/、playbook vars 或命令行 -e 覆盖。

在 Ansible 的 inventory(主机清单)文件中定义组变量,是最直接的方式之一,适用于简单项目或快速验证场景。它不依赖额外目录结构,所有配置集中在一份文件里,但要注意优先级和可维护性。
在 inventory 文件中用 [组名:vars] 语法定义
这是最常用、最清晰的写法。在清单文件中,先声明主机组(如 [webservers]),再在同一文件中另起一个区块,用 [组名:vars] 格式定义该组共用的变量:
- 变量只对当前组内所有主机生效
- 支持任意合法 YAML 值:字符串、数字、布尔值、列表、字典
- 语法必须严格:冒号后带空格,不能有缩进错误
示例:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
[webservers] web1.example.com web2.example.com [webservers:vars] http_port = 8080 app_user = www-data enable_cache = true packages = ["nginx", "curl"]
在组声明行后直接追加变量(内联方式)
适合单个简单变量,写法紧凑但可读性略低,不推荐用于多变量或复杂值:
- 仅支持标量(字符串/数字/布尔),不支持列表或字典
- 变量作用域仍是整个组
示例:
[dbservers:vars] db_name = "prod_db" db_port = 5432 [appservers] app1.example.com app_env=staging max_connections=100
注意:app_env 和 max_connections 是分配给 app1.example.com 的主机变量,不是组变量;组变量必须用 [组名:vars] 显式声明。
变量命名与注意事项
组变量名需遵守 Ansible 命名规则:
- 必须以字母开头
- 只能含字母、数字、下划线(
_),不能含短横线、点号、空格或特殊符号 - 避免使用 Ansible 内置关键字(如
host、group_names、inventory_hostname)
错误示例:web-server、db.version、1st_group;正确写法:web_server、db_version、group_1。
与其它变量方式的优先级关系
清单中定义的组变量优先级较低,会被以下位置同名变量覆盖:
-
group_vars/组名.yml或group_vars/组名/目录下的变量文件 - Playbook 中
vars:或vars_files:定义的变量 - 命令行
-e "key=value"指定的额外变量(最高优先级)
因此,清单内定义组变量适合固定基础配置(如默认端口、基础用户),而环境差异大、结构复杂的项目建议改用 group_vars/ 目录方式。










