From 6b33a0d4b7c84014c264b651092ff095647bcdf1 Mon Sep 17 00:00:00 2001
From: Sven-Hendrik Haase <svenstaro@gmail.com>
Date: Sat, 19 Sep 2020 01:43:04 +0200
Subject: [PATCH] Implement new Keycloak group structure

---
 tf-stage2/keycloak.tf | 98 ++++++++++++++++++++++++-------------------
 1 file changed, 55 insertions(+), 43 deletions(-)

diff --git a/tf-stage2/keycloak.tf b/tf-stage2/keycloak.tf
index 6ec959bca..584122867 100644
--- a/tf-stage2/keycloak.tf
+++ b/tf-stage2/keycloak.tf
@@ -240,90 +240,102 @@ resource "keycloak_saml_user_property_protocol_mapper" "gitlab_saml_username" {
 // |- Developers
 // |- Trusted Users
 // |- Wiki
-//    |- Admins
+// |  |- Admins
 // |- Forum
-//    |- Admins
-//    |- Mods
+// |  |- Admins
+// |  |- Mods
 // |- Security Team
-//    |- Admins
-//    |- Members
-//    |- Reporters
+// |  |- Admins
+// |  |- Members
+// |- IRC
+// |  |- Ops
 // |- Archweb
-//    |- Mirror Maintainers
-//    |- Testers
+// |  |- Mirrorlist Maintainers
+// |- Bug Wranglers
 // External Contributors
+// |- Security Team
+// |  |- Reporters
+// |- Archweb
+//    |- Testers
 resource "keycloak_group" "staff" {
   realm_id = "archlinux"
   name = "Arch Linux Staff"
 }
 
-resource "keycloak_group" "externalcontributors" {
+resource "keycloak_group" "staff_groups" {
+  for_each = toset(["DevOps", "Developers", "Trusted Users", "Wiki", "Forum", "Security Team", "IRC", "Archweb", "Bug Wranglers"])
+
   realm_id = "archlinux"
-  name = "External Contributors"
+  parent_id = keycloak_group.staff.id
+  name = each.value
 }
 
-variable "arch_groups" {
-  type = set(string)
-  default = ["DevOps", "Developers", "Trusted Users", "Wiki", "Forum", "Security Team", "Archweb"]
-}
+resource "keycloak_group" "staff_wiki_groups" {
+  for_each = toset(["Admins"])
 
-variable "arch_wiki_groups" {
-  type = set(string)
-  default = ["Admins"]
+  realm_id = "archlinux"
+  parent_id = keycloak_group.staff_groups["Wiki"].id
+  name = each.value
 }
 
-variable "arch_forum_groups" {
-  type = set(string)
-  default = ["Admins", "Mods"]
-}
+resource "keycloak_group" "staff_forum_groups" {
+  for_each = toset(["Admins", "Mods"])
 
-variable "arch_securityteam_groups" {
-  type = set(string)
-  default = ["Admins", "Members", "Reporters"]
+  realm_id = "archlinux"
+  parent_id = keycloak_group.staff_groups["Forum"].id
+  name = each.value
 }
 
-variable "arch_archweb_groups" {
-  type = set(string)
-  default = ["Mirror Maintainers", "Testers"]
+resource "keycloak_group" "staff_securityteam_groups" {
+  for_each = toset(["Admins", "Members"])
+
+  realm_id = "archlinux"
+  parent_id = keycloak_group.staff_groups["Security Team"].id
+  name = each.value
 }
 
-resource "keycloak_group" "arch_groups" {
-  for_each = var.arch_groups
+resource "keycloak_group" "staff_irc_groups" {
+  for_each = toset(["Ops"])
 
   realm_id = "archlinux"
-  parent_id = keycloak_group.staff.id
+  parent_id = keycloak_group.staff_groups["IRC"].id
   name = each.value
 }
 
-resource "keycloak_group" "arch_wiki_groups" {
-  for_each = var.arch_wiki_groups
+resource "keycloak_group" "staff_archweb_groups" {
+  for_each = toset(["Mirrorlist Maintainers"])
 
   realm_id = "archlinux"
-  parent_id = keycloak_group.arch_groups["Wiki"].id
+  parent_id = keycloak_group.staff_groups["Archweb"].id
   name = each.value
 }
 
-resource "keycloak_group" "arch_forum_groups" {
-  for_each = var.arch_forum_groups
+resource "keycloak_group" "externalcontributors" {
+  realm_id = "archlinux"
+  name = "External Contributors"
+}
+
+resource "keycloak_group" "externalcontributors_groups" {
+  for_each = toset(["Security Team", "Archweb"])
 
   realm_id = "archlinux"
-  parent_id = keycloak_group.arch_groups["Forum"].id
+  parent_id = keycloak_group.externalcontributors.id
   name = each.value
 }
 
-resource "keycloak_group" "arch_securityteam_groups" {
-  for_each = var.arch_securityteam_groups
+resource "keycloak_group" "externalcontributors_securityteam_groups" {
+  for_each = toset(["Reporters"])
 
   realm_id = "archlinux"
-  parent_id = keycloak_group.arch_groups["Security Team"].id
+  parent_id = keycloak_group.externalcontributors_groups["Security Team"].id
   name = each.value
 }
 
-resource "keycloak_group" "arch_archweb_groups" {
-  for_each = var.arch_archweb_groups
+resource "keycloak_group" "externalcontributors_archweb_groups" {
+  for_each = toset(["Testers"])
 
   realm_id = "archlinux"
-  parent_id = keycloak_group.arch_groups["Archweb"].id
+  parent_id = keycloak_group.externalcontributors_groups["Archweb"].id
   name = each.value
 }
 
@@ -347,7 +359,7 @@ resource "keycloak_role" "externalcontributor" {
 
 resource "keycloak_group_roles" "devops" {
   realm_id = "archlinux"
-  group_id = keycloak_group.arch_groups["DevOps"].id
+  group_id = keycloak_group.staff_groups["DevOps"].id
   role_ids = [
     keycloak_role.devops.id
   ]
-- 
GitLab