diff --git a/crd/current/gerritclusters.gerritoperator.google.com-v1.yml b/crd/current/gerritclusters.gerritoperator.google.com-v1.yml
index 3c38017..e043fc3 100644
--- a/crd/current/gerritclusters.gerritoperator.google.com-v1.yml
+++ b/crd/current/gerritclusters.gerritoperator.google.com-v1.yml
@@ -509,6 +509,17 @@
                                       fieldPath:
                                         type: string
                                     type: object
+                                  fileKeyRef:
+                                    properties:
+                                      key:
+                                        type: string
+                                      optional:
+                                        type: boolean
+                                      path:
+                                        type: string
+                                      volumeName:
+                                        type: string
+                                    type: object
                                   resourceFieldRef:
                                     properties:
                                       containerName:
diff --git a/crd/current/gerrits.gerritoperator.google.com-v1.yml b/crd/current/gerrits.gerritoperator.google.com-v1.yml
index 5e857bd..0159127 100644
--- a/crd/current/gerrits.gerritoperator.google.com-v1.yml
+++ b/crd/current/gerrits.gerritoperator.google.com-v1.yml
@@ -411,6 +411,17 @@
                             fieldPath:
                               type: string
                           type: object
+                        fileKeyRef:
+                          properties:
+                            key:
+                              type: string
+                            optional:
+                              type: boolean
+                            path:
+                              type: string
+                            volumeName:
+                              type: string
+                          type: object
                         resourceFieldRef:
                           properties:
                             containerName:
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 8dca827..55d3d7e 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
@@ -3057,6 +3057,17 @@
                                         fieldPath:
                                           type: string
                                       type: object
+                                    fileKeyRef:
+                                      properties:
+                                        key:
+                                          type: string
+                                        optional:
+                                          type: boolean
+                                        path:
+                                          type: string
+                                        volumeName:
+                                          type: string
+                                      type: object
                                     resourceFieldRef:
                                       properties:
                                         containerName:
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 fc3b2c8..5f7fd56 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
@@ -411,6 +411,17 @@
                               fieldPath:
                                 type: string
                             type: object
+                          fileKeyRef:
+                            properties:
+                              key:
+                                type: string
+                              optional:
+                                type: boolean
+                              path:
+                                type: string
+                              volumeName:
+                                type: string
+                            type: object
                           resourceFieldRef:
                             properties:
                               containerName:
diff --git a/operator/pom.xml b/operator/pom.xml
index ae73112..d1ad9d0 100644
--- a/operator/pom.xml
+++ b/operator/pom.xml
@@ -15,13 +15,13 @@
 	<properties>
 		<revision>1.0.0-SNAPSHOT</revision>
 
-		<fabric8.version>7.3.1</fabric8.version>
+		<fabric8.version>7.5.2</fabric8.version>
 		<flogger.version>0.8</flogger.version>
 		<guice.version>7.0.0</guice.version>
-		<javaoperatorsdk.version>5.1.0</javaoperatorsdk.version>
+		<javaoperatorsdk.version>5.2.3</javaoperatorsdk.version>
 		<jetty.version>11.0.25</jetty.version>
-		<log42.version>2.24.3</log42.version>
-		<sundrio.version>0.200.0</sundrio.version>
+		<log42.version>2.25.3</log42.version>
+		<sundrio.version>0.230.1</sundrio.version>
 		<lombok.version>1.18.38</lombok.version>
 		<maven.compiler.source>17</maven.compiler.source>
 		<maven.compiler.target>17</maven.compiler.target>
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/ClusterManagedGerrit.java b/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/ClusterManagedGerrit.java
index 7603c30..c2393e6 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/ClusterManagedGerrit.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/ClusterManagedGerrit.java
@@ -21,26 +21,29 @@
 import io.javaoperatorsdk.operator.api.reconciler.Context;
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
 import io.javaoperatorsdk.operator.processing.dependent.BulkDependentResource;
