Terraform 复杂数据类型映射(对象)的关键是什么
我是terraform的新手,我正在努力理解下面的代码片段。 变量的类型为map(objects),其在map(objects)和keys上的循环函数接受一个映射并返回一个包含该映射中的键的列表。例如: 我相信输出会是这样的:Terraform 复杂数据类型映射(对象)的关键是什么,terraform,Terraform,我是terraform的新手,我正在努力理解下面的代码片段。 变量的类型为map(objects),其在map(objects)和keys上的循环函数接受一个映射并返回一个包含该映射中的键的列表。例如: 我相信输出会是这样的: network_ids = { network_alias = 123 network_alias = 456 network_alias = 789 } 网络别名的值是多少?我浏览了很多链接,但我无法理解 code snippet: locals {
network_ids = {
network_alias = 123
network_alias = 456
network_alias = 789
}
网络别名的值是多少?我浏览了很多链接,但我无法理解
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\u id
是一个很好的例子。通常,局部值用于存储不希望重复的计算
network\u id
是一个特殊的应用程序map
for
表达式用于从其他“可枚举”值构建map
s
在terraform中,map
类似于其他语言中的HashMap(python中的dict
、ruby中的Hash
、Java中的HashMap
等等)<代码>映射包含一个关联列表,该列表将唯一键(始终是字符串
)映射到一个可以是任何一致类型的值(这意味着不能有类似{“a”=4,“b”=“c”}
的内容,因为4
和“c”
有不同的类型)
在您的特定示例中,用于密钥中的网络别名(var.networks)
表示
循环遍历var.networks
中的键(同样,string
s),并将每个键绑定到名称network\u alias
network\u alias=>aws\u vpc.subnet[network\u alias].id
部分显示
构建一个新映射,其中密钥与我们循环使用的密钥相同,并且该值是由该密钥索引的子网ID的查找
总而言之,local.network\u id
不会像下面这样结束,因为map
s有不同的键,而理解实际上会评估键值
network_ids = {
network_alias = 123
network_alias = 456
network_alias = 789
}
我不可能确切地告诉您该值是多少,因为我不知道
var.networks
的值,也不知道aws\u vpc.subnet
在地图(字符串)上循环的值,例如{for,in:=>}变量“hero\u千禧faces”{description=“map”type=map(string)default={neo=“hero”trinity=“love interest”morpheus=“mentor”}output“upper_roles”{value={for name,role in var.hero\u james:upper(name)=>upper(role)}}运行此代码的输出将是:upper_roles={“morpheus”=“mentor”“NEO”=“hero”“trinity”=“love interest”},是否要将每个对象绑定到名称network\u alias?@nadish这取决于循环的构造方式。如果像上面那样使用键(var.networks)
,它将只绑定到映射中的键。值(var.networks)
将绑定到实际对象。在映射中for
表达式,实际上可以执行{对于var.my_map中的k,v:…}
立即循环键对(绑定到k
)和值对(绑定到v
)。