1

tfe プラグインの制限を超えるために何かをまとめようとしています。

更新する必要がある Terraform Cloud の変数で管理する 200 以上のワークスペースがあります。この場合、更新する必要があるすべてのワークスペースは「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.

ここで何をすべきかよくわかりませんが、これをいくつかの方法で試しましたが、わかりません。助けてくれてありがとう。

4

1 に答える 1

2

フィルタリングする場合、リソースは次のようになります (入力マップを生成する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."
}
于 2021-02-23T23:41:41.617 に答える