+import io.javaoperatorsdk.operator.processing.event.ResourceID;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
 public class ClusterManagedGerrit extends KubernetesDependentCustomResource<Gerrit, GerritCluster>
-    implements Deleter<GerritCluster>, BulkDependentResource<Gerrit, GerritCluster> {
+    implements Deleter<GerritCluster>, BulkDependentResource<Gerrit, GerritCluster, ResourceID> {
 
   public ClusterManagedGerrit() {
     super(Gerrit.class);
   }
 
   @Override
-  public Map<String, Gerrit> desiredResources(
+  public Map<ResourceID, Gerrit> desiredResources(
       GerritCluster gerritCluster, Context<GerritCluster> context) {
-    Map<String, Gerrit> gerrits = new HashMap<>();
+    Map<ResourceID, Gerrit> gerrits = new HashMap<>();
     for (GerritTemplate template : gerritCluster.getSpec().getGerrits()) {
-      if (gerrits.get(template.getMetadata().getName()) != null) {
+      Gerrit desired = desired(gerritCluster, template);
+      ResourceID id = ResourceID.fromResource(desired);
+      if (gerrits.get(id) != null) {
         throw new IllegalArgumentException("Each gerrit spec must use a different metadata.name");
       }
-      gerrits.put(template.getMetadata().getName(), desired(gerritCluster, template));
+      gerrits.put(id, desired);
     }
     return gerrits;
   }
@@ -50,12 +53,12 @@
   }
 
   @Override
-  public Map<String, Gerrit> getSecondaryResources(
+  public Map<ResourceID, Gerrit> getSecondaryResources(
       GerritCluster primary, Context<GerritCluster> context) {
     Set<Gerrit> gerrits = context.getSecondaryResources(Gerrit.class);
-    Map<String, Gerrit> result = new HashMap<>(gerrits.size());
+    Map<ResourceID, Gerrit> result = new HashMap<>(gerrits.size());
     for (Gerrit gerrit : gerrits) {
-      result.put(gerrit.getMetadata().getName(), gerrit);
+      result.put(ResourceID.fromResource(gerrit), gerrit);
     }
     return result;
   }
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/ClusterManagedIncomingReplicationTask.java b/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/ClusterManagedIncomingReplicationTask.java
index a822a36..a00e33d 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/ClusterManagedIncomingReplicationTask.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/cluster/dependent/ClusterManagedIncomingReplicationTask.java
@@ -22,6 +22,7 @@
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
 import io.javaoperatorsdk.operator.processing.dependent.BulkDependentResource;
 import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
+import io.javaoperatorsdk.operator.processing.event.ResourceID;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
@@ -30,33 +31,33 @@
 public class ClusterManagedIncomingReplicationTask
     extends KubernetesDependentCustomResource<IncomingReplicationTask, GerritCluster>
     implements Deleter<GerritCluster>,
-        BulkDependentResource<IncomingReplicationTask, GerritCluster> {
+        BulkDependentResource<IncomingReplicationTask, GerritCluster, ResourceID> {
 
   public ClusterManagedIncomingReplicationTask() {
     super(IncomingReplicationTask.class);
   }
 
   @Override
-  public Map<String, IncomingReplicationTask> desiredResources(
+  public Map<ResourceID, IncomingReplicationTask> desiredResources(
       GerritCluster primary, Context<GerritCluster> context) {
-    Map<String, IncomingReplicationTask> incomingReplTasks = new HashMap<>();
+    Map<ResourceID, IncomingReplicationTask> incomingReplTasks = new HashMap<>();
     for (IncomingReplicationTaskTemplate incomingReplTaskTemplate :
         primary.getSpec().getScheduledTasks().getIncomingReplication()) {
       IncomingReplicationTask incomingReplTask =
           incomingReplTaskTemplate.toIncomingReplicationTask(primary);
-      incomingReplTasks.put(incomingReplTask.getMetadata().getName(), incomingReplTask);
+      incomingReplTasks.put(ResourceID.fromResource(incomingReplTask), incomingReplTask);
     }
     return incomingReplTasks;
   }
 
   @Override
-  public Map<String, IncomingReplicationTask> getSecondaryResources(
+  public Map<ResourceID, IncomingReplicationTask> getSecondaryResources(
       GerritCluster primary, Context<GerritCluster> context) {
     Set<IncomingReplicationTask> incomingReplTasks =
         context.getSecondaryResources(IncomingReplicationTask.class);
-    Map<String, IncomingReplicationTask> result = new HashMap<>(incomingReplTasks.size());
+    Map<ResourceID, IncomingReplicationTask> result = new HashMap<>(incomingReplTasks.size());
     for (IncomingReplicationTask incomingReplTask : incomingReplTasks) {
-      result.put(incomingReplTask.getMetadata().getName(), incomingReplTask);
+      result.put(ResourceID.fromResource(incomingReplTask), incomingReplTask);
     }
     return result;
   }
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/maintenance/dependent/GerritMaintenanceCronJobs.java b/operator/src/main/java/com/google/gerrit/k8s/operator/maintenance/dependent/GerritMaintenanceCronJobs.java
index 901ac2a..9e737cf 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/maintenance/dependent/GerritMaintenanceCronJobs.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/maintenance/dependent/GerritMaintenanceCronJobs.java
@@ -22,6 +22,7 @@
 import io.fabric8.kubernetes.api.model.batch.v1.CronJob;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
 import io.javaoperatorsdk.operator.processing.dependent.BulkDependentResource;
+import io.javaoperatorsdk.operator.processing.event.ResourceID;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
@@ -32,7 +33,7 @@
 
 public class GerritMaintenanceCronJobs
     extends KubernetesDependentCustomResource<CronJob, GerritMaintenance>
-    implements BulkDependentResource<CronJob, GerritMaintenance> {
+    implements BulkDependentResource<CronJob, GerritMaintenance, ResourceID> {
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   public GerritMaintenanceCronJobs() {
@@ -40,28 +41,28 @@
   }
 
   @Override
-  public Map<String, CronJob> desiredResources(
+  public Map<ResourceID, CronJob> desiredResources(
       GerritMaintenance primary, Context<GerritMaintenance> context) {
-    Map<String, CronJob> cronJobs = new HashMap<>();
+    Map<ResourceID, CronJob> cronJobs = new HashMap<>();
     GerritProjectsTasks projectsTasks = primary.getSpec().getProjects();
     if (projectsTasks != null) {
       List<GitGcTask> gcTasks = List.copyOf(projectsTasks.getGc());
       checkForConflict(gcTasks);
       for (GitGcTask gcTask : gcTasks) {
-        cronJobs.put(
-            gcTask.getName(), GitGarbageCollectionCronJob.desired(primary, gcTask, context));
+        CronJob desired = GitGarbageCollectionCronJob.desired(primary, gcTask, context);
+        cronJobs.put(ResourceID.fromResource(desired), desired);
       }
     }
     return cronJobs;
   }
 
   @Override
-  public Map<String, CronJob> getSecondaryResources(
+  public Map<ResourceID, CronJob> getSecondaryResources(
       GerritMaintenance primary, Context<GerritMaintenance> context) {
     Set<CronJob> cronjobs = context.getSecondaryResources(CronJob.class);
-    Map<String, CronJob> result = new HashMap<>(cronjobs.size());
+    Map<ResourceID, CronJob> result = new HashMap<>(cronjobs.size());
     for (CronJob cj : cronjobs) {
-      result.put(cj.getMetadata().getName(), cj);
+      result.put(ResourceID.fromResource(cj), cj);
     }
     return result;
   }
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 b875b8e..a8c7e32 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
@@ -27,13 +27,15 @@
 import io.javaoperatorsdk.operator.api.reconciler.Context;
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
 import io.javaoperatorsdk.operator.processing.dependent.BulkDependentResource;
+import io.javaoperatorsdk.operator.processing.event.ResourceID;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
 public class GerritIstioDestinationRule
     extends CRUDReconcileAddKubernetesDependentResource<DestinationRule, GerritNetwork>
-    implements Deleter<GerritNetwork>, BulkDependentResource<DestinationRule, GerritNetwork> {
+    implements Deleter<GerritNetwork>,
+        BulkDependentResource<DestinationRule, GerritNetwork, ResourceID> {
 
   public GerritIstioDestinationRule() {
     super(DestinationRule.class);
@@ -90,27 +92,29 @@
   }
 
   @Override
-  public Map<String, DestinationRule> desiredResources(
+  public Map<ResourceID, DestinationRule> desiredResources(
       GerritNetwork gerritNetwork, Context<GerritNetwork> context) {
-    Map<String, DestinationRule> drs = new HashMap<>();
+    Map<ResourceID, DestinationRule> drs = new HashMap<>();
     if (gerritNetwork.hasPrimaryGerrit()) {
       String primaryGerritName = gerritNetwork.getSpec().getPrimaryGerrit().getName();
-      drs.put(primaryGerritName, desired(gerritNetwork, primaryGerritName, false));
+      DestinationRule dr = desired(gerritNetwork, primaryGerritName, false);
+      drs.put(ResourceID.fromResource(dr), dr);
     }
     if (gerritNetwork.hasGerritReplica()) {
       String gerritReplicaName = gerritNetwork.getSpec().getGerritReplica().getName();
-      drs.put(gerritReplicaName, desired(gerritNetwork, gerritReplicaName, true));
+      DestinationRule dr = desired(gerritNetwork, gerritReplicaName, true);
+      drs.put(ResourceID.fromResource(dr), dr);
     }
     return drs;
   }
 
   @Override
-  public Map<String, DestinationRule> getSecondaryResources(
+  public Map<ResourceID, DestinationRule> getSecondaryResources(
       GerritNetwork gerritNetwork, Context<GerritNetwork> context) {
     Set<DestinationRule> drs = context.getSecondaryResources(DestinationRule.class);
-    Map<String, DestinationRule> result = new HashMap<>(drs.size());
+    Map<ResourceID, DestinationRule> result = new HashMap<>(drs.size());
     for (DestinationRule dr : drs) {
-      result.put(dr.getMetadata().getName(), dr);
+      result.put(ResourceID.fromResource(dr), dr);
     }
     return result;
   }
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 3795472..436476d 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
@@ -34,6 +34,7 @@
 import io.javaoperatorsdk.operator.api.reconciler.Context;
 import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
 import io.javaoperatorsdk.operator.processing.dependent.BulkDependentResource;
+import io.javaoperatorsdk.operator.processing.event.ResourceID;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -41,7 +42,8 @@
 
 public class GerritIstioServiceEntries
     extends CRUDReconcileAddKubernetesDependentResource<ServiceEntry, GerritNetwork>
-    implements Deleter<GerritNetwork>, BulkDependentResource<ServiceEntry, GerritNetwork> {
+    implements Deleter<GerritNetwork>,
+        BulkDependentResource<ServiceEntry, GerritNetwork, ResourceID> {
 
   public GerritIstioServiceEntries() {
     super(ServiceEntry.class);
@@ -89,9 +91,9 @@
   }
 
   @Override
-  public Map<String, ServiceEntry> desiredResources(
+  public Map<ResourceID, ServiceEntry> desiredResources(
       GerritNetwork gerritNetwork, Context<GerritNetwork> context) {
-    Map<String, ServiceEntry> serviceEntries = new HashMap<>();
+    Map<ResourceID, ServiceEntry> serviceEntries = new HashMap<>();
     if (gerritNetwork.hasPrimaryGerrit()) {
       String primaryGerritName = gerritNetwork.getSpec().getPrimaryGerrit().getName();
 
@@ -110,8 +112,7 @@
       for (int i = 0; i < sts.getSpec().getReplicas(); i++) {
         String podName = String.format("%s-%d", primaryGerritName, i);
         String namespace = gerritNetwork.getMetadata().getNamespace();
-        serviceEntries.put(
-            podName,
+        ServiceEntry se =
             desired(
                 podName,
                 podName,
@@ -120,9 +121,9 @@
                     podName,
                     new GerritService()
                         .getName(gerritNetwork.getSpec().getPrimaryGerrit().getName()),
-                    namespace)));
-        serviceEntries.put(
-            podName + "-headless",
+                    namespace));
+        serviceEntries.put(ResourceID.fromResource(se), se);
+        ServiceEntry headlessSe =
             desired(
                 podName + "-headless",
                 podName,
@@ -131,19 +132,20 @@
                     podName,
                     new GerritHeadlessService()
                         .getName(gerritNetwork.getSpec().getPrimaryGerrit().getName()),
-                    namespace)));
+                    namespace));
+        serviceEntries.put(ResourceID.fromResource(headlessSe), headlessSe);
       }
     }
     return serviceEntries;
   }
 
   @Override
-  public Map<String, ServiceEntry> getSecondaryResources(
+  public Map<ResourceID, ServiceEntry> getSecondaryResources(
       GerritNetwork gerritNetwork, Context<GerritNetwork> context) {
     Set<ServiceEntry> serviceEntries = context.getSecondaryResources(ServiceEntry.class);
-    Map<String, ServiceEntry> result = new HashMap<>(serviceEntries.size());
+    Map<ResourceID, ServiceEntry> result = new HashMap<>(serviceEntries.size());
     for (ServiceEntry se : serviceEntries) {
-      result.put(se.getMetadata().getName(), se);
+      result.put(ResourceID.fromResource(se), se);
     }
     return result;
   }
diff --git a/operator/src/test/java/com/google/gerrit/k8s/operator/cluster/dependent/GerritClusterGerritsTest.java b/operator/src/test/java/com/google/gerrit/k8s/operator/cluster/dependent/GerritClusterGerritsTest.java
index 4b10745..a8ec789 100644
--- a/operator/src/test/java/com/google/gerrit/k8s/operator/cluster/dependent/GerritClusterGerritsTest.java
+++ b/operator/src/test/java/com/google/gerrit/k8s/operator/cluster/dependent/GerritClusterGerritsTest.java
@@ -23,6 +23,7 @@
 import com.google.gerrit.k8s.operator.gerrit.dependent.GerritConfigMap;
 import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.javaoperatorsdk.operator.ReconcilerUtils;
+import io.javaoperatorsdk.operator.processing.event.ResourceID;
 import java.util.Map;
 import java.util.stream.Stream;
 import org.eclipse.jgit.errors.ConfigInvalidException;
@@ -46,7 +47,7 @@
     GerritCluster gerritCluster =
         ReconcilerUtils.loadYaml(GerritCluster.class, this.getClass(), inputFile);
     ClusterManagedGerrit clusterManagedGerrit = new ClusterManagedGerrit();
-    Map<String, Gerrit> gerrits = clusterManagedGerrit.desiredResources(gerritCluster, null);
+    Map<ResourceID, Gerrit> gerrits = clusterManagedGerrit.desiredResources(gerritCluster, null);
     for (Gerrit g : gerrits.values()) {
       switch (g.getSpec().getMode()) {
         case PRIMARY:
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 6fa4f27..a65fbfd 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
@@ -103,7 +103,7 @@
             kubernetesServer.createClient());
 
     return new DefaultContext<Gerrit>(
-        new GenericRetryExecution(new GenericRetry()), controller, primary);
+        new GenericRetryExecution(new GenericRetry()), controller, primary, false, false);
   }
 
   private static Stream<Arguments> provideYamlManifests() {
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 bafcb24..adbf913 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
@@ -81,7 +81,7 @@
             kubernetesServer.createClient());
 
     return new DefaultContext<GitGarbageCollection>(
-        new GenericRetryExecution(new GenericRetry()), controller, primary);
+        new GenericRetryExecution(new GenericRetry()), controller, primary, false, false);
   }
 
   private static Stream<Arguments> provideYamlManifests() {
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 0058c1e..0d8de0b 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
@@ -112,7 +112,7 @@
             kubernetesServer.createClient());
 
     return new DefaultContext<GerritIndexer>(
-        new GenericRetryExecution(new GenericRetry()), controller, primary);
+        new GenericRetryExecution(new GenericRetry()), controller, primary, false, false);
   }
 
   private void assertDesiredConfigMapCreated(ConfigMap actual, ConfigMap expected) {
diff --git a/operator/src/test/java/com/google/gerrit/k8s/operator/maintenance/dependent/GerritMaintenanceTest.java b/operator/src/test/java/com/google/gerrit/k8s/operator/maintenance/dependent/GerritMaintenanceTest.java
index cc7268a..97ff769 100644
--- a/operator/src/test/java/com/google/gerrit/k8s/operator/maintenance/dependent/GerritMaintenanceTest.java
+++ b/operator/src/test/java/com/google/gerrit/k8s/operator/maintenance/dependent/GerritMaintenanceTest.java
@@ -19,6 +19,7 @@
 import com.google.gerrit.k8s.operator.api.model.maintenance.GerritMaintenance;
 import io.fabric8.kubernetes.api.model.batch.v1.CronJob;
 import io.javaoperatorsdk.operator.ReconcilerUtils;
+import io.javaoperatorsdk.operator.processing.event.ResourceID;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -41,10 +42,11 @@
     for (String file : expectedOutputFiles) {
       expected.add(ReconcilerUtils.loadYaml(CronJob.class, this.getClass(), file));
     }
-    Map<String, CronJob> cronJobs = new GerritMaintenanceCronJobs().desiredResources(input, null);
+    Map<ResourceID, CronJob> cronJobs =
+        new GerritMaintenanceCronJobs().desiredResources(input, null);
 
     for (CronJob expectedCronJob : expected) {
-      assertThat(cronJobs.get(expectedCronJob.getMetadata().getName())).isEqualTo(expectedCronJob);
+      assertThat(cronJobs.get(ResourceID.fromResource(expectedCronJob))).isEqualTo(expectedCronJob);
     }
   }
 
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 ec805ec..ca7eee2 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
@@ -31,6 +31,7 @@
 import io.javaoperatorsdk.operator.api.reconciler.DefaultContext;
 import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
 import io.javaoperatorsdk.operator.processing.Controller;
+import io.javaoperatorsdk.operator.processing.event.ResourceID;
 import io.javaoperatorsdk.operator.processing.retry.GenericRetry;
 import io.javaoperatorsdk.operator.processing.retry.GenericRetryExecution;
 import java.net.HttpURLConnection;
@@ -63,7 +64,7 @@
     IncomingReplicationTask incomingReplTask =
         new ClusterManagedIncomingReplicationTask()
             .desiredResources(input, null)
-            .get(expectedReplTask.getMetadata().getName());
+            .get(ResourceID.fromResource(expectedReplTask));
     assertThat(incomingReplTask).isEqualTo(expectedReplTask);
 
     Secret testSecret =
@@ -110,7 +111,7 @@
             kubernetesServer.createClient());
 
     return new DefaultContext<IncomingReplicationTask>(
-        new GenericRetryExecution(new GenericRetry()), controller, primary);
+        new GenericRetryExecution(new GenericRetry()), controller, primary, false, false);
   }
 
   private static Stream<Arguments> provideYamlManifests() {
