Skip to content
Snippets Groups Projects
Commit b642f02e authored by OZGCloud's avatar OZGCloud
Browse files

OZG-3961 - add delete realm cleaner

parent a113c50e
Branches
Tags
No related merge requests found
...@@ -26,9 +26,12 @@ public class KeycloakRealmReconciler implements Reconciler<OzgKeycloakRealm>, Cl ...@@ -26,9 +26,12 @@ public class KeycloakRealmReconciler implements Reconciler<OzgKeycloakRealm>, Cl
public UpdateControl<OzgKeycloakRealm> reconcile(OzgKeycloakRealm resource, Context<OzgKeycloakRealm> context) { public UpdateControl<OzgKeycloakRealm> reconcile(OzgKeycloakRealm resource, Context<OzgKeycloakRealm> context) {
try { try {
log.info("Create KeycloakRealm " + resource.getMetadata().getName());
service.createRealm(resource.getSpec(), resource.getMetadata().getNamespace()); String realmName = resource.getMetadata().getNamespace();
log.info("Create KeycloakRealm " + realmName + " (crd name " + resource.getMetadata().getName() + ")");
service.createRealm(resource.getSpec(), realmName);
resource.setStatus(OzgKeycloakRealmStatus.builder().status(OzgCustomResourceStatus.OK).errorMessage(null).build()); resource.setStatus(OzgKeycloakRealmStatus.builder().status(OzgCustomResourceStatus.OK).errorMessage(null).build());
return UpdateControl.updateStatus(resource); return UpdateControl.updateStatus(resource);
...@@ -43,7 +46,21 @@ public class KeycloakRealmReconciler implements Reconciler<OzgKeycloakRealm>, Cl ...@@ -43,7 +46,21 @@ public class KeycloakRealmReconciler implements Reconciler<OzgKeycloakRealm>, Cl
@Override @Override
public DeleteControl cleanup(OzgKeycloakRealm resource, Context<OzgKeycloakRealm> context) { public DeleteControl cleanup(OzgKeycloakRealm resource, Context<OzgKeycloakRealm> context) {
// TODO Auto-generated method stub
return null; String realmName = resource.getMetadata().getNamespace();
try {
log.info("Deleting KeycloakRealm " + realmName);
service.deleteRealm(realmName);
return DeleteControl.defaultDelete();
} catch (Exception e) {
log.log(Level.SEVERE, "Could not delete KeycloakRealm " + realmName, e);
resource.setStatus(OzgKeycloakRealmStatus.builder().status(OzgCustomResourceStatus.ERROR).errorMessage(e.getMessage()).build());
UpdateControl.updateStatus(resource);
return DeleteControl.noFinalizerRemoval();
}
} }
} }
...@@ -21,4 +21,8 @@ class KeycloakRealmRemoteService { ...@@ -21,4 +21,8 @@ class KeycloakRealmRemoteService {
return keycloakClient.getKeycloak().realms().findAll().stream() return keycloakClient.getKeycloak().realms().findAll().stream()
.anyMatch(realmExisting -> realmExisting.getRealm().equals(newRealm.getRealm())); .anyMatch(realmExisting -> realmExisting.getRealm().equals(newRealm.getRealm()));
} }
void deleteRealm(String realmName) {
keycloakClient.getKeycloak().realm(realmName).remove();
}
} }
...@@ -27,4 +27,8 @@ class KeycloakRealmService { ...@@ -27,4 +27,8 @@ class KeycloakRealmService {
realm.setRealm(realmName); realm.setRealm(realmName);
return realm; return realm;
} }
public void deleteRealm(String realmName) {
remoteService.deleteRealm(realmName);
}
} }
...@@ -41,7 +41,8 @@ public class KeycloakUserReconciler implements Reconciler<OzgKeycloakUser>, Clea ...@@ -41,7 +41,8 @@ public class KeycloakUserReconciler implements Reconciler<OzgKeycloakUser>, Clea
return UpdateControl.updateStatus(resource); return UpdateControl.updateStatus(resource);
} catch (Exception e) { } catch (Exception e) {
log.log(Level.SEVERE, "Could not reconcile user " + resource.getMetadata().getName() + " in namespace " + resource.getMetadata().getNamespace(), e); log.log(Level.SEVERE,
"Could not reconcile user " + resource.getMetadata().getName() + " in namespace " + resource.getMetadata().getNamespace(), e);
resource.setStatus(OzgKeycloakUserStatus.builder().status(OzgCustomResourceStatus.ERROR).errorMessage(e.getMessage()).build()); resource.setStatus(OzgKeycloakUserStatus.builder().status(OzgCustomResourceStatus.ERROR).errorMessage(e.getMessage()).build());
return UpdateControl.updateStatus(resource); return UpdateControl.updateStatus(resource);
} }
...@@ -60,7 +61,7 @@ public class KeycloakUserReconciler implements Reconciler<OzgKeycloakUser>, Clea ...@@ -60,7 +61,7 @@ public class KeycloakUserReconciler implements Reconciler<OzgKeycloakUser>, Clea
log.log(Level.SEVERE, "Could not delete user " + crd.getMetadata().getName() + " in namespace " + crd.getMetadata().getNamespace(), e); log.log(Level.SEVERE, "Could not delete user " + crd.getMetadata().getName() + " in namespace " + crd.getMetadata().getNamespace(), e);
crd.setStatus(OzgKeycloakUserStatus.builder().status(OzgCustomResourceStatus.ERROR).errorMessage(e.getMessage()).build()); crd.setStatus(OzgKeycloakUserStatus.builder().status(OzgCustomResourceStatus.ERROR).errorMessage(e.getMessage()).build());
UpdateControl.updateStatus(crd); UpdateControl.updateStatus(crd);
return DeleteControl.defaultDelete(); return DeleteControl.noFinalizerRemoval();
} }
} }
} }
...@@ -3,6 +3,7 @@ package de.ozgcloud.operator.keycloak.realm; ...@@ -3,6 +3,7 @@ package de.ozgcloud.operator.keycloak.realm;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
...@@ -19,6 +20,9 @@ class KeycloakRealmReconcilerTest { ...@@ -19,6 +20,9 @@ class KeycloakRealmReconcilerTest {
@Mock @Mock
private KeycloakRealmService service; private KeycloakRealmService service;
@Nested
class TestReconcile {
@Test @Test
void shouldCallServiceAddRealm() { void shouldCallServiceAddRealm() {
...@@ -43,3 +47,17 @@ class KeycloakRealmReconcilerTest { ...@@ -43,3 +47,17 @@ class KeycloakRealmReconcilerTest {
assertThat(response.getResource().getStatus().getStatus()).isEqualTo(OzgCustomResourceStatus.OK); assertThat(response.getResource().getStatus().getStatus()).isEqualTo(OzgCustomResourceStatus.OK);
} }
} }
@Nested
class TestDelete {
@Test
void shouldCallServiceDelete() {
OzgKeycloakRealm realm = OzgKeycloakRealmTestFactory.create();
conciler.cleanup(realm, null);
verify(service).deleteRealm(OzgKeycloakRealmTestFactory.METADATA_NAMESPACE);
}
}
}
...@@ -72,4 +72,20 @@ class KeycloakRealmRemoteServiceTest { ...@@ -72,4 +72,20 @@ class KeycloakRealmRemoteServiceTest {
assertThat(response).isTrue(); assertThat(response).isTrue();
} }
} }
@Nested
class TestDeleteRealm {
private static final String REALM_NAME = "TestRealmName";
@Test
void shouldDeleteRealm() {
when(keycloak.realm(REALM_NAME)).thenReturn(realmResource);
remoteService.deleteRealm(REALM_NAME);
verify(realmResource).remove();
}
}
} }
...@@ -86,4 +86,15 @@ class KeycloakRealmServiceTest { ...@@ -86,4 +86,15 @@ class KeycloakRealmServiceTest {
verify(realmRepresentation).setRealm(REALM_NAME); verify(realmRepresentation).setRealm(REALM_NAME);
} }
@Nested
class TestDeleteRealm {
@Test
void shouldCallRemoteServiceDelete() {
service.deleteRealm(REALM_NAME);
verify(remoteService).deleteRealm(REALM_NAME);
}
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment