You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform中merge仅返回首个对象,如何合并两个Azure虚拟网络数据?

问题原因与解决方案

你用merge函数的方式不对,merge的作用是合并多个映射的键值对,当两个对象存在同名键时,后面的对象会覆盖前面的对应键值。而两个azurerm_virtual_network数据源返回的结构几乎完全一致,最终合并后的结果只会保留最后一个对象的内容(或因键覆盖导致内容异常),这就是你只能看到其中一个结果的原因。

要同时输出两个虚拟网络的完整数据,你需要把它们放到列表或带标识的映射中,而非用merge合并。

方案1:用列表存储两个虚拟网络对象

locals {
  virtual_networks = [
    data.azurerm_virtual_network.dsvnet_routable,
    data.azurerm_virtual_network.dsvnet_noneroutable
  ]
}

output "virtual_networks" {
  value = local.virtual_networks
}

输出后会得到一个包含两个虚拟网络对象的数组,每个元素对应一个数据源的完整结果。

方案2:用带标识的映射存储(方便后续按名称引用)

locals {
  virtual_networks = {
    routable     = data.azurerm_virtual_network.dsvnet_routable,
    non_routable = data.azurerm_virtual_network.dsvnet_noneroutable
  }
}

output "virtual_networks" {
  value = local.virtual_networks
}

这种方式会生成键值对结构,你可以通过local.virtual_networks.routable或local.virtual_networks.non_routable单独访问其中一个虚拟网络的数据,输出时也会完整展示两个对象的内容。

内容的提问来源于stack exchange,提问作者Kaja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:02:35