Dateien nach "keycloak-tf-projekt" hochladen

This commit is contained in:
2025-12-08 13:56:52 +01:00
parent c6e30bf40c
commit 5a121e9572
7 changed files with 199 additions and 0 deletions
+46
View File
@@ -0,0 +1,46 @@
# This file is maintained automatically by "terraform init".
# Manual edits may be lost in future updates.
provider "registry.terraform.io/hashicorp/random" {
version = "3.7.2"
hashes = [
"h1:356j/3XnXEKr9nyicLUufzoF4Yr6hRy481KIxRVpK0c=",
"zh:14829603a32e4bc4d05062f059e545a91e27ff033756b48afbae6b3c835f508f",
"zh:1527fb07d9fea400d70e9e6eb4a2b918d5060d604749b6f1c361518e7da546dc",
"zh:1e86bcd7ebec85ba336b423ba1db046aeaa3c0e5f921039b3f1a6fc2f978feab",
"zh:24536dec8bde66753f4b4030b8f3ef43c196d69cccbea1c382d01b222478c7a3",
"zh:29f1786486759fad9b0ce4fdfbbfece9343ad47cd50119045075e05afe49d212",
"zh:4d701e978c2dd8604ba1ce962b047607701e65c078cb22e97171513e9e57491f",
"zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3",
"zh:7b8434212eef0f8c83f5a90c6d76feaf850f6502b61b53c329e85b3b281cba34",
"zh:ac8a23c212258b7976e1621275e3af7099e7e4a3d4478cf8d5d2a27f3bc3e967",
"zh:b516ca74431f3df4c6cf90ddcdb4042c626e026317a33c53f0b445a3d93b720d",
"zh:dc76e4326aec2490c1600d6871a95e78f9050f9ce427c71707ea412a2f2f1a62",
"zh:eac7b63e86c749c7d48f527671c7aee5b4e26c10be6ad7232d6860167f99dbb0",
]
}
provider "registry.terraform.io/keycloak/keycloak" {
version = "5.5.0"
constraints = "~> 5.0"
hashes = [
"h1:RLA8lhkI2RRjATxtugbTNXjQ+lEUqMQfkO/Abtl/mQo=",
"zh:2c645fe37ad8a4e0285a6e6e11997df4128de378fab947bb199711c4845d0088",
"zh:3aa285795fdec20b761f23f62937baf9a771879e8e0a946e21dd999bd323122d",
"zh:3cbd0853f60a4eedd0e8e1da372a86548c4363f6486c6ea6b82ff352a59a31df",
"zh:4782ea614445ca7c810de840421caf0836d67093045adde9083853456dbf1493",
"zh:557fa0b50c1ac08be7d2f3e99856f0d4a3638637ccd86360a5a96f4dd870012e",
"zh:5fd4b9a0f6595516a0b5783b3eb5a4768cf8f4a5653f8fde755a5d64cdbe9e58",
"zh:6039356cddd9d6ea64da8b470c902dc56ec84ba727521e768d0b6b4d82f4191b",
"zh:97029e6e8749d863c2fbbe777a0aa46abb56ce0076a8f6f1a0415b7b1f944ea0",
"zh:9f2b26a7112d015691193dd4763c886881419bd4eed19bdd9678f651dc59af8d",
"zh:9fd7e9998ecb8863985de1b5500dc2e3dad0e6883c539aa7dcc4cee3f3454932",
"zh:b6cc955f63f0a3e8473c3f7ec58c4dfba7749dba947046b1912d77c01ee63980",
"zh:b8fe11bdc538348eb52661143293595fce7e6dbe8efa4f661b4bc17b8fa9e887",
"zh:b90fe01f658ab6c47747f724b1375765d7678c9f51ac4efe9473521dfe769a62",
"zh:d3c997261ac93aa30c193b98c40c69c42416cd94a07e4380d7bd05dfd1ac23e9",
"zh:e73723f32cc6f5eb0443ad711a24fb52c3193df18a3e3da7520e9b8726e46cc0",
"zh:f610b4294121e327b7474f9e534bd63d932570addd17ca1474607e368f71f768",
"zh:fcd7c91c24711fa0f15fa52c2b9fa11d5bbaa8597eba0dafd8cbebe25274b819",
]
}
+56
View File
@@ -0,0 +1,56 @@
provider "keycloak" {
url = var.keycloak_url
realm = "master"
client_id = "admin-cli"
username = var.keycloak_username
password = var.keycloak_password
}
locals {
realm_config_files = fileset("./realms", "*.json")
all_realm_configs = {
for filename in local.realm_config_files :
trimsuffix(basename(filename), ".json") => jsondecode(file("${path.module}/realms/${filename}"))
}
# Nimm das ERSTE Objekt in der Liste (den ersten Benutzer)
config_user_raw = file("./users.csv")
config_user_data = csvdecode(local.config_user_raw)
user_map_from_csv = {
for user_obj in local.config_user_data : user_obj.username => user_obj
}
}
resource "keycloak_realm" "test_realm" {
for_each = local.all_realm_configs
realm = each.value.realm
enabled = each.value.enabled
}
module "keycloak_clients" {
// Der Pfad zu Ihrem Modul-Ordner
source = "./modules/clients"
// Übergabe der Realm ID an die Variable "realm_id" des Moduls
realm_id = keycloak_realm.test_realm["first"].id
}
# data "keycloak_openid_client" "web_app_client_data" {
# realm_id = keycloak_realm.test_realm["first"].id
# client_id = "my-web-app-client"
# }
module "keycloak_users" {
source = "./modules/users"
# Übergabe der Realm ID und der Benutzer-Details
realm_id = keycloak_realm.test_realm["first"].id
usernames = local.user_map_from_csv
target_client_id = module.keycloak_clients.all_client_ids_map.my-web-app-client
role_to_assign = "user"
}
+51
View File
@@ -0,0 +1,51 @@
# output "admin_pass" {
# value = var.keycloak_password
# sensitive = true # falls die Ausgabe erwünscht ist. Aber es wird trotzdem <sensitive> angezeigt
# }
# output "admin_url" {
# value = var.keycloak_url
# }
# output "web_app_client_id" {
# description = "Die ID des OpenID Connect Clients."
# value = module.keycloak_clients.web_app_client_id
# }
# output "web_app_client_secret" {
# description = "Das automatisch generierte Client Secret der Webanwendung."
# // Der Wert wird direkt aus dem Attribut der erstellten Ressource gelesen.
# value = module.keycloak_clients.web_app_client_secret
# sensitive = true // 🔒 Markiert das Secret als sensibel
# }
# output "client_secrets" {
# description = "Alle Client Secrets der konfigurierten Keycloak Clients (Map)."
# // Greift auf den Map-Output des Moduls zu
# value = module.keycloak_clients.all_client_secrets_map
# sensitive = true
# }
# output "user_initial_password" {
# description = "Alle generierten Benutzer-Passwörter."
# value = module.keycloak_users.all_generated_passwords
# sensitive = true
# }
# output "debug_csv_content" {
# description = "Zeigt den Inhalt der CSV nach dem Dekodieren an."
# # 💡 Zeigt die Liste von Objekten, die csvdecode erzeugt hat
# value = local.config_user_data
# }
# output "debug_other_content" {
# description = "Zeigt den Inhalt der CSV nach dem Dekodieren an."
# # 💡 Zeigt die Liste von Objekten, die csvdecode erzeugt hat
# value = local.all_realm_configs
# }
# output "test" {
# # 💡 Zeigt die Liste von Objekten, die csvdecode erzeugt hat
# value = path.module
# sensitive = false
# }
+2
View File
@@ -0,0 +1,2 @@
keycloak_url = "https://lt642223.regioit.local"
keycloak_username = "admin"
+16
View File
@@ -0,0 +1,16 @@
username,email,first_name
maria.schmidt,maria.s@example.com,Maria
sebastian.bauer,sebastian.b@example.com,Sebastian
lena.fischer,lena.f@example.com,Lena
david.schuster,david.s@example.com,David
anna.maier,anna.m@example.com,Anna
thomas.walter,thomas.w@example.com,Thomas
julia.koehler,julia.k@example.com,Julia
ben.huber,ben.h@example.com,Ben
laura.vogt,laura.v@example.com,Laura
max.meyer,max.m@example.com,Max
sarah.wagner,sarah.w@example.com,Sarah
chris.lang,chris.l@example.com,Chris
emily.neuer,emily.n@example.com,Emily
niklas.winter,niklas.w@example.com,Niklas
sophia.weber,sophia.w@example.com,Sophia
1 username email first_name
2 maria.schmidt maria.s@example.com Maria
3 sebastian.bauer sebastian.b@example.com Sebastian
4 lena.fischer lena.f@example.com Lena
5 david.schuster david.s@example.com David
6 anna.maier anna.m@example.com Anna
7 thomas.walter thomas.w@example.com Thomas
8 julia.koehler julia.k@example.com Julia
9 ben.huber ben.h@example.com Ben
10 laura.vogt laura.v@example.com Laura
11 max.meyer max.m@example.com Max
12 sarah.wagner sarah.w@example.com Sarah
13 chris.lang chris.l@example.com Chris
14 emily.neuer emily.n@example.com Emily
15 niklas.winter niklas.w@example.com Niklas
16 sophia.weber sophia.w@example.com Sophia
+18
View File
@@ -0,0 +1,18 @@
variable "keycloak_url" {
description = "Die vollständige URL zur Keycloak-Instanz (z.B. http://localhost:8080)"
type = string
}
variable "keycloak_username" {
description = "Der Benutzername des Master-Admins"
type = string
}
variable "keycloak_password" {
description = "Das Passwort des Master-Admins"
type = string
sensitive = true # 💡 Wichtig: Maskiert den Wert in der CLI-Ausgabe (plan/apply)
}
+10
View File
@@ -0,0 +1,10 @@
terraform {
required_providers {
// Definiert den Keycloak Provider
keycloak = {
source = "keycloak/keycloak"
version = "~> 5.0"
}
}
}