Skip to content

Commit ec48dec

Browse files
committed
refactor: remove now unneeded KubernetesClientAware (#2084)
1 parent cb18124 commit ec48dec

File tree

30 files changed

+80
-355
lines changed

30 files changed

+80
-355
lines changed

caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/AbstractTestReconciler.java

+11-23
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@
66
import org.slf4j.Logger;
77
import org.slf4j.LoggerFactory;
88

9-
import io.fabric8.kubernetes.api.model.*;
9+
import io.fabric8.kubernetes.api.model.ConfigMap;
10+
import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
11+
import io.fabric8.kubernetes.api.model.HasMetadata;
12+
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
1013
import io.fabric8.kubernetes.client.CustomResource;
1114
import io.fabric8.kubernetes.client.KubernetesClient;
1215
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
1316
import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
1417
import io.javaoperatorsdk.operator.api.reconciler.*;
15-
import io.javaoperatorsdk.operator.api.reconciler.Context;
16-
import io.javaoperatorsdk.operator.junit.KubernetesClientAware;
1718
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
1819
import io.javaoperatorsdk.operator.processing.event.source.cache.BoundedItemStore;
1920
import io.javaoperatorsdk.operator.processing.event.source.cache.CaffeineBoundedItemStores;
@@ -27,38 +28,35 @@
2728
import com.github.benmanes.caffeine.cache.Caffeine;
2829

2930
public abstract class AbstractTestReconciler<P extends CustomResource<BoundedCacheTestSpec, BoundedCacheTestStatus>>
30-
implements KubernetesClientAware, Reconciler<P>,
31-
EventSourceInitializer<P> {
31+
implements Reconciler<P>, EventSourceInitializer<P> {
3232

3333
private static final Logger log =
3434
LoggerFactory.getLogger(BoundedCacheClusterScopeTestReconciler.class);
3535

3636
public static final String DATA_KEY = "dataKey";
3737

38-
protected KubernetesClient client;
39-
4038
@Override
4139
public UpdateControl<P> reconcile(
4240
P resource,
4341
Context<P> context) {
4442
var maybeConfigMap = context.getSecondaryResource(ConfigMap.class);
4543
maybeConfigMap.ifPresentOrElse(
46-
cm -> updateConfigMapIfNeeded(cm, resource),
47-
() -> createConfigMap(resource));
44+
cm -> updateConfigMapIfNeeded(cm, resource, context),
45+
() -> createConfigMap(resource, context));
4846
ensureStatus(resource);
4947
log.info("Reconciled: {}", resource.getMetadata().getName());
5048
return UpdateControl.patchStatus(resource);
5149
}
5250

53-
protected void updateConfigMapIfNeeded(ConfigMap cm, P resource) {
51+
protected void updateConfigMapIfNeeded(ConfigMap cm, P resource, Context<P> context) {
5452
var data = cm.getData().get(DATA_KEY);
5553
if (data == null || data.equals(resource.getSpec().getData())) {
5654
cm.setData(Map.of(DATA_KEY, resource.getSpec().getData()));
57-
client.configMaps().resource(cm).replace();
55+
context.getClient().configMaps().resource(cm).replace();
5856
}
5957
}
6058

61-
protected void createConfigMap(P resource) {
59+
protected void createConfigMap(P resource, Context<P> context) {
6260
var cm = new ConfigMapBuilder()
6361
.withMetadata(new ObjectMetaBuilder()
6462
.withName(resource.getMetadata().getName())
@@ -67,17 +65,7 @@ protected void createConfigMap(P resource) {
6765
.withData(Map.of(DATA_KEY, resource.getSpec().getData()))
6866
.build();
6967
cm.addOwnerReference(resource);
70-
client.configMaps().resource(cm).create();
71-
}
72-
73-
@Override
74-
public KubernetesClient getKubernetesClient() {
75-
return client;
76-
}
77-
78-
@Override
79-
public void setKubernetesClient(KubernetesClient kubernetesClient) {
80-
this.client = kubernetesClient;
68+
context.getClient().configMaps().resource(cm).create();
8169
}
8270

8371
@Override

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/KubernetesClientAware.java

+6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
package io.javaoperatorsdk.operator.api.reconciler.dependent.managed;
22

33
import io.fabric8.kubernetes.client.KubernetesClient;
4+
import io.javaoperatorsdk.operator.api.reconciler.Context;
45

6+
/**
7+
* @deprecated It shouldn't be needed to pass a {@link KubernetesClient} instance anymore as the
8+
* client should be accessed via {@link Context#getClient()} instead.
9+
*/
10+
@Deprecated(since = "4.5.0", forRemoval = true)
511
public interface KubernetesClientAware {
612
void setKubernetesClient(KubernetesClient kubernetesClient);
713

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractExternalDependentResource.java

+3-20
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.javaoperatorsdk.operator.processing.dependent;
22

33
import io.fabric8.kubernetes.api.model.HasMetadata;
4-
import io.fabric8.kubernetes.client.KubernetesClient;
54
import io.javaoperatorsdk.operator.api.reconciler.Context;
65
import io.javaoperatorsdk.operator.api.reconciler.dependent.RecentOperationCacheFiller;
76
import io.javaoperatorsdk.operator.processing.event.EventSourceRetriever;
@@ -18,7 +17,6 @@ public abstract class AbstractExternalDependentResource<R, P extends HasMetadata
1817
@SuppressWarnings("rawtypes")
1918
private DependentResourceWithExplicitState dependentResourceWithExplicitState;
2019
private InformerEventSource<?, P> externalStateEventSource;
21-
private KubernetesClient kubernetesClient;
2220

2321
@SuppressWarnings("unchecked")
2422
protected AbstractExternalDependentResource(Class<R> resourceType) {
@@ -65,14 +63,13 @@ public void delete(P primary, Context<P> context) {
6563
@SuppressWarnings({"unchecked", "unused"})
6664
private void handleExplicitStateDelete(P primary, R secondary, Context<P> context) {
6765
var res = dependentResourceWithExplicitState.stateResource(primary, secondary);
68-
dependentResourceWithExplicitState.getKubernetesClient().resource(res).delete();
66+
context.getClient().resource(res).delete();
6967
}
7068

7169
@SuppressWarnings({"rawtypes", "unchecked", "unused"})
7270
protected void handleExplicitStateCreation(P primary, R created, Context<P> context) {
7371
var resource = dependentResourceWithExplicitState.stateResource(primary, created);
74-
var stateResource =
75-
dependentResourceWithExplicitState.getKubernetesClient().resource(resource).create();
72+
var stateResource = context.getClient().resource(resource).create();
7673
if (externalStateEventSource != null) {
7774
((RecentOperationCacheFiller) externalStateEventSource)
7875
.handleRecentResourceCreate(ResourceID.fromResource(primary), stateResource);
@@ -84,7 +81,7 @@ protected void handleExplicitStateCreation(P primary, R created, Context<P> cont
8481
public void deleteTargetResource(P primary, R resource, String key,
8582
Context<P> context) {
8683
if (isDependentResourceWithExplicitState) {
87-
getKubernetesClient()
84+
context.getClient()
8885
.resource(dependentResourceWithExplicitState.stateResource(primary, resource))
8986
.delete();
9087
}
@@ -100,18 +97,4 @@ public void handleDeleteTargetResource(P primary, R resource, String key,
10097
protected InformerEventSource getExternalStateEventSource() {
10198
return externalStateEventSource;
10299
}
103-
104-
/**
105-
* It's here just to manage the explicit state resource in case the dependent resource implements
106-
* {@link RecentOperationCacheFiller}.
107-
*
108-
* @return kubernetes client.
109-
*/
110-
public KubernetesClient getKubernetesClient() {
111-
return kubernetesClient;
112-
}
113-
114-
public void setKubernetesClient(KubernetesClient kubernetesClient) {
115-
this.kubernetesClient = kubernetesClient;
116-
}
117100
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/DependentResourceWithExplicitState.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import io.fabric8.kubernetes.api.model.HasMetadata;
66
import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter;
7-
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.KubernetesClientAware;
87

98
/**
109
* Handles external resources where in order to address the resource additional information or
@@ -14,7 +13,7 @@
1413
* for a resource that extends {@link AbstractExternalDependentResource}.
1514
*/
1615
public interface DependentResourceWithExplicitState<R, P extends HasMetadata, S extends HasMetadata>
17-
extends Creator<R, P>, Deleter<P>, KubernetesClientAware {
16+
extends Creator<R, P>, Deleter<P> {
1817

1918
/**
2019
* Only needs to be implemented if multiple event sources are present for the target resource

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java

+9-24
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import org.slf4j.LoggerFactory;
99

1010
import io.fabric8.kubernetes.api.model.HasMetadata;
11-
import io.fabric8.kubernetes.client.KubernetesClient;
1211
import io.fabric8.kubernetes.client.dsl.Resource;
1312
import io.javaoperatorsdk.operator.OperatorException;
1413
import io.javaoperatorsdk.operator.api.config.dependent.Configured;
@@ -19,7 +18,6 @@
1918
import io.javaoperatorsdk.operator.api.reconciler.Ignore;
2019
import io.javaoperatorsdk.operator.api.reconciler.dependent.GarbageCollected;
2120
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.DependentResourceConfigurator;
22-
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.KubernetesClientAware;
2321
import io.javaoperatorsdk.operator.processing.dependent.AbstractEventSourceHolderDependentResource;
2422
import io.javaoperatorsdk.operator.processing.dependent.Matcher.Result;
2523
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.updatermatcher.GenericResourceUpdaterMatcher;
@@ -33,17 +31,14 @@
3331
converter = KubernetesDependentConverter.class)
3432
public abstract class KubernetesDependentResource<R extends HasMetadata, P extends HasMetadata>
3533
extends AbstractEventSourceHolderDependentResource<R, P, InformerEventSource<R, P>>
36-
implements KubernetesClientAware,
37-
DependentResourceConfigurator<KubernetesDependentResourceConfig<R>> {
34+
implements DependentResourceConfigurator<KubernetesDependentResourceConfig<R>> {
3835

3936
private static final Logger log = LoggerFactory.getLogger(KubernetesDependentResource.class);
40-
41-
protected KubernetesClient client;
4237
private final ResourceUpdaterMatcher<R> updaterMatcher;
4338
private final boolean garbageCollected = this instanceof GarbageCollected;
4439
private KubernetesDependentResourceConfig<R> kubernetesDependentResourceConfig;
4540

46-
private boolean usingCustomResourceUpdateMatcher;
41+
private final boolean usingCustomResourceUpdateMatcher;
4742

4843
@SuppressWarnings("unchecked")
4944
public KubernetesDependentResource(Class<R> resourceType) {
@@ -117,7 +112,7 @@ public R create(R desired, P primary, Context<P> context) {
117112
}
118113
}
119114
addMetadata(false, null, desired, primary, context);
120-
final var resource = prepare(desired, primary, "Creating");
115+
final var resource = prepare(context, desired, primary, "Creating");
121116
return useSSA(context)
122117
? resource
123118
.fieldManager(context.getControllerConfiguration().fieldManager())
@@ -134,12 +129,12 @@ public R update(R actual, R desired, P primary, Context<P> context) {
134129
R updatedResource;
135130
addMetadata(false, actual, desired, primary, context);
136131
if (useSSA(context)) {
137-
updatedResource = prepare(desired, primary, "Updating")
132+
updatedResource = prepare(context, desired, primary, "Updating")
138133
.fieldManager(context.getControllerConfiguration().fieldManager())
139134
.forceConflicts().serverSideApply();
140135
} else {
141136
var updatedActual = updaterMatcher.updateResource(actual, desired, context);
142-
updatedResource = prepare(updatedActual, primary, "Updating").update();
137+
updatedResource = prepare(context, updatedActual, primary, "Updating").update();
143138
}
144139
log.debug("Resource version after update: {}",
145140
updatedResource.getMetadata().getResourceVersion());
@@ -216,23 +211,23 @@ private boolean usePreviousAnnotation(Context<P> context) {
216211
@Override
217212
protected void handleDelete(P primary, R secondary, Context<P> context) {
218213
if (secondary != null) {
219-
client.resource(secondary).delete();
214+
context.getClient().resource(secondary).delete();
220215
}
221216
}
222217

223218
@SuppressWarnings("unused")
224219
public void deleteTargetResource(P primary, R resource, String key, Context<P> context) {
225-
client.resource(resource).delete();
220+
context.getClient().resource(resource).delete();
226221
}
227222

228223
@SuppressWarnings("unused")
229-
protected Resource<R> prepare(R desired, P primary, String actionName) {
224+
protected Resource<R> prepare(Context<P> context, R desired, P primary, String actionName) {
230225
log.debug("{} target resource with type: {}, with id: {}",
231226
actionName,
232227
desired.getClass(),
233228
ResourceID.fromResource(desired));
234229

235-
return client.resource(desired);
230+
return context.getClient().resource(desired);
236231
}
237232

238233
protected void addReferenceHandlingMetadata(R desired, P primary) {
@@ -292,16 +287,6 @@ protected boolean addOwnerReference() {
292287
return garbageCollected;
293288
}
294289

295-
@Override
296-
public void setKubernetesClient(KubernetesClient kubernetesClient) {
297-
this.client = kubernetesClient;
298-
}
299-
300-
@Override
301-
public KubernetesClient getKubernetesClient() {
302-
return client;
303-
}
304-
305290
@Override
306291
protected R desired(P primary, Context<P> context) {
307292
return super.desired(primary, context);

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/ManagedInformerEventSource.java

-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ public abstract class ManagedInformerEventSource<R extends HasMetadata, P extend
3737

3838
private static final Logger log = LoggerFactory.getLogger(ManagedInformerEventSource.class);
3939
private final InformerManager<R, C> cache;
40-
4140
protected TemporaryResourceCache<R> temporaryResourceCache;
4241
protected MixedOperation<R, KubernetesResourceList<R>, Resource<R>> client;
4342

Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
package io.javaoperatorsdk.operator.junit;
22

33
import io.fabric8.kubernetes.client.KubernetesClient;
4+
import io.javaoperatorsdk.operator.api.reconciler.Context;
45

6+
/**
7+
* @deprecated It shouldn't be needed to pass a {@link KubernetesClient} instance to the reconciler
8+
* anymore as the client should be accessed via {@link Context#getClient()} instead.
9+
*/
10+
@Deprecated(since = "4.5.0", forRemoval = true)
511
public interface KubernetesClientAware extends HasKubernetesClient {
612
void setKubernetesClient(KubernetesClient kubernetesClient);
713
}

operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/LocallyRunOperatorExtension.java

-4
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,6 @@ protected void before(ExtensionContext context) {
152152
applyCrd(config.getResourceTypeName());
153153
}
154154

155-
if (ref.reconciler instanceof KubernetesClientAware) {
156-
((KubernetesClientAware) ref.reconciler).setKubernetesClient(kubernetesClient);
157-
}
158-
159155
var registeredController = this.operator.register(ref.reconciler, oconfig.build());
160156
registeredControllers.put(ref.reconciler, registeredController);
161157
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/DependentReInitializationIT.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ private static void startEndStopOperator(KubernetesClient client,
3131
Operator o1 = new Operator(o -> o
3232
.withCloseClientOnStop(false)
3333
.withKubernetesClient(client));
34-
o1.register(new DependentReInitializationReconciler(dependent, client));
34+
o1.register(new DependentReInitializationReconciler(dependent));
3535
o1.start();
3636
o1.stop();
3737
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/DependentSSAMigrationIT.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -143,10 +143,9 @@ private DependnetSSACustomResource reconcileWithLegacyOperator(Operator legacyOp
143143

144144
private Operator createOperator(KubernetesClient client, boolean legacyDependentHandling,
145145
String fieldManager) {
146-
Operator operator = new Operator(client,
147-
o -> o.withCloseClientOnStop(false));
146+
Operator operator =
147+
new Operator(o -> o.withKubernetesClient(client).withCloseClientOnStop(false));
148148
var reconciler = new DependentSSAReconciler(!legacyDependentHandling);
149-
reconciler.setKubernetesClient(client);
150149
operator.register(reconciler, o -> {
151150
o.settingNamespace(namespace);
152151
if (fieldManager != null) {

operator-framework/src/test/java/io/javaoperatorsdk/operator/OperatorRestartIT.java

+5-10
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
11
package io.javaoperatorsdk.operator;
22

3-
import org.junit.jupiter.api.AfterEach;
4-
import org.junit.jupiter.api.BeforeAll;
5-
import org.junit.jupiter.api.BeforeEach;
6-
import org.junit.jupiter.api.Order;
7-
import org.junit.jupiter.api.Test;
3+
import org.junit.jupiter.api.*;
84

95
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
10-
import io.fabric8.kubernetes.client.KubernetesClient;
11-
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
126
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
137
import io.javaoperatorsdk.operator.sample.restart.RestartTestCustomResource;
148
import io.javaoperatorsdk.operator.sample.restart.RestartTestReconciler;
@@ -17,14 +11,15 @@
1711
import static org.awaitility.Awaitility.await;
1812

1913
class OperatorRestartIT {
20-
private final static KubernetesClient client = new KubernetesClientBuilder().build();
14+
2115
private final static Operator operator = new Operator(o -> o.withCloseClientOnStop(false));
2216
private final static RestartTestReconciler reconciler = new RestartTestReconciler();
2317
private static int reconcileNumberBeforeStop = 0;
2418

2519
@BeforeAll
2620
static void registerReconciler() {
27-
LocallyRunOperatorExtension.applyCrd(RestartTestCustomResource.class, client);
21+
LocallyRunOperatorExtension.applyCrd(RestartTestCustomResource.class,
22+
operator.getKubernetesClient());
2823
operator.register(reconciler);
2924
}
3025

@@ -41,7 +36,7 @@ void stopOperator() {
4136
@Test
4237
@Order(1)
4338
void createResource() {
44-
client.resource(testCustomResource()).createOrReplace();
39+
operator.getKubernetesClient().resource(testCustomResource()).createOrReplace();
4540
await().untilAsserted(() -> assertThat(reconciler.getNumberOfExecutions()).isGreaterThan(0));
4641
reconcileNumberBeforeStop = reconciler.getNumberOfExecutions();
4742
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/ConfigMapDeleterBulkDependentResource.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public ConfigMap desired(BulkDependentTestCustomResource primary, String key,
5555
.withLabels(Map.of(LABEL_KEY, LABEL_VALUE))
5656
.build());
5757
configMap.setData(
58-
Map.of("number", "" + key, ADDITIONAL_DATA_KEY, primary.getSpec().getAdditionalData()));
58+
Map.of("number", key, ADDITIONAL_DATA_KEY, primary.getSpec().getAdditionalData()));
5959
return configMap;
6060
}
6161

0 commit comments

Comments
 (0)