Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: operator-framework/java-operator-sdk
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 8ecfef61dff3210623d5be1923485b59cb579c4b
Choose a base ref
..
head repository: operator-framework/java-operator-sdk
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 9b26d18cb025011d9918799d29d0d1d303b94a3e
Choose a head ref
Showing with 240 additions and 32 deletions.
  1. +1 −1 bootstrapper-maven-plugin/pom.xml
  2. +1 −1 caffeine-bounded-cache-support/pom.xml
  3. +1 −1 micrometer-support/pom.xml
  4. +1 −1 operator-framework-bom/pom.xml
  5. +1 −1 operator-framework-core/pom.xml
  6. +19 −0 ...main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutor.java
  7. +1 −0 .../main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowCleanupExecutor.java
  8. +0 −18 ...ain/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java
  9. +3 −1 .../java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutorTest.java
  10. +18 −0 ...t/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowCleanupExecutorTest.java
  11. +1 −1 operator-framework-junit5/pom.xml
  12. +1 −1 operator-framework/pom.xml
  13. +79 −0 operator-framework/src/test/java/io/javaoperatorsdk/operator/WorkflowActivationCleanupIT.java
  14. +31 −0 ...java/io/javaoperatorsdk/operator/sample/workflowactivationcleanup/ConfigMapDependentResource.java
  15. +18 −0 ...t/java/io/javaoperatorsdk/operator/sample/workflowactivationcleanup/TestActivcationCondition.java
  16. +17 −0 ...peratorsdk/operator/sample/workflowactivationcleanup/WorkflowActivationCleanupCustomResource.java
  17. +27 −0 ...avaoperatorsdk/operator/sample/workflowactivationcleanup/WorkflowActivationCleanupReconciler.java
  18. +14 −0 ...a/io/javaoperatorsdk/operator/sample/workflowactivationcleanup/WorkflowActivationCleanupSpec.java
  19. +1 −1 pom.xml
  20. +1 −1 sample-operators/leader-election/pom.xml
  21. +1 −1 sample-operators/mysql-schema/pom.xml
  22. +1 −1 sample-operators/pom.xml
  23. +1 −1 sample-operators/tomcat-operator/pom.xml
  24. +1 −1 sample-operators/webpage/pom.xml
2 changes: 1 addition & 1 deletion bootstrapper-maven-plugin/pom.xml
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@
<parent>
<artifactId>java-operator-sdk</artifactId>
<groupId>io.javaoperatorsdk</groupId>
<version>4.7.1-SNAPSHOT</version>
<version>4.7.2-SNAPSHOT</version>
</parent>

<artifactId>bootstrapper</artifactId>
2 changes: 1 addition & 1 deletion caffeine-bounded-cache-support/pom.xml
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@
<parent>
<artifactId>java-operator-sdk</artifactId>
<groupId>io.javaoperatorsdk</groupId>
<version>4.7.1-SNAPSHOT</version>
<version>4.7.2-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

2 changes: 1 addition & 1 deletion micrometer-support/pom.xml
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@
<parent>
<artifactId>java-operator-sdk</artifactId>
<groupId>io.javaoperatorsdk</groupId>
<version>4.7.1-SNAPSHOT</version>
<version>4.7.2-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

2 changes: 1 addition & 1 deletion operator-framework-bom/pom.xml
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@

<groupId>io.javaoperatorsdk</groupId>
<artifactId>operator-framework-bom</artifactId>
<version>4.7.1-SNAPSHOT</version>
<version>4.7.2-SNAPSHOT</version>
<name>Operator SDK - Bill of Materials</name>
<packaging>pom</packaging>
<description>Java SDK for implementing Kubernetes operators</description>
2 changes: 1 addition & 1 deletion operator-framework-core/pom.xml
Original file line number Diff line number Diff line change
@@ -6,7 +6,7 @@
<parent>
<groupId>io.javaoperatorsdk</groupId>
<artifactId>java-operator-sdk</artifactId>
<version>4.7.1-SNAPSHOT</version>
<version>4.7.2-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

