Terraform 1.7 在 OpenTofu 发布前新增配置驱动的移除和测试模拟功能

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 也在积极跟进这些新特性,并计划引入状态加密功能,以满足社区的需求。

阅读 18
0 条评论