gpt4 book ai didi

terraform - 如何输出使用 for_each 创建的资源的多个实例的属性?

转载 作者:行者123 更新时间:2023-12-04 12:38:30 25 4
gpt4 key购买 nike

假设我有一张环境 map 要提供给 for_each

environments = {
"0" = "dev"
"1" = "test"
"2" = "stage"
}

然后无论出于何种原因,我都想为每个环境创建一个 Azure 资源组。
resource "azurerm_resource_group" "resource_group" {
for_each = var.environments
name = "${var.resource-group-name}-${each.value}-rg"
location = var.location
}

我如何获得输出?我试过新的 splat 无济于事。
output "name" {
value = "${azurerm_resource_group.resource_group[*].name}"
}

output "id" {
value = "${azurerm_resource_group.resource_group[*].id}"
}

output "location" {
value = "${azurerm_resource_group.resource_group[*].location}"
}

错误:不支持的属性
in output "id":
6: value = "${azurerm_resource_group.resource_group[*].id}"

This object does not have an attribute named "id".

如何输出使用 for_each 创建的资源的多个实例的属性?

最佳答案

[*]是从对象列表中提取属性的简写。 for_each使资源显示为对象映射,因此 [*]运营商不合适。

然而, for expressions是一种更通用的机制,可以通过为源集合的每个元素计算任意表达式,将列表或映射转换为另一个列表或映射。

因此我们可以简化 azurerm_resource_group 的 map 对象转换为这些对象的名称映射,如下所示:

output "name" {
value = { for k, group in azurerm_resource_group.resource_group: k => group.name }
}

您的输入映射使用数字索引作为键,这是不常见但允许的。因此,输出的结果值将是这样的:
{
"0" = "something-dev-rg"
"1" = "something-test-rg"
"2" = "something-stage-rg"
}

更常见的是 for_each 中的 map 包含一个有意义的名称作为键,以便结果实例由该有意义的名称而不是递增的整数标识。如果您将配置更改为使用环境名称作为键,则名称映射将如下所示:
{
"dev" = "something-dev-rg"
"test" = "something-test-rg"
"stage" = "something-stage-rg"
}

关于terraform - 如何输出使用 for_each 创建的资源的多个实例的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61913585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com