From d696820d2b3ee6b7992d51789d21b1fa42852e83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Wed, 24 Apr 2024 14:28:10 +0200 Subject: [PATCH 1/2] improve: samples correctly create status object for SSA MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- .../sample/MySQLSchemaReconciler.java | 16 +++++++++++---- .../operator/sample/TomcatReconciler.java | 14 +++++++++---- .../operator/sample/WebappReconciler.java | 20 +++++++++++++------ 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaReconciler.java b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaReconciler.java index f75ac32ee7..4a6f4f4d45 100644 --- a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaReconciler.java +++ b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaReconciler.java @@ -3,6 +3,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; import io.fabric8.kubernetes.api.model.Secret; import io.javaoperatorsdk.operator.api.reconciler.*; import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; @@ -33,10 +34,10 @@ public UpdateControl reconcile(MySQLSchema schema, Context { - updateStatusPojo(schema, s, secret.getMetadata().getName(), + var statusUpdateResource = createForStatusUpdate(schema, s, secret.getMetadata().getName(), decode(secret.getData().get(MYSQL_SECRET_USERNAME))); log.info("Schema {} created - updating CR status", s.getName()); - return UpdateControl.patchStatus(schema); + return UpdateControl.patchStatus(statusUpdateResource); }).orElseGet(UpdateControl::noUpdate); } @@ -54,8 +55,14 @@ public ErrorStatusUpdateControl updateErrorStatus(MySQLSchema schem } - private void updateStatusPojo(MySQLSchema mySQLSchema, Schema schema, String secretName, + private MySQLSchema createForStatusUpdate(MySQLSchema mySQLSchema, Schema schema, + String secretName, String userName) { + MySQLSchema res = new MySQLSchema(); + res.setMetadata(new ObjectMetaBuilder() + .withName(mySQLSchema.getMetadata().getName()) + .withNamespace(mySQLSchema.getMetadata().getNamespace()) + .build()); SchemaStatus status = new SchemaStatus(); status.setUrl( format( @@ -64,6 +71,7 @@ private void updateStatusPojo(MySQLSchema mySQLSchema, Schema schema, String sec status.setUserName(userName); status.setSecretName(secretName); status.setStatus("CREATED"); - mySQLSchema.setStatus(status); + res.setStatus(status); + return res; } } diff --git a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java index 796da31d5d..001d04fdd5 100644 --- a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java +++ b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java @@ -5,6 +5,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.api.model.apps.DeploymentStatus; import io.javaoperatorsdk.operator.api.reconciler.*; @@ -26,7 +27,7 @@ public class TomcatReconciler implements Reconciler { @Override public UpdateControl reconcile(Tomcat tomcat, Context context) { return context.getSecondaryResource(Deployment.class).map(deployment -> { - Tomcat updatedTomcat = updateTomcatStatus(tomcat, deployment); + Tomcat updatedTomcat = createTomcatForStatusUpdate(tomcat, deployment); log.info( "Updating status of Tomcat {} in namespace {} to {} ready replicas", tomcat.getMetadata().getName(), @@ -36,13 +37,18 @@ public UpdateControl reconcile(Tomcat tomcat, Context context) { }).orElseGet(UpdateControl::noUpdate); } - private Tomcat updateTomcatStatus(Tomcat tomcat, Deployment deployment) { + private Tomcat createTomcatForStatusUpdate(Tomcat tomcat, Deployment deployment) { + Tomcat res = new Tomcat(); + res.setMetadata(new ObjectMetaBuilder() + .withName(tomcat.getMetadata().getName()) + .withNamespace(tomcat.getMetadata().getNamespace()) + .build()); DeploymentStatus deploymentStatus = Objects.requireNonNullElse(deployment.getStatus(), new DeploymentStatus()); int readyReplicas = Objects.requireNonNullElse(deploymentStatus.getReadyReplicas(), 0); TomcatStatus status = new TomcatStatus(); status.setReadyReplicas(readyReplicas); - tomcat.setStatus(status); - return tomcat; + res.setStatus(status); + return res; } } diff --git a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java index 2dbddbf286..aacf011068 100644 --- a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java +++ b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java @@ -14,6 +14,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; import io.fabric8.kubernetes.api.model.Pod; import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.client.KubernetesClient; @@ -101,12 +102,7 @@ public UpdateControl reconcile(Webapp webapp, Context context) { String[] commandStatusInAllPods = executeCommandInAllPods(kubernetesClient, webapp, command); - if (webapp.getStatus() == null) { - webapp.setStatus(new WebappStatus()); - } - webapp.getStatus().setDeployedArtifact(webapp.getSpec().getUrl()); - webapp.getStatus().setDeploymentStatus(commandStatusInAllPods); - return UpdateControl.patchStatus(webapp); + return UpdateControl.patchStatus(createWebAppForStatusUpdate(webapp, commandStatusInAllPods)); } else { log.info("WebappController invoked but Tomcat not ready yet ({}/{})", tomcat.getStatus() != null ? tomcat.getStatus().getReadyReplicas() : 0, @@ -115,6 +111,18 @@ public UpdateControl reconcile(Webapp webapp, Context context) { } } + private Webapp createWebAppForStatusUpdate(Webapp actual, String[] commandStatusInAllPods) { + var webapp = new Webapp(); + webapp.setMetadata(new ObjectMetaBuilder() + .withName(actual.getMetadata().getName()) + .withNamespace(actual.getMetadata().getNamespace()) + .build()); + webapp.setStatus(new WebappStatus()); + webapp.getStatus().setDeployedArtifact(webapp.getSpec().getUrl()); + webapp.getStatus().setDeploymentStatus(commandStatusInAllPods); + return webapp; + } + @Override public DeleteControl cleanup(Webapp webapp, Context context) { From 9ce99f6d1b7bed9491ba55fc5ae3b1214891ea30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Thu, 25 Apr 2024 17:10:29 +0200 Subject: [PATCH 2/2] test fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- .../io/javaoperatorsdk/operator/sample/TomcatReconciler.java | 2 +- .../io/javaoperatorsdk/operator/sample/WebappReconciler.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java index 001d04fdd5..f89a5f22e0 100644 --- a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java +++ b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java @@ -32,7 +32,7 @@ public UpdateControl reconcile(Tomcat tomcat, Context context) { "Updating status of Tomcat {} in namespace {} to {} ready replicas", tomcat.getMetadata().getName(), tomcat.getMetadata().getNamespace(), - tomcat.getStatus().getReadyReplicas()); + tomcat.getStatus() == null ? 0 : tomcat.getStatus().getReadyReplicas()); return UpdateControl.patchStatus(updatedTomcat); }).orElseGet(UpdateControl::noUpdate); } diff --git a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java index aacf011068..e1c1ddc71a 100644 --- a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java +++ b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java @@ -118,7 +118,7 @@ private Webapp createWebAppForStatusUpdate(Webapp actual, String[] commandStatus .withNamespace(actual.getMetadata().getNamespace()) .build()); webapp.setStatus(new WebappStatus()); - webapp.getStatus().setDeployedArtifact(webapp.getSpec().getUrl()); + webapp.getStatus().setDeployedArtifact(actual.getSpec().getUrl()); webapp.getStatus().setDeploymentStatus(commandStatusInAllPods); return webapp; }