我试图基于一个简单的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
}
有没有办法通过这个?
谢谢。
答案 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]
表达式引用的是对象表示其他资源的相应实例的实例,通过映射键进行关联。