diff --git a/docs/documentation/v4-3-migration.md b/docs/documentation/v4-3-migration.md new file mode 100644 index 0000000000..77979fe3ba --- /dev/null +++ b/docs/documentation/v4-3-migration.md @@ -0,0 +1,36 @@ +--- +title: Migrating from v4.2 to v4.3 +description: Migrating from v4.2 to v4.3 +layout: docs +permalink: /docs/v4-3-migration +--- + +# Migrating from v4.2 to v4.3 + +## Condition API Change + +In Workflows the target of the condition was the managed resource itself, not a dependent resource. This changed, from +not the API contains the dependent resource. + +New API: + +```java +public interface Condition { + + boolean isMet(DependentResource dependentResource, P primary, Context

context); + +} +``` + +Former API: + +```java +public interface Condition { + + boolean isMet(P primary, R secondary, Context

context); + +} +``` + +Migration is trivial. Since the secondary resource can be accessed from the dependent resource. So to access the secondary +resource just use `dependentResource.getSecondaryResource(primary,context)`. diff --git a/micrometer-support/pom.xml b/micrometer-support/pom.xml index 6bb7f278ad..ae1be1816f 100644 --- a/micrometer-support/pom.xml +++ b/micrometer-support/pom.xml @@ -5,7 +5,7 @@ java-operator-sdk io.javaoperatorsdk - 4.2.4-SNAPSHOT + 4.3.0-SNAPSHOT 4.0.0 diff --git a/operator-framework-bom/pom.xml b/operator-framework-bom/pom.xml index f07945debe..68d236327a 100644 --- a/operator-framework-bom/pom.xml +++ b/operator-framework-bom/pom.xml @@ -5,7 +5,7 @@ io.javaoperatorsdk operator-framework-bom - 4.2.4-SNAPSHOT + 4.3.0-SNAPSHOT Operator SDK - Bill of Materials pom Java SDK for implementing Kubernetes operators diff --git a/operator-framework-core/pom.xml b/operator-framework-core/pom.xml index 06272a5749..7c6e42da69 100644 --- a/operator-framework-core/pom.xml +++ b/operator-framework-core/pom.xml @@ -6,7 +6,7 @@ io.javaoperatorsdk java-operator-sdk - 4.2.4-SNAPSHOT + 4.3.0-SNAPSHOT ../pom.xml @@ -40,13 +40,26 @@ ${project.build.outputDirectory}/version.properties - ^git.build.(time|version)$ + ^git.build.time$ ^git.commit.id.(abbrev|full)$ git.branch full + + org.codehaus.mojo + templating-maven-plugin + 1.0.0 + + + filtering-java-templates + + filter-sources + + + + diff --git a/operator-framework-core/src/main/java-templates/io/javaoperatorsdk/operator/api/config/Versions.java b/operator-framework-core/src/main/java-templates/io/javaoperatorsdk/operator/api/config/Versions.java new file mode 100644 index 0000000000..8d67199510 --- /dev/null +++ b/operator-framework-core/src/main/java-templates/io/javaoperatorsdk/operator/api/config/Versions.java @@ -0,0 +1,10 @@ +package io.javaoperatorsdk.operator.api.config; + +public final class Versions { + + private Versions() {} + + protected static final String JOSDK = "${project.version}"; + protected static final String KUBERNETES_CLIENT = "${fabric8-client.version}"; + +} diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java index c98ab895f7..bee5b96cbe 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java @@ -63,7 +63,6 @@ public static Version loadFromProperties() { builtTime = Date.from(Instant.EPOCH); } return new Version( - properties.getProperty("git.build.version", "unknown"), properties.getProperty("git.commit.id.abbrev", "unknown"), builtTime); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Version.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Version.java index 6bfb5bb2e5..d43d8aa1cf 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Version.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Version.java @@ -6,14 +6,11 @@ /** A class encapsulating the version information associated with this SDK instance. */ public class Version { - public static final Version UNKNOWN = new Version("unknown", "unknown", Date.from(Instant.EPOCH)); - - private final String sdk; + public static final Version UNKNOWN = new Version("unknown", Date.from(Instant.EPOCH)); private final String commit; private final Date builtTime; - public Version(String sdkVersion, String commit, Date builtTime) { - this.sdk = sdkVersion; + public Version(String commit, Date builtTime) { this.commit = commit; this.builtTime = builtTime; } @@ -24,7 +21,7 @@ public Version(String sdkVersion, String commit, Date builtTime) { * @return the SDK project version */ public String getSdkVersion() { - return sdk; + return Versions.JOSDK; } /** @@ -45,4 +42,14 @@ public String getCommit() { public Date getBuiltTime() { return builtTime; } + + /** + * Returns the version of the Fabric8 Kubernetes Client being used by this version of the SDK + * + * @return the Fabric8 Kubernetes Client version + */ + @SuppressWarnings("unused") + public String getKubernetesClientVersion() { + return Versions.KUBERNETES_CLIENT; + } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java index 5e2b209a71..7e0cd35f9d 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java @@ -25,6 +25,7 @@ import io.javaoperatorsdk.operator.processing.dependent.Matcher; import io.javaoperatorsdk.operator.processing.dependent.Matcher.Result; import io.javaoperatorsdk.operator.processing.event.ResourceID; +import io.javaoperatorsdk.operator.processing.event.source.PrimaryToSecondaryMapper; import io.javaoperatorsdk.operator.processing.event.source.SecondaryToPrimaryMapper; import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource; import io.javaoperatorsdk.operator.processing.event.source.informer.Mappers; @@ -76,6 +77,7 @@ private void configureWith(String labelSelector, Set namespaces, var ic = InformerConfiguration.from(resourceType()) .withLabelSelector(labelSelector) .withSecondaryToPrimaryMapper(getSecondaryToPrimaryMapper()) + .withPrimaryToSecondaryMapper(getPrimaryToSecondaryMapper()) .withNamespaces(namespaces, inheritNamespacesOnChange) .build(); @@ -97,6 +99,15 @@ private SecondaryToPrimaryMapper getSecondaryToPrimaryMapper() { } } + @SuppressWarnings("unchecked") + private PrimaryToSecondaryMapper

getPrimaryToSecondaryMapper() { + if (this instanceof PrimaryToSecondaryMapper) { + return (PrimaryToSecondaryMapper

) this; + } else { + return null; + } + } + /** * Use to share informers between event more resources. * diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfig.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfig.java index 02a3c8dd78..44a3b0a7bd 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfig.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfig.java @@ -93,6 +93,12 @@ public ResourceDiscriminator getResourceDiscriminator() { public void changeNamespaces(Set namespaces) { if (!wereNamespacesConfigured()) { this.namespacesWereConfigured = true; + setNamespaces(namespaces); + } + } + + protected void setNamespaces(Set namespaces) { + if (namespaces != null && !namespaces.isEmpty()) { this.namespaces = namespaces; } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutor.java index 04576098b2..510edf87af 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutor.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutor.java @@ -14,7 +14,6 @@ import io.fabric8.kubernetes.api.model.HasMetadata; import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource; -import io.javaoperatorsdk.operator.processing.dependent.BulkDependentResource; @SuppressWarnings("rawtypes") public abstract class AbstractWorkflowExecutor

{ @@ -103,15 +102,7 @@ protected synchronized void handleNodeExecutionFinish( @SuppressWarnings("unchecked") protected boolean isConditionMet(Optional> condition, DependentResource dependentResource) { - if (condition.isEmpty()) { - return true; - } - var resources = dependentResource instanceof BulkDependentResource - ? ((BulkDependentResource) dependentResource).getSecondaryResources(primary, context) - : dependentResource.getSecondaryResource(primary, context).orElse(null); - - return condition.map(c -> c.isMet(primary, - (R) resources, context)) + return condition.map(c -> c.isMet(dependentResource, primary, context)) .orElse(true); } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/Condition.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/Condition.java index 68ed5530ec..87690ed69b 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/Condition.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/Condition.java @@ -2,6 +2,7 @@ import io.fabric8.kubernetes.api.model.HasMetadata; import io.javaoperatorsdk.operator.api.reconciler.Context; +import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource; public interface Condition { @@ -10,12 +11,10 @@ public interface Condition { * {@link io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource} based on the * observed cluster state. * + * @param dependentResource for which the condition applies to * @param primary the primary resource being considered - * @param secondary the secondary resource associated with the specified primary resource or - * {@code null} if no such secondary resource exists (for example because it's been - * deleted) * @param context the current reconciliation {@link Context} * @return {@code true} if the condition holds, {@code false} otherwise */ - boolean isMet(P primary, R secondary, Context

context); + boolean isMet(DependentResource dependentResource, P primary, Context

context); } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverriderTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverriderTest.java index 7626d8bfd0..71be6a2cd4 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverriderTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverriderTest.java @@ -362,7 +362,9 @@ public UpdateControl reconcile(ConfigMap resource, Context private static class TestCondition implements Condition { @Override - public boolean isMet(ConfigMap primary, ConfigMap secondary, Context context) { + public boolean isMet(DependentResource dependentResource, + ConfigMap primary, + Context context) { return true; } } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/VersionTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/VersionTest.java new file mode 100644 index 0000000000..2a6b8002e3 --- /dev/null +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/VersionTest.java @@ -0,0 +1,17 @@ +package io.javaoperatorsdk.operator.api.config; + +import org.junit.jupiter.api.Test; + +import static org.junit.Assert.assertEquals; + +public class VersionTest { + + @Test + void versionShouldReturnTheSameResultFromMavenAndProperties() { + String versionFromProperties = Utils.loadFromProperties().getSdkVersion(); + String versionFromMaven = Version.UNKNOWN.getSdkVersion(); + + assertEquals(versionFromProperties, versionFromMaven); + } + +} diff --git a/operator-framework-junit5/pom.xml b/operator-framework-junit5/pom.xml index d2dd54fd14..b6694c0e7d 100644 --- a/operator-framework-junit5/pom.xml +++ b/operator-framework-junit5/pom.xml @@ -5,7 +5,7 @@ java-operator-sdk io.javaoperatorsdk - 4.2.4-SNAPSHOT + 4.3.0-SNAPSHOT 4.0.0 diff --git a/operator-framework/pom.xml b/operator-framework/pom.xml index 09c7906926..8911516d8d 100644 --- a/operator-framework/pom.xml +++ b/operator-framework/pom.xml @@ -5,7 +5,7 @@ java-operator-sdk io.javaoperatorsdk - 4.2.4-SNAPSHOT + 4.3.0-SNAPSHOT 4.0.0 diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/PrimaryToSecondaryForDependentIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/PrimaryToSecondaryForDependentIT.java new file mode 100644 index 0000000000..8b828f3868 --- /dev/null +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/PrimaryToSecondaryForDependentIT.java @@ -0,0 +1,21 @@ +package io.javaoperatorsdk.operator; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension; +import io.javaoperatorsdk.operator.sample.primarytosecondarydependent.PrimaryToSecondaryDependentReconciler; + +class PrimaryToSecondaryForDependentIT { + + @RegisterExtension + LocallyRunOperatorExtension operator = + LocallyRunOperatorExtension.builder() + .withReconciler(new PrimaryToSecondaryDependentReconciler()).build(); + + @Test + void testReconcilePreconditionOnReadOnlyResource() { + + } + +} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/SampleBulkCondition.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/SampleBulkCondition.java index cff0bd10d1..74048e7b54 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/SampleBulkCondition.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/SampleBulkCondition.java @@ -1,21 +1,25 @@ package io.javaoperatorsdk.operator.sample.bulkdependent; -import java.util.Map; - import io.fabric8.kubernetes.api.model.ConfigMap; import io.javaoperatorsdk.operator.api.reconciler.Context; +import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource; import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition; public class SampleBulkCondition - implements Condition, BulkDependentTestCustomResource> { + implements Condition { // We use ConfigMaps here just to show how to check some properties of resources managed by a // BulkDependentResource. In real life example this would be rather based on some status of those // resources, like Pods. @Override - public boolean isMet(BulkDependentTestCustomResource primary, Map secondary, + public boolean isMet( + DependentResource dependentResource, + BulkDependentTestCustomResource primary, Context context) { - return secondary.values().stream().noneMatch(cm -> cm.getData().isEmpty()); + + var resources = ((CRUDConfigMapBulkDependentResource) dependentResource) + .getSecondaryResources(primary, context); + return resources.values().stream().noneMatch(cm -> cm.getData().isEmpty()); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/StatefulSetReadyCondition.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/StatefulSetReadyCondition.java index 9025a5a24b..894cab310a 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/StatefulSetReadyCondition.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/StatefulSetReadyCondition.java @@ -2,6 +2,7 @@ import io.fabric8.kubernetes.api.model.apps.StatefulSet; import io.javaoperatorsdk.operator.api.reconciler.Context; +import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource; import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition; import io.javaoperatorsdk.operator.sample.complexdependent.ComplexDependentCustomResource; @@ -9,10 +10,15 @@ public class StatefulSetReadyCondition implements Condition { @Override - public boolean isMet(ComplexDependentCustomResource primary, StatefulSet secondary, + public boolean isMet( + DependentResource dependentResource, + ComplexDependentCustomResource primary, Context context) { - var readyReplicas = secondary.getStatus().getReadyReplicas(); - return readyReplicas != null && readyReplicas > 0; + return dependentResource.getSecondaryResource(primary, context).map(secondary -> { + var readyReplicas = secondary.getStatus().getReadyReplicas(); + return readyReplicas != null && readyReplicas > 0; + }) + .orElse(false); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondarydependent/PrimaryToSecondaryDependentCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondarydependent/PrimaryToSecondaryDependentCustomResource.java new file mode 100644 index 0000000000..70a610271e --- /dev/null +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondarydependent/PrimaryToSecondaryDependentCustomResource.java @@ -0,0 +1,16 @@ +package io.javaoperatorsdk.operator.sample.primarytosecondarydependent; + +import io.fabric8.kubernetes.api.model.Namespaced; +import io.fabric8.kubernetes.client.CustomResource; +import io.fabric8.kubernetes.model.annotation.Group; +import io.fabric8.kubernetes.model.annotation.ShortNames; +import io.fabric8.kubernetes.model.annotation.Version; + +@Group("sample.javaoperatorsdk") +@Version("v1") +@ShortNames("ptsd") +public class PrimaryToSecondaryDependentCustomResource + extends CustomResource + implements Namespaced { + +} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondarydependent/PrimaryToSecondaryDependentReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondarydependent/PrimaryToSecondaryDependentReconciler.java new file mode 100644 index 0000000000..1973d71ed7 --- /dev/null +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondarydependent/PrimaryToSecondaryDependentReconciler.java @@ -0,0 +1,29 @@ +package io.javaoperatorsdk.operator.sample.primarytosecondarydependent; + +import java.util.concurrent.atomic.AtomicInteger; + +import io.javaoperatorsdk.operator.api.reconciler.Context; +import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration; +import io.javaoperatorsdk.operator.api.reconciler.Reconciler; +import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; + +@ControllerConfiguration +public class PrimaryToSecondaryDependentReconciler + implements Reconciler { + + private final AtomicInteger numberOfExecutions = new AtomicInteger(0); + + @Override + public UpdateControl reconcile( + PrimaryToSecondaryDependentCustomResource resource, + Context context) { + + numberOfExecutions.incrementAndGet(); + + return UpdateControl.noUpdate(); + } + + public int getNumberOfExecutions() { + return numberOfExecutions.get(); + } +} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondarydependent/SecondaryToPrimaryMapperDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondarydependent/SecondaryToPrimaryMapperDependentResource.java new file mode 100644 index 0000000000..932dfdd8bb --- /dev/null +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondarydependent/SecondaryToPrimaryMapperDependentResource.java @@ -0,0 +1,23 @@ +package io.javaoperatorsdk.operator.sample.primarytosecondarydependent; + +import io.fabric8.kubernetes.api.model.ConfigMap; +import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResource; +import io.javaoperatorsdk.operator.processing.event.ResourceID; +import io.javaoperatorsdk.operator.processing.event.source.PrimaryToSecondaryMapper; + +import java.util.Set; + +public class SecondaryToPrimaryMapperDependentResource extends + KubernetesDependentResource + implements PrimaryToSecondaryMapper { + + public SecondaryToPrimaryMapperDependentResource() { + super(ConfigMap.class); + } + + + @Override + public Set toSecondaryResourceIDs(PrimaryToSecondaryDependentCustomResource primary) { + return null; + } +} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/workflowallfeature/ConfigMapDeletePostCondition.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/workflowallfeature/ConfigMapDeletePostCondition.java index e7d09a5e95..da6a693fe4 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/workflowallfeature/ConfigMapDeletePostCondition.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/workflowallfeature/ConfigMapDeletePostCondition.java @@ -5,6 +5,7 @@ import io.fabric8.kubernetes.api.model.ConfigMap; import io.javaoperatorsdk.operator.api.reconciler.Context; +import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource; import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition; public class ConfigMapDeletePostCondition @@ -14,9 +15,11 @@ public class ConfigMapDeletePostCondition @Override public boolean isMet( - WorkflowAllFeatureCustomResource primary, ConfigMap secondary, + DependentResource dependentResource, + WorkflowAllFeatureCustomResource primary, Context context) { - var configMapDeleted = secondary == null; + + var configMapDeleted = dependentResource.getSecondaryResource(primary, context).isEmpty(); log.debug("Config Map Deleted: {}", configMapDeleted); return configMapDeleted; } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/workflowallfeature/ConfigMapReconcileCondition.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/workflowallfeature/ConfigMapReconcileCondition.java index c413b5f03c..b3d9d7a541 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/workflowallfeature/ConfigMapReconcileCondition.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/workflowallfeature/ConfigMapReconcileCondition.java @@ -2,14 +2,18 @@ import io.fabric8.kubernetes.api.model.ConfigMap; import io.javaoperatorsdk.operator.api.reconciler.Context; +import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource; import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition; public class ConfigMapReconcileCondition implements Condition { @Override - public boolean isMet(WorkflowAllFeatureCustomResource primary, ConfigMap secondary, + public boolean isMet( + DependentResource dependentResource, + WorkflowAllFeatureCustomResource primary, Context context) { + return primary.getSpec().isCreateConfigMap(); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/workflowallfeature/DeploymentReadyCondition.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/workflowallfeature/DeploymentReadyCondition.java index 8681097962..0e6f5d8580 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/workflowallfeature/DeploymentReadyCondition.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/workflowallfeature/DeploymentReadyCondition.java @@ -2,18 +2,21 @@ import io.fabric8.kubernetes.api.model.apps.Deployment; import io.javaoperatorsdk.operator.api.reconciler.Context; +import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource; import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition; public class DeploymentReadyCondition implements Condition { @Override - public boolean isMet(WorkflowAllFeatureCustomResource primary, Deployment deployment, + public boolean isMet( + DependentResource dependentResource, + WorkflowAllFeatureCustomResource primary, Context context) { - if (deployment == null) { - return false; - } - var readyReplicas = deployment.getStatus().getReadyReplicas(); - - return readyReplicas != null && deployment.getSpec().getReplicas().equals(readyReplicas); + return dependentResource.getSecondaryResource(primary, context) + .map(deployment -> { + var readyReplicas = deployment.getStatus().getReadyReplicas(); + return readyReplicas != null && deployment.getSpec().getReplicas().equals(readyReplicas); + }) + .orElse(false); } } diff --git a/pom.xml b/pom.xml index f6d1bfe242..e2c41686ce 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ io.javaoperatorsdk java-operator-sdk - 4.2.4-SNAPSHOT + 4.3.0-SNAPSHOT Operator SDK for Java Java SDK for implementing Kubernetes operators pom @@ -43,7 +43,7 @@ https://sonarcloud.io 5.9.1 - 6.2.0 + 6.3.1 1.7.36 2.19.0 5.0.0 diff --git a/sample-operators/leader-election/pom.xml b/sample-operators/leader-election/pom.xml index 49f5bf4b7f..52d8e383b3 100644 --- a/sample-operators/leader-election/pom.xml +++ b/sample-operators/leader-election/pom.xml @@ -7,7 +7,7 @@ io.javaoperatorsdk sample-operators - 4.2.4-SNAPSHOT + 4.3.0-SNAPSHOT sample-leader-election diff --git a/sample-operators/mysql-schema/pom.xml b/sample-operators/mysql-schema/pom.xml index 6dc209df5d..f96060928d 100644 --- a/sample-operators/mysql-schema/pom.xml +++ b/sample-operators/mysql-schema/pom.xml @@ -7,7 +7,7 @@ io.javaoperatorsdk sample-operators - 4.2.4-SNAPSHOT + 4.3.0-SNAPSHOT sample-mysql-schema-operator diff --git a/sample-operators/pom.xml b/sample-operators/pom.xml index 86e4fc55c8..cc5b370995 100644 --- a/sample-operators/pom.xml +++ b/sample-operators/pom.xml @@ -7,7 +7,7 @@ io.javaoperatorsdk java-operator-sdk - 4.2.4-SNAPSHOT + 4.3.0-SNAPSHOT sample-operators diff --git a/sample-operators/tomcat-operator/pom.xml b/sample-operators/tomcat-operator/pom.xml index 39b5566dac..b4e8f4ab6a 100644 --- a/sample-operators/tomcat-operator/pom.xml +++ b/sample-operators/tomcat-operator/pom.xml @@ -7,7 +7,7 @@ io.javaoperatorsdk sample-operators - 4.2.4-SNAPSHOT + 4.3.0-SNAPSHOT sample-tomcat-operator diff --git a/sample-operators/webpage/pom.xml b/sample-operators/webpage/pom.xml index ae5437b8dc..ced0bfc0ab 100644 --- a/sample-operators/webpage/pom.xml +++ b/sample-operators/webpage/pom.xml @@ -7,7 +7,7 @@ io.javaoperatorsdk sample-operators - 4.2.4-SNAPSHOT + 4.3.0-SNAPSHOT sample-webpage-operator diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/ExposedIngressCondition.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/ExposedIngressCondition.java index 5eb0135586..c2c0d0b423 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/ExposedIngressCondition.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/ExposedIngressCondition.java @@ -2,11 +2,14 @@ import io.fabric8.kubernetes.api.model.networking.v1.Ingress; import io.javaoperatorsdk.operator.api.reconciler.Context; +import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource; import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition; public class ExposedIngressCondition implements Condition { + @Override - public boolean isMet(WebPage primary, Ingress secondary, Context context) { + public boolean isMet(DependentResource dependentResource, + WebPage primary, Context context) { return primary.getSpec().getExposed(); } }