在日常 Ansible 自动化运维工作中,事实采集是实现灵活部署、差异化运维的核心手段。Ansible 能够自动抓取远端服务器各类系统底层信息,无需人工手动录入,直接以变量形式调用,依托这些数据编写脚本,能够适配不同系统、不同配置的服务器,大幅提升自动化脚本的通用性与实用性。

目录

一、Ansible 事实基础实操

1. 查看全量主机事实信息

2. 常用系统事实调用

3. 启停事实采集优化执行效率

二、自定义本地事实配置

三、魔法变量实战应用

1. hostvars 跨主机调取数据

2. group_names 识别主机所属分组

知识问

Q1:简述 Ansible 事实的核心作用

Q2:标准调取主机默认内网 IP 的写法是什么

Q3:自定义业务事实文件存放路径与格式要求是什么


一、Ansible 事实基础实操

1. 查看全量主机事实信息

运维调试阶段,想要直观查看服务器可采集的所有系统数据,可直接编写简易剧本输出全部事实内容,涵盖网络、系统、硬件等完整信息。

---
- name: 批量查看远端主机全部事实信息
  hosts: all
  tasks:
    - name: 打印系统采集所有事实
      ansible.builtin.debug:
        var: ansible_facts

运行剧本后,终端会清晰展示主机主机名、系统内核、网卡地址、磁盘分区、硬件参数等数据,所有采集内容均可直接调用。

2. 常用系统事实调用

实际运维部署中,只需调取核心系统参数即可完成业务配置,常用信息调用写法简洁规范,适配各类部署场景。

---
- name: 调用核心系统事实完成信息输出
  hosts: all
  tasks:
    - name: 展示主机基础运维信息
      ansible.builtin.debug:
        msg:
          主机名称:{{ ansible_facts.hostname }}
          操作系统版本:{{ ansible_facts.distribution }}
          业务内网IP:{{ ansible_facts.default_ipv4.address }}
          系统内核版本:{{ ansible_facts.kernel }}

3. 启停事实采集优化执行效率

默认执行剧本时,Ansible 会自动执行事实采集流程,该流程会消耗少量执行时间。若脚本无需依赖系统信息,可直接关闭采集功能,缩减整体运行时长。

---
- name: 关闭自动事实采集精简执行流程
  hosts: all
  gather_facts: no
  tasks:
    - name: 执行无依赖简易运维任务
      ansible.builtin.debug:
        msg: 无需采集系统信息,快速执行任务

若前期关闭采集,后续流程中需要使用系统事实,可通过内置模块手动发起采集:

tasks:
  - name: 手动触发远端主机事实采集
    ansible.builtin.setup:

二、自定义本地事实配置

除了系统自带的原生事实,运维人员可根据业务需求,自定义业务专属配置参数,适配不同项目、不同环境的部署需求。自定义事实文件统一存放至远端主机 /etc/ansible/facts.d/ 目录,文件后缀固定为 .fact,支持多种配置格式。

自定义事实配置文件内容示例:

[packages]
web_package = httpd
db_package = mariadb-server

[users]
admin_user = admin

配置完成后,编写剧本调用自定义业务参数,实现业务配置统一管理:

---
- name: 调用自定义业务事实参数
  hosts: all
  tasks:
    - name: 读取自定义部署配置
      ansible.builtin.debug:
        msg: "网页服务部署软件包:{{ ansible_facts.ansible_local.packages.web_package }}"

三、魔法变量实战应用

Ansible 内置多款无需手动定义的魔法变量,多用于多主机集群运维,轻松实现集群内主机信息互通,简化集群联动部署流程。

1. hostvars 跨主机调取数据

在集群架构中,可借助该变量,在一台服务器上直接获取集群内其他主机的 IP、配置等信息,常用于服务集群互联配置。

- name: 跨主机调取集群服务器内网地址
  ansible.builtin.debug:
    var: hostvars['db_server'].ansible_facts.default_ipv4.address

2. group_names 识别主机所属分组

快速判定当前运行剧本的主机归属主机组,以此为依据执行差异化运维任务。

- name: 查看当前主机所属主机分组
  ansible.builtin.debug:
    var: group_names

知识问

Q1:简述 Ansible 事实的核心作用

A:Ansible 事实是工具自动从远端服务器抓取的全套系统数据,包含系统版本、网络地址、硬件参数等内容,可直接作为变量使用,依托事实数据编写自动化脚本,能够适配不同服务器环境,实现差异化、智能化批量运维。

Q2:标准调取主机默认内网 IP 的写法是什么

A:行业通用规范写法为 {{ ansible_facts.default_ipv4.address }},兼容性更强,可规避旧版本变量写法出现的冲突问题。

Q3:自定义业务事实文件存放路径与格式要求是什么

A:文件必须放置在受管主机 /etc/ansible/facts.d/ 目录下,文件后缀统一使用 .fact,支持 INI、JSON 两种主流配置格式,采集后统一归集至ansible_local层级调用。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构