10
10
import io .fabric8 .kubernetes .api .model .HasMetadata ;
11
11
import io .fabric8 .kubernetes .client .informers .cache .ItemStore ;
12
12
import io .javaoperatorsdk .operator .api .config .dependent .DependentResourceSpec ;
13
+ import io .javaoperatorsdk .operator .processing .dependent .kubernetes .InformerConfigHolder ;
13
14
import io .javaoperatorsdk .operator .processing .event .rate .RateLimiter ;
14
15
import io .javaoperatorsdk .operator .processing .event .source .filter .GenericFilter ;
15
16
import io .javaoperatorsdk .operator .processing .event .source .filter .OnAddFilter ;
16
17
import io .javaoperatorsdk .operator .processing .event .source .filter .OnUpdateFilter ;
17
18
import io .javaoperatorsdk .operator .processing .retry .Retry ;
18
19
19
- import static io .javaoperatorsdk .operator .api .reconciler .Constants .DEFAULT_NAMESPACES_SET ;
20
- import static io .javaoperatorsdk .operator .api .reconciler .Constants .WATCH_CURRENT_NAMESPACE_SET ;
21
20
22
21
@ SuppressWarnings ({"rawtypes" , "unused" , "UnusedReturnValue" })
23
22
public class ControllerConfigurationOverrider <R extends HasMetadata > {
24
23
24
+ private final ControllerConfiguration <R > original ;
25
+ private String name ;
25
26
private String finalizer ;
26
27
private boolean generationAware ;
27
- private Set <String > namespaces ;
28
28
private Retry retry ;
29
- private String labelSelector ;
30
- private final ControllerConfiguration <R > original ;
31
- private Duration reconciliationMaxInterval ;
32
- private OnAddFilter <? super R > onAddFilter ;
33
- private OnUpdateFilter <? super R > onUpdateFilter ;
34
- private GenericFilter <? super R > genericFilter ;
35
29
private RateLimiter rateLimiter ;
36
- private Map <DependentResourceSpec , Object > configurations ;
37
- private ItemStore <R > itemStore ;
38
- private String name ;
39
30
private String fieldManager ;
40
- private Long informerListLimit ;
31
+ private Duration reconciliationMaxInterval ;
32
+ private Map <DependentResourceSpec , Object > configurations ;
33
+ private final InformerConfigHolder <R >.Builder config ;
41
34
42
35
private ControllerConfigurationOverrider (ControllerConfiguration <R > original ) {
43
36
this .finalizer = original .getFinalizerName ();
44
37
this .generationAware = original .isGenerationAware ();
45
- this .namespaces = new HashSet <>(original .getNamespaces ());
38
+ this .config = InformerConfigHolder .builder (original .getResourceClass ())
39
+ .withName (name )
40
+ .withNamespaces (original .getNamespaces ())
41
+ .withLabelSelector (original .getLabelSelector ())
42
+ .withOnAddFilter (original .onAddFilter ().orElse (null ))
43
+ .withOnUpdateFilter (original .onUpdateFilter ().orElse (null ))
44
+ .withGenericFilter (original .genericFilter ().orElse (null ))
45
+ .withInformerListLimit (original .getInformerListLimit ().orElse (null ))
46
+ .withItemStore (original .getItemStore ().orElse (null ));
46
47
this .retry = original .getRetry ();
47
- this .labelSelector = original .getLabelSelector ();
48
48
this .reconciliationMaxInterval = original .maxReconciliationInterval ().orElse (null );
49
- this .onAddFilter = original .onAddFilter ().orElse (null );
50
- this .onUpdateFilter = original .onUpdateFilter ().orElse (null );
51
- this .genericFilter = original .genericFilter ().orElse (null );
52
49
this .original = original ;
53
50
this .rateLimiter = original .getRateLimiter ();
54
51
this .name = original .getName ();
55
52
this .fieldManager = original .fieldManager ();
56
- this .informerListLimit = original .getInformerListLimit ().orElse (null );
57
- this .itemStore = original .getItemStore ().orElse (null );
58
53
}
59
54
60
55
public ControllerConfigurationOverrider <R > withFinalizer (String finalizer ) {
@@ -68,26 +63,36 @@ public ControllerConfigurationOverrider<R> withGenerationAware(boolean generatio
68
63
}
69
64
70
65
public ControllerConfigurationOverrider <R > watchingOnlyCurrentNamespace () {
71
- this . namespaces = WATCH_CURRENT_NAMESPACE_SET ;
66
+ config . withWatchCurrentNamespace () ;
72
67
return this ;
73
68
}
74
69
75
70
public ControllerConfigurationOverrider <R > addingNamespaces (String ... namespaces ) {
76
- this .namespaces .addAll (List .of (namespaces ));
71
+ if (namespaces != null && namespaces .length > 0 ) {
72
+ final var current = config .namespaces ();
73
+ final var aggregated = new HashSet <String >(current .size () + namespaces .length );
74
+ aggregated .addAll (current );
75
+ aggregated .addAll (Set .of (namespaces ));
76
+ config .withNamespaces (aggregated );
77
+ }
77
78
return this ;
78
79
}
79
80
80
81
public ControllerConfigurationOverrider <R > removingNamespaces (String ... namespaces ) {
81
- List .of (namespaces ).forEach (this .namespaces ::remove );
82
- if (this .namespaces .isEmpty ()) {
83
- this .namespaces = DEFAULT_NAMESPACES_SET ;
82
+ if (namespaces != null && namespaces .length > 0 ) {
83
+ final var current = new HashSet <>(config .namespaces ());
84
+ List .of (namespaces ).forEach (current ::remove );
85
+ if (current .isEmpty ()) {
86
+ return watchingAllNamespaces ();
87
+ } else {
88
+ config .withNamespaces (current );
89
+ }
84
90
}
85
91
return this ;
86
92
}
87
93
88
94
public ControllerConfigurationOverrider <R > settingNamespaces (Set <String > newNamespaces ) {
89
- this .namespaces .clear ();
90
- this .namespaces .addAll (newNamespaces );
95
+ config .withNamespaces (newNamespaces );
91
96
return this ;
92
97
}
93
98
@@ -96,13 +101,12 @@ public ControllerConfigurationOverrider<R> settingNamespaces(String... newNamesp
96
101
}
97
102
98
103
public ControllerConfigurationOverrider <R > settingNamespace (String namespace ) {
99
- this .namespaces .clear ();
100
- this .namespaces .add (namespace );
104
+ config .withNamespaces (Set .of (namespace ));
101
105
return this ;
102
106
}
103
107
104
108
public ControllerConfigurationOverrider <R > watchingAllNamespaces () {
105
- this . namespaces = DEFAULT_NAMESPACES_SET ;
109
+ config . withWatchAllNamespaces () ;
106
110
return this ;
107
111
}
108
112
@@ -117,7 +121,7 @@ public ControllerConfigurationOverrider<R> withRateLimiter(RateLimiter rateLimit
117
121
}
118
122
119
123
public ControllerConfigurationOverrider <R > withLabelSelector (String labelSelector ) {
120
- this . labelSelector = labelSelector ;
124
+ config . withLabelSelector ( labelSelector ) ;
121
125
return this ;
122
126
}
123
127
@@ -128,27 +132,28 @@ public ControllerConfigurationOverrider<R> withReconciliationMaxInterval(
128
132
}
129
133
130
134
public ControllerConfigurationOverrider <R > withOnAddFilter (OnAddFilter <R > onAddFilter ) {
131
- this . onAddFilter = onAddFilter ;
135
+ config . withOnAddFilter ( onAddFilter ) ;
132
136
return this ;
133
137
}
134
138
135
139
public ControllerConfigurationOverrider <R > withOnUpdateFilter (OnUpdateFilter <R > onUpdateFilter ) {
136
- this . onUpdateFilter = onUpdateFilter ;
140
+ config . withOnUpdateFilter ( onUpdateFilter ) ;
137
141
return this ;
138
142
}
139
143
140
144
public ControllerConfigurationOverrider <R > withGenericFilter (GenericFilter <R > genericFilter ) {
141
- this . genericFilter = genericFilter ;
145
+ config . withGenericFilter ( genericFilter ) ;
142
146
return this ;
143
147
}
144
148
145
149
public ControllerConfigurationOverrider <R > withItemStore (ItemStore <R > itemStore ) {
146
- this . itemStore = itemStore ;
150
+ config . withItemStore ( itemStore ) ;
147
151
return this ;
148
152
}
149
153
150
154
public ControllerConfigurationOverrider <R > withName (String name ) {
151
155
this .name = name ;
156
+ config .withName (name );
152
157
return this ;
153
158
}
154
159
@@ -168,7 +173,7 @@ public ControllerConfigurationOverrider<R> withFieldManager(
168
173
*/
169
174
public ControllerConfigurationOverrider <R > withInformerListLimit (
170
175
Long informerListLimit ) {
171
- this . informerListLimit = informerListLimit ;
176
+ config . withInformerListLimit ( informerListLimit ) ;
172
177
return this ;
173
178
}
174
179
@@ -192,9 +197,10 @@ public ControllerConfiguration<R> build() {
192
197
return new ResolvedControllerConfiguration <>(original .getResourceClass (),
193
198
name ,
194
199
generationAware , original .getAssociatedReconcilerClassName (), retry , rateLimiter ,
195
- reconciliationMaxInterval , onAddFilter , onUpdateFilter , genericFilter ,
196
- namespaces , finalizer , labelSelector , configurations , itemStore , fieldManager ,
197
- original .getConfigurationService (), informerListLimit ,
200
+ reconciliationMaxInterval ,
201
+ finalizer , configurations , fieldManager ,
202
+ original .getConfigurationService (),
203
+ config .buildForController (),
198
204
original .getWorkflowSpec ().orElse (null ));
199
205
}
200
206
0 commit comments