Ansible主机清单:自动化管理的核心基石

Ansible 主机清单(Inventory)是 Ansible 识别目标主机 / 设备的 "地址簿",本质是一个配置文件(文本 / INI/YAML 格式),用于集中定义需要管理的所有节点(服务器、网络设备、虚拟机等),并支持分组、变量配置,是 Ansible 执行批量操作的基础。

一、核心定义

  • 本质 :存储目标节点信息的配置文件(默认路径 /etc/ansible/hosts,也可自定义路径);
  • 核心内容:目标节点的 IP 地址 / 主机名、SSH 连接参数(端口、用户名、密钥)、分组、变量(环境、角色、自定义参数等);
  • 核心定位:Ansible 与目标节点的 "桥梁"------Ansible 所有批量操作(如执行命令、部署应用、配置管理)都必须通过清单识别目标对象。

二、核心作用(5 点关键)

1. 集中管理目标节点,避免重复指定

无需在每次执行 Ansible 命令时手动罗列目标主机(如 ansible 192.168.1.10 192.168.1.11 -m ping),只需在清单中定义所有节点,后续通过 "分组名" 或 "all"(所有节点)批量操作。

示例:清单中定义 3 台 Web 服务器,执行命令时直接用分组名 webservers

bash

复制代码
ansible webservers -m yum -a "name=nginx state=installed"  # 批量安装 Nginx

2. 支持节点分组,实现差异化批量操作

按业务场景(如 Web 服务、数据库、测试环境、生产环境)对节点分组,可针对不同分组执行不同操作,适配复杂环境的管理需求。

示例清单(INI 格式):

复制代码
# 按业务角色分组
[webservers]
192.168.1.10  # Web 服务器1
192.168.1.11  # Web 服务器2

[databases]
192.168.1.20  # 数据库主节点
192.168.1.21  # 数据库从节点

# 按环境分组(嵌套分组,用 :children 声明)
[dev:children]
webservers
databases

[prod]
192.168.2.10
192.168.2.20
  • 操作开发环境所有节点:ansible dev -m ping
  • 仅操作数据库节点:ansible databases -m systemd -a "name=mysql state=started"

3. 配置连接参数,简化 SSH 登录

在清单中直接定义目标节点的 SSH 连接信息(无需手动配置 ~/.ssh/config),避免每次连接时输入端口、用户名、密钥路径等。

示例:指定 SSH 端口、用户名、密钥:

复制代码
[webservers]
192.168.1.10 ansible_ssh_port=2222 ansible_ssh_user=admin ansible_ssh_private_key_file=/root/.ssh/admin.key
192.168.1.11 ansible_ssh_user=root  # 默认端口22,使用密码登录(执行时需输入密码)
  • 核心连接变量:ansible_ssh_port(SSH 端口)、ansible_ssh_user(登录用户)、ansible_ssh_private_key_file(密钥路径)、ansible_ssh_pass(密码,不推荐明文,建议用 ansible-vault 加密)。

4. 定义自定义变量,实现差异化配置

在清单中为节点 / 分组定义变量(如应用版本、资源规格、环境标识),后续在 Playbook 中直接引用变量,无需硬编码,适配多环境复用。

示例:为分组定义变量:

复制代码
[webservers]
192.168.1.10
192.168.1.11

# 为 webservers 分组定义变量(所有节点共享)
[webservers:vars]
nginx_version=1.24  # Nginx 安装版本
app_env=dev         # 环境标识
max_workers=4       # Nginx 工作进程数

[databases:vars]
mysql_version=8.0
data_dir=/data/mysql

在 Playbook 中引用变量:

复制代码
- name: 安装 Nginx
  hosts: webservers
  tasks:
    - name: 安装指定版本 Nginx
      yum:
        name: nginx-{{ nginx_version }}  # 引用清单中的变量
        state: installed

5. 支持动态清单,适配动态环境

对于云服务器(AWS、阿里云)、容器集群(K8s)等 "节点 IP 不固定" 的动态环境,可通过 动态清单脚本(Python/Shell 编写)实时从云厂商 API 或 K8s 集群获取节点信息,无需手动维护静态清单。

示例:动态清单脚本逻辑:

  1. 调用阿里云 API 获取 ECS 实例列表;
  2. 按实例标签(如 tag:env=prod)分组;
  3. 输出 Ansible 可识别的 JSON 格式节点信息;
  4. 执行命令时指定动态清单脚本:ansible all -i dynamic_inventory.py -m ping

三、清单格式(2 种常用)

1. INI 格式(默认,简洁易读)

适合小型环境,结构如上述示例,核心规则:

  • 分组名用 [分组名] 包裹;
  • 节点行可直接跟变量(键值对);
  • 分组变量用 [分组名:vars] 包裹;
  • 嵌套分组用 [父分组名:children] 包裹。

2. YAML 格式(推荐,支持复杂结构)

适合大型环境,支持更灵活的分组、变量嵌套,需在清单文件头部声明 ---

四、核心总结

  • 主机清单是什么:Ansible 管理目标节点的 "地址簿",存储节点地址、连接参数、分组、变量;
  • 核心作用:集中管理节点、分组批量操作、简化 SSH 连接、支持变量复用、适配动态环境;
相关推荐
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉4 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦4 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
java_cj4 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes
lsyeei4 天前
linux 系统目录详解
linux·运维·服务器