OpenTofu v1.12:tofu init 首次安装补齐全平台 h1 哈希,tofu providers lock 多数情况可以省掉
OpenTofu v1.12 系列的支持窗口到 2027-02-01,v1.11.x 支持到 2026-08-01。
- 发布说明与 changelog:https://opentofu.org/blog/
- 仓库:https://github.com/opentofu/opentofu
- 文档:https://opentofu.org/docs/
Provider 安装与依赖锁
OpenTofu Registry 现在返回完整校验和集合,tofu init 会把它们写入依赖锁文件 .terraform.lock.hcl,首次安装即为所有平台补齐 h1: 哈希。多数团队不再需要单独执行 tofu providers lock。
该命令只保留原本的用途:当 tofu init 被配置为使用替代安装源时,从源 registry 补齐正确校验和。升级到 v1.12 后第一次跑 tofu init,会看到 hashes 列表里新增若干 h1: 前缀条目,这些条目对应 provider 包内容的哈希,属于预期变化。
对流水线来说这一步省得直接:以前要额外跑一遍 lock 补齐并回提交锁文件,现在 tofu init 一次即可覆盖所有平台。
import 块新增 identity 参数
import 块现在支持 identity 参数,按资源类型的 resource identity schema 用结构化标识导入。此前复合主键的资源类型各自需要专用语法,现在统一收敛到 identity 上。
机器可读输出:-json-into=FILE
v1.12 新增 -json-into=FILE。它在保留 stdout/stderr 人类可读输出的同时,把机器可读输出写到指定文件。目标不限于普通文件,也可以是命名管道/FIFO,便于自动化在命令执行过程中一边运行一边消费流式事件,而不必等进程结束再解析整段输出。
新配置块类型 language
language 块为版本约束提供更通用的定义方式,把 OpenTofu 自身的约束与其它软件的约束区分开。模块作者在确实需要要求 OpenTofu v1.12.0+ 时再采用这个块。
enabled 元参数与一个 patch 级 breaking change
enabled 元参数从 v1.11 继承下来:resources 和 modules 除 count、for_each 之外,现在还可以使用 enabled。
需要留意的是,包含本地 provider 配置的模块现在也会拒绝 enabled 参数,行为与 count/for_each/depends_on 保持一致。这是 v1.12 的一个 patch 级 breaking change,已经踩到这个 foot-gun 的配置要尽快改。
破坏性变更与升级注意
- macOS 12 Monterey 是最后一个受支持的系列,1.13 预计要求 macOS 13 Ventura 及以上。
- Unix 上
tofu login会识别BROWSER环境变量来打开浏览器;如果已经设置了这个变量,行为会随之改变。 - OpenTofu 不再接受 TLS 握手中的 SHA-1 签名。
- azurerm 后端弃用
endpoint、msi_endpoint等参数。 issensitive对未知值现在返回未知结果,可能让依赖它的count/for_each在 plan 阶段失败。
v1.12 里最能让 CI 简化的一处,就是不再需要重跑 tofu providers lock。