资讯 OpenTofu v1.12:tofu init 首次安装补齐全平台 h1 哈希,tofu providers lock 多数情况可以省掉

2026-10-05 21:02:41

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。

复制全文 生成海报 OpenTofu Terraform 运维

推荐文章

程序员茄子在线接单