预演验证的是意图不是结果
预演模式(dry-run、检查模式、执行计划)在执行前生成一份「将要做什么」的清单,不真正改动目标。它能拦掉大量低级错误:语法写错、变量未定义、模板渲染失败、目标范围选错。但它验证的是意图,不是结果——权限是否足够、依赖服务是否就绪、外部接口是否可用、并发与超时是否可承受,这些都只有真实执行时才暴露。把预演当作安全阀可以,当作执行保证不行。
基本信息
| 能验证 | 语法、变量、模板渲染、目标范围、变更清单 |
|---|---|
| 不能验证 | 真实权限、依赖状态、资源冲突、超时与并发、外部响应 |
| 适用时机 | 首次执行、高风险变更前、跨团队评审 |
| 不适用 | 有前置依赖链的动作、仅执行时才能判定的步骤 |
| 配合方式 | 预演加小范围试点,两者互补而非替代 |
典型使用场景
- 首次运行剧本:先看变更清单,确认没有意外的删除或重启动作
- 大批量变更前评审:把预演结果作为评审材料,讨论影响范围
- 配置模板改动:确认渲染结果符合预期,字段与格式未错位
- 目标范围确认:核对本次真的只影响计划内的主机与资源
- 变更窗口准备:提前拿到变更项清单,缩短窗口内实际执行时间
场景与预演是否足够
| 场景 | 预演是否足够 | 原因 |
|---|---|---|
| 验证语法与变量 | 足够 | 静态解析即可发现问题 |
| 确认目标范围 | 足够 | 目标选择逻辑可提前查看 |
| 验证权限是否足够 | 不足 | 权限错误往往在执行时才暴露 |
| 验证依赖顺序 | 不足 | 依赖真实运行状态,模拟无法覆盖 |
| 验证外部接口 | 不足 | 需真实调用才能确认响应与限流 |
| 验证回滚方案 | 不足 | 未真实执行过的回滚不能算可信 |
预演与小批试点的组合
预演与小批试点的组合
# 1. 预演:先看将要发生什么,确认无破坏性动作
ansible-playbook site.yml --check --diff # --diff 显示将发生的文件级差异
# 2. 小批试点:在少量真实目标上执行,暴露权限与依赖问题
ansible-playbook site.yml --limit 'web_group[0:1]'
# 3. 试点后校验结果,再决定是否放开全量
ansible-playbook verify.yml --limit 'web_group[0:1]'
# 注意:涉及依赖顺序的动作在预演中可能被跳过,跳过不等于通过预演结果要人工读一遍,重点看有没有意外的高风险动作(删除、重建、重启、权限变更)。自动通过不等于安全通过。
预演成功但执行失败是常见结果,尤其在权限与依赖相关环节。变更是否完成只能以真实执行的校验结果为准,不能用预演结果替代。