Skip to content

Commit 70195e1

Browse files
committed
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 0c5f1e6 commit 70195e1

File tree

2 files changed

+26
-27
lines changed

2 files changed

+26
-27
lines changed
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)