【发布时间】:2020-12-05 01:03:01
【问题描述】:
我一直在尝试编写一个可以改变这个的 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 名称作为资源键而不是子网名称(这会导致由于密钥更改而销毁/创建对)。
【问题讨论】:
-
预期的结果是什么?
-
@marcin - 我试图让我的本地
nsg_assocs与原始值相同,但使用新的subnets作为数据源。我会尽快更新问题以澄清......
标签: terraform