考虑Terraform测试的目录结构

在 Terraform 1.6.0 中新增了测试框架。考虑到我的个性,我对如何组织目录结构很感兴趣。根据官方文档的说明,我尝试创建了一个 tests 目录,并将测试文件放在其中。

环境

Terraform 1.6.5 的翻译结果

目录结构

我一直都是在environments目录下创建每个环境的子目录来配置。在执行命令的根目录中的tests目录会被自动加载。我已经创建了每个环境的tests目录。

.
└── environments
    ├── dev
    │   ├── main.tf
    │   └── tests
    │       └── ...
    └── prod
        ├── main.tf
        ├── terraform.tfstate
        └── tests
            └── main.tftest.hcl

原始模式

resource "terraform_data" "this" {
    input = "try terraform test."
}
run "this_outputs_test" {
    assert {
        condition = terraform_data.this.output == "try terraform test."
        error_message = "outputが不正です。"
    }
}

执行

执行init apply,然后执行test。顺利完成。

environments/prod$ terraform test
tests/main.tftest.hcl... in progress
  run "this_outputs_test"... pass
tests/main.tftest.hcl... tearing down
tests/main.tftest.hcl... pass

Success! 1 passed, 0 failed.

更改测试文件以引发错误。

-        condition = terraform_data.this.output == "try terraform test."
+        condition = terraform_data.this.output == "try terraform tests."
environments/prod$ terraform test
tests/main.tftest.hcl... in progress
  run "this_outputs_test"... fail
╷
│ Error: Test assertion failed
│
│   on tests/main.tftest.hcl line 5, in run "this_outputs_test":
│    5:         condition = terraform_data.this.output == "try terraform tests."
│     ├────────────────
│     │ terraform_data.this.output is "try terraform test."
│
│ outputが不正です。
╵
tests/main.tftest.hcl... tearing down
tests/main.tftest.hcl... fail

Failure! 0 passed, 1 failed.

总结

对于每个环境,好像要创建一个tests目录。然后需要考虑在哪里编写共用模块的测试。

其他

我在途中得知这件事,但因为它与本次主题无关,所以将其折叠起来了。

applay之后创建的值只能在apply之后进行测试!
是的,但是测试不应该在事前进行吗?我有点疑惑。
$ terraform test
main.tftest.hcl… in progress
运行 “this_outputs_test”… 失败

│ 错误: 未知的条件值

│ 在 main.tftest.hcl 的第 5 行,位于运行 “this_outputs_test”:
│ 5: condition = terraform_data.this.output == “try terraform test.”
│ ├────────────────
│ │ terraform_data.this.output 是一个字符串

│ 此时无法评估条件表达式。这意味着你已经执行了一个具有 command = plan 的运行块,并且你的条件所依赖的值在应用计划之后才会知道。要么从条件中移除此值,要么在此运行块中执行一个 apply 命令。

main.tftest.hcl… 拆除中
main.tftest.hcl… 失败失败!0 个通过,1 个失败。

此时无法评估条件表达式。这意味着你已经执行了一个具有 command = plan 的运行块,并且你的条件所依赖的值在应用计划之后才会知道。要么从条件中移除此值,要么在此运行块中执行一个 apply 命令。

广告
将在 10 秒后关闭
bannerAds