From 5736570179c6a5e40748f1496a0e78bece9635ad Mon Sep 17 00:00:00 2001 From: csviri Date: Tue, 15 Nov 2022 14:18:09 +0100 Subject: [PATCH 1/8] fix: cleaner issue for pod caused by missing generation in metadata --- .../controller/InternalEventFilters.java | 5 ++ .../operator/BuiltInResourceCleanerIT.java | 49 +++++++++++++++++++ .../ObservedGenerationTestReconciler.java | 41 ++++++++++++++++ .../operator/pod-template.yaml | 10 ++++ 4 files changed, 105 insertions(+) create mode 100644 operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java create mode 100644 operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/builtinresourcecleaner/ObservedGenerationTestReconciler.java create mode 100644 operator-framework/src/test/resources/io/javaoperatorsdk/operator/pod-template.yaml diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/InternalEventFilters.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/InternalEventFilters.java index f9d8b27771..1f6ecc4540 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/InternalEventFilters.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/InternalEventFilters.java @@ -18,6 +18,11 @@ static OnUpdateFilter onUpdateGenerationAware( if (!generationAware) { return true; } + // for example pods don't have generation + if (oldResource.getMetadata().getGeneration() == null) { + return true; + } + return oldResource.getMetadata().getGeneration() < newResource .getMetadata().getGeneration(); }; diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java new file mode 100644 index 0000000000..4b61109bce --- /dev/null +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java @@ -0,0 +1,49 @@ +package io.javaoperatorsdk.operator; + +import java.util.Map; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.fabric8.kubernetes.api.model.Pod; +import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension; +import io.javaoperatorsdk.operator.sample.builtinresourcecleaner.ObservedGenerationTestReconciler; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; + +class BuiltInResourceCleanerIT { + + @RegisterExtension + LocallyRunOperatorExtension operator = + LocallyRunOperatorExtension.builder() + .withReconciler(new ObservedGenerationTestReconciler()) + .build(); + + @Test + void cleanerIsCalledOnBuiltInResource() { + var pod = operator.create(testPod()); + + await().untilAsserted(() -> { + assertThat(operator.getReconcilerOfType(ObservedGenerationTestReconciler.class) + .getReconcileCount()).isPositive(); + var actualPod = operator.get(Pod.class, pod.getMetadata().getName()); + assertThat(actualPod.getMetadata().getFinalizers()).isNotEmpty(); + }); + + operator.delete(pod); + + await().untilAsserted(() -> { + assertThat(operator.getReconcilerOfType(ObservedGenerationTestReconciler.class) + .getCleanCount()).isPositive(); + }); + } + + Pod testPod() { + Pod pod = ReconcilerUtils.loadYaml(Pod.class, StandaloneDependentResourceIT.class, + "pod-template.yaml"); + pod.getMetadata().setLabels(Map.of("builtintest", "true")); + return pod; + } + +} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/builtinresourcecleaner/ObservedGenerationTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/builtinresourcecleaner/ObservedGenerationTestReconciler.java new file mode 100644 index 0000000000..e7c2fce559 --- /dev/null +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/builtinresourcecleaner/ObservedGenerationTestReconciler.java @@ -0,0 +1,41 @@ +package io.javaoperatorsdk.operator.sample.builtinresourcecleaner; + +import java.util.concurrent.atomic.AtomicInteger; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.fabric8.kubernetes.api.model.Pod; +import io.javaoperatorsdk.operator.api.reconciler.*; + +@ControllerConfiguration(labelSelector = "builtintest=true") +public class ObservedGenerationTestReconciler + implements Reconciler, Cleaner { + + private static final Logger log = LoggerFactory.getLogger(ObservedGenerationTestReconciler.class); + + private AtomicInteger reconciled = new AtomicInteger(0); + private AtomicInteger cleaned = new AtomicInteger(0); + + @Override + public UpdateControl reconcile( + Pod resource, + Context context) { + reconciled.addAndGet(1); + return UpdateControl.noUpdate(); + } + + @Override + public DeleteControl cleanup(Pod resource, Context context) { + cleaned.addAndGet(1); + return DeleteControl.defaultDelete(); + } + + public int getReconcileCount() { + return reconciled.get(); + } + + public int getCleanCount() { + return cleaned.get(); + } +} diff --git a/operator-framework/src/test/resources/io/javaoperatorsdk/operator/pod-template.yaml b/operator-framework/src/test/resources/io/javaoperatorsdk/operator/pod-template.yaml new file mode 100644 index 0000000000..df4082f4e4 --- /dev/null +++ b/operator-framework/src/test/resources/io/javaoperatorsdk/operator/pod-template.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Pod +metadata: + name: test-pod +spec: + containers: + - name: nginx + image: nginx:1.14.2 + ports: + - containerPort: 80 \ No newline at end of file From 2e7fac2a25ea470696de719b52baa880ec252bc4 Mon Sep 17 00:00:00 2001 From: csviri Date: Tue, 15 Nov 2022 14:19:32 +0100 Subject: [PATCH 2/8] minot fix --- .../resources/io/javaoperatorsdk/operator/pod-template.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/operator-framework/src/test/resources/io/javaoperatorsdk/operator/pod-template.yaml b/operator-framework/src/test/resources/io/javaoperatorsdk/operator/pod-template.yaml index df4082f4e4..3420a445a1 100644 --- a/operator-framework/src/test/resources/io/javaoperatorsdk/operator/pod-template.yaml +++ b/operator-framework/src/test/resources/io/javaoperatorsdk/operator/pod-template.yaml @@ -7,4 +7,4 @@ spec: - name: nginx image: nginx:1.14.2 ports: - - containerPort: 80 \ No newline at end of file + - containerPort: 80 From fb376d1424f85f84e6e78464a719a837b165910f Mon Sep 17 00:00:00 2001 From: csviri Date: Tue, 15 Nov 2022 14:46:04 +0100 Subject: [PATCH 3/8] no locking pod delete --- .../io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java | 1 + 1 file changed, 1 insertion(+) diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java index 4b61109bce..ab7615223b 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java @@ -31,6 +31,7 @@ void cleanerIsCalledOnBuiltInResource() { assertThat(actualPod.getMetadata().getFinalizers()).isNotEmpty(); }); + pod.getMetadata().setResourceVersion(null); operator.delete(pod); await().untilAsserted(() -> { From 935e8fca8e9c6b208feed6bcfb342d3372fa3617 Mon Sep 17 00:00:00 2001 From: csviri Date: Tue, 15 Nov 2022 15:08:26 +0100 Subject: [PATCH 4/8] log --- .../operator/BuiltInResourceCleanerIT.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java index ab7615223b..a4072b384a 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java @@ -8,12 +8,16 @@ import io.fabric8.kubernetes.api.model.Pod; import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension; import io.javaoperatorsdk.operator.sample.builtinresourcecleaner.ObservedGenerationTestReconciler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; class BuiltInResourceCleanerIT { + private static final Logger log = LoggerFactory.getLogger(BuiltInResourceCleanerIT.class); + @RegisterExtension LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() @@ -30,8 +34,8 @@ void cleanerIsCalledOnBuiltInResource() { var actualPod = operator.get(Pod.class, pod.getMetadata().getName()); assertThat(actualPod.getMetadata().getFinalizers()).isNotEmpty(); }); - - pod.getMetadata().setResourceVersion(null); + + log.info("Deleting pod"); operator.delete(pod); await().untilAsserted(() -> { From 2e305d29876e92b2ab65426d6b63f378d8ad8bc3 Mon Sep 17 00:00:00 2001 From: csviri Date: Tue, 15 Nov 2022 15:35:36 +0100 Subject: [PATCH 5/8] log --- .../javaoperatorsdk/operator/BuiltInResourceCleanerIT.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java index a4072b384a..4331cfdf3f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java @@ -4,12 +4,12 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import io.fabric8.kubernetes.api.model.Pod; import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension; import io.javaoperatorsdk.operator.sample.builtinresourcecleaner.ObservedGenerationTestReconciler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; @@ -34,7 +34,7 @@ void cleanerIsCalledOnBuiltInResource() { var actualPod = operator.get(Pod.class, pod.getMetadata().getName()); assertThat(actualPod.getMetadata().getFinalizers()).isNotEmpty(); }); - + log.info("Deleting pod"); operator.delete(pod); @@ -42,6 +42,7 @@ void cleanerIsCalledOnBuiltInResource() { assertThat(operator.getReconcilerOfType(ObservedGenerationTestReconciler.class) .getCleanCount()).isPositive(); }); + log.info("everything ok"); } Pod testPod() { From ba0ba0de46a37c47cb39cdb19b524ca518e8ee15 Mon Sep 17 00:00:00 2001 From: csviri Date: Tue, 15 Nov 2022 16:06:32 +0100 Subject: [PATCH 6/8] log --- .../io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java index 4331cfdf3f..aa4bc9175c 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java @@ -42,7 +42,7 @@ void cleanerIsCalledOnBuiltInResource() { assertThat(operator.getReconcilerOfType(ObservedGenerationTestReconciler.class) .getCleanCount()).isPositive(); }); - log.info("everything ok"); + log.info("everything ok, actual pod: {}", operator.get(Pod.class, pod.getMetadata().getName())); } Pod testPod() { From 8acb4ecda31974faf7eb567fe6f639273dcf2e35 Mon Sep 17 00:00:00 2001 From: csviri Date: Wed, 16 Nov 2022 09:42:37 +0100 Subject: [PATCH 7/8] timout --- .../operator/junit/AbstractOperatorExtension.java | 13 ++++++++++++- .../operator/BuiltInResourceCleanerIT.java | 1 + pod.yaml | 10 ++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 pod.yaml diff --git a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/AbstractOperatorExtension.java b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/AbstractOperatorExtension.java index 15713d47a1..1da3a1af95 100644 --- a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/AbstractOperatorExtension.java +++ b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/AbstractOperatorExtension.java @@ -34,6 +34,7 @@ public abstract class AbstractOperatorExtension implements HasKubernetesClient, private static final Logger LOGGER = LoggerFactory.getLogger(AbstractOperatorExtension.class); public static final int CRD_READY_WAIT = 2000; + public static final int DEFAULT_NAMESPACE_DELETE_TIMEOUT = 90; private final KubernetesClient kubernetesClient; protected final List infrastructure; @@ -41,6 +42,7 @@ public abstract class AbstractOperatorExtension implements HasKubernetesClient, protected final boolean oneNamespacePerClass; protected final boolean preserveNamespaceOnError; protected final boolean waitForNamespaceDeletion; + protected final int namespaceDeleteTimeout = DEFAULT_NAMESPACE_DELETE_TIMEOUT; protected String namespace; @@ -198,7 +200,7 @@ protected void after(ExtensionContext context) { LOGGER.info("Waiting for namespace {} to be deleted", namespace); Awaitility.await("namespace deleted") .pollInterval(50, TimeUnit.MILLISECONDS) - .atMost(90, TimeUnit.SECONDS) + .atMost(namespaceDeleteTimeout, TimeUnit.SECONDS) .until(() -> kubernetesClient.namespaces().withName(namespace).get() == null); } } @@ -216,6 +218,7 @@ public static abstract class AbstractBuilder> { protected boolean preserveNamespaceOnError; protected boolean waitForNamespaceDeletion; protected boolean oneNamespacePerClass; + protected int namespaceDeleteTimeout; protected AbstractBuilder() { this.infrastructure = new ArrayList<>(); @@ -232,6 +235,10 @@ protected AbstractBuilder() { this.oneNamespacePerClass = Utils.getSystemPropertyOrEnvVar( "josdk.it.oneNamespacePerClass", false); + + this.namespaceDeleteTimeout = Utils.getSystemPropertyOrEnvVar( + "josdk.it.namespaceDeleteTimeout", + DEFAULT_NAMESPACE_DELETE_TIMEOUT); } public T preserveNamespaceOnError(boolean value) { @@ -269,5 +276,9 @@ public T withInfrastructure(HasMetadata... hms) { return (T) this; } + public T withNamespaceDeleteTimeout(int timeout) { + this.namespaceDeleteTimeout = timeout; + return (T) this; + } } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java index aa4bc9175c..5f288d02fc 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java @@ -22,6 +22,7 @@ class BuiltInResourceCleanerIT { LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() .withReconciler(new ObservedGenerationTestReconciler()) + .withNamespaceDeleteTimeout(180) .build(); @Test diff --git a/pod.yaml b/pod.yaml new file mode 100644 index 0000000000..5c753ab452 --- /dev/null +++ b/pod.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Pod +metadata: + name: nginx +spec: + containers: + - name: nginx + image: nginx:1.14.2 + ports: + - containerPort: 80 \ No newline at end of file From a973842f23c58cc5046b5403420adc8a67ac1209 Mon Sep 17 00:00:00 2001 From: csviri Date: Wed, 16 Nov 2022 10:09:10 +0100 Subject: [PATCH 8/8] unit test, service instead of pod --- .../controller/InternalEventFiltersTest.java | 14 ++++++++++ .../operator/BuiltInResourceCleanerIT.java | 27 ++++++++++--------- .../ObservedGenerationTestReconciler.java | 12 ++++----- .../operator/pod-template.yaml | 10 ------- .../operator/service-template.yaml | 11 ++++++++ 5 files changed, 45 insertions(+), 29 deletions(-) delete mode 100644 operator-framework/src/test/resources/io/javaoperatorsdk/operator/pod-template.yaml create mode 100644 operator-framework/src/test/resources/io/javaoperatorsdk/operator/service-template.yaml diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/InternalEventFiltersTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/InternalEventFiltersTest.java index b60bb51ec9..f77435c6b7 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/InternalEventFiltersTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/InternalEventFiltersTest.java @@ -4,6 +4,8 @@ import org.junit.jupiter.api.Test; +import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; +import io.fabric8.kubernetes.api.model.Service; import io.javaoperatorsdk.operator.TestUtils; import static io.javaoperatorsdk.operator.TestUtils.markForDeletion; @@ -31,6 +33,12 @@ void generationAware() { assertThat(InternalEventFilters.onUpdateGenerationAware(false).accept(res, res)).isTrue(); } + @Test + void acceptsEventIfNoGenerationOnResource() { + assertThat(InternalEventFilters.onUpdateGenerationAware(true) + .accept(testService(), testService())).isTrue(); + } + @Test void finalizerCheckedIfConfigured() { assertThat(InternalEventFilters.onUpdateFinalizerNeededAndApplied(true, FINALIZER) @@ -57,4 +65,10 @@ void dontAcceptIfFinalizerNotUsed() { assertThat(InternalEventFilters.onUpdateFinalizerNeededAndApplied(false, FINALIZER) .accept(TestUtils.testCustomResource1(), TestUtils.testCustomResource1())).isFalse(); } + + Service testService() { + var service = new Service(); + service.setMetadata(new ObjectMetaBuilder().withName("test").withNamespace("default").build()); + return service; + } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java index 5f288d02fc..f5c663b358 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/BuiltInResourceCleanerIT.java @@ -7,7 +7,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.fabric8.kubernetes.api.model.Pod; +import io.fabric8.kubernetes.api.model.Service; import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension; import io.javaoperatorsdk.operator.sample.builtinresourcecleaner.ObservedGenerationTestReconciler; @@ -22,35 +22,36 @@ class BuiltInResourceCleanerIT { LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() .withReconciler(new ObservedGenerationTestReconciler()) - .withNamespaceDeleteTimeout(180) .build(); + /** + * Issue is with generation, some built in resources like Pod, Service does not seem to use + * generation. + */ @Test void cleanerIsCalledOnBuiltInResource() { - var pod = operator.create(testPod()); + var service = operator.create(testService()); await().untilAsserted(() -> { assertThat(operator.getReconcilerOfType(ObservedGenerationTestReconciler.class) .getReconcileCount()).isPositive(); - var actualPod = operator.get(Pod.class, pod.getMetadata().getName()); - assertThat(actualPod.getMetadata().getFinalizers()).isNotEmpty(); + var actualService = operator.get(Service.class, service.getMetadata().getName()); + assertThat(actualService.getMetadata().getFinalizers()).isNotEmpty(); }); - log.info("Deleting pod"); - operator.delete(pod); + operator.delete(service); await().untilAsserted(() -> { assertThat(operator.getReconcilerOfType(ObservedGenerationTestReconciler.class) .getCleanCount()).isPositive(); }); - log.info("everything ok, actual pod: {}", operator.get(Pod.class, pod.getMetadata().getName())); } - Pod testPod() { - Pod pod = ReconcilerUtils.loadYaml(Pod.class, StandaloneDependentResourceIT.class, - "pod-template.yaml"); - pod.getMetadata().setLabels(Map.of("builtintest", "true")); - return pod; + Service testService() { + Service service = ReconcilerUtils.loadYaml(Service.class, StandaloneDependentResourceIT.class, + "service-template.yaml"); + service.getMetadata().setLabels(Map.of("builtintest", "true")); + return service; } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/builtinresourcecleaner/ObservedGenerationTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/builtinresourcecleaner/ObservedGenerationTestReconciler.java index e7c2fce559..729b5e0594 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/builtinresourcecleaner/ObservedGenerationTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/builtinresourcecleaner/ObservedGenerationTestReconciler.java @@ -5,12 +5,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.fabric8.kubernetes.api.model.Pod; +import io.fabric8.kubernetes.api.model.Service; import io.javaoperatorsdk.operator.api.reconciler.*; @ControllerConfiguration(labelSelector = "builtintest=true") public class ObservedGenerationTestReconciler - implements Reconciler, Cleaner { + implements Reconciler, Cleaner { private static final Logger log = LoggerFactory.getLogger(ObservedGenerationTestReconciler.class); @@ -18,15 +18,15 @@ public class ObservedGenerationTestReconciler private AtomicInteger cleaned = new AtomicInteger(0); @Override - public UpdateControl reconcile( - Pod resource, - Context context) { + public UpdateControl reconcile( + Service resource, + Context context) { reconciled.addAndGet(1); return UpdateControl.noUpdate(); } @Override - public DeleteControl cleanup(Pod resource, Context context) { + public DeleteControl cleanup(Service resource, Context context) { cleaned.addAndGet(1); return DeleteControl.defaultDelete(); } diff --git a/operator-framework/src/test/resources/io/javaoperatorsdk/operator/pod-template.yaml b/operator-framework/src/test/resources/io/javaoperatorsdk/operator/pod-template.yaml deleted file mode 100644 index 3420a445a1..0000000000 --- a/operator-framework/src/test/resources/io/javaoperatorsdk/operator/pod-template.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: test-pod -spec: - containers: - - name: nginx - image: nginx:1.14.2 - ports: - - containerPort: 80 diff --git a/operator-framework/src/test/resources/io/javaoperatorsdk/operator/service-template.yaml b/operator-framework/src/test/resources/io/javaoperatorsdk/operator/service-template.yaml new file mode 100644 index 0000000000..de91b201ef --- /dev/null +++ b/operator-framework/src/test/resources/io/javaoperatorsdk/operator/service-template.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: my-service +spec: + selector: + app.kubernetes.io/name: MyApp + ports: + - protocol: TCP + port: 80 + targetPort: 9376 \ No newline at end of file