如何在Terraform中移除匹配指定键列表的映射元素?
Terraform 移除映射中匹配指定键列表的元素
要实现从Terraform映射中移除指定键列表对应的元素,比如移除示例中的key_b和key_c,可以通过for表达式结合contains函数完成,具体实现如下:
输入示例
map = { key_a = value_a, key_b = value_b, key_c = value_c, key_m = value_m }
期望输出
filtered_map = { key_a = value_a, key_m = value_m }
正确实现代码
假设你已定义两个变量:var.map为原始映射,var.exclude为需要排除的键列表(比如["key_b", "key_c"]),正确的过滤逻辑如下:
output "filtered_map" { value = { for k, v in var.map : k => v if !contains(var.exclude, k) } }
错误分析
你之前的代码逻辑存在偏差:
output "test" { value = { for k, v in var.map: k => v if ! contains(values(v), var.exclude) } }
这里的values(v)是提取当前值v的元素列表(仅当v为复杂类型时有效),但我们需要判断的是键k是否存在于排除列表中,而非值是否包含排除列表。正确用法是将排除列表作为contains的第一个参数,当前键作为第二个参数,取反后即可过滤掉指定键对应的元素。
内容的提问来源于stack exchange,提问作者mo farah
相关产品推荐
相关产品推荐

