11package io .javaoperatorsdk .operator ;
22
3- import io .javaoperatorsdk .operator .api .ResourceController ;
4- import io .javaoperatorsdk .operator .processing .EventDispatcher ;
5- import io .javaoperatorsdk .operator .processing .EventScheduler ;
6- import io .javaoperatorsdk .operator .processing .retry .GenericRetry ;
7- import io .javaoperatorsdk .operator .processing .retry .Retry ;
83import io .fabric8 .kubernetes .api .model .apiextensions .v1beta1 .CustomResourceDefinition ;
94import io .fabric8 .kubernetes .client .CustomResource ;
105import io .fabric8 .kubernetes .client .CustomResourceDoneable ;
149import io .fabric8 .kubernetes .client .dsl .base .CustomResourceDefinitionContext ;
1510import io .fabric8 .kubernetes .client .dsl .internal .CustomResourceOperationsImpl ;
1611import io .fabric8 .kubernetes .internal .KubernetesDeserializer ;
12+ import io .javaoperatorsdk .operator .api .ResourceController ;
13+ import io .javaoperatorsdk .operator .processing .EventDispatcher ;
14+ import io .javaoperatorsdk .operator .processing .DefaultEventHandler ;
15+ import io .javaoperatorsdk .operator .processing .CustomResourceCache ;
16+ import io .javaoperatorsdk .operator .processing .event .DefaultEventSourceManager ;
17+ import io .javaoperatorsdk .operator .processing .event .internal .CustomResourceEventSource ;
1718import org .slf4j .Logger ;
1819import org .slf4j .LoggerFactory ;
1920
2021import java .util .Arrays ;
2122import java .util .HashMap ;
2223import java .util .Map ;
2324
25+ import static io .javaoperatorsdk .operator .ControllerUtils .*;
26+
27+
2428@ SuppressWarnings ("rawtypes" )
2529public class Operator {
2630
@@ -34,58 +38,61 @@ public Operator(KubernetesClient k8sClient) {
3438
3539
3640 public <R extends CustomResource > void registerControllerForAllNamespaces (ResourceController <R > controller ) throws OperatorException {
37- registerController (controller , true , GenericRetry .defaultLimitedExponentialRetry ());
38- }
39-
40- public <R extends CustomResource > void registerControllerForAllNamespaces (ResourceController <R > controller , Retry retry ) throws OperatorException {
41- registerController (controller , true , retry );
41+ registerController (controller , true );
4242 }
4343
4444 public <R extends CustomResource > void registerController (ResourceController <R > controller , String ... targetNamespaces ) throws OperatorException {
45- registerController (controller , false , GenericRetry .defaultLimitedExponentialRetry (), targetNamespaces );
46- }
47-
48- public <R extends CustomResource > void registerController (ResourceController <R > controller , Retry retry , String ... targetNamespaces ) throws OperatorException {
49- registerController (controller , false , retry , targetNamespaces );
45+ registerController (controller , false , targetNamespaces );
5046 }
5147
5248 @ SuppressWarnings ("rawtypes" )
5349 private <R extends CustomResource > void registerController (ResourceController <R > controller ,
54- boolean watchAllNamespaces , Retry retry , String ... targetNamespaces ) throws OperatorException {
55- Class <R > resClass = ControllerUtils . getCustomResourceClass (controller );
50+ boolean watchAllNamespaces , String ... targetNamespaces ) throws OperatorException {
51+ Class <R > resClass = getCustomResourceClass (controller );
5652 CustomResourceDefinitionContext crd = getCustomResourceDefinitionForController (controller );
5753 KubernetesDeserializer .registerCustomKind (crd .getVersion (), crd .getKind (), resClass );
5854 String finalizer = ControllerUtils .getFinalizer (controller );
5955 MixedOperation client = k8sClient .customResources (crd , resClass , CustomResourceList .class , ControllerUtils .getCustomResourceDoneableClass (controller ));
6056 EventDispatcher eventDispatcher = new EventDispatcher (controller ,
61- finalizer , new EventDispatcher .CustomResourceFacade (client ), ControllerUtils .getGenerationEventProcessing (controller ));
62- EventScheduler eventScheduler = new EventScheduler (eventDispatcher , retry );
63- registerWatches (controller , client , resClass , watchAllNamespaces , targetNamespaces , eventScheduler );
64- }
57+ finalizer , new EventDispatcher .CustomResourceFacade (client ));
6558
6659
67- private <R extends CustomResource > void registerWatches (ResourceController <R > controller , MixedOperation client ,
68- Class <R > resClass ,
69- boolean watchAllNamespaces , String [] targetNamespaces , EventScheduler eventScheduler ) {
70-
71- CustomResourceOperationsImpl crClient = (CustomResourceOperationsImpl ) client ;
72- if (watchAllNamespaces ) {
73- crClient .inAnyNamespace ().watch (eventScheduler );
74- } else if (targetNamespaces .length == 0 ) {
75- client .watch (eventScheduler );
76- } else {
77- for (String targetNamespace : targetNamespaces ) {
78- crClient .inNamespace (targetNamespace ).watch (eventScheduler );
79- log .debug ("Registered controller for namespace: {}" , targetNamespace );
80- }
81- }
60+ CustomResourceCache customResourceCache = new CustomResourceCache ();
61+ DefaultEventHandler defaultEventHandler = new DefaultEventHandler (customResourceCache , eventDispatcher , controller .getClass ().getName ());
62+ DefaultEventSourceManager eventSourceManager = new DefaultEventSourceManager (defaultEventHandler );
63+ defaultEventHandler .setDefaultEventSourceManager (eventSourceManager );
64+ eventDispatcher .setEventSourceManager (eventSourceManager );
65+
8266 customResourceClients .put (resClass , (CustomResourceOperationsImpl ) client );
67+
68+ controller .init (eventSourceManager );
69+ CustomResourceEventSource customResourceEventSource
70+ = createCustomResourceEventSource (client , customResourceCache , watchAllNamespaces , targetNamespaces ,
71+ defaultEventHandler , ControllerUtils .getGenerationEventProcessing (controller ));
72+ eventSourceManager .registerCustomResourceEventSource (customResourceEventSource );
73+
74+
8375 log .info ("Registered Controller: '{}' for CRD: '{}' for namespaces: {}" , controller .getClass ().getSimpleName (),
8476 resClass , targetNamespaces .length == 0 ? "[all/client namespace]" : Arrays .toString (targetNamespaces ));
8577 }
8678
79+ private CustomResourceEventSource createCustomResourceEventSource (MixedOperation client ,
80+ CustomResourceCache customResourceCache ,
81+ boolean watchAllNamespaces ,
82+ String [] targetNamespaces ,
83+ DefaultEventHandler defaultEventHandler ,
84+ boolean generationAware ) {
85+ CustomResourceEventSource customResourceEventSource = watchAllNamespaces ?
86+ CustomResourceEventSource .customResourceEventSourceForAllNamespaces (customResourceCache , client , generationAware ) :
87+ CustomResourceEventSource .customResourceEventSourceForTargetNamespaces (customResourceCache , client , targetNamespaces , generationAware );
88+
89+ customResourceEventSource .setEventHandler (defaultEventHandler );
90+
91+ return customResourceEventSource ;
92+ }
93+
8794 private CustomResourceDefinitionContext getCustomResourceDefinitionForController (ResourceController controller ) {
88- String crdName = ControllerUtils . getCrdName (controller );
95+ String crdName = getCrdName (controller );
8996 CustomResourceDefinition customResourceDefinition = k8sClient .customResourceDefinitions ().withName (crdName ).get ();
9097 if (customResourceDefinition == null ) {
9198 throw new OperatorException ("Cannot find Custom Resource Definition with name: " + crdName );
@@ -103,11 +110,4 @@ public Map<Class<? extends CustomResource>, CustomResourceOperationsImpl> getCus
103110 return customResourceClients .get (customResourceClass );
104111 }
105112
106- private String getKind (CustomResourceDefinition crd ) {
107- return crd .getSpec ().getNames ().getKind ();
108- }
109-
110- private String getApiVersion (CustomResourceDefinition crd ) {
111- return crd .getSpec ().getGroup () + "/" + crd .getSpec ().getVersion ();
112- }
113113}
0 commit comments