Могу ли я использовать вывод for_each в качестве ввода for_each в другом ресурсе в том же файле * .tf? - PullRequest
0 голосов
/ 08 ноября 2019

Я использую 2 ресурса Terraform ARM ( azuread_user, azurerm_role_assignment ) в одном файле .tf и хочу, чтобы выходной переменный for_each out $ id из azuread_user использовался как входной переменный for_each для azurerm_role_assignment Principal_id. Есть ли способ сделать это? Можете ли вы привести пример кода?

data "azurerm_subscription" "init" {}

locals {

  csv_data = file("${path.module}/users.csv")
  instances = csvdecode(local.csv_data)

}

resource "azuread_user" "init" {

  for_each = { for inst in local.instances : inst.display_name => inst }

  display_name = each.value.display_name
  mail_nickname = each.value.mail_nickname
  user_principal_name = each.value.user_principal_name
  password            = "XXX#XXX#XXX"
  force_password_change = "true"
}


resource "azurerm_role_assignment" "ard" {
  scope                = "${data.azurerm_subscription.init.id}"
  role_definition_name = "Owner"
  principal_id         = "HERE THE FOR_EACH INPUT FROM OUTPUT VAR $ID"
}

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Если вы хотите однозначное соответствие между azurerm_role_assignment.ard экземплярами и azuread_user.init экземплярами, вы можете использовать azuread_user.init непосредственно в качестве for_each выражения повторения для azurerm_role_assignment.ard:

resource "azurerm_role_assignment" "ard" {
  for_each = azuread_user.init

  scope                = data.azurerm_subscription.init.id
  role_definition_name = "Owner"
  principal_id         = each.value.id
}

Вышеописанное может работать, потому что любой ресурс, для которого установлено значение for_each, появляется в выражениях языка Terraform в виде карты от ключей экземпляра к объектам, представляющим каждый экземпляр. Это соответствует требованиям к ресурсу for_each и гарантирует, что each.value будет объектом, созданным одним экземпляром azuread_user.init, сопоставленным с ключами карты.

Если у вас была запись в CSV с дисплеемназовите «MABU», тогда вы увидите в плане экземпляры со следующими адресами:

  • azuread_user.init["MABU"]
  • azurerm_role_assignment.ard["MABU"]
0 голосов
/ 08 ноября 2019

НЕ ИСПЫТАНО:

azuread_user выведет идентификатор вызова атрибута.

Вы можете использовать count и count.index для циклического повторения значения.

resource "azurerm_role_assignment" "ard" {
  scope                = "${data.azurerm_subscription.init.id}"
  count                = "${length(azuread_user.init)}" 
  role_definition_name = "Owner"
  principal_id         = "${element(azuread_user.init.*.id, count.index)}"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...