【问题标题】:Convert list to map with index in Terraform在 Terraform 中将列表转换为带有索引的地图
【发布时间】:2020-12-04 03:17:54
【问题描述】:

我想将 terraform 中的简单字符串列表转换为以键为索引的地图。

我想从这样的事情出发:

locals {
  keycloak_secret = [
    "account-console",
    "admin-cli",
    "broker",
    "internal",
    "realm-management",
    "security-admin-console",
  ]
}

类似

map({0:"account-console", 1:"admin-cli"}, ...) 

我的目标是利用 terraform 0.13 的新功能在 terraform module. 上使用循环遍历地图

我没有找到任何解决方案,请帮助我,谢谢。

【问题讨论】:

  • 这里有需要索引的原因吗?将列表转换为集合,这样您就可以使用for_each 循环遍历它,您会不会更好?
  • @ydaetskcoR 我不知道这是可能的。请问你有例子吗?我一直在努力学习更多。

标签: terraform hcl


【解决方案1】:

如果我理解正确,您想将列表转换为地图。如果是这样,那么你可以这样做:

locals {
  keycloak_secret_map  = {for idx, val in local.keycloak_secret: idx => val}  
}

产生:

{
  "0" = "account-console"
  "1" = "admin-cli"
  "2" = "broker"
  "3" = "internal"
  "4" = "realm-management"
  "5" = "security-admin-console"
}

【讨论】:

  • 谢谢@Marcin,这正是我想要的。我已经接受了你的回答:)
【解决方案2】:

我想出了另一个解决方案,比 @Marcin 的答案更难看。

locals = {
    keycloak_secret_map = for secret_name in local.keycloak_secret : index(local.keycloak_secret, secret_name) => secret_name
}

这给了

{
  0 = "account-console"
  1 = "admin-cli"
  2 = "broker"
  3 = "internal"
  4 = "realm-management"
  5 = "security-admin-console"
}

【讨论】:

  • 如果您承认它相同但更丑陋,那么这个答案比现有答案增加了什么价值?
  • @ydaetskcoR 所以人们可以看到还有其他方法可以做事。答案很有趣,因为它可以帮助您进行您最初认为不可能的其他转变。
猜你喜欢
  • 2019-06-09
  • 1970-01-01
  • 2020-11-17
  • 2020-11-21
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
相关资源
最近更新 更多