gpt4 book ai didi

azure - 地形 : Using for_each in module

转载 作者:行者123 更新时间:2023-12-02 19:00:24 27 4
gpt4 key购买 nike

我正在使用 terraform 版本 0.14.3。我有一个用于创建 Azure 网络接口(interface)卡的模块,如下所示:

resource "azurerm_network_interface" "nic" {

name = var.nic_name
location = var.location
resource_group_name = var.rg_name

ip_configuration {
name = var.ipconfig_name
subnet_id = var.subnet_id
private_ip_address_allocation = "Dynamic"
}
}

其输出定义为:

output "nic_id" {
value = azurerm_network_interface.nic.id
}

我在此父模块中调用此模块:

module "NIC" {
source = "./NIC"
for_each = var.nics

nic_name = each.value.nic_name
location = "eastus2"
rg_name = "abc-test-rg"
ipconfig_name = each.value.ipconfig_name
subnet_id = <subnet_id>
}

output "nic_ids" {
value = [for k in module.NIC.nic_id : k.id]
}

NIC 值定义如下:

nics = {
nic1 = {
nic_name = "abc-nic-1"
ipconfig_name = "nic-1-ipconfig"
}
}

我想循环 NIC 输出 ID,并希望显示它们。当我运行上面的代码时,我在 terraform plan 中收到以下错误:

Error: Unsupported attribute

on main.tf line 15, in output "nic_ids":
15: value = [for k in module.NIC.nic_id : k.id]
|----------------
| module.NIC is object with 1 attribute "nic1"

This object does not have an attribute named "nic_id".

我该如何解决这个问题?

最佳答案

您的模块“NIC” block 已设置for_each,因此模块中其他位置的module.NIC符号是来自实例的映射输出对象的键,而不仅仅是单例模块的​​单个输出对象。

Terraform 的错误消息试图通过以下消息引起人们的注意:

  • module.NIC 是具有 1 个属性“nic1”的对象

请注意,这里的 nic1 是来自 var.nics 的键,不是模块中定义的输出值之一。

假设您在此处显示的 nic_id 输出是该模块中定义的唯一输出,则 module.NIC 值的形状如下:

{
nic1 = {
nic_id = "eni-e5aa89a3"
}
}

听起来您想生成如下所示的值:

{
nic1 = "eni-e5aa89a3"
}

如果是这样,获得该结果的合适表达式如下:

output "nic_ids" {
value = { for k, nic in module.NIC : k => nic.nic_id }
}

上面的意思是:为NIC模块的每个实例生成一个包含一个元素的映射,其键是模块实例键,其值是nic_id输出值.

或者,如果哪个 id 属于哪个实例并不重要,那么您可以生成一组无序的 id,如下所示:

output "nic_ids" {
value = toset([for nic in module.NIC : nic.nic_id])
}

在本例中,for 表达式仅定义了一个本地符号 nic,它表示模块实例对象,因为它不对实例键执行任何操作。这里的 toset 表示 ID 不按任何特定顺序:这并不是绝对必要的,但我认为这是一个很好的做法,以确保依赖于该值的任何其他 Terraform 代码不会出现这种情况。 无意中取决于 id 当前的任意顺序,如果您在 var.nics 中添加或删除元素,将来可能会发生变化。

关于azure - 地形 : Using for_each in module,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65636463/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com