Skip to content

Commit 7f6fdf9

Browse files
committed
refactor: return DependentResource.desired now returns Optional
1 parent 8aa7a89 commit 7f6fdf9

File tree

6 files changed

+26
-20
lines changed

6 files changed

+26
-20
lines changed

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.javaoperatorsdk.operator.api.reconciler.dependent;
22

3+
import java.util.Optional;
4+
35
import io.fabric8.kubernetes.api.model.HasMetadata;
46
import io.javaoperatorsdk.operator.api.config.Utils;
57
import io.javaoperatorsdk.operator.api.reconciler.Context;
@@ -19,23 +21,21 @@ default Class<R> resourceType() {
1921
default void delete(R fetched, P primary, Context context) {}
2022

2123
/**
22-
* todo: return Optional<R></R> instead?
23-
*
2424
* Computes the desired state of the dependent based on the state provided by the specified
2525
* primary resource.
2626
*
27-
* The default implementation returns {@code null} which corresponds to the case where the
27+
* The default implementation returns {@code empty} which corresponds to the case where the
2828
* associated dependent should never be created by the associated reconciler or that the global
2929
* state of the cluster doesn't allow for the resource to be created at this point.
3030
*
3131
* @param primary the primary resource associated with the reconciliation process
3232
* @param context the {@link Context} associated with the reconciliation process
3333
* @return an instance of the dependent resource matching the desired state specified by the
34-
* primary resource or {@code null} if the dependent shouldn't be created at this point
34+
* primary resource or {@code empty} if the dependent shouldn't be created at this point
3535
* (or ever)
3636
*/
37-
default R desired(P primary, Context context) {
38-
return null;
37+
default Optional<R> desired(P primary, Context context) {
38+
return Optional.empty();
3939
}
4040

4141
/**

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.javaoperatorsdk.operator.processing.dependent;
22

3+
import java.util.Optional;
4+
35
import org.slf4j.Logger;
46
import org.slf4j.LoggerFactory;
57

@@ -40,7 +42,7 @@ public boolean match(R actual, P primary, Context context) {
4042
}
4143

4244
@Override
43-
public R desired(P primary, Context context) {
45+
public Optional<R> desired(P primary, Context context) {
4446
return delegate.desired(primary, context);
4547
}
4648

@@ -91,9 +93,7 @@ public UpdateControl<P> reconcile(P resource, Context context) {
9193
var actual = getFor(resource, context);
9294
if (actual == null || !match(actual, resource, context)) {
9395
final var desired = desired(resource, context);
94-
if (desired != null) {
95-
createOrReplaceDependent(resource, desired, context);
96-
}
96+
desired.ifPresent(d -> createOrReplaceDependent(resource, d, context));
9797
}
9898
return UpdateControl.noUpdate();
9999
}

sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaReconciler.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ private static String encode(String value) {
5757
}
5858

5959
@Override
60-
public Secret desired(MySQLSchema schema, Context context) {
61-
return new SecretBuilder()
60+
public Optional<Secret> desired(MySQLSchema schema, Context context) {
61+
return Optional.of(new SecretBuilder()
6262
.withNewMetadata()
6363
.withName(context.getMandatory(MYSQL_SECRET_NAME, String.class))
6464
.withNamespace(schema.getMetadata().getNamespace())
@@ -67,10 +67,11 @@ public Secret desired(MySQLSchema schema, Context context) {
6767
context.getMandatory(MYSQL_SECRET_USERNAME, String.class)))
6868
.addToData("MYSQL_PASSWORD", encode(
6969
context.getMandatory(MYSQL_SECRET_PASSWORD, String.class)))
70-
.build();
70+
.build());
7171
}
7272
}
7373

74+
@SuppressWarnings("rawtypes")
7475
@Override
7576
public void injectInto(EventSourceContext context) {
7677
context.put(MYSQL_DB_CONFIG, mysqlDbConfig);

sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/SchemaDependentResource.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.sql.Connection;
44
import java.sql.DriverManager;
55
import java.sql.SQLException;
6+
import java.util.Optional;
67

78
import io.javaoperatorsdk.operator.api.reconciler.Context;
89
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
@@ -30,7 +31,7 @@ public EventSource initEventSource(EventSourceContext<MySQLSchema> context) {
3031
}
3132

3233
@Override
33-
public Schema desired(MySQLSchema primary, Context context) {
34+
public Optional<Schema> desired(MySQLSchema primary, Context context) {
3435
try (Connection connection = getConnection()) {
3536
final var schema = SchemaService.createSchemaAndRelatedUser(
3637
connection,
@@ -41,7 +42,7 @@ public Schema desired(MySQLSchema primary, Context context) {
4142

4243
// put the newly built schema in the context to let the reconciler know we just built it
4344
context.put(MySQLSchemaReconciler.BUILT_SCHEMA, schema);
44-
return schema;
45+
return Optional.of(schema);
4546
} catch (SQLException e) {
4647
MySQLSchemaReconciler.log.error("Error while creating Schema", e);
4748
throw new IllegalStateException(e);

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.javaoperatorsdk.operator.sample;
22

3+
import java.util.Optional;
4+
35
import io.fabric8.kubernetes.api.model.ObjectMeta;
46
import io.fabric8.kubernetes.api.model.apps.Deployment;
57
import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder;
@@ -12,7 +14,7 @@ public class DeploymentDependentResource
1214
implements DependentResource<Deployment, Tomcat> {
1315

1416
@Override
15-
public Deployment desired(Tomcat tomcat, Context context) {
17+
public Optional<Deployment> desired(Tomcat tomcat, Context context) {
1618
Deployment deployment = TomcatReconciler.loadYaml(Deployment.class, "deployment.yaml");
1719
final ObjectMeta tomcatMetadata = tomcat.getMetadata();
1820
final String tomcatName = tomcatMetadata.getName();
@@ -37,7 +39,7 @@ public Deployment desired(Tomcat tomcat, Context context) {
3739
.endTemplate()
3840
.endSpec()
3941
.build();
40-
return deployment;
42+
return Optional.of(deployment);
4143
}
4244

4345
private String tomcatImage(Tomcat tomcat) {
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.javaoperatorsdk.operator.sample;
22

3+
import java.util.Optional;
4+
35
import io.fabric8.kubernetes.api.model.ObjectMeta;
46
import io.fabric8.kubernetes.api.model.Service;
57
import io.fabric8.kubernetes.api.model.ServiceBuilder;
@@ -9,16 +11,16 @@
911
public class ServiceDependentResource implements DependentResource<Service, Tomcat> {
1012

1113
@Override
12-
public Service desired(Tomcat tomcat, Context context) {
14+
public Optional<Service> desired(Tomcat tomcat, Context context) {
1315
final ObjectMeta tomcatMetadata = tomcat.getMetadata();
14-
return new ServiceBuilder(TomcatReconciler.loadYaml(Service.class, "service.yaml"))
16+
return Optional.of(new ServiceBuilder(TomcatReconciler.loadYaml(Service.class, "service.yaml"))
1517
.editMetadata()
1618
.withName(tomcatMetadata.getName())
1719
.withNamespace(tomcatMetadata.getNamespace())
1820
.endMetadata()
1921
.editSpec()
2022
.addToSelector("app", tomcatMetadata.getName())
2123
.endSpec()
22-
.build();
24+
.build());
2325
}
2426
}

0 commit comments

Comments
 (0)