Есть ли способ изменить этот выходной код, чтобы включить индексный номер с именем? Текущий код ниже создает один вывод с индексом «0», но в идеале каждое имя должно быть в своем собственном индексе (0, 1, 2 и т. д.).
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "3.1.0"
}
}
}
provider "azurerm" {
features {
}
}
variable "private_link_scopes" {
description = "A list of Azure private link scopes."
type = list(object({
name = string
resource_group_name = string
}))
}
locals {
rgs_map = {
for n in var.private_link_scopes : n.resource_group_name => {
name = n.resource_group_name
}
}
}
data "azurerm_resource_group" "rg" {
for_each = local.rgs_map
name = each.value.name
}
output "list" {
value = { for index, item in [var.private_link_scopes] : index => item[*].name }
}
Кажется, что здесь происходит много структурных изменений. Это может быть связано с другим багажом или причинами, которые от него зависят, но я думаю, что это можно упростить. Я использую локальные переменные вместо переменной, но надеюсь, что это поможет.
Я не уверен, что оператор splat - это то, что вам нужно. Это то же самое, что получить список всех атрибутов имен элементов в этом значении item
, но для каждого item
будет только один атрибут, так что это кажется странным.
locals {
scopes = [
{
name = "name_a"
rg_name = "rg_a"
},
{
name = "name_b"
rg_name = "rg_b"
}
]
}
data "azurerm_resource_group" "rg" {
# I don't see a reason to generate the intermediary map
# or to build another object in each map value. This is more
# simple. for_each with an object by name: rg_name
value = { for scope in local.scopes : scope.name => scope.rg_name }
name = each.value
}
output "list" {
# I don't see a need to use a splat expression here.
# You can just build a map with the index and the name
# here directly.
value = { for i, v in local.scopes : i => v.name }
}
На самом деле, если вам не нужно, чтобы ресурсы группы ресурсов определялись по имени, это можно упростить до следующего:
data "azurerm_resource_group" "rg" {
for_each = toset([for scope in local.scopes : scope.rg_name])
name = each.value
}