Terraform 我是否可以将每个输出用作同一个*.tf文件中其他资源中的每个输入?
我在一个.tf文件中使用了两个ARM地形资源(azuread_用户、azurerm_角色分配),希望azuread_用户的for_each output var$id与azurerm_角色分配主体的for_each input var$id相同。有没有办法做到这一点?你能提供一个代码示例吗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
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”]