terraform-docs 模块文档自动生成
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/generate-terraform-module-inputs-and-outputs-docs-with-terraform-docs-before-review-drift-sets-in。
技能介绍
文档漂移是怎么发生的
Terraform 模块的变量、输出和 providers 声明散落在 variables.tf、outputs.tf、main.tf 中,而模块文档通常写在 README 里,靠人手工维护。第一次迭代加了参数、改了输出名之后,两者就开始分叉:
- 使用者按过时文档传参,踩到
Unsupported argument或拼错参数名。 - 审查者拿到的
terraform plan与文档描述不一致,难以判断变更范围。 - 上游
provider升级后,文档里声明的依赖已经过期。
这类问题不会在 terraform validate 里暴露——校验只看语法,不看文档。
技能如何工作
terraform-docs 把模块目录当作唯一事实来源,解析 Terraform 配置,生成 Markdown 或 JSON 形式的变量、输出、providers、resources 列表。
核心能力:
- 从源码生成:
variables的 description、类型、默认值,以及outputs的sensitive标记,全部取自代码而非手写。 - 模板与排序:支持自定义 README 模板和
--sort-by,让生成段落固定插入到文档的指定位置。 - CI 中校验漂移:用
--check在文档与代码不一致时让流水线失败,把漂移挡在合并之前。
关键步骤:
- 在模块根目录执行生成命令,产出文档片段。
- 通过模板或
--output-file把片段写回README.md。 - 在 PR 流程中加一步校验,确保新增参数必须同步更新文档。
适用边界与注意点
- 只覆盖文档层面:它不会补全设计意图,比如某个
variable为什么允许0-100,这类说明仍要人写。 - 依赖 Terraform 配置能被正常解析;
terraform init未完成或 provider 未拉取时,部分推断可能不准确。 sensitive输出不会泄露真实值,但也不要把敏感变量的具体取值贴进文档。- 多模块仓库需要为每个模块单独运行,脚本化时注意路径遍历。
使用场景
- 修改模块的变量默认值后,提交前刷新 README 里的变量说明,确保参数名、类型、默认值与代码一致。
- PR 审查时打开模块文档,核对新增的 output 是否已在文档列表中,避免合并后使用者按旧文档取值。
- 升级 providers 依赖后,运行文档生成核对 provider 版本约束是否同步写入模块说明。
- 在 CI 流水线中加入 `--check` 步骤,文档与代码不一致时直接失败,把漂移挡在合并前。
适合人员
- 编写和维护 Terraform 模块的 IaC 工程师,需要在改完代码后同步刷新模块文档中的 variables、outputs 与 providers 说明。
- 负责模块审查的平台工程师,想在合并前用生成结果比对文档与 `terraform plan` 是否指向同一套接口。
- 维护内部 Terraform registry 的 DevOps 工程师,需要保证已发布模块的文档始终与源码保持一致。
- 在 CI 中落地代码规范的 SRE,希望用自动校验替代人工检查文档与代码的一致性。