Ansible 提供了许多内置变量(也称为 魔法变量 或 特殊变量),这些变量由 Ansible 自动设置,可用于 Playbook 和模板中。以下是常用的 Ansible 内置变量分类及说明:
1. 主机和组变量
这些变量用于获取当前主机或主机组的信息。
| 变量 | 说明 |
|---|---|
inventory_hostname |
当前主机的名称(在 inventory 中定义的名字)。 |
ansible_host |
当前主机的实际 IP 地址或域名(如果 inventory 中定义了 ansible_host)。 |
ansible_play_hosts |
当前 Play 中所有主机的列表。 |
groups |
所有主机组的字典,例如 groups['web_servers'] 返回 web_servers 组的所有主机。 |
group_names |
当前主机所属的所有组名列表。 |
示例:
- name: Print host info
debug:
msg: "Host: {{ inventory_hostname }}, IP: {{ ansible_host }}, Groups: {{ group_names }}"2. 连接和认证变量
这些变量用于控制 Ansible 如何连接目标主机。
| 变量 | 说明 |
|---|---|
ansible_user |
SSH 登录用户名(可在 inventory 或命令行中设置)。 |
ansible_ssh_private_key_file |
SSH 私钥文件路径。 |
ansible_connection |
连接方式(如 ssh, local, docker)。 |
ansible_port |
SSH 端口(默认 22)。 |
ansible_become |
是否使用 sudo(等同于 become: yes)。 |
ansible_become_user |
sudo 切换的用户(如 root)。 |
示例:
- name: Check whoami
command: whoami
become: yes
become_user: root3. 任务执行变量
这些变量用于获取当前任务的执行信息。
| 变量 | 说明 |
|---|---|
ansible_play_name |
当前 Play 的名称。 |
ansible_role_name |
当前 Role 的名称(如果在 Role 中运行)。 |
ansible_task_name |
当前任务的名称。 |
ansible_date_time |
当前日期和时间信息(如 ansible_date_time.iso8601)。 |
示例:
- name: Print play info
debug:
msg: "Play: {{ ansible_play_name }}, Task: {{ ansible_task_name }}"4. 系统信息变量
这些变量用于获取目标主机的系统信息。
| 变量 | 说明 |
|---|---|
ansible_os_family |
操作系统家族(如 RedHat, Debian, Windows)。 |
ansible_distribution |
发行版名称(如 CentOS, Ubuntu)。 |
ansible_distribution_version |
发行版版本(如 7.9, 20.04)。 |
ansible_architecture |
CPU 架构(如 x86_64, arm64)。 |
ansible_fqdn |
主机的完全限定域名(FQDN)。 |
ansible_memtotal_mb |
总内存(MB)。 |
ansible_processor_vcpus |
CPU 核心数。 |
示例:
- name: Print OS info
debug:
msg: "OS: {{ ansible_os_family }}, Version: {{ ansible_distribution_version }}"5. 注册变量(register)
虽然不是内置变量,但 register 是 Ansible 中非常重要的功能,用于捕获任务输出。
示例:
- name: Get disk usage
command: df -h
register: disk_usage
- name: Print disk usage
debug:
var: disk_usage.stdout_lines6. 其他常用变量
| 变量 | 说明 |
|---|---|
hostvars |
所有主机的变量字典,可用于跨主机访问变量(如 hostvars['web1']['ansible_host'])。 |
ansible_default_ipv4.address |
主机的默认 IPv4 地址。 |
ansible_all_ipv4_addresses |
主机的所有 IPv4 地址列表。 |
ansible_lvm |
LVM 卷组信息。 |
ansible_mounts |
已挂载的文件系统信息。 |
示例:
- name: Print IP info
debug:
msg: "Default IP: {{ ansible_default_ipv4.address }}, All IPs: {{ ansible_all_ipv4_addresses }}"总结
| 用途 | 常用变量 |
|---|---|
| 主机信息 | inventory_hostname, ansible_host, groups, group_names |
| 连接信息 | ansible_user, ansible_ssh_private_key_file, ansible_become |
| 系统信息 | ansible_os_family, ansible_distribution, ansible_architecture |
| 任务信息 | ansible_play_name, ansible_task_name |
| 网络信息 | ansible_default_ipv4.address, ansible_all_ipv4_addresses |
| 跨主机变量 | hostvars |
这些内置变量在 Playbook 编写、条件判断和模板渲染中非常有用,熟练掌握它们可以大幅提升 Ansible 的使用效率! 🚀
作者:严锋 创建时间:2025-10-24 08:24
最后编辑:严锋 更新时间:2025-11-04 14:01
最后编辑:严锋 更新时间:2025-11-04 14:01