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 连接、支持变量复用、适配动态环境;
相关推荐
EMTime42 分钟前
Docker运行OpenWRT
运维·docker·容器
lolo大魔王1 小时前
Linux 文件系统超全面详解(原理、结构、挂载、分区、inode、日志、管理命令)
linux·运维·服务器
zyl837214 小时前
Docker 使用手册
运维·docker·容器
古月方枘Fry4 小时前
MGRE实验
运维·服务器
stolentime5 小时前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络
bush46 小时前
嵌入式linux学习记录四
linux·运维·学习
lihao lihao7 小时前
软硬链接
linux·运维·服务器
TOWE technology7 小时前
智能安防监控系统如何做好防雷?——视频信号SPD综合应用方案解析
运维·服务器·防雷产品·信号保护·信号防雷·spd
楼田莉子7 小时前
Docker学习:Docker介绍及其架构介绍
运维·后端·学习·docker·容器·架构
大明者省8 小时前
IIS 端口绑定正常访问的原理说明与常见误区澄清
运维·服务器·笔记