【问题标题】:Terraform for_each?Terraform for_each?
【发布时间】:2021-07-09 21:30:38
【问题描述】:

我一直在研究这个 terraform azure vm 模板,目标是使用 for_each 使模块在本质上更具动态性,但我无法弄清楚如何在另一个资源块中引用一个 resource_id。

如果您在第一个资源块中看到我正在使用“for_each”创建 NIC,并且我想在第二个资源中引用“network_interface_id”,该资源将网络接口与出站负载均衡器相关联。不知道该怎么做,但开始使用变量构造字符串。如果需要,任何人都可以帮助我如何引用“network_interface_id”或任何其他资源 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]
}

【问题讨论】:

    标签: terraform terraform-provider-azure azure-rm azure-vm-templates


    【解决方案1】:

    for_each 创建一个被引用的数据结构,就像您提供给它的地图一样。因此,如果条目的名称是“puppy”,您可以将其引用为 azurerm_network_interface.this["puppy"]

    【讨论】:

    • 这仅适用于一个条目,如果我有一堆条目怎么办。我试过这个[each.key],但没有成功。
    • 如果var.olb_association 具有与var.vm_details 完全相同的键,那将起作用。否则,您可能需要从值中提取它。我看不到足够的代码来提出建议。
    猜你喜欢
    • 2021-08-02
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2021-02-13
    • 1970-01-01
    • 2020-11-19
    • 2020-11-01
    相关资源
    最近更新 更多