简体   繁体   中英

Terraform How to use for each values from one resource in another resource

I am trying to create users in terraform cloud based off a simple csv, structured like so:

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

I can create users easily enough using the following resource block:

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
}

However, if I want to add them to teams then I need the "id" output from the above resource into the below resource:

resource "tfe_team_organization_member" "readonly_member" {
  for_each = { for r in local.read_only : r.email => r }

  team_id = each.value.access_level == "readonly" ? each.value.access_level : local.readonly_id
  organization_membership_id = "${tfe_organization_membership.users_csv.id}"
}

Is there a way to pass this?

Thanks in advance.

I think the first thing I'd do here is to factor out the projection of your CSV data from a list to a map, like this:

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

By defining local.users like this we can make it more concise to refer to that value multiple times elsewhere in the config:

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
}

Any resource that has for_each set is represented in expressions as a map of objects whose keys are the same as the for_each input map, so the tfe_organization_membership.users_csv[each.key] expression refers to an object representation of the corresponding instance of the other resource, correlating by the map keys.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM