首页/系统与基础设施/自动化运维速查/自动化能力的复用与抽象层级
自动化基础与选型50 条

自动化能力的复用与抽象层级

自动化的复用靠分层抽象:把与具体环境无关的做法沉到下层公共角色或模块,把环境差异上提到变量与清单,把一次性的编排留在剧本层。抽象层级放错的典型信号是「复制文件后改几行」频繁出现,说明该被参数化的部分被写死在了做法里。

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

复用的层级

可复用的自动化通常分三层:最下层是原子能力,比如装包、渲染配置、管理服务,只做一件事且参数清晰;中间层是组件角色,把多个原子能力组合成「部署并配置某组件」的完整做法;最上层是编排剧本,决定在哪些主机上按什么顺序调用哪些角色。复用不等于把所有东西塞进一个大角色,而是让每层只承担一种变化:环境差异在变量层变化,做法本身保持稳定。

基本信息

原子层单一动作,参数少而明确
组件层组合动作,表达一套完整做法
编排层决定范围、顺序与批次
变化归属环境差异进变量,做法进角色,流程进剧本

判断抽象层级是否合适

  • 新增一个环境时,需要改的是变量文件还是角色本体:改角色说明抽象漏了。
  • 同类角色是否出现大量雷同文件:雷同说明该提取公共部分。
  • 角色是否能独立测试:依赖某个具体环境才能跑的角色难以复用。
  • 变量名是否表达含义而非位置:以主机名或 IP 命名的变量会阻碍复用。
  • 是否有人能读懂:抽象过度的角色会把简单变更藏进五层调用里。

抽象层级与变化点

层级负责的变化不该承担
原子能力工具与命令的差异环境具体的地址与口令
组件角色组件的标准做法与默认值某个环境的特例配置
编排剧本执行范围、顺序、批次组件内部实现细节
变量层环境差异与版本选择流程控制逻辑
公共库跨团队共享的常用能力尚未稳定的试验性做法
抽象层级要与团队协作方式匹配:只有两个人用的角色可以做得很薄,跨团队共享的公共库才需要严谨的参数契约与版本发布节奏。过早追求通用会拖慢所有变更。
公共资产要有版本与变更说明:使用者依赖的是某个版本的行为,直接修改共享角色会让所有引用方同时受影响。

易错点

  • 复制改造成常态:同一角色在多个环境各存一份,修一个漏洞要改十几处,总有漏改的一处
  • 抽象过度:把简单变更包进多层调用与条件判断,排查时需要在五个文件之间来回跳转
  • 变量名带环境痕迹:变量以具体主机名命名,换一个环境就要重命名全部变量
  • 公共库无版本无说明:共享资产被直接修改,引用方在不知情的情况下行为发生变化

数据来源与参考

  • Red Hat《Ansible 官方文档:Roles 与变量优先级》
  • Red Hat《Ansible 官方文档:最佳实践》
  • 《重构》中关于消除重复与提炼函数的通用原则

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/automation/automation-reuse-abstraction-layers.html

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