我在一个.tf文件中使用2个ARM terraform资源( azuread_user,azurerm_role_assignment ),并希望将来自azuread_user的for_each输出变量$ id作为azurerm_role_assignment主体ID的for_each输入变量。有没有办法做到这一点?您可以提供一个代码示例吗?
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"
}
答案 0 :(得分:0)
未测试:
azuread_user将输出属性调用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)}"
}
答案 1 :(得分:0)
如果您希望azurerm_role_assignment.ard
实例和azuread_user.init
实例之间一一对应,则可以直接将azuread_user.init
用作{{1 }}:
for_each
上面的方法之所以可行,是因为设置了azurerm_role_assignment.ard
的任何资源在Terraform语言表达式中都显示为从实例键到代表每个实例的对象的映射。符合资源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
}
的要求,并确保for_each
将是由一个for_each
实例产生的对象,并通过映射键进行关联。
如果您的CSV中有一个显示名称为“ MABU”的条目,那么您会在计划中看到具有以下地址的实例:
each.value
azuread_user.init