有了Terraform 0.13.x,我们现在有了for_each
作为迭代选项。因此,使用我的一个模块,我将返回一个要测试的复杂对象。最终有两个组成部分,但在这个问题中我将坚持第一个组成部分。
module repository {
source = "..."
for_each = var.some_map_of_objects
...
}
output repositories {
value = flatten([ for r in module.repository : [ r.repository ] ])
}
这是一个操作github_repository
资源的模块
从输出返回的结果对象如下所示:
repositories = [
{
"allow_merge_commit" = true
"allow_rebase_merge" = true
"allow_squash_merge" = true
"archived" = false
"auto_init" = false
"default_branch" = "master"
"delete_branch_on_merge" = false
"description" = ""
"etag" = "[UNIQUE_VALUE]"
"full_name" = "[ORG]/terraform-example-module"
"git_clone_url" = "git://[FQDN]/[ORG]/terraform-example-module.git"
"has_downloads" = false
"has_issues" = false
"has_projects" = false
"has_wiki" = false
"homepage_url" = ""
"html_url" = "https://[FQDN]/[ORG]/terraform-example-module"
"http_clone_url" = "https://[FQDN]/[ORG]/terraform-example-module.git"
"id" = "terraform-example-module"
"is_template" = false
"name" = "terraform-example-module"
"node_id" = "[UNIQUE_VALUE]"
"private" = false
"ssh_clone_url" = "git@[FQDN]:[ORG]/terraform-example-module.git"
"svn_url" = "https://[FQDN]/[ORG]/terraform-example-module"
"template" = []
},
{
...
},
]
因此,我尝试使用terraform.OutputListOfObjects()
,但是我无法分解足够远的结构(例如,var[0]["archived"]
)以对某些元素进行断言。当我对整个对象或对象的数组项之一进行断言时,我当然会在唯一的返回值字段上出现不匹配的情况,而且似乎无法找到从比较对象中删除那些唯一字段的方法。
总的来说,我对执行此操作感到有些困惑。我已经测试了一个调用用例,它以正确的格式返回了所有元素,但是最可能的用例是一个循环的循环结构,因此我也想测试该格式。>
在我具有唯一字段的情况下,如何测试这种对象或特定对象元素?
这些特定字段或任何特定字段(例如is.bool?
或某些golang等效类型的测试)是否可以使用正则表达式?