Original file line number Diff line number Diff line change
@@ -128,4 +128,23 @@ protected <R> void submit(DependentResourceNode<R, P> dependentResourceNode,
logger().debug("Submitted to {}: {} primaryID: {}", operation, dependentResourceNode,
primaryID);
}

protected <R> void registerOrDeregisterEventSourceBasedOnActivation(
boolean activationConditionMet,
DependentResourceNode<R, P> dependentResourceNode) {
if (dependentResourceNode.getActivationCondition().isPresent()) {
if (activationConditionMet) {
var eventSource =
dependentResourceNode.getDependentResource().eventSource(context.eventSourceRetriever()
.eventSourceContextForDynamicRegistration());
var es = eventSource.orElseThrow();
context.eventSourceRetriever()
.dynamicallyRegisterEventSource(dependentResourceNode.getName(), es);

} else {
context.eventSourceRetriever()
.dynamicallyDeRegisterEventSource(dependentResourceNode.getName());
}
}
}
}
Original file line number Diff line number Diff line change
@@ -70,6 +70,7 @@ protected void doRun(DependentResourceNode<R, P> dependentResourceNode,

var active =
isConditionMet(dependentResourceNode.getActivationCondition(), dependentResource);
registerOrDeregisterEventSourceBasedOnActivation(active, dependentResourceNode);

if (dependentResource.isDeletable() && active) {
((Deleter<P>) dependentResource).delete(primary, context);
Original file line number Diff line number Diff line change
@@ -78,24 +78,6 @@ private synchronized <R> void handleReconcile(DependentResourceNode<R, P> depend
}
}

private <R> void registerOrDeregisterEventSourceBasedOnActivation(boolean activationConditionMet,
DependentResourceNode<R, P> dependentResourceNode) {
if (dependentResourceNode.getActivationCondition().isPresent()) {
if (activationConditionMet) {
var eventSource =
dependentResourceNode.getDependentResource().eventSource(context.eventSourceRetriever()
.eventSourceContextForDynamicRegistration());
var es = eventSource.orElseThrow();
context.eventSourceRetriever()
.dynamicallyRegisterEventSource(dependentResourceNode.getName(), es);

} else {
context.eventSourceRetriever()
.dynamicallyDeRegisterEventSource(dependentResourceNode.getName());
}
}
}

private synchronized void handleDelete(DependentResourceNode dependentResourceNode) {
log.debug("Submitting for delete: {}", dependentResourceNode);

Original file line number Diff line number Diff line change
@@ -11,6 +11,7 @@
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
import io.javaoperatorsdk.operator.api.reconciler.dependent.GarbageCollected;
import io.javaoperatorsdk.operator.api.reconciler.dependent.ReconcileResult;
import io.javaoperatorsdk.operator.processing.dependent.Creator;
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResource;
import io.javaoperatorsdk.operator.sample.simple.TestCustomResource;

@@ -55,7 +56,8 @@ public String toString() {
}
}

public class TestDeleterDependent extends TestDependent implements Deleter<TestCustomResource> {
public class TestDeleterDependent extends TestDependent
implements Creator<ConfigMap, TestCustomResource>, Deleter<TestCustomResource> {

public TestDeleterDependent(String name) {
super(name);
Original file line number Diff line number Diff line change
@@ -7,8 +7,14 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import io.fabric8.kubernetes.api.model.ConfigMap;
import io.javaoperatorsdk.operator.AggregatedOperatorException;
import io.javaoperatorsdk.operator.MockKubernetesClient;
import io.javaoperatorsdk.operator.api.config.ConfigurationService;
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
import io.javaoperatorsdk.operator.api.reconciler.Context;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
import io.javaoperatorsdk.operator.processing.event.EventSourceRetriever;
import io.javaoperatorsdk.operator.sample.simple.TestCustomResource;

import static io.javaoperatorsdk.operator.processing.dependent.workflow.ExecutionAssert.assertThat;
@@ -29,7 +35,19 @@ class WorkflowCleanupExecutorTest extends AbstractWorkflowExecutorTest {

@BeforeEach
void setup() {
var eventSourceContextMock = mock(EventSourceContext.class);
var eventSourceRetrieverMock = mock(EventSourceRetriever.class);
var mockControllerConfig = mock(ControllerConfiguration.class);
when(eventSourceRetrieverMock.eventSourceContextForDynamicRegistration())
.thenReturn(eventSourceContextMock);
var client = MockKubernetesClient.client(ConfigMap.class);
when(eventSourceContextMock.getClient()).thenReturn(client);
when(eventSourceContextMock.getControllerConfiguration()).thenReturn(mockControllerConfig);
when(mockControllerConfig.getConfigurationService())
.thenReturn(mock(ConfigurationService.class));

when(mockContext.getWorkflowExecutorService()).thenReturn(executorService);
when(mockContext.eventSourceRetriever()).thenReturn(eventSourceRetrieverMock);
}

@Test
2 changes: 1 addition & 1 deletion operator-framework-junit5/pom.xml
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@
<parent>
<artifactId>java-operator-sdk</artifactId>
<groupId>io.javaoperatorsdk</groupId>
<version>4.7.1-SNAPSHOT</version>
<version>4.7.2-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

2 changes: 1 addition & 1 deletion operator-framework/pom.xml
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@
<parent>
<artifactId>java-operator-sdk</artifactId>
<groupId>io.javaoperatorsdk</groupId>
<version>4.7.1-SNAPSHOT</version>
<version>4.7.2-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package io.javaoperatorsdk.operator;

import org.junit.jupiter.api.*;

import io.fabric8.kubernetes.api.model.Namespace;
import io.fabric8.kubernetes.api.model.NamespaceBuilder;
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
import io.fabric8.kubernetes.client.utils.KubernetesResourceUtil;
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
import io.javaoperatorsdk.operator.sample.workflowactivationcleanup.WorkflowActivationCleanupCustomResource;
import io.javaoperatorsdk.operator.sample.workflowactivationcleanup.WorkflowActivationCleanupReconciler;
import io.javaoperatorsdk.operator.sample.workflowactivationcleanup.WorkflowActivationCleanupSpec;

import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;

public class WorkflowActivationCleanupIT {

private final KubernetesClient client = new KubernetesClientBuilder().build();
private Operator operator;

private String testNamespace;

@BeforeEach
void beforeEach(TestInfo testInfo) {
LocallyRunOperatorExtension.applyCrd(WorkflowActivationCleanupCustomResource.class,
client);

testInfo.getTestMethod()
.ifPresent(method -> testNamespace = KubernetesResourceUtil.sanitizeName(method.getName()));
client.namespaces().resource(testNamespace(testNamespace)).create();
operator = new Operator(o -> o.withCloseClientOnStop(false));
operator.register(new WorkflowActivationCleanupReconciler(),
o -> o.settingNamespaces(testNamespace));
}

@AfterEach
void stopOperator() {
client.namespaces().withName(testNamespace).delete();
await().untilAsserted(() -> {
var ns = client.namespaces().withName(testNamespace).get();
assertThat(ns).isNull();
});
operator.stop();
}

@Test
void testCleanupOnMarkedResourceOnOperatorStartup() {
var resource = client.resource(testResourceWithFinalizer()).create();
client.resource(resource).delete();
operator.start();

await().untilAsserted(() -> {
var res = client.resource(resource).get();
assertThat(res).isNull();
});
}

private WorkflowActivationCleanupCustomResource testResourceWithFinalizer() {
var resource = new WorkflowActivationCleanupCustomResource();
resource.setMetadata(new ObjectMetaBuilder()
.withName("test1")
.withFinalizers("workflowactivationcleanupcustomresources.sample.javaoperatorsdk/finalizer")
.withNamespace(testNamespace)
.build());
resource.setSpec(new WorkflowActivationCleanupSpec());
resource.getSpec().setValue("val1");
return resource;
}

private Namespace testNamespace(String name) {
return new NamespaceBuilder().withMetadata(new ObjectMetaBuilder()
.withName(name)
.build()).build();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package io.javaoperatorsdk.operator.sample.workflowactivationcleanup;

import java.util.Map;

import io.fabric8.kubernetes.api.model.ConfigMap;
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
import io.javaoperatorsdk.operator.api.reconciler.Context;
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDNoGCKubernetesDependentResource;

public class ConfigMapDependentResource
extends
CRUDNoGCKubernetesDependentResource<ConfigMap, WorkflowActivationCleanupCustomResource> {

public static final String DATA_KEY = "data";

public ConfigMapDependentResource() {
super(ConfigMap.class);
}

@Override
protected ConfigMap desired(WorkflowActivationCleanupCustomResource primary,
Context<WorkflowActivationCleanupCustomResource> context) {
ConfigMap configMap = new ConfigMap();
configMap.setMetadata(new ObjectMetaBuilder()
.withName(primary.getMetadata().getName())
.withNamespace(primary.getMetadata().getNamespace())
.build());
configMap.setData(Map.of(DATA_KEY, primary.getSpec().getValue()));
return configMap;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.javaoperatorsdk.operator.sample.workflowactivationcleanup;

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 TestActivcationCondition
implements Condition<ConfigMap, WorkflowActivationCleanupCustomResource> {

@Override
public boolean isMet(
DependentResource<ConfigMap, WorkflowActivationCleanupCustomResource> dependentResource,
WorkflowActivationCleanupCustomResource primary,
Context<WorkflowActivationCleanupCustomResource> context) {
return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.javaoperatorsdk.operator.sample.workflowactivationcleanup;

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("wacc")
public class WorkflowActivationCleanupCustomResource
extends CustomResource<WorkflowActivationCleanupSpec, Void>
implements Namespaced {


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package io.javaoperatorsdk.operator.sample.workflowactivationcleanup;

import io.javaoperatorsdk.operator.api.reconciler.*;
import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;

@ControllerConfiguration(dependents = {
@Dependent(type = ConfigMapDependentResource.class,
activationCondition = TestActivcationCondition.class),
})
public class WorkflowActivationCleanupReconciler
implements Reconciler<WorkflowActivationCleanupCustomResource>,
Cleaner<WorkflowActivationCleanupCustomResource> {

@Override
public UpdateControl<WorkflowActivationCleanupCustomResource> reconcile(
WorkflowActivationCleanupCustomResource resource,
Context<WorkflowActivationCleanupCustomResource> context) {

return UpdateControl.noUpdate();
}

@Override
public DeleteControl cleanup(WorkflowActivationCleanupCustomResource resource,
Context<WorkflowActivationCleanupCustomResource> context) {
return DeleteControl.defaultDelete();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.javaoperatorsdk.operator.sample.workflowactivationcleanup;

public class WorkflowActivationCleanupSpec {

private String value;

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}
}
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@

<groupId>io.javaoperatorsdk</groupId>
<artifactId>java-operator-sdk</artifactId>
<version>4.7.1-SNAPSHOT</version>
<version>4.7.2-SNAPSHOT</version>
<name>Operator SDK for Java</name>
<description>Java SDK for implementing Kubernetes operators</description>
<packaging>pom</packaging>
2 changes: 1 addition & 1 deletion sample-operators/leader-election/pom.xml
Original file line number Diff line number Diff line change
@@ -7,7 +7,7 @@
<parent>
<groupId>io.javaoperatorsdk</groupId>
<artifactId>sample-operators</artifactId>
<version>4.7.1-SNAPSHOT</version>
<version>4.7.2-SNAPSHOT</version>
</parent>

<artifactId>sample-leader-election</artifactId>
2 changes: 1 addition & 1 deletion sample-operators/mysql-schema/pom.xml
Original file line number Diff line number Diff line change
@@ -7,7 +7,7 @@
<parent>
<groupId>io.javaoperatorsdk</groupId>
<artifactId>sample-operators</artifactId>
<version>4.7.1-SNAPSHOT</version>
<version>4.7.2-SNAPSHOT</version>
</parent>

<artifactId>sample-mysql-schema-operator</artifactId>
Loading