复杂数据类型map(object)中的键是什么



我是terraform的新手,我正在尝试理解下面的代码片段。 变量的类型是map(objects),它的循环map(objects)和键函数接受一个map并返回一个包含该map键的列表。示例:https://www.terraform.io/docs/configuration/functions/keys.html

我相信输出将是这样的:

network_ids = {
network_alias = 123
network_alias = 456
network_alias = 789
}

network_alias的价值是多少?我通过了很多链接,但我无法理解。

code snippet:
locals {
network_ids = {
for network_alias in keys(var.networks) :
network_alias => aws_vpc.subnet[network_alias].id
}
}
variable "networks" {
type = map(object({
network_number    = string
availability_zone = string
}))
}

我很高兴分解一下。

因此,首先,network_ids是一个地形局部值。通常,本地值用于存储您不想一遍又一遍重复的计算。

network_ids是专门mapfor表达。mapfor表达式用于从其他"可枚举"值构建map

在terraform中,map就像其他语言中的HashMap(dictpython,Hashruby,JavaHashMap等等)。map包含一个关联列表,将唯一键(始终是string)映射到可以是任何一致类型的值(这意味着你不能有像{ "a" = 4, "b" = "c" }这样的东西,因为4"c"有不同的类型)。

在你的具体例子中,for network_alias in keys(var.networks)说,基本上

循环遍历var.networks中的密钥(再次strings),并将每个密钥绑定到名称network_alias

network_alias => aws_vpc.subnet[network_alias].id部分说

构建一个新映射,其中的键与我们正在循环的键相同,并且值是按键索引的子网 ID 的查找。

话虽如此,local.network_ids最终不会看起来像下面这样,因为map有不同的键,并且理解实际上评估了键值

network_ids = {
network_alias = 123
network_alias = 456
network_alias = 789
}

我不可能确切地告诉你价值是多少,因为我不知道var.networks的价值,也不知道aws_vpc.subnet的价值。

最新更新