1616package io .javaoperatorsdk .operator .baseapi .simple ;
1717
1818import java .util .HashMap ;
19+ import java .util .List ;
1920import java .util .Map ;
2021import java .util .concurrent .atomic .AtomicInteger ;
2122
2627import io .fabric8 .kubernetes .api .model .ConfigMapBuilder ;
2728import io .fabric8 .kubernetes .api .model .ObjectMetaBuilder ;
2829import io .javaoperatorsdk .operator .ReconcilerUtilsInternal ;
30+ import io .javaoperatorsdk .operator .api .config .informer .InformerEventSourceConfiguration ;
2931import io .javaoperatorsdk .operator .api .reconciler .*;
32+ import io .javaoperatorsdk .operator .processing .event .source .EventSource ;
33+ import io .javaoperatorsdk .operator .processing .event .source .informer .InformerEventSource ;
3034import io .javaoperatorsdk .operator .support .TestExecutionInfoProvider ;
3135
3236@ ControllerConfiguration (generationAwareEventProcessing = false )
@@ -52,55 +56,20 @@ public void setUpdateStatus(boolean updateStatus) {
5256 this .updateStatus = updateStatus ;
5357 }
5458
55- @ Override
56- public DeleteControl cleanup (TestCustomResource resource , Context <TestCustomResource > context ) {
57- numberOfCleanupExecutions .incrementAndGet ();
58-
59- var statusDetail =
60- context
61- .getClient ()
62- .configMaps ()
63- .inNamespace (resource .getMetadata ().getNamespace ())
64- .withName (resource .getSpec ().getConfigMapName ())
65- .delete ();
66-
67- if (statusDetail .size () == 1 && statusDetail .get (0 ).getCauses ().isEmpty ()) {
68- log .info (
69- "Deleted ConfigMap {} for resource: {}" ,
70- resource .getSpec ().getConfigMapName (),
71- resource .getMetadata ().getName ());
72- } else {
73- log .error (
74- "Failed to delete ConfigMap {} for resource: {}" ,
75- resource .getSpec ().getConfigMapName (),
76- resource .getMetadata ().getName ());
77- }
78- return DeleteControl .defaultDelete ();
79- }
80-
8159 @ Override
8260 public UpdateControl <TestCustomResource > reconcile (
8361 TestCustomResource resource , Context <TestCustomResource > context ) {
8462 numberOfExecutions .addAndGet (1 );
8563 if (!resource .getMetadata ().getFinalizers ().contains (FINALIZER_NAME )) {
8664 throw new IllegalStateException ("Finalizer is not present." );
8765 }
88- final var kubernetesClient = context .getClient ();
89- ConfigMap existingConfigMap =
90- kubernetesClient
91- .configMaps ()
92- .inNamespace (resource .getMetadata ().getNamespace ())
93- .withName (resource .getSpec ().getConfigMapName ())
94- .get ();
66+
67+ var existingConfigMap = context .getSecondaryResource (ConfigMap .class ).orElse (null );
9568
9669 if (existingConfigMap != null ) {
9770 existingConfigMap .setData (configMapData (resource ));
98- // existingConfigMap.getMetadata().setResourceVersion(null);
99- kubernetesClient
100- .configMaps ()
101- .inNamespace (resource .getMetadata ().getNamespace ())
102- .resource (existingConfigMap )
103- .createOrReplace ();
71+ log .info ("Updating config map" );
72+ ReconcileUtils .serverSideApply (context , existingConfigMap );
10473 } else {
10574 Map <String , String > labels = new HashMap <>();
10675 labels .put ("managedBy" , TestReconciler .class .getSimpleName ());
@@ -114,11 +83,8 @@ public UpdateControl<TestCustomResource> reconcile(
11483 .build ())
11584 .withData (configMapData (resource ))
11685 .build ();
117- kubernetesClient
118- .configMaps ()
119- .inNamespace (resource .getMetadata ().getNamespace ())
120- .resource (newConfigMap )
121- .createOrReplace ();
86+ log .info ("Creating config map" );
87+ ReconcileUtils .serverSideApply (context , newConfigMap );
12288 }
12389 if (updateStatus ) {
12490 var statusUpdateResource = new TestCustomResource ();
@@ -129,11 +95,49 @@ public UpdateControl<TestCustomResource> reconcile(
12995 .build ());
13096 resource .setStatus (new TestCustomResourceStatus ());
13197 resource .getStatus ().setConfigMapStatus ("ConfigMap Ready" );
98+ log .info ("Patching status" );
13299 return UpdateControl .patchStatus (resource );
133100 }
134101 return UpdateControl .noUpdate ();
135102 }
136103
104+ @ Override
105+ public DeleteControl cleanup (TestCustomResource resource , Context <TestCustomResource > context ) {
106+ numberOfCleanupExecutions .incrementAndGet ();
107+
108+ var statusDetail =
109+ context
110+ .getClient ()
111+ .configMaps ()
112+ .inNamespace (resource .getMetadata ().getNamespace ())
113+ .withName (resource .getSpec ().getConfigMapName ())
114+ .delete ();
115+
116+ if (statusDetail .size () == 1 && statusDetail .get (0 ).getCauses ().isEmpty ()) {
117+ log .info (
118+ "Deleted ConfigMap {} for resource: {}" ,
119+ resource .getSpec ().getConfigMapName (),
120+ resource .getMetadata ().getName ());
121+ } else {
122+ log .error (
123+ "Failed to delete ConfigMap {} for resource: {}" ,
124+ resource .getSpec ().getConfigMapName (),
125+ resource .getMetadata ().getName ());
126+ }
127+ return DeleteControl .defaultDelete ();
128+ }
129+
130+ @ Override
131+ public List <EventSource <?, TestCustomResource >> prepareEventSources (
132+ EventSourceContext <TestCustomResource > context ) {
133+ InformerEventSource <ConfigMap , TestCustomResource > es =
134+ new InformerEventSource <>(
135+ InformerEventSourceConfiguration .from (ConfigMap .class , TestCustomResource .class )
136+ .build (),
137+ context );
138+ return List .of (es );
139+ }
140+
137141 private Map <String , String > configMapData (TestCustomResource resource ) {
138142 Map <String , String > data = new HashMap <>();
139143 data .put (resource .getSpec ().getKey (), resource .getSpec ().getValue ());
0 commit comments