考虑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 个失败。
是的,但是测试不应该在事前进行吗?我有点疑惑。
$ 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 命令。