我在变量中有一个映射,var.fruits如下所示,但我希望创建一个本地映射,并删除与橙子匹配的键值。所以从下面的地图
{
"oranges" = {
"number" = "165"
"name" = "oranges"
},
"apples" = {
"number" = "200"
"name" = "apples"
}
}我想创建以下地图:
{
"oranges" = {
"number" = "165"
"name" = "oranges"
}
}我尝试了下面的代码
locals {
new_fruit_map = {for k, v in var.fruits : k => v
if k != "apples" }
}但是,我在计划中得到以下错误分析:
在369:27:预期::逗号
看起来像是语法问题,但不确定我遗漏了什么:
发布于 2022-10-28 00:44:10
TerraFormv0.11已经过时,这种操作超出了Terraform语言非常老版本的能力。
您可以找到Terraformv0.11 在旧Terraform v0.11文档中所有与表达式相关的功能的完整描述。该页面描述了Terraformv0.11中可用于数据操作的全部功能。特别要注意的是,for表达式在该版本中不可用,所有动态表达式都必须使用字符串内插语法表示。
我可以想到一种类似于你所描述的东西的方法,但它并不准确,而且很难理解:
variable "fruits" {
type = "map"
}
locals {
filtered_fruits = "${merge(var.fruits, map("apples", {}))}"
}您所描述的字符串映射实际上超出了Terraformv0.11设计支持的范围:它只支持官方支持的字符串映射。然而,Terraformv0.11的某些部分确实意外地支持嵌套映射,所以上面的内容可能会起作用,但我不能确定,因为我没有安装Terraformv0.11来测试。
这与您所要求的不同,因为它不是完全删除"apples",而是用一个空映射替换该元素的值,如下所示:
{
"oranges" = {
"number" = "165"
"name" = "oranges"
}
"apples" = {}
}这是否真的有用将取决于你打算用这个转换的价值做什么。
在Terraformv0.11的限制范围内,我无法想象有什么方法比这更接近您想要的结果。如果您需要处理的不是非常简单的直接资源声明,我强烈建议升级到Terraform的现代版本。
https://stackoverflow.com/questions/74222577
复制相似问题