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

OZG-3961 - use errorStatusHandler in all reconcilers

parent 5f4e876c
Branches
Tags
No related merge requests found
......@@ -10,6 +10,8 @@ import io.javaoperatorsdk.operator.api.reconciler.Cleaner;
import io.javaoperatorsdk.operator.api.reconciler.Context;
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
import io.javaoperatorsdk.operator.api.reconciler.DeleteControl;
import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusHandler;
import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusUpdateControl;
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
import lombok.extern.java.Log;
......@@ -17,7 +19,7 @@ import lombok.extern.java.Log;
@ControllerConfiguration
@Component
@Log
public class KeycloakRealmReconciler implements Reconciler<OzgKeycloakRealm>, Cleaner<OzgKeycloakRealm> {
public class KeycloakRealmReconciler implements Reconciler<OzgKeycloakRealm>, Cleaner<OzgKeycloakRealm>, ErrorStatusHandler<OzgKeycloakRealm> {
@Autowired
private KeycloakRealmService service;
......@@ -25,8 +27,6 @@ public class KeycloakRealmReconciler implements Reconciler<OzgKeycloakRealm>, Cl
@Override
public UpdateControl<OzgKeycloakRealm> reconcile(OzgKeycloakRealm resource, Context<OzgKeycloakRealm> context) {
try {
String realmName = resource.getMetadata().getNamespace();
log.info("Reconcile KeycloakRealm " + realmName + " (crd name " + resource.getMetadata().getName() + ")");
......@@ -35,13 +35,6 @@ public class KeycloakRealmReconciler implements Reconciler<OzgKeycloakRealm>, Cl
resource.setStatus(OzgKeycloakRealmStatus.builder().status(OzgCustomResourceStatus.OK).message(null).build());
return UpdateControl.updateStatus(resource);
} catch (Exception e) {
log.log(Level.SEVERE,
"Could not reconcile realm " + resource.getMetadata().getName() + " in namespace " + resource.getMetadata().getNamespace(), e);
resource.setStatus(OzgKeycloakRealmStatus.builder().status(OzgCustomResourceStatus.ERROR).message(e.getMessage()).build());
return UpdateControl.updateStatus(resource);
}
}
@Override
......@@ -58,9 +51,16 @@ public class KeycloakRealmReconciler implements Reconciler<OzgKeycloakRealm>, Cl
return DeleteControl.defaultDelete();
} catch (Exception e) {
log.log(Level.SEVERE, "Could not delete KeycloakRealm " + realmName, e);
resource.setStatus(OzgKeycloakRealmStatus.builder().status(OzgCustomResourceStatus.ERROR).message(e.getMessage()).build());
UpdateControl.updateStatus(resource);
return DeleteControl.noFinalizerRemoval();
return DeleteControl.defaultDelete();
}
}
@Override
public ErrorStatusUpdateControl<OzgKeycloakRealm> updateErrorStatus(OzgKeycloakRealm resource, Context<OzgKeycloakRealm> context,
Exception e) {
log.log(Level.SEVERE,
"Could not reconcile realm " + resource.getMetadata().getName() + " in namespace " + resource.getMetadata().getNamespace(), e);
resource.setStatus(OzgKeycloakRealmStatus.builder().status(OzgCustomResourceStatus.ERROR).message(e.getMessage()).build());
return ErrorStatusUpdateControl.updateStatus(resource);
}
}
......@@ -13,6 +13,8 @@ import io.javaoperatorsdk.operator.api.reconciler.Cleaner;
import io.javaoperatorsdk.operator.api.reconciler.Context;
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
import io.javaoperatorsdk.operator.api.reconciler.DeleteControl;
import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusHandler;
import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusUpdateControl;
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
import lombok.extern.java.Log;
......@@ -20,7 +22,7 @@ import lombok.extern.java.Log;
@ControllerConfiguration
@Component
@Log
public class KeycloakUserReconciler implements Reconciler<OzgKeycloakUser>, Cleaner<OzgKeycloakUser> {
public class KeycloakUserReconciler implements Reconciler<OzgKeycloakUser>, Cleaner<OzgKeycloakUser>, ErrorStatusHandler<OzgKeycloakUser> {
@Autowired
private KeycloakUserService keycloakUserService;
......@@ -31,8 +33,6 @@ public class KeycloakUserReconciler implements Reconciler<OzgKeycloakUser>, Clea
@Override
public UpdateControl<OzgKeycloakUser> reconcile(OzgKeycloakUser resource, Context<OzgKeycloakUser> context) {
try {
log.info("Reconciling KeycloakUser " + resource.getMetadata().getName());
String namespace = resource.getMetadata().getNamespace();
......@@ -44,17 +44,6 @@ public class KeycloakUserReconciler implements Reconciler<OzgKeycloakUser>, Clea
keycloakUserService.createOrUpdateUser(resource.getSpec(), namespace);
return buildStatusOk(resource);
} catch (Exception e) {
return buildStatusError(resource, e);
}
}
private UpdateControl<OzgKeycloakUser> buildStatusError(OzgKeycloakUser resource, Exception 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).message(e.getMessage()).build());
return UpdateControl.updateStatus(resource);
}
private UpdateControl<OzgKeycloakUser> buildStatusOk(OzgKeycloakUser resource) {
......@@ -84,4 +73,12 @@ public class KeycloakUserReconciler implements Reconciler<OzgKeycloakUser>, Clea
return DeleteControl.defaultDelete();
}
}
@Override
public ErrorStatusUpdateControl<OzgKeycloakUser> updateErrorStatus(OzgKeycloakUser resource, Context<OzgKeycloakUser> context, Exception 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).message(e.getMessage()).build());
return ErrorStatusUpdateControl.updateStatus(resource);
}
}
......@@ -53,16 +53,6 @@ class KeycloakUserReconcilerTest {
assertThat(user.getStatus().getStatus()).isEqualTo(OzgCustomResourceStatus.OK);
}
@Test
void shouldSetErrorStatusOnException() {
OzgKeycloakUser user = OzgKeycloakUserTestFactory.create();
doThrow(new RuntimeException()).when(userService).createOrUpdateUser(any(), any());
conciler.reconcile(user, null);
assertThat(user.getStatus().getStatus()).isEqualTo(OzgCustomResourceStatus.ERROR);
}
@Nested
class TestPreconditionError {
......@@ -80,6 +70,20 @@ class KeycloakUserReconcilerTest {
}
}
@Nested
class TestErrorStatusUpdateControl {
@Test
void shouldSetErrorStatusOnException() {
OzgKeycloakUser user = OzgKeycloakUserTestFactory.create();
// doThrow(new RuntimeException()).when(userService).createOrUpdateUser(any(), any());
conciler.updateErrorStatus(user, null, new RuntimeException());
assertThat(user.getStatus().getStatus()).isEqualTo(OzgCustomResourceStatus.ERROR);
}
}
@Nested
class TestDeleteUser {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment