此版本包含提供商定义函数以及 alpha 版本的重大改进。
与 alpha 版本 一样,我们尽一切努力测试了此版本,并希望社区能够帮助我们在**非生产**工作负载上测试此版本。 在 GitHub 上获取您的副本,并使用 GitHub issue 告诉我们您的想法。
请勿在生产项目中测试此版本!它不是稳定版本!
下载 beta 版本
beta 版本仅在 GitHub Releases 页面 上提供。请选择适合您平台的文件。以下是一些快速链接
平台/设备 | 下载链接 |
---|---|
台式 Windows 计算机 (64 位) | tofu_1.7.0-beta1_windows_amd64.zip |
MacOS (Macbook M1 或更高版本;ARM64) | tofu_1.7.0-beta1_darwin_arm64.tar.gz |
MacOS (Macbook M1 之前版本;AMD64) | tofu_1.7.0-beta1_darwin_amd64.tar.gz |
Intel/AMD Linux 计算机或服务器 (AMD64) | tofu_1.7.0-beta1_linux_amd64.tar.gz |
基于 ARM 的 Linux 计算机 或 Raspberry Pi 3 或更高版本 (ARM64) | tofu_1.7.0-beta1_linux_arm64.tar.gz |
对于以上版本,请解压归档文件,您应该可以在其中找到 tofu
二进制文件。您还可以使用 独立安装程序 下载具有签名验证的版本。
提供商定义函数
新的 Terraform Plugin SDK 添加了对提供商定义函数的支持,您可以在 OpenTofu 中直接使用这些函数。与使用数据源相比,这是一个重大改进,因为提供商定义函数不会增加状态文件的大小,并且需要更少的代码编写。
如果您想测试提供商定义函数,可以使用 corefunc 提供商,该提供商由 Ryan Parman 开发。
terraform {
required_providers {
corefunc = {
source = "northwood-labs/corefunc"
version = "1.4.0"
}
}
}
provider "corefunc" {
}
output "test" {
value = provider::corefunc::str_snake("Hello world!")
# Prints: hello_world
}
如果您有兴趣详细了解此功能以及 OpenTofu 在此领域带来的一些新的独特功能,请 加入我们 4 月 24 日的直播。
可循环导入块
我们对声明式导入块进行了多项改进,最显著的是您现在可以在块上使用 for_each
指令。我们为此功能准备了 完整文档。
在之前的 OpenTofu 版本中,您已经可以使用 import
块声明式地导入资源,例如
resource "random_id" "test_id" {
byte_length = 8
}
import {
to = random_id.test_id
id = "Y2FpOGV1Mkk"
}
output "id" {
value = random_id.test_id.b64_url
}
在此新版本中,您现在还可以循环声明式地导入资源
variable "server_ids" {
type = list(string)
}
resource "random_id" "test_id" {
byte_length = 8
count = 2
}
import {
to = random_id.test_id[tonumber(each.key)]
id = each.value
for_each = {
for idx, item in var.server_ids: idx => item
}
}
output "id" {
value = random_id.test_id.*.b64_url
}
上面的示例将允许您从变量中指定一些随机 ID,并让其他 ID 自动生成。
状态加密
状态加密是此版本的主要功能之一。我们为此功能准备了 完整文档。从 alpha 版本开始,我们彻底修改了从未加密到加密状态文件的迁移过程以及回滚机制,使语法更明确。
在测试此功能之前,请**备份**您的状态文件。然后,您可以添加以下块以启用状态加密
terraform {
encryption {
key_provider "pbkdf2" "my_passphrase" {
## Enter a passphrase here:
passphrase = ""
}
method "aes_gcm" "my_method" {
keys = key_provider.pbkdf2.my_passphrase
}
## Remove this after the migration:
method "unencrypted" "migration" {
}
state {
method = method.aes_gcm.my_method
## Remove the fallback block after migration:
fallback{
method = method.unencrypted.migration
}
## Enable this after migration:
#enforced = true
}
}
}
您可以使用以下语法进行回滚
terraform {
encryption {
key_provider "pbkdf2" "my_passphrase" {
## Enter a passphrase here:
passphrase = ""
}
method "aes_gcm" "my_method" {
keys = key_provider.pbkdf2.my_passphrase
}
method "unencrypted" "migration" {
}
state {
method = method.unencrypted.migration
enforced = false
fallback{
method = method.aes_gcm.my_method
}
}
}
}
如果您有权访问 AWS、GCP 帐户或已获得 OpenBao/MPL 许可的 HashiCorp Vault 安装,您还可以 测试这些密钥提供程序。
移除块
移除块允许您从状态文件中移除资源,但将其保留在基础架构中。我们为此功能准备了 完整文档。您可以先创建资源来测试它
resource "local_file" "test" {
content = "Hello world!"
filename = "test.txt"
}
应用后,您可以用移除块替换资源
removed {
from = local_file.test
}
在下一次应用后,您将看到 local_file.test
资源不再存在于您的状态文件中,但 test.txt
文件应该仍然存在于您的磁盘上。现在,您可以安全地移除移除块。
内置函数更改
此版本还包含一些新函数和对现有函数的更改
- 新函数:templatestring
- 新函数:base64gunzip
- 新函数:cidrcontains
- 新函数:urldecode
- 新函数:issensitive
- nonsensitive 在应用的值不敏感时不再返回错误。
- templatefile 现在支持深度达 1024 的递归。
CLI 更改
CLI 也有一些更改
tofu init
现在支持用于 JSON 输出的-json
标志。tofu plan
现在具有-concise
标志以缩短计划输出。tofu console
现在可在 Solaris 和 AIX 上运行。- CLI 现在支持 XDG 目录规范。
- 别名:
state list
→state ls
state mv
→state move
state rm
→state remove
测试功能更改
- Tofu 现在从测试文件夹读取
.tfvars
文件。
提供反馈
感谢您抽出时间测试此预览版本。如果您有任何反馈,请使用 GitHub 问题 或在 OpenTofu Slack 上与我们聊天。