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: root

3. 任务执行变量

这些变量用于获取当前任务的执行信息。

变量 说明
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_lines

6. 其他常用变量

变量 说明
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