如何输出使用 for_each 创建的资源的多个实例的属性?
How do I output an attribute of multiple instances of a resource created with for_each?
假设我有一张环境地图可以提供给 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 不适用于输出
output "name"{
value = { for k, v in var.environments : v => azurerm_resource_group.resource_group[k].name }
}
output "id"{
value = { for k, v in var.environments : v => azurerm_resource_group.resource_group[k].id }
}
output "location"{
value = { for k, v in var.environments : v => azurerm_resource_group.resource_group[k].location }
}
示例输出,
id = {
"dev" = "xxx"
"stage" = "yyy"
"test" = "zzz"
}
[*]
是一个 shorthand 用于从对象列表中提取属性。 for_each
使资源显示为对象的 map,因此 [*]
运算符不合适。
但是,for
expressions 是一种更通用的机制,可以通过为源集合的每个元素评估任意表达式,将列表或映射转换为另一个列表或映射。
因此我们可以将 azurerm_resource_group
个对象的映射简化为 个这些对象的名称 的映射,如下所示:
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
中的映射更常见的是包含一个有意义的名称作为键,以便生成的实例由该有意义的名称标识,而不是通过递增整数标识。如果您将配置更改为使用环境名称作为键,则名称映射将如下所示:
{
"dev" = "something-dev-rg"
"test" = "something-test-rg"
"stage" = "something-stage-rg"
}
假设我有一张环境地图可以提供给 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 不适用于输出
output "name"{
value = { for k, v in var.environments : v => azurerm_resource_group.resource_group[k].name }
}
output "id"{
value = { for k, v in var.environments : v => azurerm_resource_group.resource_group[k].id }
}
output "location"{
value = { for k, v in var.environments : v => azurerm_resource_group.resource_group[k].location }
}
示例输出,
id = {
"dev" = "xxx"
"stage" = "yyy"
"test" = "zzz"
}
[*]
是一个 shorthand 用于从对象列表中提取属性。 for_each
使资源显示为对象的 map,因此 [*]
运算符不合适。
但是,for
expressions 是一种更通用的机制,可以通过为源集合的每个元素评估任意表达式,将列表或映射转换为另一个列表或映射。
因此我们可以将 azurerm_resource_group
个对象的映射简化为 个这些对象的名称 的映射,如下所示:
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
中的映射更常见的是包含一个有意义的名称作为键,以便生成的实例由该有意义的名称标识,而不是通过递增整数标识。如果您将配置更改为使用环境名称作为键,则名称映射将如下所示:
{
"dev" = "something-dev-rg"
"test" = "something-test-rg"
"stage" = "something-stage-rg"
}