Как изменить атрибут ресурса как входное значение в terraform

Я пытаюсь использовать код ниже

data "azurerm_resource_group" "rg_tst_na" {
  name     = "test1"
}

data "azurerm_resource_group" "rg_dev_na" {
  name     = "test2"
}

resource "azurerm_role_assignment" "test_role_assign" {
  for_each = var.test_role_assignment
  principal_id         = azurerm_user_assigned_identity.test_setup["${each.key}_${each.value}"].principal_id # this is created as separate resource using a for_each loop this resource is validate by terraform apply
  role_definition_name = "Network Contributor"          
  scope                = data.azurerm_resource_group."${each.key}_${each.value}".id
}

variable "var.test_role_assignment" {
  type = map(string)
  default = {
    "na" = "dev",
    "na" = "tst",    
  }
}

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

  scope = data.azurerm_resource_group.rg_"${each.value}"_"${each.key}".id

Это возможно?

Могу ли я использовать переменную в значении области в качестве атрибута ресурса, но с переменным значением? Это нарушение правил терраформирования?

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
81
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Есть несколько вещей, на которые следует обратить внимание:

  1. variable "var.test_role_assignment" должно быть только variable "test_role_assignment"
  2. Другая часть, о которой вы спрашиваете, scope, терраформирование работает не так, и ее невозможно сделать.

Однако вы можете использовать тот же for_each для источника данных и сослаться на него в блоке ресурсов. Что-то вроде этого должно работать:

data "azurerm_resource_group" "rg_na" {
 for_each = var.test_role_assignment
 name     = each.value
}

resource "azurerm_role_assignment" "test_role_assign" {
  for_each             = var.test_role_assignment
  principal_id         = azurerm_user_assigned_identity.test_setup["${each.key}_${each.value}"].principal_id # this is created as separate resource using a for_each loop this 
resource is validate by terraform apply
  role_definition_name = "Network Contributor"          
  scope                = data.azurerm_resource_group.rg_na[each.key].id
}

variable "test_role_assignment" {
  type    = map(string)
  default = {
    "na" = "dev",
    "na" = "tst",    
  }
}

Можем ли мы изменить некоторую часть локального имени атрибута ресурса, используя for_each для блока данных справа? data.azurerm_resource.rg_[эта часть]...? это вообще возможно

chandra shekhar 15.07.2024 11:00

Как я уже упоминал в ответе в пункте 2, это невозможно.

Marko E 15.07.2024 11:08

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

Однако вы можете добиться аналогичного эффекта, определив локальное значение, которое действует как таблица поиска для ваших объектов ресурсов:

locals {
  resource_groups = {
    tst_na = azurerm_resource_group.rg_tst_na
    dev_na = azurerm_resource_group.rg_dev_na
  }
}

В выражении типа local.resource_groups.tst_na только часть local.resource_groups важна для анализа зависимостей Terraform: Terraform придет к выводу, что local.resource_groups зависит как от azurerm_resource_group.rg_tst_na, так и от azurerm_resource_group.rg_dev_na, и поэтому все, что ссылается на local.resource_groups, косвенно зависит от обоих этих ресурсов, независимо от того, какой другой атрибут доступы могут появиться после этой ссылки.

Таким образом, вы можете создать поиск атрибутов для этого объекта, используя произвольные выражения:

local.resource_groups["${each.value}_${each_key}"]

... и результатом будет тот же объект, как если бы вы напрямую ссылались на соответствующий ресурс.

эта информация полезна, большое спасибо

chandra shekhar 17.07.2024 09:43

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

Передача параметров логического значения в Bicep из yaml конвейера DevOps
Azure Devops // Подключение к службе // Terraform // Конвейер Yaml -> Ошибка сборки
Azure Devops: как включить перемещение элементов в бэклогах (переместить в позицию)?
Срок службы .NET Core SDK/среды выполнения 2.2 и 3.0 истек (EOL) и удален из всех размещенных агентов
Почему мои условия не работают должным образом в конвейерах YAML Azure DevOps при использовании условий на основе динамической переменной?
Выходная переменная из обычного задания конвейера Azure не расширяется в задании развертывания
Тип политики Azure DevOps Branch «Требовать стратегию слияния» не устанавливает флажок в разделе «Ограничить типы слияния»
Azure DevOps: свяжите тестовый пример с пользовательской историей во время массового импорта
Почтальон «Get» возвращает данные, а метод Powershell Invoke-Rest не из Azure DevOps
Мой конвейер Azure не запускается, несмотря на выполнение условий

Похожие вопросы

Передача параметров логического значения в Bicep из yaml конвейера DevOps
Azure Devops // Подключение к службе // Terraform // Конвейер Yaml -> Ошибка сборки
Ошибка ERR_SSL_UNRECOGNIZED_NAME_ALERT из шлюза приложений Azure с сертификатом SSL в хранилище ключей другой подписки
Вариант контейнера модели публикации веб-приложения Azure не работает с Terraform
Развертывание Docker Compose в Azure
Как использовать токен доступа для создания сеанса клерка?
Не удается загрузить файл в исходную группу Azure Front Door из-за задержки?
Как получить метаданные (список общих файловых ресурсов) учетной записи хранения и настроить действие копирования данных для копирования черно-белых учетных записей хранения в ADF?
Дополнительные файлы (блочные BLOB-объекты), создаваемые при копировании хранилища BLOB-объектов в ADF
Невозможно найти модуль «../server/require-hook» Развертывание веб-приложения Nextjs Azure с помощью действий GitHub