44import java .util .Collections ;
55import java .util .List ;
66
7- import io .fabric8 .kubernetes .api .model .ConfigMap ;
87import io .fabric8 .kubernetes .api .model .HasMetadata ;
9- import io .fabric8 .kubernetes .api .model .Secret ;
108import io .fabric8 .zjsonpatch .JsonDiff ;
119import io .javaoperatorsdk .operator .api .reconciler .Context ;
1210import io .javaoperatorsdk .operator .processing .dependent .Matcher ;
1311
1412import com .fasterxml .jackson .databind .JsonNode ;
1513
16- public class GenericKubernetesResourceMatcher <R extends HasMetadata , P extends HasMetadata >
17- implements Matcher <R , P > {
14+ public class GenericKubernetesResourceMatcher <R extends HasMetadata , P extends HasMetadata > {
1815
1916 private static final String SPEC = "/spec" ;
2017 private static final String METADATA = "/metadata" ;
@@ -26,40 +23,7 @@ public class GenericKubernetesResourceMatcher<R extends HasMetadata, P extends H
2623
2724 private static final String PATH = "path" ;
2825 private static final String [] EMPTY_ARRAY = {};
29- private final KubernetesDependentResource <R , P > dependentResource ;
3026
31- private GenericKubernetesResourceMatcher (KubernetesDependentResource <R , P > dependentResource ) {
32- this .dependentResource = dependentResource ;
33- }
34-
35- @ SuppressWarnings ({"unchecked" , "rawtypes" , "unused" })
36- static <R extends HasMetadata , P extends HasMetadata > Matcher <R , P > matcherFor (
37- KubernetesDependentResource <R , P > dependentResource ) {
38- return new GenericKubernetesResourceMatcher (dependentResource );
39- }
40-
41- /**
42- * {@inheritDoc}
43- * <p>
44- * This implementation attempts to cover most common cases out of the box by considering
45- * non-additive changes to the resource's spec (if the resource in question has a {@code spec}
46- * field), making special provisions for {@link ConfigMap} and {@link Secret} resources. Additive
47- * changes (i.e. a field is added that previously didn't exist) are not considered as triggering a
48- * mismatch by default to account for validating webhooks that might add default values
49- * automatically when not present or some other controller adding labels and/or annotations.
50- * </p>
51- * <p>
52- * It should be noted that this implementation is potentially intensive because it generically
53- * attempts to cover common use cases by performing diffs on the JSON representation of objects.
54- * If performance is a concern, it might be easier / simpler to provide a {@link Matcher}
55- * implementation optimized for your use case.
56- * </p>
57- */
58- @ Override
59- public Result <R > match (R actualResource , P primary , Context <P > context ) {
60- var desired = dependentResource .desired (primary , context );
61- return match (desired , actualResource , false , false , context );
62- }
6327
6428 /**
6529 * Determines whether the specified actual resource matches the specified desired resource,
@@ -84,14 +48,20 @@ public Result<R> match(R actualResource, P primary, Context<P> context) {
8448 * @param <R> resource
8549 * @return results of matching
8650 */
87- public static <R extends HasMetadata , P extends HasMetadata > Result <R > match (R desired ,
51+ public static <R extends HasMetadata , P extends HasMetadata > Matcher . Result <R > match (R desired ,
8852 R actualResource ,
8953 boolean labelsAndAnnotationsEquality ,
9054 boolean valuesEquality , Context <P > context ) {
9155 return match (desired , actualResource ,
9256 labelsAndAnnotationsEquality , valuesEquality , context , EMPTY_ARRAY );
9357 }
9458
59+ public static <R extends HasMetadata , P extends HasMetadata > Matcher .Result <R > match (R desired ,
60+ R actualResource , Context <P > context ) {
61+ return match (desired , actualResource ,
62+ false , false , context , EMPTY_ARRAY );
63+ }
64+
9565 /**
9666 * Determines whether the specified actual resource matches the specified desired resource,
9767 * possibly considering metadata and deeper equality checks.
@@ -108,7 +78,7 @@ public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(R d
10878 * @param <R> resource
10979 * @return results of matching
11080 */
111- public static <R extends HasMetadata , P extends HasMetadata > Result <R > match (R desired ,
81+ public static <R extends HasMetadata , P extends HasMetadata > Matcher . Result <R > match (R desired ,
11282 R actualResource ,
11383 boolean labelsAndAnnotationsEquality ,
11484 Context <P > context , String ... ignorePaths ) {
@@ -139,7 +109,7 @@ public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(R d
139109 * match fails.
140110 * @return a {@link io.javaoperatorsdk.operator.processing.dependent.Matcher.Result} object
141111 */
142- public static <R extends HasMetadata , P extends HasMetadata > Result <R > match (
112+ public static <R extends HasMetadata , P extends HasMetadata > Matcher . Result <R > match (
143113 KubernetesDependentResource <R , P > dependentResource , R actualResource , P primary ,
144114 Context <P > context ,
145115 boolean labelsAndAnnotationsEquality ,
@@ -150,7 +120,7 @@ public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(
150120 ignorePaths );
151121 }
152122
153- public static <R extends HasMetadata , P extends HasMetadata > Result <R > match (
123+ public static <R extends HasMetadata , P extends HasMetadata > Matcher . Result <R > match (
154124 KubernetesDependentResource <R , P > dependentResource , R actualResource , P primary ,
155125 Context <P > context ,
156126 boolean specEquality ,
@@ -161,7 +131,7 @@ public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(
161131 labelsAndAnnotationsEquality , specEquality , context , ignorePaths );
162132 }
163133
164- public static <R extends HasMetadata , P extends HasMetadata > Result <R > match (R desired ,
134+ public static <R extends HasMetadata , P extends HasMetadata > Matcher . Result <R > match (R desired ,
165135 R actualResource , boolean labelsAndAnnotationsEquality , boolean valuesEquality ,
166136 Context <P > context ,
167137 String ... ignoredPaths ) {
@@ -194,7 +164,7 @@ public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(R d
194164 }
195165 }
196166
197- return Result .computed (matched , desired );
167+ return Matcher . Result .computed (matched , desired );
198168 }
199169
200170 private static boolean match (boolean equality , JsonNode diff ,
0 commit comments