TF:通过查找循环映射并相应地设置变量

TF: Loop through map with lookup and set variable accordingly

我有一个地图,其中一些环境 ID 作为键,然后关键字作为列表中的值。

variable "environments" {
  type    = map(list(string))
  default = {
    "env-one" = ["dev", "test", "stage", "staging"],
    "env-two" = ["prod", "production", "live"]
  }
}

我希望使用它来根据 var.context["stage"] 的值设置环境名称。

因此,如果 var.context["stage"] 等于 staging,则 environment 的值将为 dev

我最初想使用 lookup(),类似于;

environment = "${lookup(var.environments, var.context["stage"])}"

但是,我意识到这是错误的查找方式(查找值而不是键),而且它不能作为地图的一部分工作。所以大概我需要在每次迭代中查看地图和运行查找(尽管)向后(?)?

您可能希望将类型重组为 map(string)。那么它的值将是:

{
  "dev"        = "env-one",
  "test"       = "env-one",
  "stage"      = "env-one",
  "staging"    = "env-one",
  "prod"       = "env-two",
  "production" = "env-two",
  "live"       = "env-two"
}

您也可以将其修改为 map(object) 以包含更多信息。根据问题中描述的用法,local 实际上更有意义。如果您要将此数据放入名为 environmentslocals 块中,则可以访问 key-value 对(根据问题),例如 local.environments[var.context["stage"]].