5

I would like to convert a simple list of string in terraform to a map with the keys as indexes.

I want to go from something like this:

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

To something like

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

My goal is to take advantage of the new functionality of terraform 0.13 to use loop over map on terraform module.

I didn't find any solution, may something help me, thank you.

4

2 回答 2

10

If I understand correctly, you want to convert your list into map. If so, then you can do this as follows:

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

which produces:

{
  "0" = "account-console"
  "1" = "admin-cli"
  "2" = "broker"
  "3" = "internal"
  "4" = "realm-management"
  "5" = "security-admin-console"
}
于 2020-08-14T08:39:47.183 回答
0

I've come up with another solution, which is uglier than @Marcin 's answer.

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

Which gives

{
  0 = "account-console"
  1 = "admin-cli"
  2 = "broker"
  3 = "internal"
  4 = "realm-management"
  5 = "security-admin-console"
}
于 2020-08-14T08:58:53.920 回答