Terraform如何对另一资源中的一个资源中的每个值使用

时间:2020-10-29 22:56:57

标签: terraform terraform0.12+

我试图基于一个简单的csv在terraform云中创建用户,其结构如下:

trait SomeTrait
object SomeTrait

@mymacro(SomeTrait)
class Test

//scalac: trait SomeTrait

我可以使用以下资源块轻松地创建用户:

email,access_level
test@gmail.com,readonly
test2@gmail.come,owners

但是,如果我想将它们添加到团队中,那么我需要将上述资源的“ id”输出输出到以下资源中:

locals {
  users_csv = csvdecode(file("${path.module}/users.csv"))

}


resource "tfe_organization_membership" "users_csv" {
  for_each = { for r in local.users_csv : r.email => r }

  organization  = var.ppl_organisation
  email = each.value.email
}

有没有办法通过这个?

谢谢。

1 个答案:

答案 0 :(得分:1)

我想我要做的第一件事就是考虑将CSV数据从列表到地图的投影,例如:

locals {
  users_csv = csvdecode(file("${path.module}/users.csv"))
  users     = { for r in local.users_csv : r.email => r }
}

通过这样定义local.users,我们可以使在配置的其他位置多次引用该值更加简洁:

resource "tfe_organization_membership" "users_csv" {
  for_each = local.users

  organization = var.ppl_organisation
  email        = each.value.email
}

resource "tfe_team_organization_member" "readonly_member" {
  for_each = local.users

  team_id = (
    each.value.access_level == "readonly" ?
    each.value.access_level :
    local.readonly_id
  )
  organization_membership_id = tfe_organization_membership.users_csv[each.key].id
}

任何设置了for_each的资源都在表达式中表示为对象的映射,其键与for_each输入映射的键相同,因此tfe_organization_membership.users_csv[each.key]表达式引用的是对象表示其他资源的相应实例的实例,通过映射键进行关联。