4
4
import java .util .Collections ;
5
5
import java .util .List ;
6
6
7
- import io .fabric8 .kubernetes .api .model .ConfigMap ;
8
7
import io .fabric8 .kubernetes .api .model .HasMetadata ;
9
- import io .fabric8 .kubernetes .api .model .Secret ;
10
8
import io .fabric8 .zjsonpatch .JsonDiff ;
11
9
import io .javaoperatorsdk .operator .api .reconciler .Context ;
12
10
import io .javaoperatorsdk .operator .processing .dependent .Matcher ;
13
11
14
12
import com .fasterxml .jackson .databind .JsonNode ;
15
13
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 > {
18
15
19
16
private static final String SPEC = "/spec" ;
20
17
private static final String METADATA = "/metadata" ;
@@ -26,40 +23,7 @@ public class GenericKubernetesResourceMatcher<R extends HasMetadata, P extends H
26
23
27
24
private static final String PATH = "path" ;
28
25
private static final String [] EMPTY_ARRAY = {};
29
- private final KubernetesDependentResource <R , P > dependentResource ;
30
26
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
- }
63
27
64
28
/**
65
29
* 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) {
84
48
* @param <R> resource
85
49
* @return results of matching
86
50
*/
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 ,
88
52
R actualResource ,
89
53
boolean labelsAndAnnotationsEquality ,
90
54
boolean valuesEquality , Context <P > context ) {
91
55
return match (desired , actualResource ,
92
56
labelsAndAnnotationsEquality , valuesEquality , context , EMPTY_ARRAY );
93
57
}
94
58
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
+
95
65
/**
96
66
* Determines whether the specified actual resource matches the specified desired resource,
97
67
* possibly considering metadata and deeper equality checks.
@@ -108,7 +78,7 @@ public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(R d
108
78
* @param <R> resource
109
79
* @return results of matching
110
80
*/
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 ,
112
82
R actualResource ,
113
83
boolean labelsAndAnnotationsEquality ,
114
84
Context <P > context , String ... ignorePaths ) {
@@ -139,7 +109,7 @@ public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(R d
139
109
* match fails.
140
110
* @return a {@link io.javaoperatorsdk.operator.processing.dependent.Matcher.Result} object
141
111
*/
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 (
143
113
KubernetesDependentResource <R , P > dependentResource , R actualResource , P primary ,
144
114
Context <P > context ,
145
115
boolean labelsAndAnnotationsEquality ,
@@ -150,7 +120,7 @@ public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(
150
120
ignorePaths );
151
121
}
152
122
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 (
154
124
KubernetesDependentResource <R , P > dependentResource , R actualResource , P primary ,
155
125
Context <P > context ,
156
126
boolean specEquality ,
@@ -161,7 +131,7 @@ public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(
161
131
labelsAndAnnotationsEquality , specEquality , context , ignorePaths );
162
132
}
163
133
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 ,
165
135
R actualResource , boolean labelsAndAnnotationsEquality , boolean valuesEquality ,
166
136
Context <P > context ,
167
137
String ... ignoredPaths ) {
@@ -194,7 +164,7 @@ public static <R extends HasMetadata, P extends HasMetadata> Result<R> match(R d
194
164
}
195
165
}
196
166
197
- return Result .computed (matched , desired );
167
+ return Matcher . Result .computed (matched , desired );
198
168
}
199
169
200
170
private static boolean match (boolean equality , JsonNode diff ,
0 commit comments