Skip to content

Commit 9b9de3e

Browse files
authored
refactor: tomcat example improvements (#735)
1 parent a01b7f8 commit 9b9de3e

File tree

3 files changed

+16
-40
lines changed

3 files changed

+16
-40
lines changed

sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,21 @@
1313
import io.fabric8.kubernetes.api.model.apps.Deployment;
1414
import io.fabric8.kubernetes.api.model.apps.DeploymentStatus;
1515
import io.fabric8.kubernetes.client.KubernetesClient;
16-
import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
17-
import io.fabric8.kubernetes.client.dsl.ServiceResource;
1816
import io.fabric8.kubernetes.client.informers.SharedIndexInformer;
1917
import io.fabric8.kubernetes.client.utils.Serialization;
20-
import io.javaoperatorsdk.operator.api.*;
2118
import io.javaoperatorsdk.operator.api.reconciler.*;
2219
import io.javaoperatorsdk.operator.processing.event.ResourceID;
2320
import io.javaoperatorsdk.operator.processing.event.source.EventSourceRegistry;
2421
import io.javaoperatorsdk.operator.processing.event.source.InformerEventSource;
2522

23+
import static io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration.NO_FINALIZER;
2624
import static java.util.Collections.EMPTY_SET;
2725

2826
/**
2927
* Runs a specified number of Tomcat app server Pods. It uses a Deployment to create the Pods. Also
3028
* creates a Service over which the Pods can be accessed.
3129
*/
32-
@ControllerConfiguration
30+
@ControllerConfiguration(finalizerName = NO_FINALIZER)
3331
public class TomcatReconciler implements Reconciler<Tomcat>, EventSourceInitializer<Tomcat> {
3432

3533
private final Logger log = LoggerFactory.getLogger(getClass());
@@ -81,13 +79,6 @@ public UpdateControl<Tomcat> reconcile(Tomcat tomcat, Context context) {
8179
return UpdateControl.noUpdate();
8280
}
8381

84-
@Override
85-
public DeleteControl cleanup(Tomcat tomcat, Context context) {
86-
deleteDeployment(tomcat);
87-
deleteService(tomcat);
88-
return DeleteControl.defaultDelete();
89-
}
90-
9182
private Tomcat updateTomcatStatus(Tomcat tomcat, Deployment deployment) {
9283
DeploymentStatus deploymentStatus =
9384
Objects.requireNonNullElse(deployment.getStatus(), new DeploymentStatus());
@@ -156,41 +147,18 @@ private void createOrUpdateDeployment(Tomcat tomcat) {
156147
}
157148
}
158149

159-
private void deleteDeployment(Tomcat tomcat) {
160-
log.info("Deleting Deployment {}", tomcat.getMetadata().getName());
161-
RollableScalableResource<Deployment> deployment =
162-
kubernetesClient
163-
.apps()
164-
.deployments()
165-
.inNamespace(tomcat.getMetadata().getNamespace())
166-
.withName(tomcat.getMetadata().getName());
167-
if (deployment.get() != null) {
168-
deployment.delete();
169-
}
170-
}
171-
172150
private void createOrUpdateService(Tomcat tomcat) {
173151
Service service = loadYaml(Service.class, "service.yaml");
174152
service.getMetadata().setName(tomcat.getMetadata().getName());
175153
String ns = tomcat.getMetadata().getNamespace();
176154
service.getMetadata().setNamespace(ns);
155+
service.getMetadata().getOwnerReferences().get(0).setName(tomcat.getMetadata().getName());
156+
service.getMetadata().getOwnerReferences().get(0).setUid(tomcat.getMetadata().getUid());
177157
service.getSpec().getSelector().put("app", tomcat.getMetadata().getName());
178158
log.info("Creating or updating Service {} in {}", service.getMetadata().getName(), ns);
179159
kubernetesClient.services().inNamespace(ns).createOrReplace(service);
180160
}
181161

182-
private void deleteService(Tomcat tomcat) {
183-
log.info("Deleting Service {}", tomcat.getMetadata().getName());
184-
ServiceResource<Service> service =
185-
kubernetesClient
186-
.services()
187-
.inNamespace(tomcat.getMetadata().getNamespace())
188-
.withName(tomcat.getMetadata().getName());
189-
if (service.get() != null) {
190-
service.delete();
191-
}
192-
}
193-
194162
private <T> T loadYaml(Class<T> clazz, String yaml) {
195163
try (InputStream is = getClass().getResourceAsStream(yaml)) {
196164
return Serialization.unmarshal(is, clazz);

sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.fabric8.kubernetes.client.KubernetesClient;
1818
import io.fabric8.kubernetes.client.dsl.ExecListener;
1919
import io.fabric8.kubernetes.client.dsl.ExecWatch;
20+
import io.fabric8.kubernetes.client.informers.cache.Cache;
2021
import io.javaoperatorsdk.operator.api.reconciler.Context;
2122
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
2223
import io.javaoperatorsdk.operator.api.reconciler.DeleteControl;
@@ -40,9 +41,11 @@ public WebappReconciler(KubernetesClient kubernetesClient) {
4041
this.kubernetesClient = kubernetesClient;
4142
}
4243

44+
private InformerEventSource<Tomcat> tomcatEventSource;
45+
4346
@Override
4447
public void prepareEventSources(EventSourceRegistry<Webapp> eventSourceRegistry) {
45-
InformerEventSource<Tomcat> tomcatEventSource =
48+
tomcatEventSource =
4649
new InformerEventSource<>(kubernetesClient, Tomcat.class, t -> {
4750
// To create an event to a related WebApp resource and trigger the reconciliation
4851
// we need to find which WebApp this Tomcat custom resource is related to.
@@ -67,9 +70,9 @@ public UpdateControl<Webapp> reconcile(Webapp webapp, Context context) {
6770
return UpdateControl.noUpdate();
6871
}
6972

70-
var tomcatClient = kubernetesClient.customResources(Tomcat.class);
71-
Tomcat tomcat = tomcatClient.inNamespace(webapp.getMetadata().getNamespace())
72-
.withName(webapp.getSpec().getTomcat()).get();
73+
Tomcat tomcat = tomcatEventSource.getStore()
74+
.getByKey(Cache.namespaceKeyFunc(webapp.getMetadata().getNamespace(),
75+
webapp.getSpec().getTomcat()));
7376
if (tomcat == null) {
7477
throw new IllegalStateException("Cannot find Tomcat " + webapp.getSpec().getTomcat()
7578
+ " for Webapp " + webapp.getMetadata().getName() + " in namespace "

sample-operators/tomcat-operator/src/main/resources/io/javaoperatorsdk/operator/sample/service.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ apiVersion: v1
22
kind: Service
33
metadata:
44
name: ""
5+
ownerReferences: # used for finding which Tomcat does this Deployment belong to
6+
- apiVersion: apps/v1
7+
kind: Tomcat
8+
name: ""
9+
uid: ""
510
spec:
611
selector:
712
app: ""

0 commit comments

Comments
 (0)