如何测试 Terraform 代码 – 策略和工具

在本文中,我们将探讨使用不同类型的常用测试、工具和平台的 Terraform 测试策略。让我们直接开始吧!

我们将涵盖:

  1. Terraform 测试文件语法
  2. Terraform 测试命令
  3. Terraform 测试策略
  4. Terratest 测试框架


Terraform 测试文件语法


Terraform 通过检查以下扩展名来发现配置中的测试文件:

  • .tftest.hcl
  • .tftest.json

每个测试文件都由以下根级属性和块组成:

  • 一个或多个运行块
  • 一个或零个变量块
  • 零到多个提供程序块。

Terraform 按顺序执行运行块,模拟在配置目录中运行的 Terraform 命令序列。变量和提供程序块的排列顺序无关紧要,因为 Terraform 会在测试过程开始时评估这些块中的所有值。为了清晰起见,建议将变量和提供程序块放在测试文件的开头。

Terraform 测试文件示例


运行块命令可以是 plan 或 apply,如果省略添加,则默认值为 plan。

run "example_test" {
 command = plan

 // Define any variables required for your test
 variables {
   example_variable = "value"
 }

 // Assertions to validate the test outcome
 assert {
   condition     = example_resource.attribute == var.example_variable
   error_message = "Test failed: the attribute value was not as expected."
 }

 // Optionally, you can specify providers if your test requires it
 provider "aws" {
   region = "us-west-2"
 }
}

在运行块中,您可以添加可选变量和断言,并且可以像在任何 Terraform 配置中使用变量一样,在断言中使用变量,只需在变量前添加 var 前缀即可。变量也可以全局定义(在运行块外部),或者仅在运行块内部定义,以便仅由该特定运行块访问。

运行块中的断言会检查一个条件,如果该条件不成立,则会在 Terraform 验证结束时显示。

您可以定义所需的提供程序数量,并将其指定为运行块的一部分或外部。

Terraform 测试命令


Terraform 测试命令用于运行配置中定义的所有测试文件。

Terraform 测试命令的作用是什么?


Terraform 测试命令会读取配置文件中定义的 Terraform 测试文件,方法是查看所有以 .tftest.json 和 .tftest.hcl 为扩展名的文件,并执行这些文件中定义的测试。默认情况下,Terraform 会在当前目录以及指定的测试目录(默认为 tests)中搜索这些文件。

Terraform 测试命令使用示例


Terraform 测试命令可以接收以下几个可选属性:

  • -test-directory= – 覆盖 Terraform 查找测试文件的目录
  • -json – 显示测试结果的 JSON 输出
  • -verbose – 打印测试文件中每个运行块的计划或状态
  • -filter=testfile – 将测试操作限制在特定的测试文件上

Terraform 测试命令示例


terraform test -filter=tests/my_test.tftest.hcl – 这将仅测试 tests/my_test.tftest.hcl 文件

terraform test -verbose – 将打印每个运行块的计划或状态

terraform test -test-directory=my_tests – 将从当前目录和 my_tests 目录运行测试

下面通过一个例子演示如何运行terraform test 命令

main.tf 

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 2.0"
    }
  }

  required_version = ">=

你可能感兴趣的:(terraform,devops,terraform,云原生,go)