我是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
是专门map
for
表达。map
for
表达式用于从其他"可枚举"值构建map
。
在terraform中,map
就像其他语言中的HashMap(dict
python,Hash
ruby,JavaHashMap
等等)。map
包含一个关联列表,将唯一键(始终是string
)映射到可以是任何一致类型的值(这意味着你不能有像{ "a" = 4, "b" = "c" }
这样的东西,因为4
和"c"
有不同的类型)。
在你的具体例子中,for network_alias in keys(var.networks)
说,基本上
循环遍历
var.networks
中的密钥(再次string
s),并将每个密钥绑定到名称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
的价值。