Terraform for_each?

Я работал над этим шаблоном terraform azure vm, и цель - использовать for_each, чтобы сделать модуль более динамичным по своей природе, но я не могу понять, как ссылаться на один resource_id в другом блоке ресурсов.

Если вы видите в первом блоке ресурсов, я создаю сетевые адаптеры, используя for_each, и я хочу сослаться на network_interface_id во втором ресурсе, который связывает сетевой интерфейс с балансировщиком исходящей нагрузки. Не знаю, как это сделать, но начал строить строку, используя переменные. может ли кто-нибудь помочь мне в том, как ссылаться на network_interface_id или любой другой идентификатор ресурса, если это необходимо, любая помощь очень ценится.

###################
# Network Interface
###################

resource "azurerm_network_interface" "this" {

  for_each = var.vm_details
  name = format(
    "%s-${var.location}-%s-%s-nic-%s",
    var.app_acronym,
    var.env,
    var.app_purpose,
    each.value.vm_identifier
  )
  location            = var.location
  resource_group_name = var.resource_group_name
  tags     = var.tags
  ip_configuration {
    name = format(
    "%s-${var.location}-%s-%s-ip-%s",
    var.app_acronym,
    var.env,
    var.app_purpose,
    each.value.vm_identifier
    )
    subnet_id                     = var.subnet_id
    private_ip_address_allocation = var.private_ip_address_allocation != "" ? var.private_ip_address_allocation : "Dynamic"
  }
  enable_accelerated_networking   = each.value.enable_accelerated_networking
}

###########################################################
# Asssociating  Network Interface to outbound load balancer
###########################################################
resource "azurerm_network_interface_backend_address_pool_association" "this" {
  for_each = var.olb_association
  network_interface_id    = "${var.rsrc_id_str_1}${var.subscription_id}${var.rsrc_id_str_2}${var.resource_group_name}${var.rsrc_id_str_nic_3}${var.app_acronym}${var.hifen}${var.location}${var.hifen}${var.env}${var.hifen}${var.app_purpose}${var.nic_abbrv}${each.value.vm_identifier}"
  ip_configuration_name   = format(
    "%s-${var.location}-%s-%s-ip-%s",
    var.app_acronym,
    var.env,
    var.app_purpose,
    each.value.vm_identifier
    )
  backend_address_pool_id = each.value.backend_address_pool_id
  depends_on = [azurerm_network_interface.this]
}

person kick07    schedule 14.04.2021    source источник


Ответы (1)


for_each создает структуру данных, на которую ссылаются, как на карту, которую вы ей загружаете. Поэтому, если имя для записи - щенок, вы должны ссылаться на него как на azurerm_network_interface.this["puppy"].

person Dan Monego    schedule 14.04.2021
comment
это будет работать только для одной записи, что, если у меня есть несколько записей. Я пробовал это [each.key], но не вышло. - person kick07; 15.04.2021
comment
Если var.olb_association имеет те же ключи, что и var.vm_details, это сработает. В противном случае вам может потребоваться вытащить его из значения. Мне не хватает вашего кода, чтобы дать рекомендацию. - person Dan Monego; 15.04.2021