Terraform 我是否可以将每个输出用作同一个*.tf文件中其他资源中的每个输入?

Terraform 我是否可以将每个输出用作同一个*.tf文件中其他资源中的每个输入?,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我在一个.tf文件中使用了两个ARM地形资源(azuread_用户、azurerm_角色分配),希望azuread_用户的for_each output var$id与azurerm_角色分配主体的for_each input var$id相同。有没有办法做到这一点?你能提供一个代码示例吗 data "azurerm_subscription" "init" {} locals { csv_data = file("${path.module}/users.csv") instanc

我在一个.tf文件中使用了两个ARM地形资源(azuread_用户、azurerm_角色分配),希望azuread_用户的for_each output var$id与azurerm_角色分配主体的for_each input var$id相同。有没有办法做到这一点?你能提供一个代码示例吗

data "azurerm_subscription" "init" {}

locals {

  csv_data = file("${path.module}/users.csv")
  instances = csvdecode(local.csv_data)

}

resource "azuread_user" "init" {

  for_each = { for inst in local.instances : inst.display_name => inst }

  display_name = each.value.display_name
  mail_nickname = each.value.mail_nickname
  user_principal_name = each.value.user_principal_name
  password            = "XXX#XXX#XXX"
  force_password_change = "true"
}


resource "azurerm_role_assignment" "ard" {
  scope                = "${data.azurerm_subscription.init.id}"
  role_definition_name = "Owner"
  principal_id         = "HERE THE FOR_EACH INPUT FROM OUTPUT VAR $ID"
}

未测试:

azuread_用户将输出一个属性调用id

您可以使用count和count.index在值的迭代中循环

resource "azurerm_role_assignment" "ard" {
  scope                = "${data.azurerm_subscription.init.id}"
  count                = "${length(azuread_user.init)}" 
  role_definition_name = "Owner"
  principal_id         = "${element(azuread_user.init.*.id, count.index)}"
}

如果您想在
azurerm_role_assignment.ard
实例和
azuread_user.init
实例之间建立一对一的对应关系,您可以直接使用
azuread_user.init
作为
azurerm_role_assignment.ard上每个
重复表达式的

resource "azurerm_role_assignment" "ard" {
  for_each = azuread_user.init

  scope                = data.azurerm_subscription.init.id
  role_definition_name = "Owner"
  principal_id         = each.value.id
}
上述方法可以起作用,因为在Terraform语言表达式中,任何为每个
集合设置了
的资源都会显示为从实例键到表示每个实例的对象的映射。这与每个
的资源
要求相匹配,并确保
每个.value
将是一个由一个
azuread_用户.init
实例生成的对象,由映射键关联

如果您的CSV中有一个显示名为“MABU”的条目,那么您将在计划中看到具有以下地址的实例:

  • azuread\u user.init[“MABU”]
  • azurerm\u role\u assignment.ard[“MABU”]