diff --git a/crd/current/gerritclusters.gerritoperator.google.com-v1.yml b/crd/current/gerritclusters.gerritoperator.google.com-v1.yml
index 1e355b7..a29f059 100644
--- a/crd/current/gerritclusters.gerritoperator.google.com-v1.yml
+++ b/crd/current/gerritclusters.gerritoperator.google.com-v1.yml
@@ -713,6 +713,8 @@
                                 properties:
                                   name:
                                     type: string
+                                  request:
+                                    type: string
                                 type: object
                               type: array
                             limits:
@@ -1480,6 +1482,8 @@
                               properties:
                                 name:
                                   type: string
+                                request:
+                                  type: string
                               type: object
                             type: array
                           limits:
@@ -1947,6 +1951,8 @@
                                         properties:
                                           name:
                                             type: string
+                                          request:
+                                            type: string
                                         type: object
                                       type: array
                                     limits:
@@ -2428,6 +2434,8 @@
                                     properties:
                                       name:
                                         type: string
+                                      request:
+                                        type: string
                                     type: object
                                   type: array
                                 limits:
diff --git a/crd/current/gerritindexers.gerritoperator.google.com-v1.yml b/crd/current/gerritindexers.gerritoperator.google.com-v1.yml
index 8862701..73264f7 100644
--- a/crd/current/gerritindexers.gerritoperator.google.com-v1.yml
+++ b/crd/current/gerritindexers.gerritoperator.google.com-v1.yml
@@ -375,6 +375,8 @@
                       properties:
                         name:
                           type: string
+                        request:
+                          type: string
                       type: object
                     type: array
                   limits:
diff --git a/crd/current/gerritmaintenances.gerritoperator.google.com-v1.yml b/crd/current/gerritmaintenances.gerritoperator.google.com-v1.yml
index a74883c..59a7575 100644
--- a/crd/current/gerritmaintenances.gerritoperator.google.com-v1.yml
+++ b/crd/current/gerritmaintenances.gerritoperator.google.com-v1.yml
@@ -401,6 +401,8 @@
                                 properties:
                                   name:
                                     type: string
+                                  request:
+                                    type: string
                                 type: object
                               type: array
                             limits:
diff --git a/crd/current/gerrits.gerritoperator.google.com-v1.yml b/crd/current/gerrits.gerritoperator.google.com-v1.yml
index 5e22866..b7554c9 100644
--- a/crd/current/gerrits.gerritoperator.google.com-v1.yml
+++ b/crd/current/gerrits.gerritoperator.google.com-v1.yml
@@ -693,6 +693,8 @@
                       properties:
                         name:
                           type: string
+                        request:
+                          type: string
                       type: object
                     type: array
                   limits:
diff --git a/crd/current/gitgcs.gerritoperator.google.com-v1.yml b/crd/current/gitgcs.gerritoperator.google.com-v1.yml
index 038d169..0891f90 100644
--- a/crd/current/gitgcs.gerritoperator.google.com-v1.yml
+++ b/crd/current/gitgcs.gerritoperator.google.com-v1.yml
@@ -366,6 +366,8 @@
                       properties:
                         name:
                           type: string
+                        request:
+                          type: string
                       type: object
                     type: array
                   limits:
diff --git a/crd/current/incomingreplicationtasks.gerritoperator.google.com-v1.yml b/crd/current/incomingreplicationtasks.gerritoperator.google.com-v1.yml
index 3bc86f5..57f8975 100644
--- a/crd/current/incomingreplicationtasks.gerritoperator.google.com-v1.yml
+++ b/crd/current/incomingreplicationtasks.gerritoperator.google.com-v1.yml
@@ -412,6 +412,8 @@
                       properties:
                         name:
                           type: string
+                        request:
+                          type: string
                       type: object
                     type: array
                   limits:
diff --git a/crd/current/receivers.gerritoperator.google.com-v1.yml b/crd/current/receivers.gerritoperator.google.com-v1.yml
index 52fe26e..bb5e1e3 100644
--- a/crd/current/receivers.gerritoperator.google.com-v1.yml
+++ b/crd/current/receivers.gerritoperator.google.com-v1.yml
@@ -538,6 +538,8 @@
                       properties:
                         name:
                           type: string
+                        request:
+                          type: string
                       type: object
                     type: array
                   limits:
diff --git a/helm-charts/gerrit-operator-crds/templates/gerritclusters.gerritoperator.google.com-v1.yml b/helm-charts/gerrit-operator-crds/templates/gerritclusters.gerritoperator.google.com-v1.yml
index ee41302..72a5006 100644
--- a/helm-charts/gerrit-operator-crds/templates/gerritclusters.gerritoperator.google.com-v1.yml
+++ b/helm-charts/gerrit-operator-crds/templates/gerritclusters.gerritoperator.google.com-v1.yml
@@ -713,6 +713,8 @@
                                   properties:
                                     name:
                                       type: string
+                                    request:
+                                      type: string
                                   type: object
                                 type: array
                               limits:
@@ -1480,6 +1482,8 @@
                                 properties:
                                   name:
                                     type: string
+                                  request:
+                                    type: string
                                 type: object
                               type: array
                             limits:
@@ -1947,6 +1951,8 @@
                                           properties:
                                             name:
                                               type: string
+                                            request:
+                                              type: string
                                           type: object
                                         type: array
                                       limits:
@@ -2428,6 +2434,8 @@
                                       properties:
                                         name:
                                           type: string
+                                        request:
+                                          type: string
                                       type: object
                                     type: array
                                   limits:
diff --git a/helm-charts/gerrit-operator-crds/templates/gerritindexers.gerritoperator.google.com-v1.yml b/helm-charts/gerrit-operator-crds/templates/gerritindexers.gerritoperator.google.com-v1.yml
index 965dcbf..62a60ca 100644
--- a/helm-charts/gerrit-operator-crds/templates/gerritindexers.gerritoperator.google.com-v1.yml
+++ b/helm-charts/gerrit-operator-crds/templates/gerritindexers.gerritoperator.google.com-v1.yml
@@ -375,6 +375,8 @@
                         properties:
                           name:
                             type: string
+                          request:
+                            type: string
                         type: object
                       type: array
                     limits:
diff --git a/helm-charts/gerrit-operator-crds/templates/gerritmaintenances.gerritoperator.google.com-v1.yml b/helm-charts/gerrit-operator-crds/templates/gerritmaintenances.gerritoperator.google.com-v1.yml
index 56b2523..1ac5c49 100644
--- a/helm-charts/gerrit-operator-crds/templates/gerritmaintenances.gerritoperator.google.com-v1.yml
+++ b/helm-charts/gerrit-operator-crds/templates/gerritmaintenances.gerritoperator.google.com-v1.yml
@@ -401,6 +401,8 @@
                                   properties:
                                     name:
                                       type: string
+                                    request:
+                                      type: string
                                   type: object
                                 type: array
                               limits:
diff --git a/helm-charts/gerrit-operator-crds/templates/gerrits.gerritoperator.google.com-v1.yml b/helm-charts/gerrit-operator-crds/templates/gerrits.gerritoperator.google.com-v1.yml
index c003990..19100eb 100644
--- a/helm-charts/gerrit-operator-crds/templates/gerrits.gerritoperator.google.com-v1.yml
+++ b/helm-charts/gerrit-operator-crds/templates/gerrits.gerritoperator.google.com-v1.yml
@@ -693,6 +693,8 @@
                         properties:
                           name:
                             type: string
+                          request:
+                            type: string
                         type: object
                       type: array
                     limits:
diff --git a/helm-charts/gerrit-operator-crds/templates/gitgcs.gerritoperator.google.com-v1.yml b/helm-charts/gerrit-operator-crds/templates/gitgcs.gerritoperator.google.com-v1.yml
index 2483cf5..5762728 100644
--- a/helm-charts/gerrit-operator-crds/templates/gitgcs.gerritoperator.google.com-v1.yml
+++ b/helm-charts/gerrit-operator-crds/templates/gitgcs.gerritoperator.google.com-v1.yml
@@ -366,6 +366,8 @@
                         properties:
                           name:
                             type: string
+                          request:
+                            type: string
                         type: object
                       type: array
                     limits:
diff --git a/helm-charts/gerrit-operator-crds/templates/incomingreplicationtasks.gerritoperator.google.com-v1.yml b/helm-charts/gerrit-operator-crds/templates/incomingreplicationtasks.gerritoperator.google.com-v1.yml
index 91ca015..1f2aff0 100644
--- a/helm-charts/gerrit-operator-crds/templates/incomingreplicationtasks.gerritoperator.google.com-v1.yml
+++ b/helm-charts/gerrit-operator-crds/templates/incomingreplicationtasks.gerritoperator.google.com-v1.yml
@@ -412,6 +412,8 @@
                         properties:
                           name:
                             type: string
+                          request:
+                            type: string
                         type: object
                       type: array
                     limits:
diff --git a/helm-charts/gerrit-operator-crds/templates/receivers.gerritoperator.google.com-v1.yml b/helm-charts/gerrit-operator-crds/templates/receivers.gerritoperator.google.com-v1.yml
index f27e3c4..e91e3c4 100644
--- a/helm-charts/gerrit-operator-crds/templates/receivers.gerritoperator.google.com-v1.yml
+++ b/helm-charts/gerrit-operator-crds/templates/receivers.gerritoperator.google.com-v1.yml
@@ -538,6 +538,8 @@
                         properties:
                           name:
                             type: string
+                          request:
+                            type: string
                         type: object
                       type: array
                     limits:
diff --git a/operator/pom.xml b/operator/pom.xml
index 48b1a54..ae73112 100644
--- a/operator/pom.xml
+++ b/operator/pom.xml
@@ -15,12 +15,13 @@
 	<properties>
 		<revision>1.0.0-SNAPSHOT</revision>
 
-		<fabric8.version>6.13.4</fabric8.version>
+		<fabric8.version>7.3.1</fabric8.version>
 		<flogger.version>0.8</flogger.version>
 		<guice.version>7.0.0</guice.version>
-		<javaoperatorsdk.version>4.9.7</javaoperatorsdk.version>
+		<javaoperatorsdk.version>5.1.0</javaoperatorsdk.version>
 		<jetty.version>11.0.25</jetty.version>
 		<log42.version>2.24.3</log42.version>
+		<sundrio.version>0.200.0</sundrio.version>
 		<lombok.version>1.18.38</lombok.version>
 		<maven.compiler.source>17</maven.compiler.source>
 		<maven.compiler.target>17</maven.compiler.target>
@@ -172,6 +173,12 @@
 			<version>${fabric8.version}</version>
 		</dependency>
 		<dependency>
+			<groupId>io.sundr</groupId>
+			<artifactId>builder-annotations</artifactId>
+			<scope>provided</scope>
+			<version>${sundrio.version}</version>
+		</dependency>
+		<dependency>
 			<groupId>org.projectlombok</groupId>
 			<artifactId>lombok</artifactId>
 			<scope>provided</scope>
@@ -231,7 +238,7 @@
 		<dependency>
 			<groupId>org.mockito</groupId>
 			<artifactId>mockito-core</artifactId>
-			<version>5.17.0</version>
+			<version>5.18.0</version>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
@@ -248,7 +255,7 @@
 		<dependency>
 			<groupId>org.junit.jupiter</groupId>
 			<artifactId>junit-jupiter-params</artifactId>
-			<version>5.10.5</version>
+			<version>5.12.0</version>
 			<scope>test</scope>
 		</dependency>
 	</dependencies>
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/api/model/network/NetworkMember.java b/operator/src/main/java/com/google/gerrit/k8s/operator/api/model/network/NetworkMember.java
index f1e7ed7..ac39433 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/api/model/network/NetworkMember.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/api/model/network/NetworkMember.java
@@ -19,7 +19,7 @@
 
 public class NetworkMember {
   private String name;
-  private int httpPort = 8080;
+  private long httpPort = 8080L;
 
   public NetworkMember() {}
 
@@ -36,11 +36,11 @@
     this.name = name;
   }
 
