Terraform 1.7 版本发布概述
HashiCorp 发布了 Terraform 1.7 版本,这是一个流行的基础设施即代码(IaC)工具的新版本。此次更新引入了配置驱动的移除功能、模拟提供者和覆盖功能,以及对测试框架的多项增强。
配置驱动的移除功能
Terraform 1.7 引入了 removed 块,用于从管理的堆栈状态数据中安全地移除资源和模块。这种方法比使用 terraform state rm 命令更优,因为它避免了手动操作单个资源的麻烦。
removed {
from = aws_instance.example
lifecycle {
destroy = false
}
}配置驱动的导入增强
新版本允许在 import 块中使用 for_each 循环,从而可以在一个块中导入多个资源或模块实例。
测试框架的增强
Terraform 1.7 增强了测试框架,特别是引入了模拟功能。现在可以模拟提供者和资源,为所有计算属性生成假数据。mock_provider 块允许为资源和数据源的计算属性指定值。
mock_provider "aws" {
mock_resource "aws_s3_bucket" {
defaults = {
arn = "arn:aws:s3:::test-bucket-name"
}
}
}
run "sets_bucket_name" {
variables {
bucket_name = "test-bucket-name"
}
assert {
condition = output.bucket == "test-bucket-name"
error_message = "Wrong ARN value"
}
assert {
condition = output.arn == "arn:aws:s3:::test-bucket-name"
error_message = "Wrong ARN value"
}
}覆盖功能
新版本支持覆盖功能,允许替换特定实例的资源、数据源和模块以进行测试。这可以显著减少资源提供或子模块执行的执行时间,并模拟不同的输出以全面测试不同场景。
mock_provider "aws" {}
override_module {
target = module.big_database
outputs = {
endpoint = "big_database.012345678901.us-east-1.rds.amazonaws.com:3306"
db_name = "test_db"
username = "fakeuser"
password = "fakepassword"
}
}
run "test" {
assert {
condition = module.big_database.username == "fakeuser"
error_message = "Incorrect username"
}
}其他增强
Terraform 1.7 还包括对测试框架的其他增强,如引用变量和运行输出、在变量和提供者块中使用 HCL 函数,以及从 *.tfvars 文件加载测试的变量值。
下载和升级
Terraform 1.7 可以从 HashiCorp 网站下载,完整的变更日志和升级指南可在 GitHub 上找到。
OpenTofu 的进展
OpenTofu 是 Terraform 的一个分支,其 1.6 版本也包含了模块测试功能。根据路线图,OpenTofu 计划在 1.7 版本中支持模拟提供者和覆盖功能,以及配置驱动的移除功能。此外,OpenTofu 将重点推出状态加密功能,这是社区高度期待的特性。
总结
Terraform 1.7 通过引入配置驱动的移除功能、模拟提供者和覆盖功能,显著增强了其测试框架和资源管理能力。这些新特性不仅提高了测试的灵活性和效率,还简化了资源管理操作。OpenTofu 也在积极跟进这些新特性,并计划引入状态加密功能,以满足社区的需求。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。