OpenTofu 1.11.0 发布:ephemeral 值与 enabled 元参数,机密不再落 state
OpenTofu 1.11.0 于 2025-12-09 发布。发布页:opentofu/opentofu v1.11.0,完整改动见 CHANGELOG。v1.11.x 系列支持到 2026-08-01。
Ephemeral Values 与 Write-Only Attributes
ephemeral 资源用于处理机密数据、临时凭证、瞬态基础设施,保证这些值不会被持久化到 state 快照或 plan 文件。可以声明输入变量和输出值为 ephemeral,并使用已支持 ephemeral 资源类型(如取密钥)或带 write-only 属性的托管资源类型(如设置密码但不写入 state)的 provider 插件。
ephemeral "aws_secretsmanager_random_password" "password" {}
resource "kubernetes_secret_v1" "credentials" {
metadata { name = "admin" namespace = "my-app" }
data_wo = {
username = "admin"
password = ephemeral.aws_secretsmanager_random_password.password.random_password
}
data_wo_revision = 1
type = "kubernetes.io/basic-auth"
}
enabled 元参数
资源或模块实例数量为 0 或 1 时,不必再写 count = var.create ? 1 : 0。初版形式嵌在 lifecycle 块内,避免与已有名为 enabled 的输入变量或资源参数冲突:
resource "aws_instance" "web" {
ami = "ami-12345"
instance_type = "t3.micro"
lifecycle { enabled = var.create_instance }
}
需要注意,ephemeral 值在 lifecycle.enabled 中的使用有限制。
兼容性说明
- macOS 需要 12 Monterey 或更高。
- azurerm 后端:不再支持
endpoint与ARM_ENDPOINT配置项;不再支持msi_endpoint与ARM_MSI_ENDPOINT;environment与metadata_host互斥。 issensitive()在求值未知值时现在正确返回 unknown,依赖旧(错误)行为的代码需调整。- 测试 Mock:mock 值现在严格遵循 provider schema,无效 mock 值需修正。
- S3 模块安装:使用 S3 源地址时 OpenTofu 使用与 AWS CLI/SDK 相同的凭证。
- TLS/SSH:不再接受 SHA-1 签名;SSH 证书须符合 draft-miller-ssh-cert-03。
tofu apply期间的-var/-var-file:ephemeral 变量值无法保存进 plan,因此允许在 apply 时再次传入;该能力也允许用于非 ephemeral 变量,但如果与 plan 创建时的取值不同会报错。plan 与 apply 之间TF_VAR值需保持一致。
其他增强
mock_provider支持for_each。tofu show支持-config与-module=DIR,配合-json可生成机器可读摘要,无需先生成 plan。- 新增
azure_vault密钥提供者,用 Azure Key Vault 作为 state/plan 加密密钥来源。 - azurerm 后端新增
use_cli、use_aks_workload_identity、client_id_file_path、client_secret_file_path、client_certificate等配置。
1.10.0 背景
作为参照,1.10.0 已支持 OCI Registry 模块与 provider mirror;S3 后端可用 S3 条件写实现无 DynamoDB 锁;pg 后端支持单库多 state;提供 -target-file / -exclude-file;以及实验性 OpenTelemetry 追踪。