Skip to content

Add Webpage Sample to V2 + fix for observed generation #693

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 27 commits into from
Nov 23, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package io.javaoperatorsdk.operator.api;

import java.util.Optional;

import io.fabric8.kubernetes.client.CustomResource;
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;

Expand All @@ -24,6 +22,6 @@ public interface ObservedGenerationAware {

void setObservedGeneration(Long generation);

Optional<Long> getObservedGeneration();
Long getObservedGeneration();

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package io.javaoperatorsdk.operator.api;

import java.util.Optional;

/**
* A helper base class for status sub-resources classes to extend to support generate awareness.
*/
Expand All @@ -15,7 +13,7 @@ public void setObservedGeneration(Long generation) {
}

@Override
public Optional<Long> getObservedGeneration() {
return Optional.ofNullable(observedGeneration);
public Long getObservedGeneration() {
return observedGeneration;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public static <T extends HasMetadata> UpdateControl<T> updateResource(T customRe
return new UpdateControl<>(customResource, false, true);
}

public static <T extends HasMetadata> UpdateControl<T> updateStatusSubResource(
public static <T extends HasMetadata> UpdateControl<T> updateStatus(
T customResource) {
return new UpdateControl<>(customResource, true, false);
}
Expand All @@ -35,7 +35,7 @@ public static <T extends HasMetadata> UpdateControl<T> updateStatusSubResource(
* @param customResource - custom resource to use in both API calls
* @return UpdateControl instance
*/
public static <T extends HasMetadata> UpdateControl<T> updateCustomResourceAndStatus(
public static <T extends HasMetadata> UpdateControl<T> updateResourceAndStatus(
T customResource) {
return new UpdateControl<>(customResource, true, true);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,9 @@ private PostExecutionControl<R> handleDispatch(ExecutionScope<R> executionScope)
Context context =
new DefaultContext(executionScope.getRetryInfo());
if (markedForDeletion) {
return handleDelete(resource, context);
return handleCleanup(resource, context);
} else {
return handleCreateOrUpdate(executionScope, resource, context);
return handleReconcile(executionScope, resource, context);
}
}

Expand All @@ -99,7 +99,7 @@ private boolean shouldNotDispatchToDelete(R resource) {
return configuration().useFinalizer() && !resource.hasFinalizer(configuration().getFinalizer());
}

private PostExecutionControl<R> handleCreateOrUpdate(
private PostExecutionControl<R> handleReconcile(
ExecutionScope<R> executionScope, R resource, Context context) {
if (configuration().useFinalizer() && !resource.hasFinalizer(configuration().getFinalizer())) {
/*
Expand All @@ -114,7 +114,7 @@ private PostExecutionControl<R> handleCreateOrUpdate(
try {
var resourceForExecution =
cloneResourceForErrorStatusHandlerIfNeeded(resource, context);
return createOrUpdateExecution(executionScope, resourceForExecution, context);
return reconcileExecution(executionScope, resourceForExecution, context);
} catch (RuntimeException e) {
handleLastAttemptErrorStatusHandler(resource, context, e);
throw e;
Expand All @@ -137,7 +137,7 @@ private R cloneResourceForErrorStatusHandlerIfNeeded(R resource, Context context
}
}

private PostExecutionControl<R> createOrUpdateExecution(ExecutionScope<R> executionScope,
private PostExecutionControl<R> reconcileExecution(ExecutionScope<R> executionScope,
R resource, Context context) {
log.debug(
"Executing createOrUpdate for resource {} with version: {} with execution scope: {}",
Expand Down Expand Up @@ -222,7 +222,7 @@ private void updatePostExecutionControlWithReschedule(
baseControl.getScheduleDelay().ifPresent(postExecutionControl::withReSchedule);
}

private PostExecutionControl<R> handleDelete(R resource, Context context) {
private PostExecutionControl<R> handleCleanup(R resource, Context context) {
log.debug(
"Executing delete for resource: {} with version: {}",
getName(resource),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public final class ResourceEventFilters {
var actualGeneration = newResource.getMetadata().getGeneration();
var observedGeneration = ((ObservedGenerationAware) status)
.getObservedGeneration();
return observedGeneration.map(aLong -> actualGeneration > aLong).orElse(true);
return observedGeneration == null || actualGeneration > observedGeneration;
}
}
return oldResource == null || !generationAware ||
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ void updatesOnlyStatusSubResourceIfFinalizerSet() {
testCustomResource.addFinalizer(DEFAULT_FINALIZER);

when(reconciler.reconcile(eq(testCustomResource), any()))
.thenReturn(UpdateControl.updateStatusSubResource(testCustomResource));
.thenReturn(UpdateControl.updateStatus(testCustomResource));

reconciliationDispatcher.handleExecution(executionScopeWithCREvent(testCustomResource));

Expand All @@ -105,7 +105,7 @@ void updatesBothResourceAndStatusIfFinalizerSet() {
testCustomResource.addFinalizer(DEFAULT_FINALIZER);

when(reconciler.reconcile(eq(testCustomResource), any()))
.thenReturn(UpdateControl.updateCustomResourceAndStatus(testCustomResource));
.thenReturn(UpdateControl.updateResourceAndStatus(testCustomResource));
when(customResourceFacade.replaceWithLock(testCustomResource)).thenReturn(testCustomResource);

reconciliationDispatcher.handleExecution(executionScopeWithCREvent(testCustomResource));
Expand Down Expand Up @@ -281,7 +281,7 @@ void setReScheduleToPostExecutionControlFromUpdateControl() {

when(reconciler.reconcile(eq(testCustomResource), any()))
.thenReturn(
UpdateControl.updateStatusSubResource(testCustomResource).rescheduleAfter(1000L));
UpdateControl.updateStatus(testCustomResource).rescheduleAfter(1000L));

PostExecutionControl control =
reconciliationDispatcher.handleExecution(executionScopeWithCREvent(testCustomResource));
Expand Down Expand Up @@ -315,12 +315,12 @@ void setObservedGenerationForStatusIfNeeded() {

when(lConfiguration.isGenerationAware()).thenReturn(true);
when(lController.reconcile(eq(observedGenResource), any()))
.thenReturn(UpdateControl.updateStatusSubResource(observedGenResource));
.thenReturn(UpdateControl.updateStatus(observedGenResource));
when(lFacade.updateStatus(observedGenResource)).thenReturn(observedGenResource);

PostExecutionControl<ObservedGenCustomResource> control = lDispatcher.handleExecution(
executionScopeWithCREvent(observedGenResource));
assertThat(control.getUpdatedCustomResource().get().getStatus().getObservedGeneration().get())
assertThat(control.getUpdatedCustomResource().get().getStatus().getObservedGeneration())
.isEqualTo(1L);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ public UpdateControl<TestCustomResource> reconcile(

consumer.accept(resource);

return UpdateControl.updateStatusSubResource(resource);
return UpdateControl.updateStatus(resource);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package io.javaoperatorsdk.operator;

import java.util.concurrent.TimeUnit;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.fabric8.kubernetes.api.model.ObjectMeta;
import io.javaoperatorsdk.operator.config.runtime.DefaultConfigurationService;
import io.javaoperatorsdk.operator.junit.OperatorExtension;
import io.javaoperatorsdk.operator.sample.observedgeneration.ObservedGenerationTestCustomResource;
import io.javaoperatorsdk.operator.sample.observedgeneration.ObservedGenerationTestReconciler;

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

public class ObservedGenerationHandlingIT {
@RegisterExtension
OperatorExtension operator =
OperatorExtension.builder()
.withConfigurationService(DefaultConfigurationService.instance())
.withReconciler(new ObservedGenerationTestReconciler())
.build();

@Test
public void testReconciliationOfNonCustomResourceAndStatusUpdate() {
var resource = new ObservedGenerationTestCustomResource();
resource.setMetadata(new ObjectMeta());
resource.getMetadata().setName("observed-gen1");

var createdResource = operator.create(ObservedGenerationTestCustomResource.class, resource);

await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
var d = operator.get(ObservedGenerationTestCustomResource.class,
createdResource.getMetadata().getName());
assertThat(d.getStatus().getObservedGeneration()).isNotNull();
assertThat(d.getStatus().getObservedGeneration()).isEqualTo(1);
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public UpdateControl<Deployment> reconcile(
if (condition.isEmpty()) {
conditions.add(new DeploymentCondition(null, null, STATUS_MESSAGE, null,
"unknown", "DeploymentReconciler"));
return UpdateControl.updateStatusSubResource(resource);
return UpdateControl.updateStatus(resource);
} else {
return UpdateControl.noUpdate();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public UpdateControl<DoubleUpdateTestCustomResource> reconcile(
ensureStatusExists(resource);
resource.getStatus().setState(DoubleUpdateTestCustomResourceStatus.State.SUCCESS);

return UpdateControl.updateCustomResourceAndStatus(resource);
return UpdateControl.updateResourceAndStatus(resource);
}

private void ensureStatusExists(DoubleUpdateTestCustomResource resource) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public UpdateControl<EventSourceTestCustomResource> reconcile(
ensureStatusExists(resource);
resource.getStatus().setState(EventSourceTestCustomResourceStatus.State.SUCCESS);

return UpdateControl.updateStatusSubResource(resource).rescheduleAfter(TIMER_PERIOD);
return UpdateControl.updateStatus(resource).rescheduleAfter(TIMER_PERIOD);
}

private void ensureStatusExists(EventSourceTestCustomResource resource) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public UpdateControl<InformerEventSourceTestCustomResource> reconcile(
LOGGER.debug("Setting target status for CR: {}", targetStatus);
resource.setStatus(new InformerEventSourceTestCustomResourceStatus());
resource.getStatus().setConfigMapValue(targetStatus);
return UpdateControl.updateStatusSubResource(resource);
return UpdateControl.updateStatus(resource);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package io.javaoperatorsdk.operator.sample.observedgeneration;

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.Kind;
import io.fabric8.kubernetes.model.annotation.ShortNames;
import io.fabric8.kubernetes.model.annotation.Version;

@Group("sample.javaoperatorsdk")
@Version("v1")
@Kind("ObservedGenerationTestCustomResource")
@ShortNames("og")
public class ObservedGenerationTestCustomResource
extends CustomResource<Void, ObservedGenerationTestCustomResourceStatus>
implements Namespaced {

@Override
protected ObservedGenerationTestCustomResourceStatus initStatus() {
return new ObservedGenerationTestCustomResourceStatus();
}

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

import io.javaoperatorsdk.operator.api.ObservedGenerationAwareStatus;

public class ObservedGenerationTestCustomResourceStatus extends ObservedGenerationAwareStatus {

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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

import static io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration.NO_FINALIZER;

@ControllerConfiguration(finalizerName = NO_FINALIZER)
public class ObservedGenerationTestReconciler
implements Reconciler<ObservedGenerationTestCustomResource> {

private static final Logger log = LoggerFactory.getLogger(ObservedGenerationTestReconciler.class);

@Override
public UpdateControl<ObservedGenerationTestCustomResource> reconcile(
ObservedGenerationTestCustomResource resource, Context context) {
log.info("Reconcile ObservedGenerationTestCustomResource: {}",
resource.getMetadata().getName());
return UpdateControl.updateStatus(resource);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public UpdateControl<RetryTestCustomResource> reconcile(
ensureStatusExists(resource);
resource.getStatus().setState(RetryTestCustomResourceStatus.State.SUCCESS);

return UpdateControl.updateStatusSubResource(resource);
return UpdateControl.updateStatus(resource);
}

private void ensureStatusExists(RetryTestCustomResource resource) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ public UpdateControl<TestCustomResource> reconcile(
}
resource.getStatus().setConfigMapStatus("ConfigMap Ready");
}
return UpdateControl.updateStatusSubResource(resource);
return UpdateControl.updateStatus(resource);
}

private Map<String, String> configMapData(TestCustomResource resource) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public UpdateControl<SubResourceTestCustomResource> reconcile(
ensureStatusExists(resource);
resource.getStatus().setState(SubResourceTestCustomResourceStatus.State.SUCCESS);

return UpdateControl.updateStatusSubResource(resource);
return UpdateControl.updateStatus(resource);
}

private void ensureStatusExists(SubResourceTestCustomResource resource) {
Expand Down
55 changes: 1 addition & 54 deletions sample-operators/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,59 +20,6 @@

<modules>
<module>tomcat-operator</module>
<module>webpage</module>
</modules>

<dependencies>
<dependency>
<groupId>io.javaoperatorsdk</groupId>
<artifactId>operator-framework</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>org.takes</groupId>
<artifactId>takes</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<version>4.1.0</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>${jib-maven-plugin.version}</version>
<configuration>
<from>
<image>gcr.io/distroless/java:11</image>
</from>
<to>
<image>tomcat-operator</image>
</to>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public UpdateControl<Tomcat> reconcile(Tomcat tomcat, Context context) {
tomcat.getMetadata().getName(),
tomcat.getMetadata().getNamespace(),
tomcat.getStatus().getReadyReplicas());
return UpdateControl.updateStatusSubResource(updatedTomcat);
return UpdateControl.updateStatus(updatedTomcat);
}
return UpdateControl.noUpdate();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ public UpdateControl<Webapp> reconcile(Webapp webapp, Context context) {
}
webapp.getStatus().setDeployedArtifact(webapp.getSpec().getUrl());
webapp.getStatus().setDeploymentStatus(commandStatusInAllPods);
return UpdateControl.updateStatusSubResource(webapp);
return UpdateControl.updateStatus(webapp);
} else {
log.info("WebappController invoked but Tomcat not ready yet ({}/{})",
tomcat.getStatus() != null ? tomcat.getStatus().getReadyReplicas() : 0,
Expand Down
Loading