使用for_each

时间:2020-09-01 21:10:20

标签: terratest

有了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等效类型的测试)是否可以使用正则表达式?

0 个答案:

没有答案