首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TerraForm0.11如何从地图中删除键值对?

TerraForm0.11如何从地图中删除键值对?
EN

Stack Overflow用户
提问于 2022-10-27 13:08:29
回答 1查看 40关注 0票数 0

我在变量中有一个映射,var.fruits如下所示,但我希望创建一个本地映射,并删除与橙子匹配的键值。所以从下面的地图

代码语言:javascript
复制
{
  "oranges" = {
    "number" = "165"
    "name" = "oranges"
  },
  "apples" = {
    "number" = "200"
    "name" = "apples"
  }
}

我想创建以下地图:

代码语言:javascript
复制
{
  "oranges" = {
    "number" = "165"
    "name" = "oranges"
  }
}

我尝试了下面的代码

代码语言:javascript
复制
locals {
  new_fruit_map = {for k, v in var.fruits : k => v
    if k != "apples" }
}

但是,我在计划中得到以下错误分析:

在369:27:预期::逗号

看起来像是语法问题,但不确定我遗漏了什么:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-28 00:44:10

TerraFormv0.11已经过时,这种操作超出了Terraform语言非常老版本的能力。

您可以找到Terraformv0.11 在旧Terraform v0.11文档中所有与表达式相关的功能的完整描述。该页面描述了Terraformv0.11中可用于数据操作的全部功能。特别要注意的是,for表达式在该版本中不可用,所有动态表达式都必须使用字符串内插语法表示。

我可以想到一种类似于你所描述的东西的方法,但它并不准确,而且很难理解:

代码语言:javascript
复制
variable "fruits" {
  type = "map"
}

locals {
  filtered_fruits = "${merge(var.fruits, map("apples", {}))}"
}

您所描述的字符串映射实际上超出了Terraformv0.11设计支持的范围:它只支持官方支持的字符串映射。然而,Terraformv0.11的某些部分确实意外地支持嵌套映射,所以上面的内容可能会起作用,但我不能确定,因为我没有安装Terraformv0.11来测试。

这与您所要求的不同,因为它不是完全删除"apples",而是用一个空映射替换该元素的值,如下所示:

代码语言:javascript
复制
{
  "oranges" = {
    "number" = "165"
    "name" = "oranges"
  }
  "apples" = {}
}

这是否真的有用将取决于你打算用这个转换的价值做什么。

在Terraformv0.11的限制范围内,我无法想象有什么方法比这更接近您想要的结果。如果您需要处理的不是非常简单的直接资源声明,我强烈建议升级到Terraform的现代版本。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74222577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档