Skip to content

Commit 58b9c04

Browse files
authored
fix: restore backwards compatibility (#1915)
* fix: clean-up unneeded matcher field * fix: restore backwards compatibility Note that the current implementation is flawed because custom ResourceUpdatePreProcessor should be registered to be found when attempting to use custom matching logic. See also #1914 for more details.
1 parent 1c1783e commit 58b9c04

File tree

3 files changed

+27
-32
lines changed

3 files changed

+27
-32
lines changed

Diff for: operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java

+1-5
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.DependentResourceConfigurator;
2323
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.KubernetesClientAware;
2424
import io.javaoperatorsdk.operator.processing.dependent.AbstractEventSourceHolderDependentResource;
25-
import io.javaoperatorsdk.operator.processing.dependent.Matcher;
2625
import io.javaoperatorsdk.operator.processing.dependent.Matcher.Result;
2726
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.processors.GenericResourceUpdatePreProcessor;
2827
import io.javaoperatorsdk.operator.processing.event.ResourceID;
@@ -41,16 +40,13 @@ public abstract class KubernetesDependentResource<R extends HasMetadata, P exten
4140
private static final Logger log = LoggerFactory.getLogger(KubernetesDependentResource.class);
4241

4342
protected KubernetesClient client;
44-
private final Matcher<R, P> matcher;
4543
private final ResourceUpdatePreProcessor<R> processor;
4644
private final boolean garbageCollected = this instanceof GarbageCollected;
4745
private KubernetesDependentResourceConfig<R> kubernetesDependentResourceConfig;
4846

4947
@SuppressWarnings("unchecked")
5048
public KubernetesDependentResource(Class<R> resourceType) {
5149
super(resourceType);
52-
matcher = this instanceof Matcher ? (Matcher<R, P>) this
53-
: GenericKubernetesResourceMatcher.matcherFor(this);
5450

5551
processor = this instanceof ResourceUpdatePreProcessor
5652
? (ResourceUpdatePreProcessor<R>) this
@@ -141,7 +137,7 @@ public R update(R actual, R target, P primary, Context<P> context) {
141137
}
142138

143139
public Result<R> match(R actualResource, P primary, Context<P> context) {
144-
return matcher.match(actualResource, primary, context);
140+
return GenericKubernetesResourceMatcher.match(this, actualResource, primary, context, false);
145141
}
146142

147143
@SuppressWarnings("unused")
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,36 @@
11
package io.javaoperatorsdk.operator.processing.dependent.kubernetes;
22

33
import io.fabric8.kubernetes.api.model.HasMetadata;
4+
import io.fabric8.zjsonpatch.JsonDiff;
5+
import io.javaoperatorsdk.operator.ReconcilerUtils;
6+
import io.javaoperatorsdk.operator.api.config.ConfigurationServiceProvider;
47
import io.javaoperatorsdk.operator.api.reconciler.Context;
58

69
public interface ResourceUpdatePreProcessor<R extends HasMetadata> {
710

811
R replaceSpecOnActual(R actual, R desired, Context<?> context);
912

10-
boolean matches(R actual, R desired, boolean equality);
13+
default boolean matches(R actual, R desired, boolean equality) {
14+
final var objectMapper = ConfigurationServiceProvider.instance().getObjectMapper();
15+
16+
// reflection will be replaced by this:
17+
// https://github.com/fabric8io/kubernetes-client/issues/3816
18+
var desiredSpecNode = objectMapper.valueToTree(ReconcilerUtils.getSpec(desired));
19+
var actualSpecNode = objectMapper.valueToTree(ReconcilerUtils.getSpec(actual));
20+
var diffJsonPatch = JsonDiff.asJson(desiredSpecNode, actualSpecNode);
21+
// In case of equality is set to true, no diffs are allowed, so we return early if diffs exist
22+
// On contrary (if equality is false), "add" is allowed for cases when for some
23+
// resources Kubernetes fills-in values into spec.
24+
final var diffNumber = diffJsonPatch.size();
25+
if (equality && diffNumber > 0) {
26+
return false;
27+
}
28+
for (int i = 0; i < diffNumber; i++) {
29+
String operation = diffJsonPatch.get(i).get("op").asText();
30+
if (!operation.equals("add")) {
31+
return false;
32+
}
33+
}
34+
return true;
35+
}
1136
}

Diff for: operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/processors/GenericResourceUpdatePreProcessor.java

-26
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import io.fabric8.kubernetes.api.model.rbac.ClusterRoleBinding;
1111
import io.fabric8.kubernetes.api.model.rbac.Role;
1212
import io.fabric8.kubernetes.api.model.rbac.RoleBinding;
13-
import io.fabric8.zjsonpatch.JsonDiff;
1413
import io.javaoperatorsdk.operator.ReconcilerUtils;
1514
import io.javaoperatorsdk.operator.api.config.ConfigurationServiceProvider;
1615
import io.javaoperatorsdk.operator.api.reconciler.Context;
@@ -50,29 +49,4 @@ protected void updateClonedActual(R actual, R desired) {
5049
var desiredSpec = ReconcilerUtils.getSpec(desired);
5150
ReconcilerUtils.setSpec(actual, desiredSpec);
5251
}
53-
54-
@Override
55-
public boolean matches(R actual, R desired, boolean equality) {
56-
final var objectMapper = ConfigurationServiceProvider.instance().getObjectMapper();
57-
58-
// reflection will be replaced by this:
59-
// https://github.com/fabric8io/kubernetes-client/issues/3816
60-
var desiredSpecNode = objectMapper.valueToTree(ReconcilerUtils.getSpec(desired));
61-
var actualSpecNode = objectMapper.valueToTree(ReconcilerUtils.getSpec(actual));
62-
var diffJsonPatch = JsonDiff.asJson(desiredSpecNode, actualSpecNode);
63-
// In case of equality is set to true, no diffs are allowed, so we return early if diffs exist
64-
// On contrary (if equality is false), "add" is allowed for cases when for some
65-
// resources Kubernetes fills-in values into spec.
66-
final var diffNumber = diffJsonPatch.size();
67-
if (equality && diffNumber > 0) {
68-
return false;
69-
}
70-
for (int i = 0; i < diffNumber; i++) {
71-
String operation = diffJsonPatch.get(i).get("op").asText();
72-
if (!operation.equals("add")) {
73-
return false;
74-
}
75-
}
76-
return true;
77-
}
7852
}

0 commit comments

Comments
 (0)