From 5a121e95729f2c0b0320a91207c7526b579c20f8 Mon Sep 17 00:00:00 2001 From: marcel Date: Mon, 8 Dec 2025 13:56:52 +0100 Subject: [PATCH] Dateien nach "keycloak-tf-projekt" hochladen --- keycloak-tf-projekt/.terraform.lock.hcl | 46 ++++++++++++++++++++ keycloak-tf-projekt/main.tf | 56 +++++++++++++++++++++++++ keycloak-tf-projekt/outputs.tf | 51 ++++++++++++++++++++++ keycloak-tf-projekt/terraform.tfvars | 2 + keycloak-tf-projekt/users.csv | 16 +++++++ keycloak-tf-projekt/variables.tf | 18 ++++++++ keycloak-tf-projekt/versions.tf | 10 +++++ 7 files changed, 199 insertions(+) create mode 100644 keycloak-tf-projekt/.terraform.lock.hcl create mode 100644 keycloak-tf-projekt/main.tf create mode 100644 keycloak-tf-projekt/outputs.tf create mode 100644 keycloak-tf-projekt/terraform.tfvars create mode 100644 keycloak-tf-projekt/users.csv create mode 100644 keycloak-tf-projekt/variables.tf create mode 100644 keycloak-tf-projekt/versions.tf diff --git a/keycloak-tf-projekt/.terraform.lock.hcl b/keycloak-tf-projekt/.terraform.lock.hcl new file mode 100644 index 0000000..a4f13db --- /dev/null +++ b/keycloak-tf-projekt/.terraform.lock.hcl @@ -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", + ] +} diff --git a/keycloak-tf-projekt/main.tf b/keycloak-tf-projekt/main.tf new file mode 100644 index 0000000..0ea2734 --- /dev/null +++ b/keycloak-tf-projekt/main.tf @@ -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" +} \ No newline at end of file diff --git a/keycloak-tf-projekt/outputs.tf b/keycloak-tf-projekt/outputs.tf new file mode 100644 index 0000000..d322ec0 --- /dev/null +++ b/keycloak-tf-projekt/outputs.tf @@ -0,0 +1,51 @@ +# output "admin_pass" { +# value = var.keycloak_password +# sensitive = true # falls die Ausgabe erwünscht ist. Aber es wird trotzdem 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 +# } \ No newline at end of file diff --git a/keycloak-tf-projekt/terraform.tfvars b/keycloak-tf-projekt/terraform.tfvars new file mode 100644 index 0000000..8b13225 --- /dev/null +++ b/keycloak-tf-projekt/terraform.tfvars @@ -0,0 +1,2 @@ +keycloak_url = "https://lt642223.regioit.local" +keycloak_username = "admin" \ No newline at end of file diff --git a/keycloak-tf-projekt/users.csv b/keycloak-tf-projekt/users.csv new file mode 100644 index 0000000..4b98db1 --- /dev/null +++ b/keycloak-tf-projekt/users.csv @@ -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 \ No newline at end of file diff --git a/keycloak-tf-projekt/variables.tf b/keycloak-tf-projekt/variables.tf new file mode 100644 index 0000000..0aeb708 --- /dev/null +++ b/keycloak-tf-projekt/variables.tf @@ -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) +} + + + diff --git a/keycloak-tf-projekt/versions.tf b/keycloak-tf-projekt/versions.tf new file mode 100644 index 0000000..e99e195 --- /dev/null +++ b/keycloak-tf-projekt/versions.tf @@ -0,0 +1,10 @@ +terraform { + required_providers { + // Definiert den Keycloak Provider + keycloak = { + source = "keycloak/keycloak" + version = "~> 5.0" + } + } + +} \ No newline at end of file