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 连接、支持变量复用、适配动态环境;
相关推荐
AOwhisky14 小时前
Linux(CentOS)系统管理入门笔记(第二十一期)——防火墙管理(Firewalld)——zone、服务端口、富规则与端口转发
linux·运维·笔记·安全·centos·防火墙
腾飞开源14 小时前
01_K8s干货笔记之认识K8s
运维·笔记·云原生·容器·kubernetes·k8s·容器化部署
杜子不疼.14 小时前
Ansible定时清空日志实战:Playbook、Cron与远程主机接入
ansible
布鲁飞丝21 小时前
vivo Pulsar 万亿级消息处理实践()-Ansible运维部署
运维·ansible
XR12345678821 小时前
企业全光网络架构选型技术白皮书:从物理层到运维层的全链路分析
运维·网络·架构
HiDev_1 天前
【非标自动化】2、认识元器件(直线模组)
运维·自动化
龙仔7251 天前
人大金仓 KingbaseES V8 只读账号创建完整运维笔记
运维·笔记·sql·人大金仓
我不管我就要叫小猪1 天前
嵌入式Linux----网络通信
linux·运维·服务器
江湖有缘1 天前
Docker实战 :使用Docker部署OneTerm堡垒机
运维·docker·容器
姜太小白1 天前
【Linux】df -h 卡住问题的通用排查与解决方案总结
linux·运维·php