Skip to content

Commit be24d80

Browse files
committed
wip
1 parent bb3256a commit be24d80

20 files changed

+164
-139
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ public Operator(Consumer<ConfigurationServiceOverrider> overrider) {
6464
public Operator(KubernetesClient client, Consumer<ConfigurationServiceOverrider> overrider) {
6565
// initialize the client if the user didn't provide one
6666
if (client == null) {
67-
var configurationService = ConfigurationService.newOverriddenConfigurationService(new BaseConfigurationService(), overrider);
67+
var configurationService = ConfigurationService
68+
.newOverriddenConfigurationService(new BaseConfigurationService(), overrider);
6869
client = configurationService.getKubernetesClient();
6970
}
7071

@@ -76,7 +77,8 @@ public Operator(KubernetesClient client, Consumer<ConfigurationServiceOverrider>
7677
} else {
7778
overrider = o -> o.withKubernetesClient(this.kubernetesClient);
7879
}
79-
this.configurationService = ConfigurationService.newOverriddenConfigurationService(new BaseConfigurationService(), overrider);
80+
this.configurationService = ConfigurationService
81+
.newOverriddenConfigurationService(new BaseConfigurationService(), overrider);
8082

8183
final var executorServiceManager = configurationService.getExecutorServiceManager();
8284
controllerManager = new ControllerManager(executorServiceManager);

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ default Config getClientConfiguration() {
5858

5959

6060
ObjectMapper mapper = new ObjectMapper();
61+
6162
default ObjectMapper getObjectMapper() {
6263
return mapper;
6364
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationServiceOverrider.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,8 @@ public Set<String> getKnownReconcilerNames() {
174174

175175
@Override
176176
public Config getClientConfiguration() {
177-
return clientConfig != null ? clientConfig : original.getClientConfiguration();
177+
//todo: check if client exists
178+
return clientConfig != null ? clientConfig : (client != null ? client.getConfiguration() : original.getClientConfiguration());
178179
}
179180

180181
@Override
@@ -243,9 +244,16 @@ public ExecutorService getWorkflowExecutorService() {
243244

244245
@Override
245246
public ObjectMapper getObjectMapper() {
247+
// todo: check if client exits
246248
return objectMapper != null ? objectMapper : original.getObjectMapper();
247249
}
248250

251+
@Override
252+
public KubernetesClient getKubernetesClient() {
253+
// TODO: we need to use the client's mapper if we provided a client
254+
return client != null ? client : original.getKubernetesClient();
255+
}
256+
249257
@Override
250258
public Optional<LeaderElectionConfiguration> getLeaderElectionConfiguration() {
251259
return leaderElectionConfiguration != null ? Optional.of(leaderElectionConfiguration)

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcher.java

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package io.javaoperatorsdk.operator.processing.dependent.kubernetes;
22

3-
import java.util.*;
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.Collections;
6+
import java.util.List;
7+
import java.util.Objects;
8+
import java.util.Optional;
49

510
import io.fabric8.kubernetes.api.model.ConfigMap;
611
import io.fabric8.kubernetes.api.model.HasMetadata;
@@ -11,7 +16,6 @@
1116
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.processors.GenericResourceUpdatePreProcessor;
1217

1318
import com.fasterxml.jackson.databind.JsonNode;
14-
import com.fasterxml.jackson.databind.ObjectMapper;
1519

1620
public class GenericKubernetesResourceMatcher<R extends HasMetadata, P extends HasMetadata>
1721
implements Matcher<R, P> {
@@ -56,8 +60,7 @@ static <R extends HasMetadata, P extends HasMetadata> Matcher<R, P> matcherFor(
5660
@Override
5761
public Result<R> match(R actualResource, P primary, Context<P> context) {
5862
var desired = dependentResource.desired(primary, context);
59-
return match(desired, actualResource, false, false, false,
60-
context.getControllerConfiguration().getConfigurationService().getObjectMapper());
63+
return match(desired, actualResource, false, false, false, context);
6164
}
6265

6366
/**
@@ -86,11 +89,12 @@ public Result<R> match(R actualResource, P primary, Context<P> context) {
8689
* @param <R> resource
8790
* @return results of matching
8891
*/
89-
public static <R extends HasMetadata> Result<R> match(R desired, R actualResource,
92+
public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(R desired,
93+
R actualResource,
9094
boolean considerLabelsAndAnnotations, boolean labelsAndAnnotationsEquality,
91-
boolean specEquality, ObjectMapper objectMapper) {
95+
boolean specEquality, Context<P> context) {
9296
return match(desired, actualResource, considerLabelsAndAnnotations,
93-
labelsAndAnnotationsEquality, specEquality, objectMapper, EMPTY_ARRAY);
97+
labelsAndAnnotationsEquality, specEquality, context, EMPTY_ARRAY);
9498
}
9599

96100
/**
@@ -112,11 +116,12 @@ public static <R extends HasMetadata> Result<R> match(R desired, R actualResourc
112116
* @param <R> resource
113117
* @return results of matching
114118
*/
115-
public static <R extends HasMetadata> Result<R> match(R desired, R actualResource,
119+
public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(R desired,
120+
R actualResource,
116121
boolean considerLabelsAndAnnotations, boolean labelsAndAnnotationsEquality,
117-
ObjectMapper objectMapper, String... ignorePaths) {
122+
Context<P> context, String... ignorePaths) {
118123
return match(desired, actualResource, considerLabelsAndAnnotations,
119-
labelsAndAnnotationsEquality, false, objectMapper, ignorePaths);
124+
labelsAndAnnotationsEquality, false, context, ignorePaths);
120125
}
121126

122127
/**
@@ -152,8 +157,7 @@ public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(
152157
String... ignorePaths) {
153158
final var desired = dependentResource.desired(primary, context);
154159
return match(desired, actualResource, considerLabelsAndAnnotations,
155-
labelsAndAnnotationsEquality, context.getControllerConfiguration()
156-
.getConfigurationService().getObjectMapper(),
160+
labelsAndAnnotationsEquality, context,
157161
ignorePaths);
158162
}
159163

@@ -164,14 +168,14 @@ public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(
164168
boolean specEquality) {
165169
final var desired = dependentResource.desired(primary, context);
166170
return match(desired, actualResource, considerLabelsAndAnnotations,
167-
labelsAndAnnotationsEquality, specEquality, context.getControllerConfiguration()
168-
.getConfigurationService().getObjectMapper());
171+
labelsAndAnnotationsEquality, specEquality, context);
169172
}
170173

171174
@SuppressWarnings("unchecked")
172-
public static <R extends HasMetadata> Result<R> match(R desired, R actualResource,
175+
public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(R desired,
176+
R actualResource,
173177
boolean considerMetadata, boolean labelsAndAnnotationsEquality, boolean specEquality,
174-
ObjectMapper objectMapper,
178+
Context<P> context,
175179
String... ignoredPaths) {
176180
final List<String> ignoreList =
177181
ignoredPaths != null && ignoredPaths.length > 0 ? Arrays.asList(ignoredPaths)
@@ -184,7 +188,7 @@ public static <R extends HasMetadata> Result<R> match(R desired, R actualResourc
184188

185189
if (considerMetadata) {
186190
Optional<Result<R>> res =
187-
matchMetadata(desired, actualResource, labelsAndAnnotationsEquality, objectMapper);
191+
matchMetadata(desired, actualResource, labelsAndAnnotationsEquality, context);
188192
if (res.isPresent()) {
189193
return res.orElseThrow();
190194
}
@@ -193,15 +197,15 @@ public static <R extends HasMetadata> Result<R> match(R desired, R actualResourc
193197
final ResourceUpdatePreProcessor<R> processor =
194198
GenericResourceUpdatePreProcessor.processorFor((Class<R>) desired.getClass());
195199
final var matched =
196-
processor.matches(actualResource, desired, specEquality, objectMapper, ignoredPaths);
200+
processor.matches(actualResource, desired, specEquality, context, ignoredPaths);
197201
return Result.computed(matched, desired);
198202
}
199203

200204

201-
private static <R extends HasMetadata> Optional<Result<R>> matchMetadata(R desired,
205+
private static <R extends HasMetadata, P extends HasMetadata> Optional<Result<R>> matchMetadata(
206+
R desired,
202207
R actualResource,
203-
boolean labelsAndAnnotationsEquality,
204-
ObjectMapper objectMapper) {
208+
boolean labelsAndAnnotationsEquality, Context<P> context) {
205209

206210
if (labelsAndAnnotationsEquality) {
207211
final var desiredMetadata = desired.getMetadata();
@@ -214,8 +218,9 @@ private static <R extends HasMetadata> Optional<Result<R>> matchMetadata(R desir
214218
return Optional.of(Result.computed(false, desired));
215219
}
216220
} else {
217-
var desiredNode = objectMapper.valueToTree(desired);
218-
var actualNode = objectMapper.valueToTree(actualResource);
221+
final var objectMapper = context.getClient().getKubernetesSerialization();
222+
var desiredNode = objectMapper.convertValue(desired, JsonNode.class);
223+
var actualNode = objectMapper.convertValue(actualResource, JsonNode.class);
219224
var wholeDiffJsonPatch = JsonDiff.asJson(desiredNode, actualNode);
220225
var metadataJSonDiffs = getDiffsImpactingPathsWithPrefixes(wholeDiffJsonPatch,
221226
METADATA_LABELS,
@@ -264,18 +269,15 @@ public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(
264269
KubernetesDependentResource<R, P> dependentResource, R actualResource, P primary,
265270
Context<P> context, boolean considerLabelsAndAnnotations, boolean specEquality) {
266271
final var desired = dependentResource.desired(primary, context);
267-
return match(desired, actualResource, considerLabelsAndAnnotations, specEquality,
268-
context.getControllerConfiguration().getConfigurationService().getObjectMapper());
272+
return match(desired, actualResource, considerLabelsAndAnnotations, specEquality, context);
269273
}
270274

271275
@Deprecated(forRemoval = true)
272276
public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(
273277
KubernetesDependentResource<R, P> dependentResource, R actualResource, P primary,
274278
Context<P> context, boolean considerLabelsAndAnnotations, String... ignorePaths) {
275279
final var desired = dependentResource.desired(primary, context);
276-
return match(desired, actualResource, considerLabelsAndAnnotations, true,
277-
context.getControllerConfiguration().getConfigurationService().getObjectMapper(),
278-
ignorePaths);
280+
return match(desired, actualResource, considerLabelsAndAnnotations, true, context, ignorePaths);
279281
}
280282

281283
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,7 @@ public Result<R> match(R actualResource, P primary, Context<P> context) {
169169
@SuppressWarnings("unused")
170170
public Result<R> match(R actualResource, R desired, P primary, Context<P> context) {
171171
return GenericKubernetesResourceMatcher.match(desired, actualResource, false,
172-
false, false,
173-
context.getControllerConfiguration().getConfigurationService().getObjectMapper());
172+
false, false, context);
174173
}
175174

176175
protected void handleDelete(P primary, R secondary, Context<P> context) {

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceUpdatePreProcessor.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,23 @@
99
import io.javaoperatorsdk.operator.api.reconciler.Context;
1010

1111
import com.fasterxml.jackson.databind.JsonNode;
12-
import com.fasterxml.jackson.databind.ObjectMapper;
1312

14-
import static io.javaoperatorsdk.operator.processing.dependent.kubernetes.GenericKubernetesResourceMatcher.*;
13+
import static io.javaoperatorsdk.operator.processing.dependent.kubernetes.GenericKubernetesResourceMatcher.allDiffsAreAddOps;
14+
import static io.javaoperatorsdk.operator.processing.dependent.kubernetes.GenericKubernetesResourceMatcher.getDiffsImpactingPathsWithPrefixes;
15+
import static io.javaoperatorsdk.operator.processing.dependent.kubernetes.GenericKubernetesResourceMatcher.nodeIsChildOf;
1516

1617
public interface ResourceUpdatePreProcessor<R extends HasMetadata> {
1718

1819
String SPEC = "/spec";
1920

2021
R replaceSpecOnActual(R actual, R desired, Context<?> context);
2122

22-
default boolean matches(R actual, R desired, boolean equality, ObjectMapper objectMapper,
23+
default boolean matches(R actual, R desired, boolean equality, Context<?> context,
2324
String[] ignoredPaths) {
2425

25-
var desiredNode = objectMapper.valueToTree(desired);
26-
var actualNode = objectMapper.valueToTree(actual);
26+
final var objectMapper = context.getClient().getKubernetesSerialization();
27+
var desiredNode = objectMapper.convertValue(desired, JsonNode.class);
28+
var actualNode = objectMapper.convertValue(actual, JsonNode.class);
2729
var wholeDiffJsonPatch = JsonDiff.asJson(desiredNode, actualNode);
2830

2931
final List<String> ignoreList =

0 commit comments

Comments
 (0)