客户点开 Pull Request,屏幕上只有一行字:Plan: 3 to add, 1 to change, 2 to destroy. 他回了句"看着不错"。或者他直接慌了,把整个变更全部拦下。两种反应都不对——因为那"2 to destroy"里,可能有一个是测试用的 bucket,也可能有一个是订单数据库。
这就是 Plan Explainer 想解决的问题。它是一个 GitHub Action,干的事很具体:把 Terraform 的执行计划,翻译给那个要签字的人看。
规则负责判断,模型只负责解释。这是整个项目的核心分工。项目用一段普通 Python 代码读取 terraform show -json 里的 resource_changes[],按动作类型分类:
- 动作是
["delete"]→ 判定为 destroy(销毁) - 动作集合是
{"delete", "create"}→ 判定为 replace(替换) - 动作是
["update"]且资源类型属于有状态资源 → 判定为 update-stateful(有状态更新) - 其余情况 → 不拦截
凡是涉及销毁和替换的变更,检查一律不通过,直到客户签字确认。只有到了这一步,模型才会被调用。而且模型拿到的只有资源地址、类型和动作,永远拿不到具体的值。
如果 Ollama 挂了,这个 Action 会退回去发一条纯模板评论。也就是说,这道签字闸门从来不依赖模型是否在线。
模型用的是 Gemma,一个开放权重的模型,通过 Ollama 跑在顾问自己的 CI runner 上。客户看到的评论长这样:
Sign-off required. This replaces aws_db_instance.orders, so the database is destroyed and rebuilt. Do you have a backup from today?
一句话说清三件事:要签字、哪个资源会被替换、以及客户必须先回答的问题——今天有没有备份。
谁愿意为这个付钱?自由职业的基础设施顾问和小型代理公司。他们的客户必须批准每一次变更,但看不懂 plan,于是顾问一个人扛下了那句盲目"同意"带来的全部风险。顾问买的是一份书面记录:在批准之前,客户确实被问过备份的事。它保护的是下一张发票和这段合作关系,也很容易作为"变更审批报告"这一项,加进长期服务合同里。
项目也支持 OpenTofu。
为什么这件事必须用开放创新来做?一份 Terraform plan 就是别人基础设施的地图。大多数客户不会让这份东西离开自己的 CI,这就直接排除了闭源 API 的选项。
具体有三点:
- 零泄露:Gemma 跑在顾问自己的 runner 上。即便如此,模型也只看到地址和动作,因为
terraform show -json有可能把敏感值以明文打印出来。 - 零边际成本:没有按 token 计费的账单,所以可以打包进长期服务合同。
- 不锁定:换模型只改一个环境变量,客户也能审计到底在跑什么。
没有托管 demo,因为它就跑在 Pull Request 的 CI 里。代码在 GitHub 上开源。
这个项目提交于 Hacktoberfest 开源 AI 挑战赛第二周:副业赛道,同时参评"最佳 Gemma 应用"——由 Ollama 本地部署的 Gemma 负责撰写面向客户的解释和审批问题。
回到那句"看着不错"。它本身不是问题,问题在于说这句话的人,手里没有任何能支撑这句话的信息。把 plan 翻译成人话,再把该问的问题摆到台面上,签字这件事才算真的发生过。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.