繁体   English   中英

引用来自 for_each 模块的输出

[英]Referencing outputs from a for_each module

我有一个模块,它有一个使用for_each定义的变量,它的 output 如下:

output "nic_ids" {
    value = [for x in azurerm_network_interface.nic : x.id]
}
nic_ids = [
  "/subscriptions/*****/resourceGroups/test-rg/providers/Microsoft.Network/networkInterfaces/test-nic-1",
  "/subscriptions/*****/resourceGroups/test-rg/providers/Microsoft.Network/networkInterfaces/test-nic-2",
]

我的目标是将以上 NIC id 传递给 VM 模块,并在 NIC id 和 VM 之间进行 1:1 映射( test-nic-1应该只附加到vm-1test-nic-2vm-2等)

module "vm" {
  source  = "*****/vm/azurerm"
  version = "0.1.0"
  
   vms = var.vms
   nic_ids = module.nic[each.value.id].nic_ids 
} 

我收到以下错误:

Error: each.value cannot be used in this context

  on main.tf line 58, in module "vm":
  58:    nic_ids = module.nic[each.value.id].nic_ids 

A reference to "each.value" has been used in a context in which it
unavailable, such as when the configuration no longer contains the value in
its "for_each" expression. Remove this reference to each.value in your
configuration to work around this error.

我用这个类似的问题作为参考。 你能建议吗?

您可以将上面的 NIC id 列表传递给带有count的 VM 模块。

module "vm" {
  source              = "./modules/vms"
  vm_names            = ["aaa","bbb"]

  nic_ids = module.nic.network_interface_nics  
}

module "nic" {
  source = "./modules/nic"

  nic_names = ["nic1","nic2"]

}

VM模块中的main.tf

resource "azurerm_virtual_machine" "vm-windows" {
  count                         = length(var.vm_names)
  name                          = var.vm_names[count.index]
  resource_group_name           = data.azurerm_resource_group.vm.name
  location                      = var.location
  vm_size                       = var.vm_size
  network_interface_ids         = [ var.nic_ids[count.index] ]
...

}

网卡模块中的output.tf

output "network_interface_nics" {
  description = "ids of the vm nics provisoned."
  value       = [for x in azurerm_network_interface.nic : x.id]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM