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
相关产品推荐
相关产品推荐

