7
7
import org .slf4j .Logger ;
8
8
import org .slf4j .LoggerFactory ;
9
9
10
+ import io .csviri .operator .glue .ControllerConfig ;
10
11
import io .csviri .operator .glue .Utils ;
11
12
import io .csviri .operator .glue .customresource .glue .Glue ;
12
13
import io .csviri .operator .glue .customresource .glue .RelatedResourceSpec ;
17
18
import io .javaoperatorsdk .operator .processing .event .ResourceID ;
18
19
import io .javaoperatorsdk .operator .processing .event .source .informer .InformerEventSource ;
19
20
21
+ import jakarta .inject .Singleton ;
22
+
20
23
// todo unit test
21
- class InformerRegister {
24
+ @ Singleton
25
+ public class InformerRegister {
22
26
23
27
private static final Logger log = LoggerFactory .getLogger (InformerRegister .class );
24
28
@@ -27,6 +31,17 @@ class InformerRegister {
27
31
private final Map <GroupVersionKind , RelatedAndOwnedResourceSecondaryToPrimaryMapper > relatedResourceMappers =
28
32
new ConcurrentHashMap <>();
29
33
34
+
35
+ private final InformerProducer informerProducer ;
36
+ private final ControllerConfig controllerConfig ;
37
+
38
+
39
+ public InformerRegister (InformerProducer informerProducer , ControllerConfig controllerConfig ) {
40
+ this .informerProducer = informerProducer ;
41
+ this .controllerConfig = controllerConfig ;
42
+ }
43
+
44
+
30
45
// todo test related resources deleting
31
46
public synchronized void deRegisterInformerOnResourceFlowChange (Context <Glue > context ,
32
47
Glue primary ) {
@@ -78,13 +93,19 @@ public InformerEventSource<GenericKubernetesResource, Glue> registerInformer(
78
93
mapper = relatedResourceMappers .get (gvk );
79
94
markEventSource (gvk , glue );
80
95
}
81
- var newES = new InformerEventSource <>(InformerConfiguration .<GenericKubernetesResource >from (gvk )
82
- .withSecondaryToPrimaryMapper (mapper )
83
- .build (), context .eventSourceRetriever ().eventSourceContextForDynamicRegistration ());
96
+
97
+ var configBuilder = InformerConfiguration .<GenericKubernetesResource >from (gvk )
98
+ .withSecondaryToPrimaryMapper (mapper );
99
+ labelSelectorForGVK (gvk ).ifPresent (ls -> {
100
+ log .debug ("Registering label selector: {} for informer for gvk: {}" , ls , gvk );
101
+ configBuilder .withLabelSelector (ls );
102
+ });
103
+
104
+ var newInformer = informerProducer .createInformer (configBuilder .build (), context );
84
105
85
106
return (InformerEventSource <GenericKubernetesResource , Glue >) context
86
107
.eventSourceRetriever ()
87
- .dynamicallyRegisterEventSource (gvk .toString (), newES );
108
+ .dynamicallyRegisterEventSource (gvk .toString (), newInformer );
88
109
89
110
}
90
111
@@ -147,4 +168,14 @@ private String workflowId(Glue glue) {
147
168
return glue .getMetadata ().getName () + "#" + glue .getMetadata ().getNamespace ();
148
169
}
149
170
171
+ public Optional <String > labelSelectorForGVK (GroupVersionKind gvk ) {
172
+ return Optional .ofNullable (controllerConfig .resourceLabelSelector ().get (toSimpleString (gvk )));
173
+ }
174
+
175
+ public static String toSimpleString (GroupVersionKind gvk ) {
176
+ String groupVersion =
177
+ gvk .getGroup () == null ? gvk .getVersion () : gvk .getGroup () + "/" + gvk .getVersion ();
178
+ return groupVersion + "#" + gvk .getKind ();
179
+ }
180
+
150
181
}
0 commit comments