首页/系统与基础设施/自动化运维速查/Ansible 清单的静态与动态来源
Ansible 核心70 条

Ansible 清单的静态与动态来源

Ansible 清单决定一次执行作用在哪些主机:静态清单是写在 INI 或 YAML 文件里的固定主机列表,动态清单通过脚本或插件在执行时向云平台、虚拟化平台或资产系统查询主机。两者可以同时使用,常见做法是静态文件描述固定设备与环境分组,动态来源负责弹性主机,执行前用清单查询命令确认实际选中范围。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​​​​‌​‌‌​‌‌‌​​‌‌‌​​‌‌​‌‌​‌​​‌​‌‌​​​‌​​‌‌​‌‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌‌​‌‌​​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌‌‌​​‌​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​​​‌‌​​‌​‌‌​‌​‌‌​​‌​​​‌‌‌‌​​‌​‌‌​‌‌‌​​‌‌​​​​‌​‌‌​‌‌​‌​‌‌​‌​​‌​‌‌​​​‌‌​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌​‌‌‌‌​‌‌‌​‌​‌​‌‌‌​​‌​​‌‌​​​‌‌​‌‌​​‌​‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

清单的两种来源

静态清单是一个文本文件,按组列出主机名或地址,适合变动少、结构清晰的环境,例如网络设备、固定服务器与本地测试机。动态清单则是在执行时获取主机信息:早期方式是编写可执行脚本,按约定返回 JSON;现在更常用清单插件,在配置文件中声明插件与查询条件,由 Ansible 自行调用云平台或虚拟化平台接口。两者都能同时指定,执行范围是它们的并集。

基本信息

静态清单INI 或 YAML 文件,内容固定
动态清单脚本可执行程序,按约定输出 JSON
清单插件按配置文件查询平台接口获取主机
指定方式执行时用参数指定清单文件或目录

选择依据

  • 固定设备与网络设备:内容稳定,静态清单最直观、可评审。
  • 弹性云主机:实例随扩缩容变化,用插件或脚本动态获取更可靠。
  • 混合场景:静态文件保存分组与环境信息,动态来源补充弹性主机。
  • 合规要求:需要人工评审目标范围时,静态清单或把动态结果导出评审更易留痕。
  • 多环境隔离:按环境拆分清单文件或目录,避免一次误选跨环境执行。
  • 变更频繁的资产系统:用插件直接对接,比手工维护文件更省力。

两种清单写法

两种清单写法
; 静态 INI 清单:组名加成员
[web]
web01.example.com
web02.example.com

[db]
db01.example.com

[prod:children]        ; 组嵌套:把上面的组归入环境组
web
db

动态清单插件配置

动态清单插件配置
# inventory/cloud.yml:声明插件与查询条件
plugin: aws_ec2                  # 使用云平台清单插件
regions:
  - cn-north-1
filters:
  tag:Environment: prod          # 只取生产标签的实例
keyed_groups:
  - key: tags.Role               # 按角色标签自动分组
    prefix: role
# 需在 ansible.cfg 的 [inventory] 段启用对应插件

两种来源对比

对比项静态清单动态清单
内容来源文件内容平台接口或资产系统
维护方式人工编辑并评审自动查询
弹性支持需手工同步随实例变化自动更新
可评审性高,能直接查看需导出结果查看
依赖无额外依赖依赖接口可用与凭据
失败表现内容过时导致目标缺失接口异常导致清单为空
动态清单接口异常时返回空列表,任务可能静默地「什么也没做」并报告成功。执行前应先查看实际选中的主机数量,数量为零时按失败处理。
执行前用清单查询命令确认范围:以树形结构查看分组与主机的层级关系,比直接看配置文件更容易发现意外纳入或遗漏的主机。

易错点

  • 动态来源返回空清单却继续执行:任务报告成功但未命中任何主机,覆盖结果被误判为已完成
  • 静态清单长期手工维护:新机器未加入、下线机器仍保留,任务失败或作用于错误目标
  • 把与环境相关的凭据写进清单文件:清单入库后凭据随之扩散
  • 多套清单并存且优先级不明:执行时选的清单与预期不同,作用范围出错且难以解释

数据来源与参考

  • Ansible 官方文档:Inventory 与动态清单脚本说明
  • Ansible 官方文档:清单插件(inventory plugins)配置
  • Ansible 官方文档:ansible-inventory 命令行工具

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/automation/ansible-inventory-static-dynamic-sources.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​​​​‌​‌‌​‌‌‌​​‌‌‌​​‌‌​‌‌​‌​​‌​‌‌​​​‌​​‌‌​‌‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌‌​‌‌​​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌‌‌​​‌​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​​​‌‌​​‌​‌‌​‌​‌‌​​‌​​​‌‌‌‌​​‌​‌‌​‌‌‌​​‌‌​​​​‌​‌‌​‌‌​‌​‌‌​‌​​‌​‌‌​​​‌‌​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌​‌‌‌‌​‌‌‌​‌​‌​‌‌‌​​‌​​‌‌​​​‌‌​‌‌​​‌​‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​