From 36758b65bf0da2f3fcc4ddedb5bea87fcef8a3fc Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Tue, 27 Jun 2023 21:39:12 +0200
Subject: [PATCH] OZG-3961 - serviceaccount update

---
 .../serviceaccount-keycloakclient-read.yaml   | 53 +++++++++++++++++
 .../serviceaccount-keycloakclient-write.yaml  | 57 +++++++++++++++++++
 .../serviceaccount-keycloakgroup-read.yaml    | 53 +++++++++++++++++
 .../serviceaccount-keycloakgroup-write.yaml   | 57 +++++++++++++++++++
 ...perator.ozgcloud.de_OzgKeycloakClient.yaml | 44 ++++++++++++++
 ...operator.ozgcloud.de_OzgKeycloakGroup.yaml | 44 ++++++++++++++
 .../realm/KeycloakRealmReconciler.java        |  2 +-
 .../keycloak/user/OzgKeycloakUserSpec.java    |  4 +-
 8 files changed, 311 insertions(+), 3 deletions(-)
 create mode 100644 doc/ServiceAccount/serviceaccount-keycloakclient-read.yaml
 create mode 100644 doc/ServiceAccount/serviceaccount-keycloakclient-write.yaml
 create mode 100644 doc/ServiceAccount/serviceaccount-keycloakgroup-read.yaml
 create mode 100644 doc/ServiceAccount/serviceaccount-keycloakgroup-write.yaml
 create mode 100644 doc/crds/operator.ozgcloud.de_OzgKeycloakClient.yaml
 create mode 100644 doc/crds/operator.ozgcloud.de_OzgKeycloakGroup.yaml

