Skip to content

Commit a499e5c

Browse files
authored
Secondary resource access with Optional (#782)
1 parent db359ad commit a499e5c

File tree

5 files changed

+29
-25
lines changed

5 files changed

+29
-25
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ public interface Context {
66

77
Optional<RetryInfo> getRetryInfo();
88

9-
default <T> T getSecondaryResource(Class<T> expectedType) {
9+
default <T> Optional<T> getSecondaryResource(Class<T> expectedType) {
1010
return getSecondaryResource(expectedType, null);
1111
}
1212

13-
<T> T getSecondaryResource(Class<T> expectedType, String eventSourceName);
13+
<T> Optional<T> getSecondaryResource(Class<T> expectedType, String eventSourceName);
1414
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ public Optional<RetryInfo> getRetryInfo() {
2323
}
2424

2525
@Override
26-
public <T> T getSecondaryResource(Class<T> expectedType, String eventSourceName) {
26+
public <T> Optional<T> getSecondaryResource(Class<T> expectedType, String eventSourceName) {
2727
final var eventSource =
2828
controller.getEventSourceManager().getResourceEventSourceFor(expectedType, eventSourceName);
29-
return eventSource.map(es -> es.getAssociated(primaryResource)).orElse(null);
29+
return eventSource.map(es -> es.getAssociated(primaryResource));
3030
}
3131
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/informereventsource/InformerEventSourceTestCustomReconciler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ public UpdateControl<InformerEventSourceTestCustomResource> reconcile(
5151

5252
// Reading the config map from the informer not from the API
5353
// name of the config map same as custom resource for sake of simplicity
54-
ConfigMap configMap = context.getSecondaryResource(ConfigMap.class);
54+
ConfigMap configMap = context.getSecondaryResource(ConfigMap.class)
55+
.orElseThrow(() -> new IllegalStateException("Config map should be present."));
5556

5657
String targetStatus = configMap.getData().get(TARGET_CONFIG_MAP_KEY);
5758
LOGGER.debug("Setting target status for CR: {}", targetStatus);

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

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@
1616
import io.fabric8.kubernetes.client.KubernetesClient;
1717
import io.fabric8.kubernetes.client.informers.SharedIndexInformer;
1818
import io.fabric8.kubernetes.client.utils.Serialization;
19-
import io.javaoperatorsdk.operator.api.reconciler.*;
19+
import io.javaoperatorsdk.operator.api.reconciler.Context;
20+
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
21+
import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializationContext;
22+
import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
23+
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
24+
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
2025
import io.javaoperatorsdk.operator.processing.event.ResourceID;
2126
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
2227
import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
@@ -63,19 +68,18 @@ public UpdateControl<Tomcat> reconcile(Tomcat tomcat, Context context) {
6368
createOrUpdateDeployment(tomcat);
6469
createOrUpdateService(tomcat);
6570

66-
Deployment deployment = context.getSecondaryResource(Deployment.class);
67-
68-
if (deployment != null) {
69-
Tomcat updatedTomcat =
70-
updateTomcatStatus(tomcat, deployment);
71-
log.info(
72-
"Updating status of Tomcat {} in namespace {} to {} ready replicas",
73-
tomcat.getMetadata().getName(),
74-
tomcat.getMetadata().getNamespace(),
75-
tomcat.getStatus().getReadyReplicas());
76-
return UpdateControl.updateStatus(updatedTomcat);
77-
}
78-
return UpdateControl.noUpdate();
71+
return context.getSecondaryResource(Deployment.class)
72+
.map(deployment -> {
73+
Tomcat updatedTomcat =
74+
updateTomcatStatus(tomcat, deployment);
75+
log.info(
76+
"Updating status of Tomcat {} in namespace {} to {} ready replicas",
77+
tomcat.getMetadata().getName(),
78+
tomcat.getMetadata().getNamespace(),
79+
tomcat.getStatus().getReadyReplicas());
80+
return UpdateControl.updateStatus(updatedTomcat);
81+
})
82+
.orElse(UpdateControl.noUpdate());
7983
}
8084

8185
private Tomcat updateTomcatStatus(Tomcat tomcat, Deployment deployment) {

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,11 @@ public UpdateControl<Webapp> reconcile(Webapp webapp, Context context) {
7070
return UpdateControl.noUpdate();
7171
}
7272

73-
Tomcat tomcat = context.getSecondaryResource(Tomcat.class);
74-
if (tomcat == null) {
75-
throw new IllegalStateException("Cannot find Tomcat " + webapp.getSpec().getTomcat()
76-
+ " for Webapp " + webapp.getMetadata().getName() + " in namespace "
77-
+ webapp.getMetadata().getNamespace());
78-
}
73+
Tomcat tomcat = context.getSecondaryResource(Tomcat.class)
74+
.orElseThrow(
75+
() -> new IllegalStateException("Cannot find Tomcat " + webapp.getSpec().getTomcat()
76+
+ " for Webapp " + webapp.getMetadata().getName() + " in namespace "
77+
+ webapp.getMetadata().getNamespace()));
7978

8079
if (tomcat.getStatus() != null
8180
&& Objects.equals(tomcat.getSpec().getReplicas(), tomcat.getStatus().getReadyReplicas())) {

0 commit comments

Comments
 (0)