OpenTofu v1.11.0 发布
OpenTofu v1.11.0 现已发布,一些更新亮点如下:
临时资源和只写属性
临时值允许 OpenTofu 处理只在单个 OpenTofu 阶段内存在于内存中的数据和资源,保证这些值不会被保存在状态快照或计划文件中:
-
使用临时资源,可以临时访问存储的凭证或网络隧道,用于 provider 或 provisioner 配置,且这些值不会被保存到 OpenTofu 的计划文件或状态快照中。
举例来说,你可以用临时资源从 OpenBao 请求限时的 AWS 凭证,提供给 hashicorp/aws provider,或者打开临时 SSH 隧道,让 cyrilgdn/postgresql provider 访问远程网络上的 Postgres 服务器。
-
使用只写属性设置资源参数,这些参数只在变更时需要被 OpenTofu 访问,比如数据库的初始管理员密码。
例如,你可以用临时资源生成 SSH 密钥对,然后通过只写属性把私钥保存到你的秘密存储中,这样 OpenTofu 本身就不需要保留密钥副本。
资源和模块的 enabled 支持
OpenTofu 传统上允许通过 count 元参数动态启用或禁用某个模块,选择实例数为零或一。
OpenTofu v1.11.0 引入了 enabled 元参数,希望让读者更容易理解资源实例数只能是零或一:
variable "subnet" {
type = object({
id = string
})
default = null
}
variable "enable_cluster" {
type = bool
default = false
}
resource "aws_subnet" "example" {
# ...
lifecycle {
enabled = var.subnet == null
}
}
resource "aws_instance" "example" {
# ...
subnet_id = var.subnet != null ? var.subnet.id : aws_subnet.example.id
# ...
}
module "servers" {
source = "./app-cluster"
servers = 5
lifecycle {
enabled = var.enable_cluster
}
}