Terraform - выходной индекс вместе с элементом

Есть ли способ изменить этот выходной код, чтобы включить индексный номер с именем? Текущий код ниже создает один вывод с индексом «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 }
}
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, что здесь происходит много структурных изменений. Это может быть связано с другим багажом или причинами, которые от него зависят, но я думаю, что это можно упростить. Я использую локальные переменные вместо переменной, но надеюсь, что это поможет.

Я не уверен, что оператор 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
}

Другие вопросы по теме