-  public int getHttpPort() {
+  public long getHttpPort() {
     return httpPort;
   }
 
-  public void setHttpPort(int httpPort) {
+  public void setHttpPort(long httpPort) {
     this.httpPort = httpPort;
   }
 
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/api/model/network/NetworkMemberWithSsh.java b/operator/src/main/java/com/google/gerrit/k8s/operator/api/model/network/NetworkMemberWithSsh.java
index 32f8b31..530ece2 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/api/model/network/NetworkMemberWithSsh.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/api/model/network/NetworkMemberWithSsh.java
@@ -18,7 +18,7 @@
 import java.util.Objects;
 
 public class NetworkMemberWithSsh extends NetworkMember {
-  private int sshPort = 29418;
+  private long sshPort = 29418L;
 
   public NetworkMemberWithSsh() {}
 
@@ -27,11 +27,11 @@
     this.sshPort = serviceConfig.getSshPort();
   }
 
-  public int getSshPort() {
+  public long getSshPort() {
     return sshPort;
   }
 
-  public void setSshPort(int sshPort) {
+  public void setSshPort(long sshPort) {
     this.sshPort = sshPort;
   }
 
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/GerritClusterMultisiteReconciler.java b/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/GerritClusterMultisiteReconciler.java
index 5bcd914..8f9d297 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/GerritClusterMultisiteReconciler.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/GerritClusterMultisiteReconciler.java
@@ -14,70 +14,36 @@
 
 package com.google.gerrit.k8s.operator.cluster;
 
-import static com.google.gerrit.k8s.operator.cluster.GerritClusterMultisiteReconciler.CLUSTER_MANAGED_GERRIT_EVENT_SOURCE;
-import static com.google.gerrit.k8s.operator.cluster.GerritClusterMultisiteReconciler.CLUSTER_MANAGED_GERRIT_NETWORK_EVENT_SOURCE;
-
 import com.google.gerrit.k8s.operator.api.model.cluster.GerritCluster;
 import com.google.gerrit.k8s.operator.api.model.cluster.GerritClusterStatus;
-import com.google.gerrit.k8s.operator.api.model.gerrit.Gerrit;
 import com.google.gerrit.k8s.operator.api.model.gerrit.GerritTemplate;
-import com.google.gerrit.k8s.operator.api.model.network.GerritNetwork;
 import com.google.gerrit.k8s.operator.cluster.dependent.ClusterManagedGerrit;
 import com.google.gerrit.k8s.operator.cluster.dependent.ClusterManagedGerritCondition;
 import com.google.gerrit.k8s.operator.cluster.dependent.ClusterManagedGerritNetwork;
 import com.google.gerrit.k8s.operator.cluster.dependent.ClusterManagedGerritNetworkCondition;
 import com.google.inject.Singleton;
-import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
 import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
 import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
+import io.javaoperatorsdk.operator.api.reconciler.Workflow;
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
-import io.javaoperatorsdk.operator.processing.event.source.EventSource;
-import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
 @Singleton
-@ControllerConfiguration(
+@Workflow(
     dependents = {
       @Dependent(
           name = "gerrits",
           type = ClusterManagedGerrit.class,
-          reconcilePrecondition = ClusterManagedGerritCondition.class,
-          useEventSourceWithName = CLUSTER_MANAGED_GERRIT_EVENT_SOURCE),
+          reconcilePrecondition = ClusterManagedGerritCondition.class),
       @Dependent(
           type = ClusterManagedGerritNetwork.class,
-          reconcilePrecondition = ClusterManagedGerritNetworkCondition.class,
-          useEventSourceWithName = CLUSTER_MANAGED_GERRIT_NETWORK_EVENT_SOURCE)
+          reconcilePrecondition = ClusterManagedGerritNetworkCondition.class)
     })
-public class GerritClusterMultisiteReconciler
-    implements Reconciler<GerritCluster>, EventSourceInitializer<GerritCluster> {
-  public static final String CLUSTER_MANAGED_GERRIT_EVENT_SOURCE = "cluster-managed-gerrit";
-
-  public static final String CLUSTER_MANAGED_GERRIT_NETWORK_EVENT_SOURCE =
-      "cluster-managed-gerrit-network";
-
-  @Override
-  public Map<String, EventSource> prepareEventSources(EventSourceContext<GerritCluster> context) {
-    InformerEventSource<Gerrit, GerritCluster> clusterManagedGerritEventSource =
-        new InformerEventSource<>(
-            InformerConfiguration.from(Gerrit.class, context).build(), context);
-
-    InformerEventSource<GerritNetwork, GerritCluster> clusterManagedGerritNetworkEventSource =
-        new InformerEventSource<>(
-            InformerConfiguration.from(GerritNetwork.class, context).build(), context);
-
-    Map<String, EventSource> eventSources = new HashMap<>();
-    eventSources.put(CLUSTER_MANAGED_GERRIT_EVENT_SOURCE, clusterManagedGerritEventSource);
-    eventSources.put(
-        CLUSTER_MANAGED_GERRIT_NETWORK_EVENT_SOURCE, clusterManagedGerritNetworkEventSource);
-    return eventSources;
-  }
+public class GerritClusterMultisiteReconciler implements Reconciler<GerritCluster> {
 
   @Override
   public UpdateControl<GerritCluster> reconcile(
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/GerritClusterReconciler.java b/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/GerritClusterReconciler.java
index 6419232..8d759c9 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/GerritClusterReconciler.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/GerritClusterReconciler.java
@@ -14,23 +14,10 @@
 
 package com.google.gerrit.k8s.operator.cluster;
 
-import static com.google.gerrit.k8s.operator.cluster.GerritClusterReconciler.CLUSTER_MANAGED_GERRIT_EVENT_SOURCE;
-import static com.google.gerrit.k8s.operator.cluster.GerritClusterReconciler.CLUSTER_MANAGED_GERRIT_MAINTENANCE_EVENT_SOURCE;
-import static com.google.gerrit.k8s.operator.cluster.GerritClusterReconciler.CLUSTER_MANAGED_GERRIT_NETWORK_EVENT_SOURCE;
-import static com.google.gerrit.k8s.operator.cluster.GerritClusterReconciler.CLUSTER_MANAGED_INC_REPL_TASK_EVENT_SOURCE;
-import static com.google.gerrit.k8s.operator.cluster.GerritClusterReconciler.CLUSTER_MANAGED_RECEIVER_EVENT_SOURCE;
-import static com.google.gerrit.k8s.operator.cluster.GerritClusterReconciler.CM_EVENT_SOURCE;
-import static com.google.gerrit.k8s.operator.cluster.GerritClusterReconciler.PVC_EVENT_SOURCE;
-
 import com.google.gerrit.k8s.operator.api.model.cluster.GerritCluster;
 import com.google.gerrit.k8s.operator.api.model.cluster.GerritClusterStatus;
-import com.google.gerrit.k8s.operator.api.model.gerrit.Gerrit;
 import com.google.gerrit.k8s.operator.api.model.gerrit.GerritTemplate;
-import com.google.gerrit.k8s.operator.api.model.maintenance.GerritMaintenance;
-import com.google.gerrit.k8s.operator.api.model.network.GerritNetwork;
-import com.google.gerrit.k8s.operator.api.model.receiver.Receiver;
 import com.google.gerrit.k8s.operator.api.model.receiver.ReceiverTemplate;
-import com.google.gerrit.k8s.operator.api.model.tasks.incomingrepl.IncomingReplicationTask;
 import com.google.gerrit.k8s.operator.cluster.dependent.ClusterManagedGerrit;
 import com.google.gerrit.k8s.operator.cluster.dependent.ClusterManagedGerritCondition;
 import com.google.gerrit.k8s.operator.cluster.dependent.ClusterManagedGerritMaintenance;
@@ -45,117 +32,43 @@
 import com.google.gerrit.k8s.operator.cluster.dependent.SharedPVC;
 import com.google.gerrit.k8s.operator.cluster.dependent.SharedPVCCondition;
 import com.google.inject.Singleton;
-import io.fabric8.kubernetes.api.model.ConfigMap;
-import io.fabric8.kubernetes.api.model.PersistentVolumeClaim;
-import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
 import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
 import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
+import io.javaoperatorsdk.operator.api.reconciler.Workflow;
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
-import io.javaoperatorsdk.operator.processing.event.source.EventSource;
-import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
 @Singleton
-@ControllerConfiguration(
+@Workflow(
     dependents = {
       @Dependent(
           name = "shared-pvc",
           type = SharedPVC.class,
-          reconcilePrecondition = SharedPVCCondition.class,
-          useEventSourceWithName = PVC_EVENT_SOURCE),
+          reconcilePrecondition = SharedPVCCondition.class),
       @Dependent(
           type = NfsIdmapdConfigMap.class,
-          reconcilePrecondition = NfsWorkaroundCondition.class,
-          useEventSourceWithName = CM_EVENT_SOURCE),
+          reconcilePrecondition = NfsWorkaroundCondition.class),
       @Dependent(
           name = "gerrits",
           type = ClusterManagedGerrit.class,
-          reconcilePrecondition = ClusterManagedGerritCondition.class,
-          useEventSourceWithName = CLUSTER_MANAGED_GERRIT_EVENT_SOURCE),
+          reconcilePrecondition = ClusterManagedGerritCondition.class),
       @Dependent(
           name = "receiver",
           type = ClusterManagedReceiver.class,
-          reconcilePrecondition = ClusterManagedReceiverCondition.class,
-          useEventSourceWithName = CLUSTER_MANAGED_RECEIVER_EVENT_SOURCE),
+          reconcilePrecondition = ClusterManagedReceiverCondition.class),
       @Dependent(
           type = ClusterManagedGerritNetwork.class,
-          reconcilePrecondition = ClusterManagedGerritNetworkCondition.class,
-          useEventSourceWithName = CLUSTER_MANAGED_GERRIT_NETWORK_EVENT_SOURCE),
-      @Dependent(
-          type = ClusterManagedIncomingReplicationTask.class,
-          useEventSourceWithName = CLUSTER_MANAGED_INC_REPL_TASK_EVENT_SOURCE),
+          reconcilePrecondition = ClusterManagedGerritNetworkCondition.class),
+      @Dependent(type = ClusterManagedIncomingReplicationTask.class),
       @Dependent(
           type = ClusterManagedGerritMaintenance.class,
-          reconcilePrecondition = ClusterManagedGerritMaintenanceCondition.class,
-          useEventSourceWithName = CLUSTER_MANAGED_GERRIT_MAINTENANCE_EVENT_SOURCE),
+          reconcilePrecondition = ClusterManagedGerritMaintenanceCondition.class),
     })
-public class GerritClusterReconciler
-    implements Reconciler<GerritCluster>, EventSourceInitializer<GerritCluster> {
-  public static final String CM_EVENT_SOURCE = "cm-event-source";
-  public static final String PVC_EVENT_SOURCE = "pvc-event-source";
-  public static final String CLUSTER_MANAGED_GERRIT_EVENT_SOURCE = "cluster-managed-gerrit";
-  public static final String CLUSTER_MANAGED_RECEIVER_EVENT_SOURCE = "cluster-managed-receiver";
-  public static final String CLUSTER_MANAGED_GERRIT_NETWORK_EVENT_SOURCE =
-      "cluster-managed-gerrit-network";
-  public static final String CLUSTER_MANAGED_INC_REPL_TASK_EVENT_SOURCE =
-      "cluster-managed-incoming-repl-task";
-  public static final String CLUSTER_MANAGED_GERRIT_MAINTENANCE_EVENT_SOURCE =
-      "cluster-managed-gerrit-maintenance";
-
-  @Override
-  public Map<String, EventSource> prepareEventSources(EventSourceContext<GerritCluster> context) {
-    InformerEventSource<ConfigMap, GerritCluster> cmEventSource =
-        new InformerEventSource<>(
-            InformerConfiguration.from(ConfigMap.class, context).build(), context);
-
-    InformerEventSource<PersistentVolumeClaim, GerritCluster> pvcEventSource =
-        new InformerEventSource<>(
-            InformerConfiguration.from(PersistentVolumeClaim.class, context).build(), context);
-
-    InformerEventSource<Gerrit, GerritCluster> clusterManagedGerritEventSource =
-        new InformerEventSource<>(
-            InformerConfiguration.from(Gerrit.class, context).build(), context);
-
-    InformerEventSource<Receiver, GerritCluster> clusterManagedReceiverEventSource =
-        new InformerEventSource<>(
-            InformerConfiguration.from(Receiver.class, context).build(), context);
-
-    InformerEventSource<GerritNetwork, GerritCluster> clusterManagedGerritNetworkEventSource =
-        new InformerEventSource<>(
-            InformerConfiguration.from(GerritNetwork.class, context).build(), context);
-
-    InformerEventSource<IncomingReplicationTask, GerritCluster>
-        clusterManagedIncomingReplTaskEventSource =
-            new InformerEventSource<>(
-                InformerConfiguration.from(IncomingReplicationTask.class, context).build(),
-                context);
-
-    InformerEventSource<GerritMaintenance, GerritCluster>
-        clusterManagedGerritMaintenanceEventSource =
-            new InformerEventSource<>(
-                InformerConfiguration.from(GerritMaintenance.class, context).build(), context);
-
-    Map<String, EventSource> eventSources = new HashMap<>();
-    eventSources.put(CM_EVENT_SOURCE, cmEventSource);
-    eventSources.put(PVC_EVENT_SOURCE, pvcEventSource);
-    eventSources.put(CLUSTER_MANAGED_GERRIT_EVENT_SOURCE, clusterManagedGerritEventSource);
-    eventSources.put(CLUSTER_MANAGED_RECEIVER_EVENT_SOURCE, clusterManagedReceiverEventSource);
-    eventSources.put(
-        CLUSTER_MANAGED_GERRIT_NETWORK_EVENT_SOURCE, clusterManagedGerritNetworkEventSource);
-    eventSources.put(
-        CLUSTER_MANAGED_INC_REPL_TASK_EVENT_SOURCE, clusterManagedIncomingReplTaskEventSource);
-    eventSources.put(
-        CLUSTER_MANAGED_GERRIT_MAINTENANCE_EVENT_SOURCE,
-        clusterManagedGerritMaintenanceEventSource);
-    return eventSources;
-  }
+public class GerritClusterReconciler implements Reconciler<GerritCluster> {
 
   @Override
   public UpdateControl<GerritCluster> reconcile(
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/NfsIdmapdConfigMap.java b/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/NfsIdmapdConfigMap.java
index 8e63d16..fe0b44d 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/NfsIdmapdConfigMap.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/NfsIdmapdConfigMap.java
@@ -23,7 +23,7 @@
 import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
 import java.util.Map;
 
-@KubernetesDependent(resourceDiscriminator = NfsIdmapdConfigMapDiscriminator.class)
+@KubernetesDependent
 public class NfsIdmapdConfigMap
     extends CRUDReconcileAddKubernetesDependentResource<ConfigMap, GerritCluster> {
   public static final String NFS_IDMAPD_CM_NAME = "nfs-idmapd-config";
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/NfsIdmapdConfigMapDiscriminator.java b/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/NfsIdmapdConfigMapDiscriminator.java
deleted file mode 100644
index 52ca139..0000000
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/NfsIdmapdConfigMapDiscriminator.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2023 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.k8s.operator.cluster.dependent;
-
-import static com.google.gerrit.k8s.operator.cluster.GerritClusterReconciler.CM_EVENT_SOURCE;
-
-import com.google.gerrit.k8s.operator.api.model.cluster.GerritCluster;
-import io.fabric8.kubernetes.api.model.ConfigMap;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
-import io.javaoperatorsdk.operator.processing.event.ResourceID;
-import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
-import java.util.Optional;
-
-public class NfsIdmapdConfigMapDiscriminator
-    implements ResourceDiscriminator<ConfigMap, GerritCluster> {
-  @Override
-  public Optional<ConfigMap> distinguish(
-      Class<ConfigMap> resource, GerritCluster primary, Context<GerritCluster> context) {
-    InformerEventSource<ConfigMap, GerritCluster> ies =
-        (InformerEventSource<ConfigMap, GerritCluster>)
-            context
-                .eventSourceRetriever()
-                .getResourceEventSourceFor(ConfigMap.class, CM_EVENT_SOURCE);
-
-    return ies.get(
-        new ResourceID(
-            NfsIdmapdConfigMap.NFS_IDMAPD_CM_NAME, primary.getMetadata().getNamespace()));
-  }
-}
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/SharedPVC.java b/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/SharedPVC.java
index a0cca49..ca869cb 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/SharedPVC.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/SharedPVC.java
@@ -25,7 +25,7 @@
 import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
 import java.util.Map;
 
-@KubernetesDependent(resourceDiscriminator = SharedPVCDiscriminator.class)
+@KubernetesDependent
 public class SharedPVC extends CRUDKubernetesDependentPVCResource<GerritCluster> {
 
   public static final String SHARED_PVC_NAME = "shared-pvc";
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/SharedPVCDiscriminator.java b/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/SharedPVCDiscriminator.java
deleted file mode 100644
index 83d5295..0000000
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/SharedPVCDiscriminator.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2022 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.k8s.operator.cluster.dependent;
-
-import static com.google.gerrit.k8s.operator.cluster.GerritClusterReconciler.PVC_EVENT_SOURCE;
-
-import com.google.gerrit.k8s.operator.api.model.cluster.GerritCluster;
-import io.fabric8.kubernetes.api.model.PersistentVolumeClaim;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
-import io.javaoperatorsdk.operator.processing.event.ResourceID;
-import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
-import java.util.Optional;
-
-public class SharedPVCDiscriminator
-    implements ResourceDiscriminator<PersistentVolumeClaim, GerritCluster> {
-  @Override
-  public Optional<PersistentVolumeClaim> distinguish(
-      Class<PersistentVolumeClaim> resource,
-      GerritCluster primary,
-      Context<GerritCluster> context) {
-    InformerEventSource<PersistentVolumeClaim, GerritCluster> ies =
-        (InformerEventSource<PersistentVolumeClaim, GerritCluster>)
-            context
-                .eventSourceRetriever()
-                .getResourceEventSourceFor(PersistentVolumeClaim.class, PVC_EVENT_SOURCE);
-
-    return ies.get(new ResourceID(SharedPVC.SHARED_PVC_NAME, primary.getMetadata().getNamespace()));
-  }
-}
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/GerritReconciler.java b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/GerritReconciler.java
index abc0d87..4ee4d99 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/GerritReconciler.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/GerritReconciler.java
@@ -32,20 +32,21 @@
 import io.fabric8.kubernetes.api.model.Secret;
 import io.fabric8.kubernetes.api.model.Service;
 import io.fabric8.kubernetes.client.KubernetesClient;
-import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
+import io.javaoperatorsdk.operator.api.config.informer.InformerEventSourceConfiguration;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
 import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
 import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
 import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
+import io.javaoperatorsdk.operator.api.reconciler.Workflow;
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
 import io.javaoperatorsdk.operator.processing.dependent.workflow.WorkflowReconcileResult;
 import io.javaoperatorsdk.operator.processing.event.ResourceID;
 import io.javaoperatorsdk.operator.processing.event.source.EventSource;
 import io.javaoperatorsdk.operator.processing.event.source.SecondaryToPrimaryMapper;
 import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
@@ -53,7 +54,7 @@
 import java.util.stream.Collectors;
 
 @Singleton
-@ControllerConfiguration(
+@Workflow(
     dependents = {
       @Dependent(
           name = "fluentbit-configmap",
@@ -82,7 +83,7 @@
           useEventSourceWithName = GERRIT_SERVICE_EVENT_SOURCE,
           dependsOn = {"gerrit-statefulset"})
     })
-public class GerritReconciler implements Reconciler<Gerrit>, EventSourceInitializer<Gerrit> {
+public class GerritReconciler implements Reconciler<Gerrit> {
   public static final String GERRIT_SECRET_EVENT_SOURCE = "gerrit-secret-event-source";
   public static final String CONFIG_MAP_EVENT_SOURCE = "configmap-event-source";
   public static final String GERRIT_SERVICE_EVENT_SOURCE = "gerrit-service-event-source";
@@ -96,27 +97,34 @@
   }
 
   @Override
-  public Map<String, EventSource> prepareEventSources(EventSourceContext<Gerrit> context) {
-    Map<String, EventSource> eventSources = new HashMap<>();
+  public List<EventSource<?, Gerrit>> prepareEventSources(EventSourceContext<Gerrit> context) {
+    List<EventSource<?, Gerrit>> eventSources = new ArrayList<>();
 
     InformerEventSource<ConfigMap, Gerrit> configmapEventSource =
         new InformerEventSource<>(
-            InformerConfiguration.from(ConfigMap.class, context).build(), context);
-    eventSources.put(CONFIG_MAP_EVENT_SOURCE, configmapEventSource);
+            InformerEventSourceConfiguration.from(ConfigMap.class, Gerrit.class)
+                .withName(CONFIG_MAP_EVENT_SOURCE)
+                .build(),
+            context);
+    eventSources.add(configmapEventSource);
 
     InformerEventSource<Service, Gerrit> gerritServiceEventSource =
         new InformerEventSource<>(
-            InformerConfiguration.from(Service.class, context).build(), context);
-    eventSources.put(GERRIT_SERVICE_EVENT_SOURCE, gerritServiceEventSource);
+            InformerEventSourceConfiguration.from(Service.class, Gerrit.class)
+                .withName(GERRIT_SERVICE_EVENT_SOURCE)
+                .build(),
+            context);
+    eventSources.add(gerritServiceEventSource);
 
     SecondaryToPrimaryMapper<Secret> secretMapper = new SecretToGerritMapper(context);
     InformerEventSource<Secret, Gerrit> moduleMetaDataEventSource =
         new InformerEventSource<>(
-            InformerConfiguration.from(Secret.class, context)
+            InformerEventSourceConfiguration.from(Secret.class, Gerrit.class)
+                .withName(GERRIT_SECRET_EVENT_SOURCE)
                 .withSecondaryToPrimaryMapper(secretMapper)
                 .build(),
             context);
-    eventSources.put(GERRIT_SECRET_EVENT_SOURCE, moduleMetaDataEventSource);
+    eventSources.add(moduleMetaDataEventSource);
     return eventSources;
   }
 
@@ -131,7 +139,7 @@
       status = new GerritStatus();
     }
     Optional<WorkflowReconcileResult> result =
-        context.managedDependentResourceContext().getWorkflowReconcileResult();
+        context.managedWorkflowAndDependentResourceContext().getWorkflowReconcileResult();
     if (result.isPresent()) {
       status.setReady(result.get().allDependentResourcesReady());
     } else {
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/FluentBitConfigMap.java b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/FluentBitConfigMap.java
index fc46634..43e77bf 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/FluentBitConfigMap.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/FluentBitConfigMap.java
@@ -25,7 +25,7 @@
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.lib.Config;
 
-@KubernetesDependent(resourceDiscriminator = FluentBitConfigMapDiscriminator.class)
+@KubernetesDependent
 public class FluentBitConfigMap extends CRUDKubernetesDependentResource<ConfigMap, Gerrit> {
   private static final String FLUENT_BIT_SERVICE_CONFIG =
       """
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/FluentBitConfigMapDiscriminator.java b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/FluentBitConfigMapDiscriminator.java
deleted file mode 100644
index 88e8255..0000000
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/FluentBitConfigMapDiscriminator.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (C) 2024 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.k8s.operator.gerrit.dependent;
-
-import com.google.gerrit.k8s.operator.api.model.gerrit.Gerrit;
-import io.fabric8.kubernetes.api.model.ConfigMap;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
-import io.javaoperatorsdk.operator.processing.event.ResourceID;
-import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
-import java.util.Optional;
-
-public class FluentBitConfigMapDiscriminator implements ResourceDiscriminator<ConfigMap, Gerrit> {
-  @Override
-  public Optional<ConfigMap> distinguish(
-      Class<ConfigMap> resource, Gerrit primary, Context<Gerrit> context) {
-    InformerEventSource<ConfigMap, Gerrit> ies =
-        (InformerEventSource<ConfigMap, Gerrit>)
-            context.eventSourceRetriever().getResourceEventSourceFor(ConfigMap.class);
-
-    return ies.get(
-        new ResourceID(FluentBitConfigMap.getName(primary), primary.getMetadata().getNamespace()));
-  }
-}
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritConfigMap.java b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritConfigMap.java
index f7687fe..219bd13 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritConfigMap.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritConfigMap.java
@@ -32,7 +32,7 @@
 import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
 import java.util.Map;
 
-@KubernetesDependent(resourceDiscriminator = GerritConfigMapDiscriminator.class)
+@KubernetesDependent
 public class GerritConfigMap
     extends CRUDReconcileAddKubernetesDependentResource<ConfigMap, Gerrit> {
   private static final String DEFAULT_HEALTHCHECK_CONFIG =
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritConfigMapDiscriminator.java b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritConfigMapDiscriminator.java
deleted file mode 100644
index 17edc62..0000000
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritConfigMapDiscriminator.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (C) 2022 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.k8s.operator.gerrit.dependent;
-
-import com.google.gerrit.k8s.operator.api.model.gerrit.Gerrit;
-import io.fabric8.kubernetes.api.model.ConfigMap;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
-import io.javaoperatorsdk.operator.processing.event.ResourceID;
-import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
-import java.util.Optional;
-
-public class GerritConfigMapDiscriminator implements ResourceDiscriminator<ConfigMap, Gerrit> {
-  @Override
-  public Optional<ConfigMap> distinguish(
-      Class<ConfigMap> resource, Gerrit primary, Context<Gerrit> context) {
-    InformerEventSource<ConfigMap, Gerrit> ies =
-        (InformerEventSource<ConfigMap, Gerrit>)
-            context.eventSourceRetriever().getResourceEventSourceFor(ConfigMap.class);
-
-    return ies.get(
-        new ResourceID(GerritConfigMap.getName(primary), primary.getMetadata().getNamespace()));
-  }
-}
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritHeadlessService.java b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritHeadlessService.java
index 585f2d0..17b0f20 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritHeadlessService.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritHeadlessService.java
@@ -25,7 +25,7 @@
 import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
 import java.util.concurrent.TimeUnit;
 
-@KubernetesDependent(resourceDiscriminator = GerritHeadlessServiceDiscriminator.class)
+@KubernetesDependent
 public class GerritHeadlessService extends GerritAbstractService {
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritHeadlessServiceDiscriminator.java b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritHeadlessServiceDiscriminator.java
deleted file mode 100644
index 7064f3d..0000000
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritHeadlessServiceDiscriminator.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (C) 2024 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.k8s.operator.gerrit.dependent;
-
-import static com.google.gerrit.k8s.operator.gerrit.GerritReconciler.GERRIT_SERVICE_EVENT_SOURCE;
-
-import com.google.gerrit.k8s.operator.api.model.gerrit.Gerrit;
-import io.fabric8.kubernetes.api.model.Service;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
-import io.javaoperatorsdk.operator.processing.event.ResourceID;
-import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
-import java.util.Optional;
-
-public class GerritHeadlessServiceDiscriminator implements ResourceDiscriminator<Service, Gerrit> {
-  @Override
-  public Optional<Service> distinguish(
-      Class<Service> aClass, Gerrit gerrit, Context<Gerrit> context) {
-    InformerEventSource<Service, Gerrit> ies =
-        (InformerEventSource<Service, Gerrit>)
-            context
-                .eventSourceRetriever()
-                .getResourceEventSourceFor(Service.class, GERRIT_SERVICE_EVENT_SOURCE);
-
-    return ies.get(
-        new ResourceID(
-            new GerritHeadlessService().getName(gerrit), gerrit.getMetadata().getNamespace()));
-  }
-}
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritInitConfigMap.java b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritInitConfigMap.java
index 2c783bf..e255aaa 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritInitConfigMap.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritInitConfigMap.java
@@ -35,7 +35,7 @@
 import java.util.Locale;
 import java.util.Map;
 
-@KubernetesDependent(resourceDiscriminator = GerritInitConfigMapDiscriminator.class)
+@KubernetesDependent
 public class GerritInitConfigMap
     extends CRUDReconcileAddKubernetesDependentResource<ConfigMap, Gerrit> {
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritInitConfigMapDiscriminator.java b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritInitConfigMapDiscriminator.java
deleted file mode 100644
index e5b2f8e..0000000
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritInitConfigMapDiscriminator.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (C) 2022 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.k8s.operator.gerrit.dependent;
-
-import com.google.gerrit.k8s.operator.api.model.gerrit.Gerrit;
-import io.fabric8.kubernetes.api.model.ConfigMap;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
-import io.javaoperatorsdk.operator.processing.event.ResourceID;
-import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
-import java.util.Optional;
-
-public class GerritInitConfigMapDiscriminator implements ResourceDiscriminator<ConfigMap, Gerrit> {
-  @Override
-  public Optional<ConfigMap> distinguish(
-      Class<ConfigMap> resource, Gerrit primary, Context<Gerrit> context) {
-    InformerEventSource<ConfigMap, Gerrit> ies =
-        (InformerEventSource<ConfigMap, Gerrit>)
-            context.eventSourceRetriever().getResourceEventSourceFor(ConfigMap.class);
-
-    return ies.get(
-        new ResourceID(GerritInitConfigMap.getName(primary), primary.getMetadata().getNamespace()));
-  }
-}
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritService.java b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritService.java
index 25c94bb..80edcf2 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritService.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritService.java
@@ -19,7 +19,7 @@
 import io.fabric8.kubernetes.api.model.ServiceSpecBuilder;
 import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
 
-@KubernetesDependent(resourceDiscriminator = GerritServiceDiscriminator.class)
+@KubernetesDependent
 public class GerritService extends GerritAbstractService {
   private static final String SERVICE_SUFFIX = "-service";
 
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritServiceDiscriminator.java b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritServiceDiscriminator.java
deleted file mode 100644
index f832835..0000000
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritServiceDiscriminator.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (C) 2024 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.k8s.operator.gerrit.dependent;
-
-import static com.google.gerrit.k8s.operator.gerrit.GerritReconciler.GERRIT_SERVICE_EVENT_SOURCE;
-
-import com.google.gerrit.k8s.operator.api.model.gerrit.Gerrit;
-import io.fabric8.kubernetes.api.model.Service;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
-import io.javaoperatorsdk.operator.processing.event.ResourceID;
-import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
-import java.util.Optional;
-
-public class GerritServiceDiscriminator implements ResourceDiscriminator<Service, Gerrit> {
-  @Override
-  public Optional<Service> distinguish(
-      Class<Service> aClass, Gerrit gerrit, Context<Gerrit> context) {
-    InformerEventSource<Service, Gerrit> ies =
-        (InformerEventSource<Service, Gerrit>)
-            context
-                .eventSourceRetriever()
-                .getResourceEventSourceFor(Service.class, GERRIT_SERVICE_EVENT_SOURCE);
-
-    return ies.get(
-        new ResourceID(new GerritService().getName(gerrit), gerrit.getMetadata().getNamespace()));
-  }
-}
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/gitgc/GitGarbageCollectionReconciler.java b/operator/src/main/java/com/google/gerrit/k8s/operator/gitgc/GitGarbageCollectionReconciler.java
index 39182d0..e372493 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/gitgc/GitGarbageCollectionReconciler.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/gitgc/GitGarbageCollectionReconciler.java
@@ -23,30 +23,26 @@
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import io.fabric8.kubernetes.client.KubernetesClient;
-import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
+import io.javaoperatorsdk.operator.api.config.informer.InformerEventSourceConfiguration;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
 import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
-import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusHandler;
 import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusUpdateControl;
 import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
+import io.javaoperatorsdk.operator.api.reconciler.EventSourceUtils;
 import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
 import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
 import io.javaoperatorsdk.operator.processing.event.ResourceID;
 import io.javaoperatorsdk.operator.processing.event.source.EventSource;
 import io.javaoperatorsdk.operator.processing.event.source.SecondaryToPrimaryMapper;
 import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
+import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 
 @Singleton
 @ControllerConfiguration
 @Deprecated
-public class GitGarbageCollectionReconciler
-    implements Reconciler<GitGarbageCollection>,
-        EventSourceInitializer<GitGarbageCollection>,
-        ErrorStatusHandler<GitGarbageCollection> {
+public class GitGarbageCollectionReconciler implements Reconciler<GitGarbageCollection> {
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
   private final KubernetesClient client;
 
@@ -59,8 +55,11 @@
   }
 
   @Override
-  public Map<String, EventSource> prepareEventSources(
+  public List<EventSource<?, GitGarbageCollection>> prepareEventSources(
       EventSourceContext<GitGarbageCollection> context) {
+    List<EventSource<?, GitGarbageCollection>> eventSources = new ArrayList<>();
+    eventSources.addAll(EventSourceUtils.dependentEventSources(context, dependentCronJob));
+
     final SecondaryToPrimaryMapper<GitGarbageCollection> specificProjectGitGcMapper =
         (GitGarbageCollection gc) ->
             context
@@ -71,10 +70,12 @@
 
     InformerEventSource<GitGarbageCollection, GitGarbageCollection> gitGcEventSource =
         new InformerEventSource<>(
-            InformerConfiguration.from(GitGarbageCollection.class, context)
+            InformerEventSourceConfiguration.from(
+                    GitGarbageCollection.class, GitGarbageCollection.class)
                 .withSecondaryToPrimaryMapper(specificProjectGitGcMapper)
                 .build(),
             context);
+    eventSources.add(gitGcEventSource);
 
     final SecondaryToPrimaryMapper<GerritCluster> gerritClusterMapper =
         (GerritCluster cluster) ->
@@ -86,13 +87,12 @@
 
     InformerEventSource<GerritCluster, GitGarbageCollection> gerritClusterEventSource =
         new InformerEventSource<>(
-            InformerConfiguration.from(GerritCluster.class, context)
+            InformerEventSourceConfiguration.from(GerritCluster.class, GitGarbageCollection.class)
                 .withSecondaryToPrimaryMapper(gerritClusterMapper)
                 .build(),
             context);
-
-    return EventSourceInitializer.nameEventSources(
-        gitGcEventSource, gerritClusterEventSource, dependentCronJob.initEventSource(context));
+    eventSources.add(gerritClusterEventSource);
+    return eventSources;
   }
 
   @Override
@@ -103,7 +103,7 @@
     }
 
     dependentCronJob.reconcile(gitGc, context);
-    return UpdateControl.updateStatus(updateGitGcStatus(gitGc));
+    return UpdateControl.patchStatus(updateGitGcStatus(gitGc));
   }
 
   private GitGarbageCollection updateGitGcStatus(GitGarbageCollection gitGc) {
@@ -147,6 +147,6 @@
     }
     gitGc.setStatus(status);
 
-    return ErrorStatusUpdateControl.updateStatus(gitGc);
+    return ErrorStatusUpdateControl.patchStatus(gitGc);
   }
 }
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/indexer/GerritIndexerReconciler.java b/operator/src/main/java/com/google/gerrit/k8s/operator/indexer/GerritIndexerReconciler.java
index 3431381..a4dc41b 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/indexer/GerritIndexerReconciler.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/indexer/GerritIndexerReconciler.java
@@ -19,13 +19,13 @@
 import com.google.gerrit.k8s.operator.indexer.dependent.GerritIndexerJob;
 import com.google.inject.Singleton;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
 import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
 import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
+import io.javaoperatorsdk.operator.api.reconciler.Workflow;
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
 
 @Singleton
-@ControllerConfiguration(
+@Workflow(
     dependents = {
       @Dependent(name = "gerrit-indexer-configmap", type = GerritIndexerConfigMap.class),
       @Dependent(
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/maintenance/GerritMaintenanceReconciler.java b/operator/src/main/java/com/google/gerrit/k8s/operator/maintenance/GerritMaintenanceReconciler.java
index 8b95011..eeb4357 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/maintenance/GerritMaintenanceReconciler.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/maintenance/GerritMaintenanceReconciler.java
@@ -18,13 +18,13 @@
 import com.google.gerrit.k8s.operator.maintenance.dependent.GerritMaintenanceCronJobs;
 import com.google.inject.Singleton;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
 import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
 import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
+import io.javaoperatorsdk.operator.api.reconciler.Workflow;
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
 
 @Singleton
-@ControllerConfiguration(
+@Workflow(
     dependents = {
       @Dependent(name = "gerrit-maintenance-cronjobs", type = GerritMaintenanceCronJobs.class)
     })
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/GerritAmbassadorReconciler.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/GerritAmbassadorReconciler.java
index b67760a..ee0ab23 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/GerritAmbassadorReconciler.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/GerritAmbassadorReconciler.java
@@ -41,18 +41,17 @@
 import com.google.gerrit.k8s.operator.network.ambassador.dependent.TLSContextCondition;
 import com.google.inject.Singleton;
 import io.getambassador.v2.Mapping;
-import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
+import io.javaoperatorsdk.operator.api.config.informer.InformerEventSourceConfiguration;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
 import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
 import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
 import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
+import io.javaoperatorsdk.operator.api.reconciler.Workflow;
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
 import io.javaoperatorsdk.operator.processing.event.source.EventSource;
 import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Provides an Ambassador-based implementation for GerritNetworkReconciler.
@@ -101,7 +100,7 @@
  * https://gerrit.googlesource.com/plugins/replication/+/refs/heads/master/src/main/resources/Documentation/config.md
  */
 @Singleton
-@ControllerConfiguration(
+@Workflow(
     dependents = {
       @Dependent(
           name = GERRIT_MAPPING,
@@ -144,21 +143,22 @@
           type = GerritClusterHost.class,
           reconcilePrecondition = CreateHostCondition.class),
     })
-public class GerritAmbassadorReconciler
-    implements Reconciler<GerritNetwork>, EventSourceInitializer<GerritNetwork> {
+public class GerritAmbassadorReconciler implements Reconciler<GerritNetwork> {
 
   public static final String MAPPING_EVENT_SOURCE = "mapping-event-source";
 
   // Because we have multiple dependent resources of the same type `Mapping`, we need to specify
   // a named event source.
   @Override
-  public Map<String, EventSource> prepareEventSources(EventSourceContext<GerritNetwork> context) {
+  public List<EventSource<?, GerritNetwork>> prepareEventSources(
+      EventSourceContext<GerritNetwork> context) {
     InformerEventSource<Mapping, GerritNetwork> mappingEventSource =
         new InformerEventSource<>(
-            InformerConfiguration.from(Mapping.class, context).build(), context);
+            InformerEventSourceConfiguration.from(Mapping.class, GerritNetwork.class).build(),
+            context);
 
-    Map<String, EventSource> eventSources = new HashMap<>();
-    eventSources.put(MAPPING_EVENT_SOURCE, mappingEventSource);
+    List<EventSource<?, GerritNetwork>> eventSources = new ArrayList<>();
+    eventSources.add(mappingEventSource);
     return eventSources;
   }
 
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMapping.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMapping.java
index ec4974a..05a6f4f 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMapping.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMapping.java
@@ -21,7 +21,7 @@
 import io.javaoperatorsdk.operator.api.reconciler.Context;
 import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
 
-@KubernetesDependent(resourceDiscriminator = GerritClusterMappingDiscriminator.class)
+@KubernetesDependent
 public class GerritClusterMapping extends AbstractAmbassadorDependentResource<Mapping>
     implements MappingDependentResourceInterface {
 
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingDiscriminator.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingDiscriminator.java
deleted file mode 100644
index 7dfc5c4..0000000
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingDiscriminator.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (C) 2023 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.k8s.operator.network.ambassador.dependent;
-
-import static com.google.gerrit.k8s.operator.network.ambassador.dependent.GerritClusterMapping.GERRIT_MAPPING;
-
-import com.google.gerrit.k8s.operator.api.model.network.GerritNetwork;
-import io.getambassador.v2.Mapping;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
-import io.javaoperatorsdk.operator.processing.event.ResourceID;
-import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
-import java.util.Optional;
-
-public class GerritClusterMappingDiscriminator
-    implements ResourceDiscriminator<Mapping, GerritNetwork> {
-  @Override
-  public Optional<Mapping> distinguish(
-      Class<Mapping> resource, GerritNetwork network, Context<GerritNetwork> context) {
-    InformerEventSource<Mapping, GerritNetwork> ies =
-        (InformerEventSource<Mapping, GerritNetwork>)
-            context.eventSourceRetriever().getResourceEventSourceFor(Mapping.class);
-    return ies.get(new ResourceID(GERRIT_MAPPING, network.getMetadata().getNamespace()));
-  }
-}
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingGETReplica.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingGETReplica.java
index 0698f81..4ebd448 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingGETReplica.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingGETReplica.java
@@ -24,7 +24,7 @@
 import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
 import java.util.HashMap;
 
-@KubernetesDependent(resourceDiscriminator = GerritClusterMappingGETReplicaDiscriminator.class)
+@KubernetesDependent
 public class GerritClusterMappingGETReplica extends AbstractAmbassadorDependentResource<Mapping>
     implements MappingDependentResourceInterface {
 
@@ -53,7 +53,7 @@
             .withNewQueryParameters()
             .withAdditionalProperties(
                 new HashMap<String, Object>(ImmutableMap.of("service", "git-upload-pack")))
-            .endV2QueryParameters()
+            .endQueryParameters()
             .withMethod("GET")
             .withPrefix(INFO_REFS_PATTERN)
             .withPrefixRegex(true)
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingGETReplicaDiscriminator.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingGETReplicaDiscriminator.java
deleted file mode 100644
index 2aa4b37..0000000
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingGETReplicaDiscriminator.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (C) 2023 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.k8s.operator.network.ambassador.dependent;
-
-import static com.google.gerrit.k8s.operator.network.ambassador.dependent.GerritClusterMappingGETReplica.GERRIT_MAPPING_GET_REPLICA;
-
-import com.google.gerrit.k8s.operator.api.model.network.GerritNetwork;
-import io.getambassador.v2.Mapping;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
-import io.javaoperatorsdk.operator.processing.event.ResourceID;
-import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
-import java.util.Optional;
-
-public class GerritClusterMappingGETReplicaDiscriminator
-    implements ResourceDiscriminator<Mapping, GerritNetwork> {
-  @Override
-  public Optional<Mapping> distinguish(
-      Class<Mapping> resource, GerritNetwork network, Context<GerritNetwork> context) {
-    InformerEventSource<Mapping, GerritNetwork> ies =
-        (InformerEventSource<Mapping, GerritNetwork>)
-            context.eventSourceRetriever().getResourceEventSourceFor(Mapping.class);
-    return ies.get(
-        new ResourceID(GERRIT_MAPPING_GET_REPLICA, network.getMetadata().getNamespace()));
-  }
-}
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingPOSTReplica.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingPOSTReplica.java
index eea964d..8fba245 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingPOSTReplica.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingPOSTReplica.java
@@ -22,7 +22,7 @@
 import io.javaoperatorsdk.operator.api.reconciler.Context;
 import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
 
-@KubernetesDependent(resourceDiscriminator = GerritClusterMappingPOSTReplicaDiscriminator.class)
+@KubernetesDependent
 public class GerritClusterMappingPOSTReplica extends AbstractAmbassadorDependentResource<Mapping>
     implements MappingDependentResourceInterface {
 
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingPOSTReplicaDiscriminator.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingPOSTReplicaDiscriminator.java
deleted file mode 100644
index bb09abd..0000000
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingPOSTReplicaDiscriminator.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (C) 2023 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.k8s.operator.network.ambassador.dependent;
-
-import static com.google.gerrit.k8s.operator.network.ambassador.dependent.GerritClusterMappingPOSTReplica.GERRIT_MAPPING_POST_REPLICA;
-
-import com.google.gerrit.k8s.operator.api.model.network.GerritNetwork;
-import io.getambassador.v2.Mapping;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
-import io.javaoperatorsdk.operator.processing.event.ResourceID;
-import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
-import java.util.Optional;
-
-public class GerritClusterMappingPOSTReplicaDiscriminator
-    implements ResourceDiscriminator<Mapping, GerritNetwork> {
-  @Override
-  public Optional<Mapping> distinguish(
-      Class<Mapping> resource, GerritNetwork network, Context<GerritNetwork> context) {
-    InformerEventSource<Mapping, GerritNetwork> ies =
-        (InformerEventSource<Mapping, GerritNetwork>)
-            context.eventSourceRetriever().getResourceEventSourceFor(Mapping.class);
-    return ies.get(
-        new ResourceID(GERRIT_MAPPING_POST_REPLICA, network.getMetadata().getNamespace()));
-  }
-}
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingPrimary.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingPrimary.java
index f17ce20..816f654 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingPrimary.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingPrimary.java
@@ -20,7 +20,7 @@
 import io.javaoperatorsdk.operator.api.reconciler.Context;
 import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
 
-@KubernetesDependent(resourceDiscriminator = GerritClusterMappingPrimaryDiscriminator.class)
+@KubernetesDependent
 public class GerritClusterMappingPrimary extends AbstractAmbassadorDependentResource<Mapping>
     implements MappingDependentResourceInterface {
 
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingPrimaryDiscriminator.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingPrimaryDiscriminator.java
deleted file mode 100644
index 6dd38d0..0000000
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingPrimaryDiscriminator.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (C) 2023 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.k8s.operator.network.ambassador.dependent;
-
-import static com.google.gerrit.k8s.operator.network.ambassador.dependent.GerritClusterMappingPrimary.GERRIT_MAPPING_PRIMARY;
-
-import com.google.gerrit.k8s.operator.api.model.network.GerritNetwork;
-import io.getambassador.v2.Mapping;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
-import io.javaoperatorsdk.operator.processing.event.ResourceID;
-import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
-import java.util.Optional;
-
-public class GerritClusterMappingPrimaryDiscriminator
-    implements ResourceDiscriminator<Mapping, GerritNetwork> {
-  @Override
-  public Optional<Mapping> distinguish(
-      Class<Mapping> resource, GerritNetwork network, Context<GerritNetwork> context) {
-    InformerEventSource<Mapping, GerritNetwork> ies =
-        (InformerEventSource<Mapping, GerritNetwork>)
-            context.eventSourceRetriever().getResourceEventSourceFor(Mapping.class);
-    return ies.get(new ResourceID(GERRIT_MAPPING_PRIMARY, network.getMetadata().getNamespace()));
-  }
-}
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingReceiver.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingReceiver.java
index ac56422..124f38c 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingReceiver.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingReceiver.java
@@ -24,7 +24,7 @@
 import io.javaoperatorsdk.operator.api.reconciler.Context;
 import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
 
-@KubernetesDependent(resourceDiscriminator = GerritClusterMappingReceiverDiscriminator.class)
+@KubernetesDependent
 public class GerritClusterMappingReceiver extends AbstractAmbassadorDependentResource<Mapping>
     implements MappingDependentResourceInterface {
 
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingReceiverDiscriminator.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingReceiverDiscriminator.java
deleted file mode 100644
index d59fadb..0000000
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingReceiverDiscriminator.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (C) 2023 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.k8s.operator.network.ambassador.dependent;
-
-import static com.google.gerrit.k8s.operator.network.ambassador.dependent.GerritClusterMappingReceiver.GERRIT_MAPPING_RECEIVER;
-
-import com.google.gerrit.k8s.operator.api.model.network.GerritNetwork;
-import io.getambassador.v2.Mapping;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
-import io.javaoperatorsdk.operator.processing.event.ResourceID;
-import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
-import java.util.Optional;
-
-public class GerritClusterMappingReceiverDiscriminator
-    implements ResourceDiscriminator<Mapping, GerritNetwork> {
-  @Override
-  public Optional<Mapping> distinguish(
-      Class<Mapping> resource, GerritNetwork network, Context<GerritNetwork> context) {
-    InformerEventSource<Mapping, GerritNetwork> ies =
-        (InformerEventSource<Mapping, GerritNetwork>)
-            context.eventSourceRetriever().getResourceEventSourceFor(Mapping.class);
-    return ies.get(new ResourceID(GERRIT_MAPPING_RECEIVER, network.getMetadata().getNamespace()));
-  }
-}
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingReceiverGET.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingReceiverGET.java
index da3815c..3675af8 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingReceiverGET.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingReceiverGET.java
@@ -25,7 +25,7 @@
 import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
 import java.util.HashMap;
 
-@KubernetesDependent(resourceDiscriminator = GerritClusterMappingReceiverGETDiscriminator.class)
+@KubernetesDependent
 public class GerritClusterMappingReceiverGET extends AbstractAmbassadorDependentResource<Mapping>
     implements MappingDependentResourceInterface {
 
@@ -53,7 +53,7 @@
             .withNewQueryParameters()
             .withAdditionalProperties(
                 new HashMap<String, Object>(ImmutableMap.of("service", "git-receive-pack")))
-            .endV2QueryParameters()
+            .endQueryParameters()
             .withMethod("GET")
             .withPrefix(INFO_REFS_PATTERN)
             .withPrefixRegex(true)
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingReceiverGETDiscriminator.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingReceiverGETDiscriminator.java
deleted file mode 100644
index 3128be9..0000000
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ambassador/dependent/GerritClusterMappingReceiverGETDiscriminator.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (C) 2023 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.k8s.operator.network.ambassador.dependent;
-
-import static com.google.gerrit.k8s.operator.network.ambassador.dependent.GerritClusterMappingReceiverGET.GERRIT_MAPPING_RECEIVER_GET;
-
-import com.google.gerrit.k8s.operator.api.model.network.GerritNetwork;
-import io.getambassador.v2.Mapping;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
-import io.javaoperatorsdk.operator.processing.event.ResourceID;
-import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
-import java.util.Optional;
-
-public class GerritClusterMappingReceiverGETDiscriminator
-    implements ResourceDiscriminator<Mapping, GerritNetwork> {
-  @Override
-  public Optional<Mapping> distinguish(
-      Class<Mapping> resource, GerritNetwork network, Context<GerritNetwork> context) {
-    InformerEventSource<Mapping, GerritNetwork> ies =
-        (InformerEventSource<Mapping, GerritNetwork>)
-            context.eventSourceRetriever().getResourceEventSourceFor(Mapping.class);
-    return ies.get(
-        new ResourceID(GERRIT_MAPPING_RECEIVER_GET, network.getMetadata().getNamespace()));
-  }
-}
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ingress/GerritIngressReconciler.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ingress/GerritIngressReconciler.java
index 48ec5fd..afe71e8 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/ingress/GerritIngressReconciler.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/network/ingress/GerritIngressReconciler.java
@@ -19,13 +19,13 @@
 import com.google.gerrit.k8s.operator.network.ingress.dependent.GerritClusterIngress;
 import com.google.inject.Singleton;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
 import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
 import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
+import io.javaoperatorsdk.operator.api.reconciler.Workflow;
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
 
 @Singleton
-@ControllerConfiguration(
+@Workflow(
     dependents = {
       @Dependent(
           name = "gerrit-ingress",
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/GerritIstioReconciler.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/GerritIstioReconciler.java
index 9d0a509..a45aa71 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/GerritIstioReconciler.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/GerritIstioReconciler.java
@@ -14,10 +14,6 @@
 
 package com.google.gerrit.k8s.operator.network.istio;
 
-import static com.google.gerrit.k8s.operator.network.istio.GerritIstioReconciler.ISTIO_DESTINATION_RULE_EVENT_SOURCE;
-import static com.google.gerrit.k8s.operator.network.istio.GerritIstioReconciler.ISTIO_SERVICE_ENTRIES_EVENT_SOURCE;
-import static com.google.gerrit.k8s.operator.network.istio.GerritIstioReconciler.ISTIO_VIRTUAL_SERVICE_EVENT_SOURCE;
-
 import com.google.gerrit.k8s.operator.api.model.network.GerritNetwork;
 import com.google.gerrit.k8s.operator.network.GerritClusterIngressCondition;
 import com.google.gerrit.k8s.operator.network.istio.dependent.GerritClusterIstioGateway;
@@ -25,35 +21,23 @@
 import com.google.gerrit.k8s.operator.network.istio.dependent.GerritIstioServiceEntries;
 import com.google.gerrit.k8s.operator.network.istio.dependent.GerritIstioVirtualService;
 import com.google.inject.Singleton;
-import io.fabric8.istio.api.networking.v1beta1.DestinationRule;
-import io.fabric8.istio.api.networking.v1beta1.ServiceEntry;
-import io.fabric8.istio.api.networking.v1beta1.VirtualService;
-import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
 import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
 import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
+import io.javaoperatorsdk.operator.api.reconciler.Workflow;
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
-import io.javaoperatorsdk.operator.processing.event.source.EventSource;
-import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
-import java.util.HashMap;
-import java.util.Map;
 
 @Singleton
-@ControllerConfiguration(
+@Workflow(
     dependents = {
       @Dependent(
           name = "gerrit-destination-rules",
           type = GerritIstioDestinationRule.class,
-          reconcilePrecondition = GerritClusterIngressCondition.class,
-          useEventSourceWithName = ISTIO_DESTINATION_RULE_EVENT_SOURCE),
+          reconcilePrecondition = GerritClusterIngressCondition.class),
       @Dependent(
           name = "gerrit-service-entries",
           type = GerritIstioServiceEntries.class,
-          reconcilePrecondition = GerritClusterIngressCondition.class,
-          useEventSourceWithName = ISTIO_SERVICE_ENTRIES_EVENT_SOURCE),
+          reconcilePrecondition = GerritClusterIngressCondition.class),
       @Dependent(
           name = "gerrit-istio-gateway",
           type = GerritClusterIstioGateway.class,
@@ -62,38 +46,9 @@
           name = "gerrit-istio-virtual-service",
           type = GerritIstioVirtualService.class,
           reconcilePrecondition = GerritClusterIngressCondition.class,
-          dependsOn = {"gerrit-istio-gateway"},
-          useEventSourceWithName = ISTIO_VIRTUAL_SERVICE_EVENT_SOURCE)
+          dependsOn = {"gerrit-istio-gateway"})
     })
-public class GerritIstioReconciler
-    implements Reconciler<GerritNetwork>, EventSourceInitializer<GerritNetwork> {
-  public static final String ISTIO_DESTINATION_RULE_EVENT_SOURCE =
-      "gerrit-cluster-istio-destination-rule";
-  public static final String ISTIO_SERVICE_ENTRIES_EVENT_SOURCE =
-      "gerrit-cluster-istio-service-entries";
-  public static final String ISTIO_VIRTUAL_SERVICE_EVENT_SOURCE =
-      "gerrit-cluster-istio-virtual-service";
-
-  @Override
-  public Map<String, EventSource> prepareEventSources(EventSourceContext<GerritNetwork> context) {
-    InformerEventSource<DestinationRule, GerritNetwork> gerritIstioDestinationRuleEventSource =
-        new InformerEventSource<>(
-            InformerConfiguration.from(DestinationRule.class, context).build(), context);
-
-    InformerEventSource<ServiceEntry, GerritNetwork> gerritIstioServiceEntriesEventSource =
-        new InformerEventSource<>(
-            InformerConfiguration.from(ServiceEntry.class, context).build(), context);
-
-    InformerEventSource<VirtualService, GerritNetwork> virtualServiceEventSource =
-        new InformerEventSource<>(
-            InformerConfiguration.from(VirtualService.class, context).build(), context);
-
-    Map<String, EventSource> eventSources = new HashMap<>();
-    eventSources.put(ISTIO_DESTINATION_RULE_EVENT_SOURCE, gerritIstioDestinationRuleEventSource);
-    eventSources.put(ISTIO_SERVICE_ENTRIES_EVENT_SOURCE, gerritIstioServiceEntriesEventSource);
-    eventSources.put(ISTIO_VIRTUAL_SERVICE_EVENT_SOURCE, virtualServiceEventSource);
-    return eventSources;
-  }
+public class GerritIstioReconciler implements Reconciler<GerritNetwork> {
 
   @Override
   public UpdateControl<GerritNetwork> reconcile(
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritClusterIstioGateway.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritClusterIstioGateway.java
index e4cc3d7..3130ff0 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritClusterIstioGateway.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritClusterIstioGateway.java
@@ -17,11 +17,11 @@
 import com.google.gerrit.k8s.operator.api.model.network.GerritNetwork;
 import com.google.gerrit.k8s.operator.cluster.GerritClusterLabelFactory;
 import com.google.gerrit.k8s.operator.util.CRUDReconcileAddKubernetesDependentResource;
+import io.fabric8.istio.api.api.networking.v1alpha3.Server;
+import io.fabric8.istio.api.api.networking.v1alpha3.ServerBuilder;
+import io.fabric8.istio.api.api.networking.v1alpha3.ServerTLSSettingsTLSmode;
 import io.fabric8.istio.api.networking.v1beta1.Gateway;
 import io.fabric8.istio.api.networking.v1beta1.GatewayBuilder;
-import io.fabric8.istio.api.networking.v1beta1.Server;
-import io.fabric8.istio.api.networking.v1beta1.ServerBuilder;
-import io.fabric8.istio.api.networking.v1beta1.ServerTLSSettingsTLSmode;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
 import java.util.ArrayList;
 import java.util.List;
@@ -59,7 +59,7 @@
         new ServerBuilder()
             .withNewPort()
             .withName("http")
-            .withNumber(80)
+            .withNumber(80L)
             .withProtocol("HTTP")
             .endPort()
             .withHosts(gerritClusterHost)
@@ -73,7 +73,7 @@
           new ServerBuilder()
               .withNewPort()
               .withName("https")
-              .withNumber(443)
+              .withNumber(443L)
               .withProtocol("HTTPS")
               .endPort()
               .withHosts(gerritClusterHost)
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritIstioDestinationRule.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritIstioDestinationRule.java
index 4158d79..b875b8e 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritIstioDestinationRule.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritIstioDestinationRule.java
@@ -19,11 +19,11 @@
 import com.google.gerrit.k8s.operator.cluster.GerritClusterLabelFactory;
 import com.google.gerrit.k8s.operator.gerrit.dependent.GerritService;
 import com.google.gerrit.k8s.operator.util.CRUDReconcileAddKubernetesDependentResource;
+import io.fabric8.istio.api.api.networking.v1alpha3.LoadBalancerSettingsSimpleLB;
+import io.fabric8.istio.api.api.networking.v1alpha3.TrafficPolicy;
+import io.fabric8.istio.api.api.networking.v1alpha3.TrafficPolicyBuilder;
 import io.fabric8.istio.api.networking.v1beta1.DestinationRule;
 import io.fabric8.istio.api.networking.v1beta1.DestinationRuleBuilder;
-import io.fabric8.istio.api.networking.v1beta1.LoadBalancerSettingsSimpleLB;
-import io.fabric8.istio.api.networking.v1beta1.TrafficPolicy;
-import io.fabric8.istio.api.networking.v1beta1.TrafficPolicyBuilder;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
 import io.javaoperatorsdk.operator.processing.dependent.BulkDependentResource;
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritIstioServiceEntries.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritIstioServiceEntries.java
index aa57362..3795472 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritIstioServiceEntries.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritIstioServiceEntries.java
@@ -25,11 +25,11 @@
 import com.google.gerrit.k8s.operator.gerrit.dependent.GerritService;
 import com.google.gerrit.k8s.operator.gerrit.dependent.GerritStatefulSet;
 import com.google.gerrit.k8s.operator.util.CRUDReconcileAddKubernetesDependentResource;
+import io.fabric8.istio.api.api.networking.v1alpha3.ServiceEntryLocation;
+import io.fabric8.istio.api.api.networking.v1alpha3.ServiceEntryResolution;
+import io.fabric8.istio.api.api.networking.v1alpha3.ServicePortBuilder;
 import io.fabric8.istio.api.networking.v1beta1.ServiceEntry;
 import io.fabric8.istio.api.networking.v1beta1.ServiceEntryBuilder;
-import io.fabric8.istio.api.networking.v1beta1.ServiceEntryLocation;
-import io.fabric8.istio.api.networking.v1beta1.ServiceEntryResolution;
-import io.fabric8.istio.api.networking.v1beta1.ServicePortBuilder;
 import io.fabric8.kubernetes.api.model.apps.StatefulSet;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
@@ -66,17 +66,17 @@
             List.of(
                 new ServicePortBuilder()
                     .withName("ssh-primary")
-                    .withNumber(SSH_PORT)
+                    .withNumber(Integer.toUnsignedLong(SSH_PORT))
                     .withProtocol("TCP")
                     .build(),
                 new ServicePortBuilder()
                     .withName("http")
-                    .withNumber(HTTP_PORT)
+                    .withNumber(Integer.toUnsignedLong(HTTP_PORT))
                     .withProtocol("HTTP")
                     .build(),
                 new ServicePortBuilder()
                     .withName("jgroups")
-                    .withNumber(JGROUPS_PORT)
+                    .withNumber(Integer.toUnsignedLong(JGROUPS_PORT))
                     .withProtocol("TCP")
                     .build()))
         .endSpec()
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritIstioVirtualService.java b/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritIstioVirtualService.java
index dff1a91..554c8ec 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritIstioVirtualService.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/network/istio/dependent/GerritIstioVirtualService.java
@@ -29,18 +29,18 @@
 import com.google.gerrit.k8s.operator.gerrit.dependent.GerritService;
 import com.google.gerrit.k8s.operator.receiver.dependent.ReceiverService;
 import com.google.gerrit.k8s.operator.util.CRUDReconcileAddKubernetesDependentResource;
-import io.fabric8.istio.api.networking.v1beta1.HTTPMatchRequest;
-import io.fabric8.istio.api.networking.v1beta1.HTTPMatchRequestBuilder;
-import io.fabric8.istio.api.networking.v1beta1.HTTPRoute;
-import io.fabric8.istio.api.networking.v1beta1.HTTPRouteBuilder;
-import io.fabric8.istio.api.networking.v1beta1.HTTPRouteDestination;
-import io.fabric8.istio.api.networking.v1beta1.HTTPRouteDestinationBuilder;
-import io.fabric8.istio.api.networking.v1beta1.L4MatchAttributesBuilder;
-import io.fabric8.istio.api.networking.v1beta1.RouteDestination;
-import io.fabric8.istio.api.networking.v1beta1.RouteDestinationBuilder;
-import io.fabric8.istio.api.networking.v1beta1.StringMatchBuilder;
-import io.fabric8.istio.api.networking.v1beta1.TCPRoute;
-import io.fabric8.istio.api.networking.v1beta1.TCPRouteBuilder;
+import io.fabric8.istio.api.api.networking.v1alpha3.HTTPMatchRequest;
+import io.fabric8.istio.api.api.networking.v1alpha3.HTTPMatchRequestBuilder;
+import io.fabric8.istio.api.api.networking.v1alpha3.HTTPRoute;
+import io.fabric8.istio.api.api.networking.v1alpha3.HTTPRouteBuilder;
+import io.fabric8.istio.api.api.networking.v1alpha3.HTTPRouteDestination;
+import io.fabric8.istio.api.api.networking.v1alpha3.HTTPRouteDestinationBuilder;
+import io.fabric8.istio.api.api.networking.v1alpha3.L4MatchAttributesBuilder;
+import io.fabric8.istio.api.api.networking.v1alpha3.RouteDestination;
+import io.fabric8.istio.api.api.networking.v1alpha3.RouteDestinationBuilder;
+import io.fabric8.istio.api.api.networking.v1alpha3.StringMatchBuilder;
+import io.fabric8.istio.api.api.networking.v1alpha3.TCPRoute;
+import io.fabric8.istio.api.api.networking.v1alpha3.TCPRouteBuilder;
 import io.fabric8.istio.api.networking.v1beta1.VirtualService;
 import io.fabric8.istio.api.networking.v1beta1.VirtualServiceBuilder;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/receiver/ReceiverReconciler.java b/operator/src/main/java/com/google/gerrit/k8s/operator/receiver/ReceiverReconciler.java
index 25502bd..e15f542 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/receiver/ReceiverReconciler.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/receiver/ReceiverReconciler.java
@@ -23,24 +23,23 @@
 import com.google.inject.Singleton;
 import io.fabric8.kubernetes.api.model.Secret;
 import io.fabric8.kubernetes.client.KubernetesClient;
-import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
+import io.javaoperatorsdk.operator.api.config.informer.InformerEventSourceConfiguration;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
 import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
 import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
 import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
+import io.javaoperatorsdk.operator.api.reconciler.Workflow;
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
 import io.javaoperatorsdk.operator.processing.event.ResourceID;
 import io.javaoperatorsdk.operator.processing.event.source.EventSource;
 import io.javaoperatorsdk.operator.processing.event.source.SecondaryToPrimaryMapper;
 import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.stream.Collectors;
 
 @Singleton
-@ControllerConfiguration(
+@Workflow(
     dependents = {
       @Dependent(name = "receiver-deployment", type = ReceiverDeployment.class),
       @Dependent(
@@ -48,7 +47,7 @@
           type = ReceiverService.class,
           dependsOn = {"receiver-deployment"})
     })
-public class ReceiverReconciler implements Reconciler<Receiver>, EventSourceInitializer<Receiver> {
+public class ReceiverReconciler implements Reconciler<Receiver> {
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
   private static final String SECRET_EVENT_SOURCE_NAME = "secret-event-source";
   private final KubernetesClient client;
@@ -59,7 +58,8 @@
   }
 
   @Override
-  public Map<String, EventSource> prepareEventSources(EventSourceContext<Receiver> context) {
+  public List<EventSource<?, Receiver>> prepareEventSources(EventSourceContext<Receiver> context) {
+    List<EventSource<?, Receiver>> eventSources = new ArrayList<>();
     final SecondaryToPrimaryMapper<Secret> secretMapper =
         (Secret secret) ->
             context
@@ -75,13 +75,12 @@
 
     InformerEventSource<Secret, Receiver> secretEventSource =
         new InformerEventSource<>(
-            InformerConfiguration.from(Secret.class, context)
+            InformerEventSourceConfiguration.from(Secret.class, Receiver.class)
                 .withSecondaryToPrimaryMapper(secretMapper)
                 .build(),
             context);
 
-    Map<String, EventSource> eventSources = new HashMap<>();
-    eventSources.put(SECRET_EVENT_SOURCE_NAME, secretEventSource);
+    eventSources.add(secretEventSource);
     return eventSources;
   }
 
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/tasks/incomingrepl/IncomingReplicationTaskReconciler.java b/operator/src/main/java/com/google/gerrit/k8s/operator/tasks/incomingrepl/IncomingReplicationTaskReconciler.java
index 48d7abb..8fc92b1 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/tasks/incomingrepl/IncomingReplicationTaskReconciler.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/tasks/incomingrepl/IncomingReplicationTaskReconciler.java
@@ -19,13 +19,13 @@
 import com.google.gerrit.k8s.operator.tasks.incomingrepl.dependent.IncomingReplicationTaskCronJob;
 import com.google.inject.Singleton;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
 import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
 import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
+import io.javaoperatorsdk.operator.api.reconciler.Workflow;
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
 
 @Singleton
-@ControllerConfiguration(
+@Workflow(
     dependents = {
       @Dependent(
           name = "incoming-repl-task-configmap",
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/util/CRUDReconcileAddKubernetesDependentResource.java b/operator/src/main/java/com/google/gerrit/k8s/operator/util/CRUDReconcileAddKubernetesDependentResource.java
index 6e1cd79..aec8a0f 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/util/CRUDReconcileAddKubernetesDependentResource.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/util/CRUDReconcileAddKubernetesDependentResource.java
@@ -35,7 +35,6 @@
 
   @Override
   public Result<R> match(R actualResource, R desired, P primary, Context<P> context) {
-    return GenericKubernetesResourceMatcher.match(
-        desired, actualResource, false, false, true, context);
+    return GenericKubernetesResourceMatcher.match(desired, actualResource, false, true, context);
   }
 }
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/util/KubernetesDependentCustomResource.java b/operator/src/main/java/com/google/gerrit/k8s/operator/util/KubernetesDependentCustomResource.java
index 9b2f516..946e9ce 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/util/KubernetesDependentCustomResource.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/util/KubernetesDependentCustomResource.java
@@ -39,8 +39,7 @@
 
   @Override
   public Result<R> match(R actualResource, R desired, P primary, Context<P> context) {
-    return GenericKubernetesResourceMatcher.match(
-        desired, actualResource, true, false, true, context);
+    return GenericKubernetesResourceMatcher.match(desired, actualResource, false, true, context);
   }
 
   @Override
diff --git a/operator/src/test/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritTest.java b/operator/src/test/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritTest.java
index 86179a7..6fa4f27 100644
--- a/operator/src/test/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritTest.java
+++ b/operator/src/test/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritTest.java
@@ -21,7 +21,7 @@
 import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.fabric8.kubernetes.api.model.Service;
 import io.fabric8.kubernetes.api.model.apps.StatefulSet;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import io.javaoperatorsdk.operator.ReconcilerUtils;
 import io.javaoperatorsdk.operator.api.config.BaseConfigurationService;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
@@ -33,7 +33,6 @@
 import java.util.Map;
 import java.util.stream.Stream;
 import org.junit.Rule;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.TestInstance.Lifecycle;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -42,12 +41,7 @@
 
 @TestInstance(Lifecycle.PER_CLASS)
 public class GerritTest {
-  @Rule public KubernetesServer kubernetesServer = new KubernetesServer();
-
-  @BeforeAll
-  public void setup() throws Exception {
-    kubernetesServer.before();
-  }
+  @Rule public KubernetesMockServer kubernetesServer = new KubernetesMockServer();
 
   @ParameterizedTest
   @MethodSource("provideYamlManifests")
@@ -60,7 +54,7 @@
       String expectedHeadlessServiceOutputFile) {
     Gerrit gerrit = ReconcilerUtils.loadYaml(Gerrit.class, this.getClass(), inputFile);
     Context<Gerrit> context =
-        getContext(new GerritReconciler(kubernetesServer.getClient()), gerrit);
+        getContext(new GerritReconciler(kubernetesServer.createClient()), gerrit);
 
     ConfigMap expectedGerritCm =
         ReconcilerUtils.loadYaml(
@@ -106,7 +100,7 @@
         new Controller<Gerrit>(
             reconciler,
             new BaseConfigurationService().getConfigurationFor(reconciler),
-            kubernetesServer.getClient());
+            kubernetesServer.createClient());
 
     return new DefaultContext<Gerrit>(
         new GenericRetryExecution(new GenericRetry()), controller, primary);
diff --git a/operator/src/test/java/com/google/gerrit/k8s/operator/gitgc/dependent/GitGarbageCollectionTest.java b/operator/src/test/java/com/google/gerrit/k8s/operator/gitgc/dependent/GitGarbageCollectionTest.java
index f175256..bafcb24 100644
--- a/operator/src/test/java/com/google/gerrit/k8s/operator/gitgc/dependent/GitGarbageCollectionTest.java
+++ b/operator/src/test/java/com/google/gerrit/k8s/operator/gitgc/dependent/GitGarbageCollectionTest.java
@@ -21,7 +21,7 @@
 import com.google.gerrit.k8s.operator.gitgc.GitGarbageCollectionReconciler;
 import io.fabric8.kubernetes.api.model.HasMetadata;
 import io.fabric8.kubernetes.api.model.batch.v1.CronJob;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import io.javaoperatorsdk.operator.ReconcilerUtils;
 import io.javaoperatorsdk.operator.api.config.BaseConfigurationService;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
@@ -33,7 +33,6 @@
 import java.net.HttpURLConnection;
 import java.util.stream.Stream;
 import org.junit.Rule;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.TestInstance.Lifecycle;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -47,12 +46,7 @@
           "/apis/%s/namespaces/gerrit/%s/gerrit",
           HasMetadata.getApiVersion(GerritCluster.class),
           HasMetadata.getPlural(GerritCluster.class));
-  @Rule public KubernetesServer kubernetesServer = new KubernetesServer();
-
-  @BeforeAll
-  public void setup() throws Exception {
-    kubernetesServer.before();
-  }
+  @Rule public KubernetesMockServer kubernetesServer = new KubernetesMockServer();
 
   @ParameterizedTest
   @MethodSource("provideYamlManifests")
@@ -72,7 +66,7 @@
         .once();
 
     Context<GitGarbageCollection> context =
-        getContext(new GitGarbageCollectionReconciler(kubernetesServer.getClient()), input);
+        getContext(new GitGarbageCollectionReconciler(kubernetesServer.createClient()), input);
     GitGarbageCollectionCronJob dependentCronjob = new GitGarbageCollectionCronJob();
     assertThat(dependentCronjob.desired(input, context))
         .isEqualTo(ReconcilerUtils.loadYaml(CronJob.class, this.getClass(), expectedCronJob));
@@ -84,7 +78,7 @@
         new Controller<GitGarbageCollection>(
             reconciler,
             new BaseConfigurationService().getConfigurationFor(reconciler),
-            kubernetesServer.getClient());
+            kubernetesServer.createClient());
 
     return new DefaultContext<GitGarbageCollection>(
         new GenericRetryExecution(new GenericRetry()), controller, primary);
diff --git a/operator/src/test/java/com/google/gerrit/k8s/operator/indexer/dependent/GerritIndexerTest.java b/operator/src/test/java/com/google/gerrit/k8s/operator/indexer/dependent/GerritIndexerTest.java
index 21579e7..0058c1e 100644
--- a/operator/src/test/java/com/google/gerrit/k8s/operator/indexer/dependent/GerritIndexerTest.java
+++ b/operator/src/test/java/com/google/gerrit/k8s/operator/indexer/dependent/GerritIndexerTest.java
@@ -25,7 +25,7 @@
 import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.fabric8.kubernetes.api.model.HasMetadata;
 import io.fabric8.kubernetes.api.model.batch.v1.Job;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import io.javaoperatorsdk.operator.ReconcilerUtils;
 import io.javaoperatorsdk.operator.api.config.BaseConfigurationService;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
@@ -56,12 +56,11 @@
       String.format(
           "/apis/%s/namespaces/gerrit/%s/gerrit",
           HasMetadata.getApiVersion(Gerrit.class), HasMetadata.getPlural(Gerrit.class));
-  @Rule public KubernetesServer kubernetesServer = new KubernetesServer();
+  @Rule public KubernetesMockServer kubernetesServer = new KubernetesMockServer();
 
   @BeforeAll
   public void setup() throws Exception {
     OperatorContext.createInstance(ClusterMode.HIGH_AVAILABILITY, "cluster.local");
-    kubernetesServer.before();
   }
 
   @ParameterizedTest
@@ -110,7 +109,7 @@
         new Controller<GerritIndexer>(
             reconciler,
             new BaseConfigurationService().getConfigurationFor(reconciler),
-            kubernetesServer.getClient());
+            kubernetesServer.createClient());
 
     return new DefaultContext<GerritIndexer>(
         new GenericRetryExecution(new GenericRetry()), controller, primary);
diff --git a/operator/src/test/java/com/google/gerrit/k8s/operator/server/AdmissionWebhookAbstractTest.java b/operator/src/test/java/com/google/gerrit/k8s/operator/server/AdmissionWebhookAbstractTest.java
index 49ee9ea..91c2202 100644
--- a/operator/src/test/java/com/google/gerrit/k8s/operator/server/AdmissionWebhookAbstractTest.java
+++ b/operator/src/test/java/com/google/gerrit/k8s/operator/server/AdmissionWebhookAbstractTest.java
@@ -35,7 +35,7 @@
 import io.fabric8.kubernetes.api.model.admission.v1.AdmissionRequest;
 import io.fabric8.kubernetes.api.model.admission.v1.AdmissionReview;
 import io.fabric8.kubernetes.client.CustomResource;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.net.HttpURLConnection;
@@ -65,14 +65,12 @@
           NAMESPACE,
           HasMetadata.getPlural(GerritCluster.class));
 
-  @Rule protected KubernetesServer kubernetesServer = new KubernetesServer();
+  @Rule protected KubernetesMockServer kubernetesServer = new KubernetesMockServer();
 
   @BeforeAll
   public void setup() throws Exception {
     server = new TestAdmissionWebhookServer();
 
-    kubernetesServer.before();
-
     OperatorContext.createInstance(getClusterMode(), "cluster.local");
     server.registerWebhook(new GerritClusterAdmissionWebhook(getClusterMode()));
     server.registerWebhook(new GerritAdmissionWebhook(getClusterMode()));
diff --git a/operator/src/test/java/com/google/gerrit/k8s/operator/server/GerritClusterAdmissionWebhookTest.java b/operator/src/test/java/com/google/gerrit/k8s/operator/server/GerritClusterAdmissionWebhookTest.java
index 76c6fbf..7524ee8 100644
--- a/operator/src/test/java/com/google/gerrit/k8s/operator/server/GerritClusterAdmissionWebhookTest.java
+++ b/operator/src/test/java/com/google/gerrit/k8s/operator/server/GerritClusterAdmissionWebhookTest.java
@@ -48,7 +48,7 @@
     cfg.fromText(TestGerrit.DEFAULT_GERRIT_CONFIG);
     GerritTemplate gerrit1 = TestGerrit.createGerritTemplate("gerrit1", GerritMode.PRIMARY, cfg);
     TestGerritCluster gerritCluster =
-        new TestGerritCluster(kubernetesServer.getClient(), NAMESPACE);
+        new TestGerritCluster(kubernetesServer.createClient(), NAMESPACE);
     gerritCluster.addGerrit(gerrit1);
     GerritCluster cluster = gerritCluster.build();
 
@@ -80,7 +80,7 @@
     cfg.fromText(TestGerrit.DEFAULT_GERRIT_CONFIG);
     GerritTemplate gerrit = TestGerrit.createGerritTemplate("gerrit1", GerritMode.PRIMARY, cfg);
     TestGerritCluster gerritCluster =
-        new TestGerritCluster(kubernetesServer.getClient(), NAMESPACE);
+        new TestGerritCluster(kubernetesServer.createClient(), NAMESPACE);
     gerritCluster.addGerrit(gerrit);
 
     ReceiverTemplate receiver = new ReceiverTemplate();
@@ -110,7 +110,7 @@
     cfg.fromText(TestGerrit.DEFAULT_GERRIT_CONFIG);
     GerritTemplate gerrit1 = TestGerrit.createGerritTemplate("gerrit1", GerritMode.PRIMARY, cfg);
     TestGerritCluster gerritCluster =
-        new TestGerritCluster(kubernetesServer.getClient(), NAMESPACE);
+        new TestGerritCluster(kubernetesServer.createClient(), NAMESPACE);
     gerritCluster.addGerrit(gerrit1);
 
     HttpURLConnection http = sendAdmissionRequest(gerritCluster.build());
@@ -138,7 +138,7 @@
     cfg.fromText(TestGerrit.DEFAULT_GERRIT_CONFIG);
 
     TestGerritCluster gerritCluster =
-        new TestGerritCluster(kubernetesServer.getClient(), NAMESPACE);
+        new TestGerritCluster(kubernetesServer.createClient(), NAMESPACE);
     GerritTemplate primary = TestGerrit.createGerritTemplate("gerrit", GerritMode.PRIMARY, cfg);
     GerritTemplate replica = TestGerrit.createGerritTemplate("gerrit", GerritMode.REPLICA, cfg);
     gerritCluster.addGerrit(primary);
diff --git a/operator/src/test/java/com/google/gerrit/k8s/operator/server/GerritMultisiteClusterAdmissionWebhookTest.java b/operator/src/test/java/com/google/gerrit/k8s/operator/server/GerritMultisiteClusterAdmissionWebhookTest.java
index de97552..b0cef7e 100644
--- a/operator/src/test/java/com/google/gerrit/k8s/operator/server/GerritMultisiteClusterAdmissionWebhookTest.java
+++ b/operator/src/test/java/com/google/gerrit/k8s/operator/server/GerritMultisiteClusterAdmissionWebhookTest.java
@@ -43,7 +43,7 @@
     cfg.fromText(TestGerrit.DEFAULT_GERRIT_CONFIG);
 
     TestGerritCluster gerritCluster =
-        new TestGerritCluster(kubernetesServer.getClient(), NAMESPACE);
+        new TestGerritCluster(kubernetesServer.createClient(), NAMESPACE);
     GerritTemplate primary = TestGerrit.createGerritTemplate("gerrit", GerritMode.PRIMARY, cfg);
     GerritTemplate replica = TestGerrit.createGerritTemplate("gerrit", GerritMode.REPLICA, cfg);
     gerritCluster.addGerrit(primary);
@@ -68,7 +68,7 @@
     cfg.fromText(TestGerrit.DEFAULT_GERRIT_CONFIG);
 
     TestGerritCluster gerritCluster =
-        new TestGerritCluster(kubernetesServer.getClient(), NAMESPACE);
+        new TestGerritCluster(kubernetesServer.createClient(), NAMESPACE);
     GerritTemplate replica = TestGerrit.createGerritTemplate("gerrit", GerritMode.REPLICA, cfg);
     gerritCluster.addGerrit(replica);
 
@@ -92,7 +92,7 @@
     cfg.fromText(TestGerrit.DEFAULT_GERRIT_CONFIG);
 
     TestGerritCluster gerritCluster =
-        new TestGerritCluster(kubernetesServer.getClient(), NAMESPACE);
+        new TestGerritCluster(kubernetesServer.createClient(), NAMESPACE);
     GerritTemplate primary = TestGerrit.createGerritTemplate("gerrit", GerritMode.PRIMARY, cfg);
     primary.getSpec().setReplicas(1);
     gerritCluster.addGerrit(primary);
diff --git a/operator/src/test/java/com/google/gerrit/k8s/operator/server/GitGcAdmissionWebhookTest.java b/operator/src/test/java/com/google/gerrit/k8s/operator/server/GitGcAdmissionWebhookTest.java
index 0fc1407..358e22b 100644
--- a/operator/src/test/java/com/google/gerrit/k8s/operator/server/GitGcAdmissionWebhookTest.java
+++ b/operator/src/test/java/com/google/gerrit/k8s/operator/server/GitGcAdmissionWebhookTest.java
@@ -30,7 +30,7 @@
 import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
 import io.fabric8.kubernetes.api.model.admission.v1.AdmissionRequest;
 import io.fabric8.kubernetes.api.model.admission.v1.AdmissionReview;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import jakarta.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -60,15 +60,13 @@
           HasMetadata.getPlural(GitGarbageCollection.class));
   private TestAdmissionWebhookServer server;
 
-  @Rule public KubernetesServer kubernetesServer = new KubernetesServer();
+  @Rule public KubernetesMockServer kubernetesServer = new KubernetesMockServer();
 
   @BeforeAll
   public void setup() throws Exception {
     server = new TestAdmissionWebhookServer();
 
-    kubernetesServer.before();
-
-    GitGcAdmissionWebhook webhook = new GitGcAdmissionWebhook(kubernetesServer.getClient());
+    GitGcAdmissionWebhook webhook = new GitGcAdmissionWebhook(kubernetesServer.createClient());
     server.registerWebhook(webhook);
     server.start();
   }
diff --git a/operator/src/test/java/com/google/gerrit/k8s/operator/tasks/incomingrepl/dependent/IncomingReplicationTaskTest.java b/operator/src/test/java/com/google/gerrit/k8s/operator/tasks/incomingrepl/dependent/IncomingReplicationTaskTest.java
index 4c9cf7e..ec805ec 100644
--- a/operator/src/test/java/com/google/gerrit/k8s/operator/tasks/incomingrepl/dependent/IncomingReplicationTaskTest.java
+++ b/operator/src/test/java/com/google/gerrit/k8s/operator/tasks/incomingrepl/dependent/IncomingReplicationTaskTest.java
@@ -24,7 +24,7 @@
 import io.fabric8.kubernetes.api.model.Secret;
 import io.fabric8.kubernetes.api.model.SecretBuilder;
 import io.fabric8.kubernetes.api.model.batch.v1.CronJob;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
 import io.javaoperatorsdk.operator.ReconcilerUtils;
 import io.javaoperatorsdk.operator.api.config.BaseConfigurationService;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
@@ -37,7 +37,6 @@
 import java.util.Map;
 import java.util.stream.Stream;
 import org.junit.Rule;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.TestInstance.Lifecycle;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -46,12 +45,7 @@
 
 @TestInstance(Lifecycle.PER_CLASS)
 public class IncomingReplicationTaskTest {
-  @Rule public KubernetesServer kubernetesServer = new KubernetesServer();
-
-  @BeforeAll
-  public void setup() throws Exception {
-    kubernetesServer.before();
-  }
+  @Rule public KubernetesMockServer kubernetesServer = new KubernetesMockServer();
 
   @ParameterizedTest
   @MethodSource("provideYamlManifests")
@@ -113,7 +107,7 @@
         new Controller<IncomingReplicationTask>(
             reconciler,
             new BaseConfigurationService().getConfigurationFor(reconciler),
-            kubernetesServer.getClient());
+            kubernetesServer.createClient());
 
     return new DefaultContext<IncomingReplicationTask>(
         new GenericRetryExecution(new GenericRetry()), controller, primary);
diff --git a/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/statefulset_es_primary.yaml b/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/statefulset_es_primary.yaml
index b1b5da8..3c797c9 100644
--- a/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/statefulset_es_primary.yaml
+++ b/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/statefulset_es_primary.yaml
@@ -158,21 +158,21 @@
       serviceAccount: gerrit
       terminationGracePeriodSeconds: 30
       volumes:
-      - name: shared
-        persistentVolumeClaim:
-          claimName: shared-pvc
       - name: tmp
         emptyDir:
           sizeLimit: 500Mi
-      - name: gerrit-secure-config
-        secret:
-          secretName: gerrit-secure-config
-      - configMap:
-          name: gerrit-configmap
-        name: gerrit-config
       - configMap:
           name: gerrit-init-configmap
         name: gerrit-init-config
+      - configMap:
+          name: gerrit-configmap
+        name: gerrit-config
+      - name: gerrit-secure-config
+        secret:
+          secretName: gerrit-secure-config
+      - name: shared
+        persistentVolumeClaim:
+          claimName: shared-pvc
   updateStrategy:
     rollingUpdate:
       partition: 0
diff --git a/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/statefulset_ha_primary.yaml b/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/statefulset_ha_primary.yaml
index 28b366b..67800cf 100644
--- a/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/statefulset_ha_primary.yaml
+++ b/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/statefulset_ha_primary.yaml
@@ -152,21 +152,21 @@
       serviceAccount: gerrit
       terminationGracePeriodSeconds: 30
       volumes:
-      - name: shared
-        persistentVolumeClaim:
-          claimName: shared-pvc
       - name: tmp
         emptyDir:
           sizeLimit: 500Mi
-      - name: gerrit-secure-config
-        secret:
-          secretName: gerrit-secure-config
-      - configMap:
-          name: gerrit-configmap
-        name: gerrit-config
       - configMap:
           name: gerrit-init-configmap
         name: gerrit-init-config
+      - configMap:
+          name: gerrit-configmap
+        name: gerrit-config
+      - name: gerrit-secure-config
+        secret:
+          secretName: gerrit-secure-config
+      - name: shared
+        persistentVolumeClaim:
+          claimName: shared-pvc
   updateStrategy:
     rollingUpdate:
       partition: 0
diff --git a/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/statefulset_single_primary.yaml b/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/statefulset_single_primary.yaml
index 7086159..31a82c8 100644
--- a/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/statefulset_single_primary.yaml
+++ b/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/statefulset_single_primary.yaml
@@ -140,21 +140,21 @@
       serviceAccount: gerrit
       terminationGracePeriodSeconds: 30
       volumes:
-      - name: shared
-        persistentVolumeClaim:
-          claimName: shared-pvc
       - name: tmp
         emptyDir:
           sizeLimit: 500Mi
-      - name: gerrit-secure-config
-        secret:
-          secretName: gerrit-secure-config
-      - configMap:
-          name: gerrit-configmap
-        name: gerrit-config
       - configMap:
           name: gerrit-init-configmap
         name: gerrit-init-config
+      - configMap:
+          name: gerrit-configmap
+        name: gerrit-config
+      - name: gerrit-secure-config
+        secret:
+          secretName: gerrit-secure-config
+      - name: shared
+        persistentVolumeClaim:
+          claimName: shared-pvc
   updateStrategy:
     rollingUpdate:
       partition: 0
diff --git a/operator/src/test/resources/com/google/gerrit/k8s/operator/receiver/dependent/deployment.yaml b/operator/src/test/resources/com/google/gerrit/k8s/operator/receiver/dependent/deployment.yaml
index 08f8270..801c0b7 100644
--- a/operator/src/test/resources/com/google/gerrit/k8s/operator/receiver/dependent/deployment.yaml
+++ b/operator/src/test/resources/com/google/gerrit/k8s/operator/receiver/dependent/deployment.yaml
@@ -120,12 +120,12 @@
           mountPath: /var/apache/credentials/.htpasswd
           subPath: .htpasswd
       volumes:
-      - name: shared
-        persistentVolumeClaim:
-          claimName: shared-pvc
       - name: apache-credentials
         secret:
           secretName: apache-credentials
+      - name: shared
+        persistentVolumeClaim:
+          claimName: shared-pvc
       - name: apache-run-dir
         emptyDir:
           sizeLimit: 50Mi
diff --git a/operator/src/test/resources/com/google/gerrit/k8s/operator/receiver/dependent/deployment_minimal.yaml b/operator/src/test/resources/com/google/gerrit/k8s/operator/receiver/dependent/deployment_minimal.yaml
index c282acf..c2e6024 100644
--- a/operator/src/test/resources/com/google/gerrit/k8s/operator/receiver/dependent/deployment_minimal.yaml
+++ b/operator/src/test/resources/com/google/gerrit/k8s/operator/receiver/dependent/deployment_minimal.yaml
@@ -81,12 +81,12 @@
           mountPath: /var/apache/credentials/.htpasswd
           subPath: .htpasswd
       volumes:
-      - name: shared
-        persistentVolumeClaim:
-          claimName: shared-pvc
       - name: apache-credentials
         secret:
           secretName: apache-credentials
+      - name: shared
+        persistentVolumeClaim:
+          claimName: shared-pvc
       - name: apache-run-dir
         emptyDir:
           sizeLimit: 50Mi
