Azure 地形:用于每个模块中的_
我使用的是terraform版本0.14.3。 我有一个用于创建Azure网络接口卡的模块,如下所示:Azure 地形:用于每个模块中的_,azure,terraform,terraform-provider-azure,Azure,Terraform,Terraform Provider Azure,我使用的是terraform版本0.14.3。 我有一个用于创建Azure网络接口卡的模块,如下所示: resource "azurerm_network_interface" "nic" { name = var.nic_name location = var.location resource_group_name = var.rg_name ip_configuration {
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"
}
}
nics = {
nic1 = {
nic_name = "abc-nic-1"
ipconfig_name = "nic-1-ipconfig"
}
}
其输出定义为:
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输出ID周围循环,并希望显示它们。
当我运行上述代码时,我在地形平面图中得到以下错误:
如何绕过它?您的模块“NIC”
块为每个集合设置了,因此模块中其他地方的模块.NIC
符号是从实例键到输出对象的映射,而不是单例模块中的单个输出对象
Terraform的错误消息试图通过以下消息引起注意:
module.NIC是具有1个属性“nic1”的对象
请注意,nic1
这里是var.nics
中的一个键,而不是模块中定义的一个输出值
假设此处显示的nic\u id
输出是该模块中定义的唯一输出,module.nic
值的形状如下:
{
nic1 = {
nic_id = "eni-e5aa89a3"
}
}
{
nic1 = "eni-e5aa89a3"
}
output "nic_ids" {
value = toset([for nic in module.NIC : nic.nic_id])
}
听起来您希望生成一个如下形状的值:
{
nic1 = {
nic_id = "eni-e5aa89a3"
}
}
{
nic1 = "eni-e5aa89a3"
}
output "nic_ids" {
value = toset([for nic in module.NIC : nic.nic_id])
}
如果是这样,获得该结果的合适表达式如下:
output "nic_ids" {
value = { for k, nic in module.NIC : k => nic.nic_id }
}
上述方法:为NIC
模块的每个实例生成一个元素映射,其键为模块实例键,其值为NIC_id
输出值
或者,如果哪个id属于哪个实例并不重要,那么您可以生成一组无序的id,如下所示:
{
nic1 = {
nic_id = "eni-e5aa89a3"
}
}
{
nic1 = "eni-e5aa89a3"
}
output "nic_ids" {
value = toset([for nic in module.NIC : nic.nic_id])
}
在这种情况下,for
表达式只定义一个本地符号nic
,它表示模块实例对象,因为它与实例键无关。这里的toset
表示ID没有任何特定的顺序:这不是严格必要的,但我认为这是一个很好的实践,以确保依赖于该值的任何其他地形代码不会无意中依赖于ID的当前任意顺序,如果您在var.nics
中添加或删除元素,将来可能会发生变化。谢谢Martin,让我试试。