преобразование объекта terraform hcl

есть объект вроде

variable "user_role" {
  type = map(list(string))
}

user_role = {
 user_a: ['role_a', 'role_b', 'role_c']
 user_b: ['role_a', 'role_c']
 user_c: ['role_c']
}

то, что у меня сейчас есть, просто расплющить:

role-user = flatten([
    for member in keys(var.user_role): [
      for value in var.user_role[member] : {
        role = value
        member = member
      }
    ]
  ])

необходимо преобразовать его, чтобы иметь роль ключа.

role_user = {
  role_a: ['user_a', 'user_b']
  role_b: ['user_a']
  role_c: ['user_a', 'user_b', 'user_c']
}

какие-нибудь идеи о том, как этого достичь? Спасибо


person Johnnie Walker    schedule 21.05.2021    source источник


Ответы (2)


Судя по вашему примеру, вы описываете функциональность встроенного transpose функция:

locals {
  role_user = transpose(var.user_role)
}
person Martin Atkins    schedule 22.05.2021

Вы можете сделать это следующим образом (не забывайте о ...):

role-user = merge([
           for user, roles in var.user_role:
            {
              for role in roles: user => role...
            }
           ]...)
person Marcin    schedule 21.05.2021
comment
вроде бы то же самое, - пользователь как ключ. но мне нужна роль, чтобы быть ключевым. Я немного изменил его, но безуспешно. user_role = { user_a: ["role_a", "role_b", "role_c"] user_b: ["role_a", "role_c"] user_c: ["role_c"] } role_user = merge([ for user, roles in local.user_role: { for role in roles: role => user... } ]...) --------------- # консоль terraform ›local.role_user {role_a = [user_b,] role_b = [user_a,] role_c = [user_c,]} - person Johnnie Walker; 02.06.2021
comment
извините за беспорядок, не понимаю, почему игнорируются символы новой строки - person Johnnie Walker; 02.06.2021
comment
@JohnnieWalker Извините, я не понимаю, о чем вы спрашиваете. Вы уже приняли другой ответ. Может там спросить? - person Marcin; 02.06.2021