) this
+ : GenericResourceUpdaterMatcher.updaterMatcherFor(resourceType);
}
@SuppressWarnings("unchecked")
@@ -129,57 +128,59 @@ protected R handleUpdate(R actual, R desired, P primary, Context context) {
@SuppressWarnings("unused")
public R create(R target, P primary, Context
context) {
- if (!context.getControllerConfiguration().getConfigurationService()
- .ssaBasedCreateUpdateForDependentResources()) {
- return prepare(target, primary, "Creating").create();
- } else {
- return prepare(target, primary, "Creating")
- .fieldManager(context.getControllerConfiguration().fieldManager())
- .forceConflicts()
- .serverSideApply();
- }
+ final var resource = prepare(target, primary, "Creating");
+ return useSSA(context)
+ ? resource
+ .fieldManager(context.getControllerConfiguration().fieldManager())
+ .forceConflicts()
+ .serverSideApply()
+ : resource.create();
}
public R update(R actual, R target, P primary, Context
context) {
- if (!context.getControllerConfiguration().getConfigurationService()
- .ssaBasedCreateUpdateForDependentResources()) {
- var updatedActual = processor.replaceSpecOnActual(actual, target, context);
- return prepare(updatedActual, primary, "Updating").replace();
- } else {
+ if (useSSA(context)) {
target.getMetadata().setResourceVersion(actual.getMetadata().getResourceVersion());
return prepare(target, primary, "Updating")
.fieldManager(context.getControllerConfiguration().fieldManager())
.forceConflicts().serverSideApply();
+ } else {
+ var updatedActual = updaterMatcher.updateResource(actual, target, context);
+ return prepare(updatedActual, primary, "Updating").replace();
}
}
public Result match(R actualResource, P primary, Context context) {
- if (!context.getControllerConfiguration().getConfigurationService()
- .ssaBasedDefaultMatchingForDependentResources()) {
- return GenericKubernetesResourceMatcher.match(this, actualResource, primary, context, false);
- } else {
- final var desired = desired(primary, context);
+ final var desired = desired(primary, context);
+ final boolean matches;
+ if (useSSA(context)) {
addReferenceHandlingMetadata(desired, primary);
- var matches = SSABasedGenericKubernetesResourceMatcher.getInstance().matches(actualResource,
- desired, context);
- return Result.computed(matches, desired);
+ matches = SSABasedGenericKubernetesResourceMatcher.getInstance()
+ .matches(actualResource, desired, context);
+ } else {
+ matches = updaterMatcher.matches(actualResource, desired, context);
}
+ return Result.computed(matches, desired);
}
@SuppressWarnings("unused")
public Result match(R actualResource, R desired, P primary, Context context) {
- if (!context.getControllerConfiguration().getConfigurationService()
- .ssaBasedDefaultMatchingForDependentResources()) {
- return GenericKubernetesResourceMatcher.match(desired, actualResource, false,
- false, false, context);
- } else {
+ if (useSSA(context)) {
addReferenceHandlingMetadata(desired, primary);
- var matches = SSABasedGenericKubernetesResourceMatcher.getInstance().matches(actualResource,
- desired, context);
+ var matches = SSABasedGenericKubernetesResourceMatcher.getInstance()
+ .matches(actualResource, desired, context);
return Result.computed(matches, desired);
+ } else {
+ return GenericKubernetesResourceMatcher
+ .match(desired, actualResource, true,
+ false, false, context);
}
}
+ private boolean useSSA(Context
context) {
+ return context.getControllerConfiguration().getConfigurationService()
+ .ssaBasedCreateUpdateMatchForDependentResources();
+ }
+
protected void handleDelete(P primary, R secondary, Context
context) {
if (secondary != null) {
client.resource(secondary).delete();
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceUpdatePreProcessor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceUpdatePreProcessor.java
deleted file mode 100644
index e2ebc85d48..0000000000
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceUpdatePreProcessor.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package io.javaoperatorsdk.operator.processing.dependent.kubernetes;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import io.fabric8.kubernetes.api.model.HasMetadata;
-import io.fabric8.zjsonpatch.JsonDiff;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-
-import com.fasterxml.jackson.databind.JsonNode;
-
-import static io.javaoperatorsdk.operator.processing.dependent.kubernetes.GenericKubernetesResourceMatcher.allDiffsAreAddOps;
-import static io.javaoperatorsdk.operator.processing.dependent.kubernetes.GenericKubernetesResourceMatcher.getDiffsImpactingPathsWithPrefixes;
-import static io.javaoperatorsdk.operator.processing.dependent.kubernetes.GenericKubernetesResourceMatcher.nodeIsChildOf;
-
-public interface ResourceUpdatePreProcessor {
-
- String SPEC = "/spec";
-
- R replaceSpecOnActual(R actual, R desired, Context> context);
-
- default boolean matches(R actual, R desired, boolean equality, Context> context,
- String[] ignoredPaths) {
-
- final var objectMapper = context.getClient().getKubernetesSerialization();
- var desiredNode = objectMapper.convertValue(desired, JsonNode.class);
- var actualNode = objectMapper.convertValue(actual, JsonNode.class);
- var wholeDiffJsonPatch = JsonDiff.asJson(desiredNode, actualNode);
-
- final List ignoreList =
- ignoredPaths != null && ignoredPaths.length > 0 ? Arrays.asList(ignoredPaths)
- : Collections.emptyList();
- // reflection will be replaced by this:
- // https://github.com/fabric8io/kubernetes-client/issues/3816
- var specDiffJsonPatch = getDiffsImpactingPathsWithPrefixes(wholeDiffJsonPatch, SPEC);
- // In case of equality is set to true, no diffs are allowed, so we return early if diffs exist
- // On contrary (if equality is false), "add" is allowed for cases when for some
- // resources Kubernetes fills-in values into spec.
- if (equality && !specDiffJsonPatch.isEmpty()) {
- return false;
- }
- if (!equality && !ignoreList.isEmpty()) {
- if (!allDiffsOnIgnoreList(specDiffJsonPatch, ignoreList)) {
- return false;
- }
- } else {
- if (!allDiffsAreAddOps(specDiffJsonPatch)) {
- return false;
- }
- }
- return true;
- }
-
- private static boolean allDiffsOnIgnoreList(List metadataJSonDiffs,
- List ignoreList) {
- if (metadataJSonDiffs.isEmpty()) {
- return false;
- }
- return metadataJSonDiffs.stream().allMatch(n -> nodeIsChildOf(n, ignoreList));
- }
-
-}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceUpdaterMatcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceUpdaterMatcher.java
new file mode 100644
index 0000000000..0da1aef9dc
--- /dev/null
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceUpdaterMatcher.java
@@ -0,0 +1,12 @@
+package io.javaoperatorsdk.operator.processing.dependent.kubernetes;
+
+import io.fabric8.kubernetes.api.model.HasMetadata;
+import io.javaoperatorsdk.operator.api.reconciler.Context;
+
+public interface ResourceUpdaterMatcher {
+
+ R updateResource(R actual, R desired, Context> context);
+
+ boolean matches(R actual, R desired, Context> context);
+
+}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/GenericResourceUpdatePreProcessor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/GenericResourceUpdatePreProcessor.java
deleted file mode 100644
index d74b16d24b..0000000000
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/GenericResourceUpdatePreProcessor.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package io.javaoperatorsdk.operator.processing.dependent.kubernetes.processors;
-
-import java.util.Map;
-
-import io.fabric8.kubernetes.api.model.ConfigMap;
-import io.fabric8.kubernetes.api.model.HasMetadata;
-import io.fabric8.kubernetes.api.model.Secret;
-import io.fabric8.kubernetes.api.model.ServiceAccount;
-import io.fabric8.kubernetes.api.model.rbac.ClusterRole;
-import io.fabric8.kubernetes.api.model.rbac.ClusterRoleBinding;
-import io.fabric8.kubernetes.api.model.rbac.Role;
-import io.fabric8.kubernetes.api.model.rbac.RoleBinding;
-import io.javaoperatorsdk.operator.ReconcilerUtils;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.processing.dependent.kubernetes.ResourceUpdatePreProcessor;
-
-public class GenericResourceUpdatePreProcessor implements
- ResourceUpdatePreProcessor {
- private static final ResourceUpdatePreProcessor> INSTANCE =
- new GenericResourceUpdatePreProcessor<>();
-
- @SuppressWarnings("rawtypes")
- private static final Map processors = Map.of(
- Secret.class, new SecretResourceUpdatePreProcessor(),
- ConfigMap.class, new ConfigMapResourceUpdatePreProcessor(),
- ServiceAccount.class, new ServiceAccountResourceUpdateProcessor(),
- Role.class, new RoleResourceUpdatePreProcessor(),
- ClusterRole.class, new ClusterRoleResourceUpdatePreProcessor(),
- RoleBinding.class, new RoleBindingResourceUpdatePreProcessor(),
- ClusterRoleBinding.class, new ClusterRoleBindingResourceUpdatePreProcessor());
-
- protected GenericResourceUpdatePreProcessor() {}
-
- @SuppressWarnings("unchecked")
- public static ResourceUpdatePreProcessor processorFor(
- Class resourceType) {
- final var processor = processors.get(resourceType);
- return processor != null ? processor : (ResourceUpdatePreProcessor) INSTANCE;
- }
-
- public R replaceSpecOnActual(R actual, R desired, Context> context) {
- var clonedActual = context.getControllerConfiguration().getConfigurationService()
- .getResourceCloner().clone(actual);
- updateClonedActual(clonedActual, desired);
- return clonedActual;
- }
-
- protected void updateClonedActual(R actual, R desired) {
- var desiredSpec = ReconcilerUtils.getSpec(desired);
- ReconcilerUtils.setSpec(actual, desiredSpec);
- }
-}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/ClusterRoleBindingResourceUpdatePreProcessor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/ClusterRoleBindingResourceUpdaterMatcher.java
similarity index 73%
rename from operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/ClusterRoleBindingResourceUpdatePreProcessor.java
rename to operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/ClusterRoleBindingResourceUpdaterMatcher.java
index 9fc5718a45..f6f6d1ef54 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/ClusterRoleBindingResourceUpdatePreProcessor.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/ClusterRoleBindingResourceUpdaterMatcher.java
@@ -1,12 +1,12 @@
-package io.javaoperatorsdk.operator.processing.dependent.kubernetes.processors;
+package io.javaoperatorsdk.operator.processing.dependent.kubernetes.updatermatcher;
import java.util.Objects;
import io.fabric8.kubernetes.api.model.rbac.ClusterRoleBinding;
import io.javaoperatorsdk.operator.api.reconciler.Context;
-public class ClusterRoleBindingResourceUpdatePreProcessor
- extends GenericResourceUpdatePreProcessor {
+public class ClusterRoleBindingResourceUpdaterMatcher
+ extends GenericResourceUpdaterMatcher {
@Override
protected void updateClonedActual(ClusterRoleBinding actual, ClusterRoleBinding desired) {
@@ -15,8 +15,8 @@ protected void updateClonedActual(ClusterRoleBinding actual, ClusterRoleBinding
}
@Override
- public boolean matches(ClusterRoleBinding actual, ClusterRoleBinding desired, boolean equality,
- Context> context, String[] ignoredPaths) {
+ public boolean matches(ClusterRoleBinding actual, ClusterRoleBinding desired,
+ Context> context) {
return Objects.equals(actual.getRoleRef(), desired.getRoleRef()) &&
Objects.equals(actual.getSubjects(), desired.getSubjects());
}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/ClusterRoleResourceUpdatePreProcessor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/ClusterRoleResourceUpdaterMatcher.java
similarity index 76%
rename from operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/ClusterRoleResourceUpdatePreProcessor.java
rename to operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/ClusterRoleResourceUpdaterMatcher.java
index 26e2431e21..da7997c040 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/ClusterRoleResourceUpdatePreProcessor.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/ClusterRoleResourceUpdaterMatcher.java
@@ -1,12 +1,12 @@
-package io.javaoperatorsdk.operator.processing.dependent.kubernetes.processors;
+package io.javaoperatorsdk.operator.processing.dependent.kubernetes.updatermatcher;
import java.util.Objects;
import io.fabric8.kubernetes.api.model.rbac.ClusterRole;
import io.javaoperatorsdk.operator.api.reconciler.Context;
-public class ClusterRoleResourceUpdatePreProcessor
- extends GenericResourceUpdatePreProcessor {
+public class ClusterRoleResourceUpdaterMatcher
+ extends GenericResourceUpdaterMatcher {
@Override
protected void updateClonedActual(ClusterRole actual, ClusterRole desired) {
@@ -15,8 +15,7 @@ protected void updateClonedActual(ClusterRole actual, ClusterRole desired) {
}
@Override
- public boolean matches(ClusterRole actual, ClusterRole desired, boolean equality,
- Context> context, String[] ignoredPaths) {
+ public boolean matches(ClusterRole actual, ClusterRole desired, Context> context) {
return Objects.equals(actual.getRules(), desired.getRules()) &&
Objects.equals(actual.getAggregationRule(), desired.getAggregationRule());
}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/ConfigMapResourceUpdatePreProcessor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/ConfigMapResourceUpdaterMatcher.java
similarity index 72%
rename from operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/ConfigMapResourceUpdatePreProcessor.java
rename to operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/ConfigMapResourceUpdaterMatcher.java
index f306d733f7..7f89d45ff5 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/ConfigMapResourceUpdatePreProcessor.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/ConfigMapResourceUpdaterMatcher.java
@@ -1,12 +1,12 @@
-package io.javaoperatorsdk.operator.processing.dependent.kubernetes.processors;
+package io.javaoperatorsdk.operator.processing.dependent.kubernetes.updatermatcher;
import java.util.Objects;
import io.fabric8.kubernetes.api.model.ConfigMap;
import io.javaoperatorsdk.operator.api.reconciler.Context;
-public class ConfigMapResourceUpdatePreProcessor
- extends GenericResourceUpdatePreProcessor {
+public class ConfigMapResourceUpdaterMatcher
+ extends GenericResourceUpdaterMatcher {
@Override
protected void updateClonedActual(ConfigMap actual, ConfigMap desired) {
@@ -16,8 +16,7 @@ protected void updateClonedActual(ConfigMap actual, ConfigMap desired) {
}
@Override
- public boolean matches(ConfigMap actual, ConfigMap desired, boolean equality,
- Context> context, String[] ignoredPaths) {
+ public boolean matches(ConfigMap actual, ConfigMap desired, Context> context) {
return Objects.equals(actual.getImmutable(), desired.getImmutable()) &&
Objects.equals(actual.getData(), desired.getData()) &&
Objects.equals(actual.getBinaryData(), desired.getBinaryData());
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/GenericResourceUpdaterMatcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/GenericResourceUpdaterMatcher.java
new file mode 100644
index 0000000000..3a293f0513
--- /dev/null
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/GenericResourceUpdaterMatcher.java
@@ -0,0 +1,70 @@
+package io.javaoperatorsdk.operator.processing.dependent.kubernetes.updatermatcher;
+
+import java.util.Map;
+
+import io.fabric8.kubernetes.api.model.ConfigMap;
+import io.fabric8.kubernetes.api.model.HasMetadata;
+import io.fabric8.kubernetes.api.model.Secret;
+import io.fabric8.kubernetes.api.model.ServiceAccount;
+import io.fabric8.kubernetes.api.model.rbac.ClusterRole;
+import io.fabric8.kubernetes.api.model.rbac.ClusterRoleBinding;
+import io.fabric8.kubernetes.api.model.rbac.Role;
+import io.fabric8.kubernetes.api.model.rbac.RoleBinding;
+import io.javaoperatorsdk.operator.ReconcilerUtils;
+import io.javaoperatorsdk.operator.api.reconciler.Context;
+import io.javaoperatorsdk.operator.processing.dependent.kubernetes.GenericKubernetesResourceMatcher;
+import io.javaoperatorsdk.operator.processing.dependent.kubernetes.ResourceUpdaterMatcher;
+
+public class GenericResourceUpdaterMatcher implements
+ ResourceUpdaterMatcher {
+
+ private static final ResourceUpdaterMatcher> INSTANCE = new GenericResourceUpdaterMatcher<>();
+
+ @SuppressWarnings("rawtypes")
+ private static final Map processors = Map.of(
+ Secret.class, new SecretResourceUpdaterMatcher(),
+ ConfigMap.class, new ConfigMapResourceUpdaterMatcher(),
+ ServiceAccount.class, new ServiceAccountResourceUpdaterMatcher(),
+ Role.class, new RoleResourceUpdaterMatcher(),
+ ClusterRole.class, new ClusterRoleResourceUpdaterMatcher(),
+ RoleBinding.class, new RoleBindingResourceUpdaterMatcher(),
+ ClusterRoleBinding.class, new ClusterRoleBindingResourceUpdaterMatcher());
+
+ protected GenericResourceUpdaterMatcher() {}
+
+ @SuppressWarnings("unchecked")
+ public static ResourceUpdaterMatcher updaterMatcherFor(
+ Class resourceType) {
+ final var processor = processors.get(resourceType);
+ return processor != null ? processor : (ResourceUpdaterMatcher) INSTANCE;
+ }
+
+ public R updateResource(R actual, R desired, Context> context) {
+ var clonedActual = context.getControllerConfiguration().getConfigurationService()
+ .getResourceCloner().clone(actual);
+ updateLabelsAndAnnotation(clonedActual, desired);
+ updateClonedActual(clonedActual, desired);
+ return clonedActual;
+ }
+
+ @Override
+ public boolean matches(R actual, R desired, Context> context) {
+ return GenericKubernetesResourceMatcher.match(desired, actual, true,
+ false, false, context).matched();
+ }
+
+ protected void updateClonedActual(R actual, R desired) {
+ updateSpec(actual, desired);
+ }
+
+ public static void updateSpec(K actual, K desired) {
+ var desiredSpec = ReconcilerUtils.getSpec(desired);
+ ReconcilerUtils.setSpec(actual, desiredSpec);
+ }
+
+ public static void updateLabelsAndAnnotation(K actual, K desired) {
+ actual.getMetadata().getLabels().putAll(desired.getMetadata().getLabels());
+ actual.getMetadata().getAnnotations().putAll(desired.getMetadata().getAnnotations());
+ }
+
+}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/RoleBindingResourceUpdatePreProcessor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/RoleBindingResourceUpdaterMatcher.java
similarity index 75%
rename from operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/RoleBindingResourceUpdatePreProcessor.java
rename to operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/RoleBindingResourceUpdaterMatcher.java
index 45c8cb50ba..c6a87cdae3 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/RoleBindingResourceUpdatePreProcessor.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/RoleBindingResourceUpdaterMatcher.java
@@ -1,12 +1,12 @@
-package io.javaoperatorsdk.operator.processing.dependent.kubernetes.processors;
+package io.javaoperatorsdk.operator.processing.dependent.kubernetes.updatermatcher;
import java.util.Objects;
import io.fabric8.kubernetes.api.model.rbac.RoleBinding;
import io.javaoperatorsdk.operator.api.reconciler.Context;
-public class RoleBindingResourceUpdatePreProcessor
- extends GenericResourceUpdatePreProcessor {
+public class RoleBindingResourceUpdaterMatcher
+ extends GenericResourceUpdaterMatcher {
@Override
protected void updateClonedActual(RoleBinding actual, RoleBinding desired) {
@@ -15,9 +15,8 @@ protected void updateClonedActual(RoleBinding actual, RoleBinding desired) {
}
@Override
- public boolean matches(RoleBinding actual, RoleBinding desired, boolean equality,
- Context> context,
- String[] ignoredPaths) {
+ public boolean matches(RoleBinding actual, RoleBinding desired,
+ Context> context) {
return Objects.equals(actual.getRoleRef(), desired.getRoleRef()) &&
Objects.equals(actual.getSubjects(), desired.getSubjects());
}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/RoleResourceUpdatePreProcessor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/RoleResourceUpdaterMatcher.java
similarity index 63%
rename from operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/RoleResourceUpdatePreProcessor.java
rename to operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/RoleResourceUpdaterMatcher.java
index 86241e3957..f02d946db8 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/RoleResourceUpdatePreProcessor.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/RoleResourceUpdaterMatcher.java
@@ -1,11 +1,11 @@
-package io.javaoperatorsdk.operator.processing.dependent.kubernetes.processors;
+package io.javaoperatorsdk.operator.processing.dependent.kubernetes.updatermatcher;
import java.util.Objects;
import io.fabric8.kubernetes.api.model.rbac.Role;
import io.javaoperatorsdk.operator.api.reconciler.Context;
-public class RoleResourceUpdatePreProcessor extends GenericResourceUpdatePreProcessor {
+public class RoleResourceUpdaterMatcher extends GenericResourceUpdaterMatcher {
@Override
protected void updateClonedActual(Role actual, Role desired) {
@@ -13,8 +13,7 @@ protected void updateClonedActual(Role actual, Role desired) {
}
@Override
- public boolean matches(Role actual, Role desired, boolean equality, Context> context,
- String[] ignoredPaths) {
+ public boolean matches(Role actual, Role desired, Context> context) {
return Objects.equals(actual.getRules(), desired.getRules());
}
}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/SecretResourceUpdatePreProcessor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/SecretResourceUpdaterMatcher.java
similarity index 76%
rename from operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/SecretResourceUpdatePreProcessor.java
rename to operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/SecretResourceUpdaterMatcher.java
index 163c93aba6..14e8696704 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/SecretResourceUpdatePreProcessor.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/SecretResourceUpdaterMatcher.java
@@ -1,11 +1,11 @@
-package io.javaoperatorsdk.operator.processing.dependent.kubernetes.processors;
+package io.javaoperatorsdk.operator.processing.dependent.kubernetes.updatermatcher;
import java.util.Objects;
import io.fabric8.kubernetes.api.model.Secret;
import io.javaoperatorsdk.operator.api.reconciler.Context;
-public class SecretResourceUpdatePreProcessor extends GenericResourceUpdatePreProcessor {
+public class SecretResourceUpdaterMatcher extends GenericResourceUpdaterMatcher {
@Override
protected void updateClonedActual(Secret actual, Secret desired) {
@@ -16,8 +16,7 @@ protected void updateClonedActual(Secret actual, Secret desired) {
}
@Override
- public boolean matches(Secret actual, Secret desired, boolean equality, Context> context,
- String[] ignoredPaths) {
+ public boolean matches(Secret actual, Secret desired, Context> context) {
return Objects.equals(actual.getImmutable(), desired.getImmutable()) &&
Objects.equals(actual.getType(), desired.getType()) &&
Objects.equals(actual.getData(), desired.getData()) &&
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/ServiceAccountResourceUpdateProcessor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/ServiceAccountResourceUpdaterMatcher.java
similarity index 80%
rename from operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/ServiceAccountResourceUpdateProcessor.java
rename to operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/ServiceAccountResourceUpdaterMatcher.java
index 60f3e559bc..f3d625c778 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/ServiceAccountResourceUpdateProcessor.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/updatermatcher/ServiceAccountResourceUpdaterMatcher.java
@@ -1,12 +1,12 @@
-package io.javaoperatorsdk.operator.processing.dependent.kubernetes.processors;
+package io.javaoperatorsdk.operator.processing.dependent.kubernetes.updatermatcher;
import java.util.Objects;
import io.fabric8.kubernetes.api.model.ServiceAccount;
import io.javaoperatorsdk.operator.api.reconciler.Context;
-public class ServiceAccountResourceUpdateProcessor
- extends GenericResourceUpdatePreProcessor {
+public class ServiceAccountResourceUpdaterMatcher
+ extends GenericResourceUpdaterMatcher {
@Override
protected void updateClonedActual(ServiceAccount actual, ServiceAccount desired) {
@@ -16,8 +16,7 @@ protected void updateClonedActual(ServiceAccount actual, ServiceAccount desired)
}
@Override
- public boolean matches(ServiceAccount actual, ServiceAccount desired, boolean equality,
- Context> context, String[] ignoredPaths) {
+ public boolean matches(ServiceAccount actual, ServiceAccount desired, Context> context) {
return Objects.equals(actual.getAutomountServiceAccountToken(),
desired.getAutomountServiceAccountToken()) &&
Objects.equals(actual.getImagePullSecrets(), desired.getImagePullSecrets()) &&
diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcherTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcherTest.java
index 2544e3977b..41bafe00e4 100644
--- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcherTest.java
+++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcherTest.java
@@ -14,6 +14,7 @@
import io.javaoperatorsdk.operator.ReconcilerUtils;
import io.javaoperatorsdk.operator.api.reconciler.Context;
import io.javaoperatorsdk.operator.processing.dependent.Matcher;
+import io.javaoperatorsdk.operator.processing.dependent.kubernetes.updatermatcher.GenericResourceUpdaterMatcher;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
@@ -143,8 +144,8 @@ void checkServiceAccount() {
.addNewImagePullSecret("imagePullSecret3")
.build();
- final var matcher = GenericKubernetesResourceMatcher.matcherFor(serviceAccountDR);
- assertThat(matcher.match(actual, null, context).matched()).isFalse();
+ final var matcher = GenericResourceUpdaterMatcher.updaterMatcherFor(ServiceAccount.class);
+ assertThat(matcher.matches(actual, desired, context)).isFalse();
}
Deployment createDeployment() {
diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdatePreProcessorTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdaterMatcherTest.java
similarity index 73%
rename from operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdatePreProcessorTest.java
rename to operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdaterMatcherTest.java
index bcd0ca6c6e..c1d9b4a5a5 100644
--- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdatePreProcessorTest.java
+++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdaterMatcherTest.java
@@ -6,26 +6,21 @@
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import io.fabric8.kubernetes.api.model.HasMetadata;
-import io.fabric8.kubernetes.api.model.Namespace;
-import io.fabric8.kubernetes.api.model.NamespaceBuilder;
-import io.fabric8.kubernetes.api.model.NamespaceSpec;
-import io.fabric8.kubernetes.api.model.Secret;
-import io.fabric8.kubernetes.api.model.SecretBuilder;
+import io.fabric8.kubernetes.api.model.*;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.javaoperatorsdk.operator.MockKubernetesClient;
import io.javaoperatorsdk.operator.ReconcilerUtils;
import io.javaoperatorsdk.operator.api.config.ConfigurationService;
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.processing.dependent.kubernetes.processors.GenericResourceUpdatePreProcessor;
+import io.javaoperatorsdk.operator.processing.dependent.kubernetes.updatermatcher.GenericResourceUpdaterMatcher;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@SuppressWarnings("rawtypes")
-class GenericResourceUpdatePreProcessorTest {
+class GenericResourceUpdaterMatcherTest {
private static final Context context = mock(Context.class);
@@ -44,7 +39,7 @@ static void setUp() {
@Test
void preservesValues() {
- var processor = GenericResourceUpdatePreProcessor.processorFor(Deployment.class);
+ var processor = GenericResourceUpdaterMatcher.updaterMatcherFor(Deployment.class);
var desired = createDeployment();
var actual = createDeployment();
actual.getMetadata().setLabels(new HashMap<>());
@@ -52,7 +47,7 @@ void preservesValues() {
actual.getMetadata().setResourceVersion("1234");
actual.getSpec().setRevisionHistoryLimit(5);
- var result = processor.replaceSpecOnActual(actual, desired, context);
+ var result = processor.updateResource(actual, desired, context);
assertThat(result.getMetadata().getLabels().get("additionalActualKey")).isEqualTo("value");
assertThat(result.getMetadata().getResourceVersion()).isEqualTo("1234");
@@ -61,27 +56,27 @@ void preservesValues() {
@Test
void checkNamespaces() {
- var processor = GenericResourceUpdatePreProcessor.processorFor(Namespace.class);
+ var processor = GenericResourceUpdaterMatcher.updaterMatcherFor(Namespace.class);
var desired = new NamespaceBuilder().withNewMetadata().withName("foo").endMetadata().build();
var actual = new NamespaceBuilder().withNewMetadata().withName("foo").endMetadata().build();
actual.getMetadata().setLabels(new HashMap<>());
actual.getMetadata().getLabels().put("additionalActualKey", "value");
actual.getMetadata().setResourceVersion("1234");
- var result = processor.replaceSpecOnActual(actual, desired, context);
+ var result = processor.updateResource(actual, desired, context);
assertThat(result.getMetadata().getLabels().get("additionalActualKey")).isEqualTo("value");
assertThat(result.getMetadata().getResourceVersion()).isEqualTo("1234");
desired.setSpec(new NamespaceSpec(List.of("halkyon.io/finalizer")));
- result = processor.replaceSpecOnActual(actual, desired, context);
+ result = processor.updateResource(actual, desired, context);
assertThat(result.getMetadata().getLabels().get("additionalActualKey")).isEqualTo("value");
assertThat(result.getMetadata().getResourceVersion()).isEqualTo("1234");
assertThat(result.getSpec().getFinalizers()).containsExactly("halkyon.io/finalizer");
desired = new NamespaceBuilder().withNewMetadata().withName("foo").endMetadata().build();
- result = processor.replaceSpecOnActual(actual, desired, context);
+ result = processor.updateResource(actual, desired, context);
assertThat(result.getMetadata().getLabels().get("additionalActualKey")).isEqualTo("value");
assertThat(result.getMetadata().getResourceVersion()).isEqualTo("1234");
assertThat(result.getSpec()).isNull();
@@ -89,12 +84,16 @@ void checkNamespaces() {
@Test
void checkSecret() {
- var processor = GenericResourceUpdatePreProcessor.processorFor(Secret.class);
+ var processor = GenericResourceUpdaterMatcher.updaterMatcherFor(Secret.class);
var desired =
- new SecretBuilder().withImmutable().withType("Opaque").addToData("foo", "bar").build();
- var actual = new SecretBuilder().build();
-
- final var secret = processor.replaceSpecOnActual(actual, desired, context);
+ new SecretBuilder()
+ .withMetadata(new ObjectMeta())
+ .withImmutable().withType("Opaque").addToData("foo", "bar").build();
+ var actual = new SecretBuilder()
+ .withMetadata(new ObjectMeta())
+ .build();
+
+ final var secret = processor.updateResource(actual, desired, context);
assertThat(secret.getImmutable()).isTrue();
assertThat(secret.getType()).isEqualTo("Opaque");
assertThat(secret.getData()).containsOnlyKeys("foo");
@@ -102,7 +101,7 @@ void checkSecret() {
Deployment createDeployment() {
return ReconcilerUtils.loadYaml(
- Deployment.class, GenericResourceUpdatePreProcessorTest.class, "nginx-deployment.yaml");
+ Deployment.class, GenericResourceUpdaterMatcherTest.class, "nginx-deployment.yaml");
}
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/DependentSSAMigrationIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/DependentSSAMigrationIT.java
index 7bedde86fe..7e226eca38 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/DependentSSAMigrationIT.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/DependentSSAMigrationIT.java
@@ -144,8 +144,7 @@ private DependnetSSACustomResource reconcileWithLegacyOperator(Operator legacyOp
private Operator createOperator(KubernetesClient client, boolean legacyDependentHandling,
String fieldManager) {
Operator operator = new Operator(client,
- o -> o.withSSABasedCreateUpdateForDependentResources(!legacyDependentHandling)
- .withSSABasedDefaultMatchingForDependentResources(!legacyDependentHandling)
+ o -> o.withSSABasedCreateUpdateMatchForDependentResources(!legacyDependentHandling)
.withCloseClientOnStop(false));
operator.register(new DependentSSAReconciler(), o -> {
o.settingNamespace(namespace);