gpt4 book ai didi

Terraform - 反转 map

转载 作者:行者123 更新时间:2023-12-04 00:14:02 27 4
gpt4 key购买 nike

我一直在尝试编写一个可以改变这个的 terraform 表达式:

subnets = {
my_subnet_1 = {
nsg = "my_nsg_1",
addresses = "my_addresses_1"
}
my_subnet_2 = {
nsg = "my_nsg_2",
addresses = "my_addresses_2"
}
}
进入
nsgs_assocs = {
my_nsg_1 = "my_subnet_1"
my_nsg_2 = "my_subnet_2"
}
我尝试了以下方法:
locals {
nsgs_assocs = zipmap(
var.subnets.*.nsg,
keys(var.subnets)
)
}
但这给出了一个错误:
Error: Invalid function argument

on ..\..\modules\vnet\main.tf line 22, in locals:
21: nsgs_assocs = zipmap(
22: var.subnets.*.nsg,
23: keys(var.subnets)
24: )

Invalid value for "keys" parameter: element 0: string required.
对于上下文,我继承了一堆脚本,我试图在不改变 terraform plan 的结果的情况下对其进行重构。 .
其中一个模块有很多相关的查找图——例如:
nsgs_assocs = {
my_nsg_1 = "my_subnet_1"
my_nsg_2 = "my_subnet_2"
}

subnet_addresses = {
my_subnet_1 = "my_addresses_1"
my_subnet_2 = "my_addresses_2"
}
我已经将其浓缩为我的第一个上面的示例,我认为从长远来看它会更易于维护。
但是,为了向后兼容现有的 terraform 状态,我需要生成原始的 nsgs_assocs在我的模块中,以便 for_each继续使用 nsg 名称而不是子网名称作为资源键(由于键更改而导致销毁/创建对)。

最佳答案

你在正确的轨道上。它不起作用,因为 splat expression适用于数组和 var.subnets是一张 map 。为了修复它,您需要将其转换为数组,可以使用 values terraform function 来完成。 :

locals {
nsgs_assocs = zipmap(
values(var.subnets)[*].nsg,
keys(var.subnets)
)
}

关于Terraform - 反转 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65140897/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com