Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Terraform 复杂数据类型映射(对象)的关键是什么_Terraform - Fatal编程技术网

Terraform 复杂数据类型映射(对象)的关键是什么

Terraform 复杂数据类型映射(对象)的关键是什么,terraform,Terraform,我是terraform的新手,我正在努力理解下面的代码片段。 变量的类型为map(objects),其在map(objects)和keys上的循环函数接受一个映射并返回一个包含该映射中的键的列表。例如: 我相信输出会是这样的: network_ids = { network_alias = 123 network_alias = 456 network_alias = 789 } 网络别名的值是多少?我浏览了很多链接,但我无法理解 code snippet: locals {

我是terraform的新手,我正在努力理解下面的代码片段。 变量的类型为map(objects),其在map(objects)和keys上的循环函数接受一个映射并返回一个包含该映射中的键的列表。例如:

我相信输出会是这样的:

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
)。