首页/系统与基础设施/自动化运维速查/剧本角色与清单的概念边界
自动化基础与选型50 条

剧本角色与清单的概念边界

清单(inventory)回答「对哪些主机操作」,剧本(playbook)回答「按什么顺序做什么」,角色(role)回答「可复用的标准做法是什么」;三者边界清晰时才不会出现主机清单里塞逻辑、剧本里写死主机名、角色里绑定环境具体值这类难维护的结构。

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

三个概念各管一段

清单是主机与主机组的集合,决定一次执行的作用范围;剧本是一次执行编排,描述在哪些主机上进行若干步骤,步骤之间可以有顺序、条件与失败处理;角色是把一组任务、模板、变量与处理器打包成的可复用单元,用来表达「安装并配置某组件」这类标准做法。三者是范围、流程与做法的关系,混在一起就会出现难以复用的资产。

基本信息

清单主机、主机组及组变量的来源
剧本一次执行的编排单位,含目标主机与任务序列
角色可复用的任务、模板、变量与处理器打包
组合关系剧本引用角色,角色作用在清单选中的主机上

边界划分建议

  • 清单只描述主机与环境归属,不放业务逻辑与安装步骤。
  • 剧本只做编排:选主机、调角色、安排顺序与条件,尽量不下沉细节命令。
  • 角色只做通用做法:可参数化但不应写死某个环境的地址与账号。
  • 环境差异放进组变量与角色默认变量,靠变量覆盖而不是复制剧本。
  • 一次性操作单独成剧本并注明适用范围,不要混进长期维护的角色。

三者如何组合

三者如何组合
# 清单:范围(inventory/hosts.ini)
# [web]
# web01.example.com
# [db]
# db01.example.com

# 剧本:流程(site.yml)
- hosts: web          # 选主机组,来自清单
  roles:
    - nginx           # 用角色,不在这里写安装细节

- hosts: db           # 第二段流程,独立作用范围
  roles:
    - mysql

概念对照与常见误用

概念回答的问题常见误用
清单对哪些主机操作把安装步骤写进组变量
剧本按什么顺序做什么剧本里直接写死 IP 与口令
角色标准做法是什么角色里绑定某个环境的具体值
变量差异从哪里来同一条值在多处重复定义
处理器变更后触发什么把关键动作只放在处理器里,干跑时看不到
判断拆得对不对,可以用一个简单检验:换一台新主机、换一个环境,需要改动的文件是不是只有清单与变量文件。如果需要改剧本或角色,说明抽象层级放错了位置。

易错点

  • 剧本里写死主机名与地址:环境一换就要复制整份剧本,长期出现多份几乎相同的文件各自演化
  • 角色里绑定环境具体值:看似可复用,实际每用一次就要改角色本身,导致角色没人敢升级
  • 清单承担编排职责:把任务步骤塞进清单变量,执行顺序变得隐式,新人无法从剧本读懂流程
  • 关键动作只写在处理器里:干跑阶段看不到、条件触发,排查时难以判断到底执行了什么

数据来源与参考

  • Red Hat《Ansible 官方文档:Inventory、Playbook 与 Roles》
  • Red Hat《Ansible 官方文档:目录结构与最佳实践》
  • Red Hat《Ansible Automation Platform 实践指南》

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/automation/playbook-role-inventory-concepts.html

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