azure - Terraform:如何从列表中的嵌套地图列表中选择一个值?
问题描述
所以在下面我有子网,它是主 vnet 列表中的映射列表。如果我正在为 azure 创建子网资源,我该如何提取每个资源的子网名称?如果我要更深入一点,我将如何提取 SG 名称?
variable "vnets" {
default = [
{
vnet_name = "test-vnet"
address_space = "10.250.0.0"
network_size = 16
subnets = [
{
name = "first-subnet"
network_security_group = "first-nsg"
security_group_rules = [
{
name = "first-sg"
priority = 100
}
]
},
{
name = "second-subnet"
network_security_group = "second-nsg"
security_group_rules = [
{
name = "second-sg"
priority = 100
}
]
}
]
}
]
}
解决方案
您可以使用以下内容locals
获取子网名称和安全组名称:
locals {
subnet_names = flatten(var.vnets[*].subnets[*].name)
subnet_names_with_vnet_name = {
for vnet in var.vnets[*]:
(vnet.vnet_name) => vnet.subnets[*].name
}
security_group_names = flatten(var.vnets[*].subnets[*].security_group_rules[*].name)
}
output "subnet_names" {
value = local.subnet_names
}
output "subnet_names_with_vnet_name" {
value = local.subnet_names_with_vnet_name
}
output "security_group_names" {
value = local.security_group_names
}
这导致:
security_group_names = [
"first-sg",
"second-sg",
]
subnet_names = [
"first-subnet",
"second-subnet",
]
subnet_names_with_vnet_name = {
"test-vnet" = [
"first-subnet",
"second-subnet",
]
}
推荐阅读
- angular - 确保在发出下一个值之前发生订阅的最佳方法
- angular - 无法将 null 分配给回复主题的下一个值
- xcode - MPRemoteCommandCenter 监视和如果播放运行命令
- reactjs - 带有 React 的 Material-UI Datepicker 不显示日期字段
- asp.net - 在 .NET Framework Web 应用程序中生成大型 .csv 文件(100 万行以上)
- javascript - 映射通过 Redux 连接的产品但它们不显示?
- google-cast - 播放总是在 RemoteMediaClient.queueJumpToItem 结合自动播放之后开始
- pyspark - Pyspark 正在尝试将列转换为布尔值。为什么?
- python-3.x - isinstance for list 的 pyparsing 问题
- r - 在 WSL2 中使用 nvim-R 时如何查看 ggplot2 输出