Skip to content

feat: provide KubernetesClient access from context #796

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,24 +1,27 @@
package io.javaoperatorsdk.operator.api.reconciler;

import io.fabric8.kubernetes.api.model.HasMetadata;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.javaoperatorsdk.operator.api.config.ConfigurationService;
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
import io.javaoperatorsdk.operator.processing.event.source.ResourceCache;

/**
* Contextual information made available to prepare event sources.
* Contextual information made available to event sources.
*
* @param <P> the type associated with the primary resource that is handled by your reconciler
*/
public class EventSourceInitializationContext<P extends HasMetadata> {
public class EventSourceContext<P extends HasMetadata> {

private final ResourceCache<P> primaryCache;
private final ConfigurationService configurationService;
private final KubernetesClient client;

public EventSourceInitializationContext(ResourceCache<P> primaryCache,
ConfigurationService configurationService) {
public EventSourceContext(ResourceCache<P> primaryCache,
ConfigurationService configurationService, KubernetesClient client) {
this.primaryCache = primaryCache;
this.configurationService = configurationService;
this.client = client;
}

/**
Expand All @@ -42,4 +45,15 @@ public ResourceCache<P> getPrimaryCache() {
public ConfigurationService getConfigurationService() {
return configurationService;
}

/**
* Provides access to the {@link KubernetesClient} used by the current
* {@link io.javaoperatorsdk.operator.Operator} instance.
*
* @return the {@link KubernetesClient} used by the current
* {@link io.javaoperatorsdk.operator.Operator} instance.
*/
public KubernetesClient getClient() {
return client;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ public interface EventSourceInitializer<P extends HasMetadata> {
/**
* Prepares a list of {@link EventSource} implementations to be registered by the SDK.
*
* @param context a {@link EventSourceInitializationContext} providing access to information
* useful to event sources
* @param context a {@link EventSourceContext} providing access to information useful to event
* sources
*/
List<EventSource> prepareEventSources(EventSourceInitializationContext<P> context);
List<EventSource> prepareEventSources(EventSourceContext<P> context);

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import io.javaoperatorsdk.operator.api.monitoring.Metrics.ControllerExecution;
import io.javaoperatorsdk.operator.api.reconciler.Context;
import io.javaoperatorsdk.operator.api.reconciler.DeleteControl;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializationContext;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
Expand Down Expand Up @@ -108,7 +108,7 @@ private Metrics metrics() {
}

@Override
public List<EventSource> prepareEventSources(EventSourceInitializationContext<R> context) {
public List<EventSource> prepareEventSources(EventSourceContext<R> context) {
throw new UnsupportedOperationException("This method should never be called directly");
}

Expand Down Expand Up @@ -182,9 +182,9 @@ public void start() throws OperatorException {
eventSourceManager = new EventSourceManager<>(this);
if (reconciler instanceof EventSourceInitializer) {
((EventSourceInitializer<R>) reconciler)
.prepareEventSources(new EventSourceInitializationContext<>(
.prepareEventSources(new EventSourceContext<>(
eventSourceManager.getControllerResourceEventSource().getResourceCache(),
configurationService()))
configurationService(), kubernetesClient))
.forEach(eventSourceManager::registerEventSource);
}
if (failOnMissingCurrentNS()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import io.fabric8.kubernetes.client.KubernetesClient;
import io.javaoperatorsdk.operator.api.reconciler.Context;
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializationContext;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
Expand Down Expand Up @@ -39,7 +39,7 @@ public class InformerEventSourceTestCustomReconciler implements

@Override
public List<EventSource> prepareEventSources(
EventSourceInitializationContext<InformerEventSourceTestCustomResource> context) {
EventSourceContext<InformerEventSourceTestCustomResource> context) {
return List.of(new InformerEventSource<>(kubernetesClient, ConfigMap.class,
Mappers.fromAnnotation(RELATED_RESOURCE_NAME)));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public MySQLSchemaReconciler(KubernetesClient kubernetesClient, MySQLDbConfig my

@Override
public List<EventSource> prepareEventSources(
EventSourceInitializationContext<MySQLSchema> context) {
EventSourceContext<MySQLSchema> context) {
return List.of(new PerResourcePollingEventSource<>(
new SchemaPollingResourceSupplier(mysqlDbConfig), context.getPrimaryCache(), POLL_PERIOD,
Schema.class));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import io.fabric8.kubernetes.client.utils.Serialization;
import io.javaoperatorsdk.operator.api.reconciler.Context;
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializationContext;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
Expand All @@ -45,7 +45,7 @@ public TomcatReconciler(KubernetesClient client) {
}

@Override
public List<EventSource> prepareEventSources(EventSourceInitializationContext<Tomcat> context) {
public List<EventSource> prepareEventSources(EventSourceContext<Tomcat> context) {
SharedIndexInformer<Deployment> deploymentInformer =
kubernetesClient.apps().deployments().inAnyNamespace()
.withLabel("app.kubernetes.io/managed-by", "tomcat-operator")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,14 @@
import io.javaoperatorsdk.operator.api.reconciler.Context;
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
import io.javaoperatorsdk.operator.api.reconciler.DeleteControl;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializationContext;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
import io.javaoperatorsdk.operator.processing.event.ResourceID;
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;

import okhttp3.Response;

@ControllerConfiguration
public class WebappReconciler implements Reconciler<Webapp>, EventSourceInitializer<Webapp> {

Expand All @@ -42,7 +40,7 @@ public WebappReconciler(KubernetesClient kubernetesClient) {
}

@Override
public List<EventSource> prepareEventSources(EventSourceInitializationContext<Webapp> context) {
public List<EventSource> prepareEventSources(EventSourceContext<Webapp> context) {
return List.of(new InformerEventSource<>(
kubernetesClient, Tomcat.class, t -> {
// To create an event to a related WebApp resource and trigger the reconciliation
Expand Down