簡體   English   中英

Terraform 如何使用另一種資源中一個資源的每個值

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

我正在嘗試基於一個簡單的 csv 在 terraform 雲中創建用戶,結構如下:

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

我可以使用以下資源塊輕松創建用戶:

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
}

但是,如果我想將它們添加到團隊中,那么我需要將上述資源的“id”輸出到以下資源中:

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}"
}

有沒有辦法通過這個?

提前致謝。

我想我在這里要做的第一件事是將 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]表達式指的是其他資源的相應實例的對象表示,通過地圖鍵關聯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM