Terraformでmapのkeyとvalueを入れ替える
Posted on
はじめに
Terraform を使ってユーザーの管理で利用しようとしています。
Terraform の locals でユーザーが key になっているのですが、ユーザーは複数のグループに所属します。
このままだとグループごとに for の loop が回せない状態です。
そこで key と value を入れ得られるようにする方法を考えたので、こちらにメモしておきます。
localsの定義
taro がグループ A,B,C に所属し、hanako がグループ A,D に所属している状態です。 グループ A には taro,hanako グループ B には taro …というような形に変更がしたいです。
locals {
user ={
taro = {
group = [
"A",
"B",
"C"
]
}
hanako = {
group = [
"A",
"D"
]
}
}
}
入れ替えの表現方法
output で記載しますが group の種類を全て抽出して各ユーザーの所属する group を判定します。
output "key-value-reverse" {
value = {
## 定義されているグループを全て抽出してforを回す
for group in distinct(flatten(values(local.user)[*].group)) :
# ユーザーが所属するグループかどうかを判断して所属する場合は、user_nameを配列に追加する
group =>[
for user_name,user_groups in local.user: user_name
if contains( flatten(values(user_groups)),group)
]
}
}
出力結果
意図通りにグループのAには hanako,taro, Bにはtaro .. と出力されました。
Changes to Outputs:
+ key-value-reverse = {
+ A = [
+ "hanako",
+ "taro",
]
+ B = [
+ "taro",
]
+ C = [
+ "taro",
]
+ D = [
+ "hanako",
]
}