diff --git a/doc/ServiceAccount/serviceaccount-keycloakclient-read.yaml b/doc/ServiceAccount/serviceaccount-keycloakclient-read.yaml
new file mode 100644
index 0000000..fdaada3
--- /dev/null
+++ b/doc/ServiceAccount/serviceaccount-keycloakclient-read.yaml
@@ -0,0 +1,53 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: ozg-operator-keycloakclient-viewer-role-binding
+subjects:
+  - kind: ServiceAccount
+    name: ozg-operator-serviceaccount
+    namespace: by-torsten-ozg-operator-dev
+roleRef:
+  kind: ClusterRole
+  name: ozg-operator-keycloakclient-viewer-role
+  apiGroup: rbac.authorization.k8s.io
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: ozg-operator-keycloakclient-viewer-role
+rules:
+  - apiGroups:
+      - "*"
+    resources:
+      - ozgkeycloakclients
+      - ozgkeycloakclients/status
+      - ozgkeycloakclients/finalizers
+    verbs:
+      - get
+      - list
+      - watch
diff --git a/doc/ServiceAccount/serviceaccount-keycloakclient-write.yaml b/doc/ServiceAccount/serviceaccount-keycloakclient-write.yaml
new file mode 100644
index 0000000..f8bf6b1
--- /dev/null
+++ b/doc/ServiceAccount/serviceaccount-keycloakclient-write.yaml
@@ -0,0 +1,57 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: ozg-operator-keycloakclient-writer-role-binding
+subjects:
+  - kind: ServiceAccount
+    name: ozg-operator-serviceaccount
+    namespace: by-torsten-ozg-operator-dev
+roleRef:
+  kind: ClusterRole
+  name: ozg-operator-keycloakclient-writer-role
+  apiGroup: rbac.authorization.k8s.io
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: ozg-operator-keycloakclient-writer-role
+rules:
+  - apiGroups:
+      - "*"
+    resources:
+      - ozgkeycloakclients/status
+      - ozgkeycloakclients/finalizers
+      - ozgkeycloakclients
+    verbs:
+      - get
+      - list
+      - create
+      - delete
+      - patch
+      - update
+      - watch
diff --git a/doc/ServiceAccount/serviceaccount-keycloakgroup-read.yaml b/doc/ServiceAccount/serviceaccount-keycloakgroup-read.yaml
new file mode 100644
index 0000000..b783031
--- /dev/null
+++ b/doc/ServiceAccount/serviceaccount-keycloakgroup-read.yaml
@@ -0,0 +1,53 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: ozg-operator-keycloakgroup-viewer-role-binding
+subjects:
+  - kind: ServiceAccount
+    name: ozg-operator-serviceaccount
+    namespace: by-torsten-ozg-operator-dev
+roleRef:
+  kind: ClusterRole
+  name: ozg-operator-keycloakgroup-viewer-role
+  apiGroup: rbac.authorization.k8s.io
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: ozg-operator-keycloakgroup-viewer-role
+rules:
+  - apiGroups:
+      - "*"
+    resources:
+      - ozgkeycloakgroups
+      - ozgkeycloakgroups/status
+      - ozgkeycloakgroups/finalizers
+    verbs:
+      - get
+      - list
+      - watch
diff --git a/doc/ServiceAccount/serviceaccount-keycloakgroup-write.yaml b/doc/ServiceAccount/serviceaccount-keycloakgroup-write.yaml
new file mode 100644
index 0000000..4ec0488
--- /dev/null
+++ b/doc/ServiceAccount/serviceaccount-keycloakgroup-write.yaml
@@ -0,0 +1,57 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: ozg-operator-keycloakgroup-writer-role-binding
+subjects:
+  - kind: ServiceAccount
+    name: ozg-operator-serviceaccount
+    namespace: by-torsten-ozg-operator-dev
+roleRef:
+  kind: ClusterRole
+  name: ozg-operator-keycloakgroup-writer-role
+  apiGroup: rbac.authorization.k8s.io
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: ozg-operator-keycloakgroup-writer-role
+rules:
+  - apiGroups:
+      - "*"
+    resources:
+      - ozgkeycloakgroups/status
+      - ozgkeycloakgroups/finalizers
+      - ozgkeycloakgroups
+    verbs:
+      - get
+      - list
+      - create
+      - delete
+      - patch
+      - update
+      - watch
diff --git a/doc/crds/operator.ozgcloud.de_OzgKeycloakClient.yaml b/doc/crds/operator.ozgcloud.de_OzgKeycloakClient.yaml
new file mode 100644
index 0000000..52393be
--- /dev/null
+++ b/doc/crds/operator.ozgcloud.de_OzgKeycloakClient.yaml
@@ -0,0 +1,44 @@
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+  name: ozgkeycloakclients.operator.ozgcloud.de
+spec:
+  group: operator.ozgcloud.de
+  names:
+    kind: OzgKeycloakClient
+    listKind: OzgKeycloakClientList
+    plural: ozgkeycloakclients
+    singular: ozgkeycloakclient
+  scope: Namespaced
+  versions:
+  - name: v1
+    schema:
+      openAPIV3Schema:
+        description: OzgKeycloakClient is the Schema for the keycloaks API
+        properties:
+          apiVersion:
+            description: 'APIVersion defines the versioned schema of this representation
+              of an object. Servers should convert recognized schemas to the latest
+              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+            type: string
+          kind:
+            description: 'Kind is a string value representing the REST resource this
+              object represents. Servers may infer this from the endpoint the client
+              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+            type: string
+          metadata:
+            type: object
+          spec:
+            description: Spec defines the desired state of Keycloak
+            type: object
+            x-kubernetes-preserve-unknown-fields: true
+          status:
+            description: Status defines the observed state of Keycloak
+            type: object
+            x-kubernetes-preserve-unknown-fields: true
+        type: object
+    served: true
+    storage: true
+    subresources:
+      status: {}
diff --git a/doc/crds/operator.ozgcloud.de_OzgKeycloakGroup.yaml b/doc/crds/operator.ozgcloud.de_OzgKeycloakGroup.yaml
new file mode 100644
index 0000000..ee88ea0
--- /dev/null
+++ b/doc/crds/operator.ozgcloud.de_OzgKeycloakGroup.yaml
@@ -0,0 +1,44 @@
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+  name: ozgkeycloakgroups.operator.ozgcloud.de
+spec:
+  group: operator.ozgcloud.de
+  names:
+    kind: OzgKeycloakGroup
+    listKind: OzgKeycloakGroupList
+    plural: ozgkeycloakgroups
+    singular: ozgkeycloakgroup
+  scope: Namespaced
+  versions:
+  - name: v1
+    schema:
+      openAPIV3Schema:
+        description: OzgKeycloakGroup is the Schema for the keycloaks API
+        properties:
+          apiVersion:
+            description: 'APIVersion defines the versioned schema of this representation
+              of an object. Servers should convert recognized schemas to the latest
+              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+            type: string
+          kind:
+            description: 'Kind is a string value representing the REST resource this
+              object represents. Servers may infer this from the endpoint the client
+              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+            type: string
+          metadata:
+            type: object
+          spec:
+            description: Spec defines the desired state of Keycloak
+            type: object
+            x-kubernetes-preserve-unknown-fields: true
+          status:
+            description: Status defines the observed state of Keycloak
+            type: object
+            x-kubernetes-preserve-unknown-fields: true
+        type: object
+    served: true
+    storage: true
+    subresources:
+      status: {}
diff --git a/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java b/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java
index a576eba..dc6f674 100644
--- a/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java
+++ b/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java
@@ -29,7 +29,7 @@ public class KeycloakRealmReconciler implements Reconciler<OzgKeycloakRealm>, Cl
 
 			String realmName = resource.getMetadata().getNamespace();
 
-			log.info("Create KeycloakRealm " + realmName + " (crd name " + resource.getMetadata().getName() + ")");
+			log.info("Reconcile KeycloakRealm " + realmName + " (crd name " + resource.getMetadata().getName() + ")");
 
 			service.createRealm(resource.getSpec(), realmName);
 
diff --git a/src/main/java/de/ozgcloud/operator/keycloak/user/OzgKeycloakUserSpec.java b/src/main/java/de/ozgcloud/operator/keycloak/user/OzgKeycloakUserSpec.java
index 84aff39..2cbc39f 100644
--- a/src/main/java/de/ozgcloud/operator/keycloak/user/OzgKeycloakUserSpec.java
+++ b/src/main/java/de/ozgcloud/operator/keycloak/user/OzgKeycloakUserSpec.java
@@ -87,10 +87,10 @@ class OzgKeycloakUserSpec {
 	@AllArgsConstructor
 	static class KeycloakUserSpecClientRole {
 
-		@JsonProperty("client_name")
+		@JsonProperty("name")
 		private String clientName;
 
-		@JsonProperty("role_name")
+		@JsonProperty("role")
 		private String roleName;
 	}
 }
-- 
GitLab