试图把一些东西放在一起,以通过对tfe插件的限制。
我有需要更新的Terraform中的变量管理的200+工作区。在本例中,我需要更新的所有工作区都以“dev-工作区”开头。
我有一个具有以下内容的数据块:
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-工作区”的字符串。我试过以下几种方法:
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.我不知道在这里该怎么做,但我已经尝试过几种方法,但还是找不出答案。谢谢你的帮助。
发布于 2021-02-23 23:41:41
如果您想要筛选,您的资源可能是(您必须将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."
}https://stackoverflow.com/questions/66341607
复制相似问题