Ansible清单中定义主机变量可为特定主机设置专属配置,支持INI和YAML格式:INI中直接在主机后写键值对或用[组名:vars]定义组变量;YAML中通过hosts和vars块分层管理,主机变量优先级高于组变量。

在 Ansible 清单(Inventory)中定义主机变量,是为了给特定主机赋予专属配置,比如 IP、端口、用户、密码或自定义参数。这种方式灵活、清晰,且能被 playbook 直接引用。
直接在 hosts 文件中定义主机变量
在静态清单文件(如 `hosts` 或 `inventory.ini`)中,每台主机后可跟键值对形式的变量:```ini web01 ansible_host=192.168.1.10 ansible_port=2222 ansible_user=deploy db01 ansible_host=192.168.1.20 ansible_port=22 ansible_user=admin ansible_become=true ```
这些变量会自动绑定到对应主机,playbook 中可通过 {{ ansible_host }}、{{ ansible_user }} 等方式调用。在主机组下用方括号定义变量块
适用于为组内所有主机统一设置默认值,同时允许单台覆盖:```ini [webservers] web01 web02
[webservers:vars] ansible_user=www ansible_become=true ansible_become_user=root
注意:<strong>:vars</strong> 必须紧接在组名后,且该组下所有主机都会继承这些变量,除非某台主机在上方已单独定义同名变量(此时主机变量优先级更高)。
<h3>使用 YAML 格式清单定义变量(推荐用于复杂场景)</h3>
YAML 清单更易读、支持嵌套和注释,适合中大型项目:
<p>```yaml
all:
children:
webservers:
hosts:
web01:
ansible_host: 192.168.1.10
http_port: 8080
max_connections: 100
web02:
ansible_host: 192.168.1.11
http_port: 8000
vars:
ansible_user: deploy
ansible_become: true
```</p>
其中 <strong>hosts</strong> 下的每个主机可带独立变量,<strong>vars</strong> 块则作用于整个子组。
<h3>变量命名与使用注意事项</h3>
<ul>
<li>变量名只能含字母、数字、下划线,且必须以字母或下划线开头</li>
<li>避免与 Ansible 内置事实(如 <strong>ansible_fqdn</strong>、<strong>ansible_distribution</strong>)重名</li>
<li>变量值若含空格或特殊字符,建议用引号包裹(YAML 中尤其重要)</li>
<li>主机变量优先级高于组变量,但低于 playbook 中 <strong>vars:</strong> 或命令行 <strong>-e</strong> 指定的变量</li>
</ul>


















