Terraform:来自azurerm_订阅的所有Azure订阅

Terraform:来自azurerm_订阅的所有Azure订阅,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,早上好 我将Terraform 0.12与Azure提供商2.0.0一起使用。我使用以下块检索以“sub-”开头的所有订阅: data "azurerm_subscriptions" "mgt" { display_name_prefix = "sub-" } 现在,我想以某种方式自动创建与此不同的“azurerm_订阅”对象。是否有任何方法可以循环所有这些订阅并创建适当的“azurerm_订阅”对象 谢谢 您可以找到订阅的索

早上好

我将Terraform 0.12与Azure提供商2.0.0一起使用。我使用以下块检索以“sub-”开头的所有订阅:

data "azurerm_subscriptions" "mgt" {
    display_name_prefix = "sub-"
}
现在,我想以某种方式自动创建与此不同的“azurerm_订阅”对象。是否有任何方法可以循环所有这些订阅并创建适当的“azurerm_订阅”对象


谢谢

您可以找到订阅的索引,然后参考该索引:

数据“azurerm_订阅”可用{
}
当地人{
订阅索引=索引(data.azurerm\u subscriptions.available.subscriptions.*.display\u name,“mysubscription”)
}
输出“azurerm_订阅”{
value=元素(data.azurerm\u subscriptions.available.subscriptions,local.subscription\u index)
}
您还可以从“azurerm_订阅”创建映射。 然后使用for\u创建“azurerm\u订阅”,并使用名称引用特定数据:

本地人{
订阅\u映射={
对于data.azurerm_subscriptions.available.subscriptions.*:obj.display_name=>obj中的obj
}
}
数据“azurerm_订阅”“子”{
for\u each=local.subscriptions\u map
订阅\u id=each.value.subscription\u id
}
输出“数据”{
value=data.azurerm_subscription.sub[“mysubscription”].subscription_id
}

AFAIK,块中不应出现
display\u name\u前缀
,您想怎么办?此外,您还可以使用此数据源访问有关现有订阅的信息。无法从中创建新的订阅对象。筛选的显示名称工作正常。输出将根据筛选器返回所有订阅。我想做的是让一个数据源包含所有订阅,而不是让一个类型为“azurerm_subscription”的数据源重复20次。我唯一的问题是,我无法轻松访问特定订阅的属性,因为我必须通过索引而不是名称来访问它们。是的,您必须通过索引访问特定订阅的属性,因为
数据“azurerm_subscriptions”
输出所有筛选的订阅。这是一个列表,不是一个订阅字符串。这是你的问题吗?目前,Terraform中的“循环”构造要求在运行前知道这些值。您可以通过预定义的订阅列表
为每个订阅创建
,但不能通过运行Terraform填充的列表。