terraform - 遍历字符串的条件 for_each 映射
问题描述
试图将一些东西放在一起以通过 tfe 插件的限制。
我有 200 多个工作区,我使用 Terraform Cloud 中的一个需要更新的变量进行管理。在这种情况下,我需要更新的所有工作空间都以“dev-workspace”开头。
我有一个包含以下内容的数据块:
data "tfe_workspace_ids" "all" {
names = ["*"]
organization = "myorganization"
}
由于模块的限制,我无法对这些工作区进行通配符搜索。此数据块返回包含我所有工作区的字符串映射:
aa = {
"dev-workspace-1" = "ws-anonymized"
"dev-workspace-2" = "ws-ws-anonymized"
"dev-workspace-3" = "ws-ws-anonymized"
"test-workspace-1" = "ws-ws-anonymized"
"prod-workspace-1" = "ws-ws-anonymized"
}
我的问题是我需要获取此字符串映射并将其过滤以仅返回键中具有“dev-workspace”的字符串。我尝试过类似以下的方法:
resource "tfe_variable" "dev-workspace" {
for_each = contains(data.tfe_workspace_ids.all.ids, "dev-workspace")
key = "access_key"
value = "XXXX"
category = "terraform"
workspace_id = each.value
sensitive = true
description = "AWS IAM secret access key."
}
但看起来你不能contains
以这种方式使用for_each
:
Error: Error in function call
on main.tf line 16, in resource "tfe_variable" "dev-workspace":
16: for_each = contains(data.tfe_workspace_ids.all.ids, "dev-workspace")
|----------------
| data.tfe_workspace_ids.all.ids is map of string with 284 elements
Call to function "contains" failed: argument must be list, tuple, or set.
我不太确定在这里做什么,但是已经尝试了几种方法并且无法弄清楚。谢谢你的帮助。
解决方案
如果要过滤,您的资源可能是(您必须更改var.aa
为data.tfe_workspace_ids
生成输入映射的值):
variable "aa" {
default = {
"dev-workspace-1" = "ws-anonymized"
"dev-workspace-2" = "ws-ws-anonymized"
"dev-workspace-3" = "ws-ws-anonymized"
"test-workspace-1" = "ws-ws-anonymized"
"prod-workspace-1" = "ws-ws-anonymized"
}
}
resource "tfe_variable" "dev-workspace" {
for_each = {for k, v in var.aa:
k => v if length(regexall("dev-workspace", k)) > 0}
key = "access_key"
value = "XXXX"
category = "terraform"
workspace_id = each.value
sensitive = true
description = "AWS IAM secret access key."
}
推荐阅读
- python - 组合来自 JSON 的列表元素列表
- css - 为什么css中的百分比单位不适用于字体
- python - ModuleNotFoundError:没有命名模块 - 但是该模块确实存在
- python - Python webscraping url拆分
- ssl - 使用 SSL 在 Raspberry Pi 上运行 gRPC 服务器
- python - 使用参数调用单元测试
- mysql - Passing JSON-Objekt to MYSQL columns via node
- html - 如何使用flexbox垂直居中特定的孩子?
- javascript - Javascript Regex 在 Edge 中失败,但在所有其他浏览器中都可以使用
- css - 减少全日历今天日期的 z-index