1
1
package io .javaoperatorsdk .operator .processing .dependent .kubernetes ;
2
2
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 ;
4
9
5
10
import io .fabric8 .kubernetes .api .model .ConfigMap ;
6
11
import io .fabric8 .kubernetes .api .model .HasMetadata ;
11
16
import io .javaoperatorsdk .operator .processing .dependent .kubernetes .processors .GenericResourceUpdatePreProcessor ;
12
17
13
18
import com .fasterxml .jackson .databind .JsonNode ;
14
- import com .fasterxml .jackson .databind .ObjectMapper ;
15
19
16
20
public class GenericKubernetesResourceMatcher <R extends HasMetadata , P extends HasMetadata >
17
21
implements Matcher <R , P > {
@@ -56,8 +60,7 @@ static <R extends HasMetadata, P extends HasMetadata> Matcher<R, P> matcherFor(
56
60
@ Override
57
61
public Result <R > match (R actualResource , P primary , Context <P > context ) {
58
62
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 );
61
64
}
62
65
63
66
/**
@@ -86,11 +89,12 @@ public Result<R> match(R actualResource, P primary, Context<P> context) {
86
89
* @param <R> resource
87
90
* @return results of matching
88
91
*/
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 ,
90
94
boolean considerLabelsAndAnnotations , boolean labelsAndAnnotationsEquality ,
91
- boolean specEquality , ObjectMapper objectMapper ) {
95
+ boolean specEquality , Context < P > context ) {
92
96
return match (desired , actualResource , considerLabelsAndAnnotations ,
93
- labelsAndAnnotationsEquality , specEquality , objectMapper , EMPTY_ARRAY );
97
+ labelsAndAnnotationsEquality , specEquality , context , EMPTY_ARRAY );
94
98
}
95
99
96
100
/**
@@ -112,11 +116,12 @@ public static <R extends HasMetadata> Result<R> match(R desired, R actualResourc
112
116
* @param <R> resource
113
117
* @return results of matching
114
118
*/
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 ,
116
121
boolean considerLabelsAndAnnotations , boolean labelsAndAnnotationsEquality ,
117
- ObjectMapper objectMapper , String ... ignorePaths ) {
122
+ Context < P > context , String ... ignorePaths ) {
118
123
return match (desired , actualResource , considerLabelsAndAnnotations ,
119
- labelsAndAnnotationsEquality , false , objectMapper , ignorePaths );
124
+ labelsAndAnnotationsEquality , false , context , ignorePaths );
120
125
}
121
126
122
127
/**
@@ -152,8 +157,7 @@ public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(
152
157
String ... ignorePaths ) {
153
158
final var desired = dependentResource .desired (primary , context );
154
159
return match (desired , actualResource , considerLabelsAndAnnotations ,
155
- labelsAndAnnotationsEquality , context .getControllerConfiguration ()
156
- .getConfigurationService ().getObjectMapper (),
160
+ labelsAndAnnotationsEquality , context ,
157
161
ignorePaths );
158
162
}
159
163
@@ -164,14 +168,14 @@ public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(
164
168
boolean specEquality ) {
165
169
final var desired = dependentResource .desired (primary , context );
166
170
return match (desired , actualResource , considerLabelsAndAnnotations ,
167
- labelsAndAnnotationsEquality , specEquality , context .getControllerConfiguration ()
168
- .getConfigurationService ().getObjectMapper ());
171
+ labelsAndAnnotationsEquality , specEquality , context );
169
172
}
170
173
171
174
@ 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 ,
173
177
boolean considerMetadata , boolean labelsAndAnnotationsEquality , boolean specEquality ,
174
- ObjectMapper objectMapper ,
178
+ Context < P > context ,
175
179
String ... ignoredPaths ) {
176
180
final List <String > ignoreList =
177
181
ignoredPaths != null && ignoredPaths .length > 0 ? Arrays .asList (ignoredPaths )
@@ -184,7 +188,7 @@ public static <R extends HasMetadata> Result<R> match(R desired, R actualResourc
184
188
185
189
if (considerMetadata ) {
186
190
Optional <Result <R >> res =
187
- matchMetadata (desired , actualResource , labelsAndAnnotationsEquality , objectMapper );
191
+ matchMetadata (desired , actualResource , labelsAndAnnotationsEquality , context );
188
192
if (res .isPresent ()) {
189
193
return res .orElseThrow ();
190
194
}
@@ -193,15 +197,15 @@ public static <R extends HasMetadata> Result<R> match(R desired, R actualResourc
193
197
final ResourceUpdatePreProcessor <R > processor =
194
198
GenericResourceUpdatePreProcessor .processorFor ((Class <R >) desired .getClass ());
195
199
final var matched =
196
- processor .matches (actualResource , desired , specEquality , objectMapper , ignoredPaths );
200
+ processor .matches (actualResource , desired , specEquality , context , ignoredPaths );
197
201
return Result .computed (matched , desired );
198
202
}
199
203
200
204
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 ,
202
207
R actualResource ,
203
- boolean labelsAndAnnotationsEquality ,
204
- ObjectMapper objectMapper ) {
208
+ boolean labelsAndAnnotationsEquality , Context <P > context ) {
205
209
206
210
if (labelsAndAnnotationsEquality ) {
207
211
final var desiredMetadata = desired .getMetadata ();
@@ -214,8 +218,9 @@ private static <R extends HasMetadata> Optional<Result<R>> matchMetadata(R desir
214
218
return Optional .of (Result .computed (false , desired ));
215
219
}
216
220
} 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 );
219
224
var wholeDiffJsonPatch = JsonDiff .asJson (desiredNode , actualNode );
220
225
var metadataJSonDiffs = getDiffsImpactingPathsWithPrefixes (wholeDiffJsonPatch ,
221
226
METADATA_LABELS ,
@@ -264,18 +269,15 @@ public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(
264
269
KubernetesDependentResource <R , P > dependentResource , R actualResource , P primary ,
265
270
Context <P > context , boolean considerLabelsAndAnnotations , boolean specEquality ) {
266
271
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 );
269
273
}
270
274
271
275
@ Deprecated (forRemoval = true )
272
276
public static <R extends HasMetadata , P extends HasMetadata > Result <R > match (
273
277
KubernetesDependentResource <R , P > dependentResource , R actualResource , P primary ,
274
278
Context <P > context , boolean considerLabelsAndAnnotations , String ... ignorePaths ) {
275
279
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 );
279
281
}
280
282
281
283
}
0 commit comments