Skip to content

Commit

Permalink
chore: update to JOSDK 3.2 & fabric8 client 6.1, pending Quarkus update
Browse files Browse the repository at this point in the history
  • Loading branch information
metacosm committed Sep 7, 2022
1 parent 7f2354d commit a5e8428
Show file tree
Hide file tree
Showing 10 changed files with 36 additions and 46 deletions.
Expand Up @@ -82,16 +82,6 @@ public static <T> ClassInfo getClassInfoForInstantiation(AnnotationValue toInsta
return expectedTypeInfo;
}

public static <T> T instantiateImplementationClass(
AnnotationInstance annotation,
String annotationFieldName,
Class<T> interfaceClass,
Class<? extends T> defaultImplementation,
IndexView index) {
return instantiateImplementationClass(annotation, annotationFieldName, interfaceClass, defaultImplementation, false,
index);
}

@SuppressWarnings("unchecked")
public static <T> T instantiateImplementationClass(
AnnotationInstance annotation,
Expand Down
Expand Up @@ -28,18 +28,18 @@ public void visit(KubernetesListBuilder list) {
controllerToCustomResourceMappings.forEach((controller, cri) -> {
final var rule = new PolicyRuleBuilder();
final var plural = cri.getPlural();
rule.addNewResource(plural);
rule.addToResources(plural);

// if the resource has a non-Void status, also add the status resource
if (cri.isStatusPresentAndNotVoid()) {
rule.addNewResource(plural + "/status");
rule.addToResources(plural + "/status");
}

// add finalizers sub-resource because it's used in several contexts, even in the absence of finalizers
// see: https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement
rule.addNewResource(plural + "/finalizers");
rule.addToResources(plural + "/finalizers");

rule.addNewApiGroup(cri.getGroup())
rule.addToApiGroups(cri.getGroup())
.addToVerbs(ALL_VERBS)
.build();

Expand All @@ -59,8 +59,8 @@ public void visit(KubernetesListBuilder list) {
if (!contains(list, HasMetadata.getApiVersion(ClusterRole.class), HasMetadata.getKind(ClusterRole.class), crName)) {
list.addToItems(new ClusterRoleBuilder().withNewMetadata().withName(crName).endMetadata()
.addToRules(new PolicyRuleBuilder()
.addNewApiGroup("apiextensions.k8s.io")
.addNewResource("customresourcedefinitions")
.addToApiGroups("apiextensions.k8s.io")
.addToResources("customresourcedefinitions")
.addToVerbs("get", "list")
.build()));
}
Expand Down
Expand Up @@ -37,10 +37,6 @@
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.OnDeleteFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.VoidGenericFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.VoidOnAddFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.VoidOnDeleteFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.VoidOnUpdateFilter;
import io.javaoperatorsdk.operator.processing.retry.GenericRetry;
import io.javaoperatorsdk.operator.processing.retry.Retry;
import io.quarkiverse.operatorsdk.common.AnnotationConfigurableAugmentedClassInfo;
Expand Down Expand Up @@ -217,21 +213,23 @@ QuarkusControllerConfiguration build(ReconcilerAugmentedClassInfo reconcilerInfo
}

onAddFilter = ConfigurationUtils.instantiateImplementationClass(
controllerAnnotation, "onAddFilter", OnAddFilter.class, VoidOnAddFilter.class, index);
controllerAnnotation, "onAddFilter", OnAddFilter.class, OnAddFilter.class, true, index);
onUpdateFilter = ConfigurationUtils.instantiateImplementationClass(
controllerAnnotation, "onUpdateFilter", OnUpdateFilter.class, VoidOnUpdateFilter.class,
index);
controllerAnnotation, "onUpdateFilter", OnUpdateFilter.class, OnUpdateFilter.class,
true, index);
genericFilter = ConfigurationUtils.instantiateImplementationClass(
controllerAnnotation, "genericFilter", GenericFilter.class, VoidGenericFilter.class,
index);
controllerAnnotation, "genericFilter", GenericFilter.class, GenericFilter.class,
true, index);
retry = ConfigurationUtils.instantiateImplementationClass(
controllerAnnotation, "retry", Retry.class, GenericRetry.class,
false, index);
assert retry != null;
final var retryConfigurableInfo = configurableInfos.get(retry.getClass().getName());
retryConfigurationClass = getConfigurationClass(reconcilerInfo, retryConfigurableInfo);
rateLimiter = ConfigurationUtils.instantiateImplementationClass(
controllerAnnotation, "rateLimiter", RateLimiter.class, DefaultRateLimiter.class,
false, index);
assert rateLimiter != null;
final var rateLimiterConfigurableInfo = configurableInfos.get(rateLimiter.getClass().getName());
rateLimiterConfigurationClass = getConfigurationClass(reconcilerInfo, rateLimiterConfigurableInfo);
}
Expand Down Expand Up @@ -341,18 +339,18 @@ private Map<String, QuarkusDependentResourceSpec> createDependentResources(
}
final var onAddFilter = ConfigurationUtils.instantiateImplementationClass(
kubeDepConfig, "onAddFilter", OnAddFilter.class,
VoidOnAddFilter.class, index);
OnAddFilter.class, true, index);
final var onUpdateFilter = ConfigurationUtils.instantiateImplementationClass(
kubeDepConfig, "onUpdateFilter", OnUpdateFilter.class,
VoidOnUpdateFilter.class,
OnUpdateFilter.class, true,
index);
final var onDeleteFilter = ConfigurationUtils.instantiateImplementationClass(
kubeDepConfig, "onDeleteFilter", OnDeleteFilter.class,
VoidOnDeleteFilter.class,
OnDeleteFilter.class, true,
index);
final var genericFilter = ConfigurationUtils.instantiateImplementationClass(
kubeDepConfig, "genericFilter", GenericFilter.class,
VoidGenericFilter.class,
GenericFilter.class, true,
index);

cfg = new QuarkusKubernetesDependentResourceConfig(dependentNamespaces, labelSelector, configuredNS,
Expand Down
Expand Up @@ -3,6 +3,7 @@
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -208,7 +209,9 @@ static class JSONKubernetesResourceConfig {
}

public String getOnAddFilter() {
return config.onAddFilter().getClass().getCanonicalName();
return Optional.ofNullable(config.onAddFilter())
.map(f -> f.getClass().getCanonicalName())
.orElse(null);
}

public String getLabelSelector() {
Expand Down
@@ -1,8 +1,8 @@
package io.quarkiverse.operatorsdk.it;

import io.quarkus.test.junit.NativeImageTest;
import io.quarkus.test.junit.QuarkusIntegrationTest;

@NativeImageTest
@QuarkusIntegrationTest
public class NativeOperatorSDKResourceIT extends OperatorSDKResourceTest {

}
Expand Up @@ -16,7 +16,7 @@

import io.javaoperatorsdk.operator.api.reconciler.Constants;
import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.DisabledOnNativeImage;
import io.quarkus.test.junit.DisabledOnIntegrationTest;
import io.quarkus.test.junit.QuarkusTest;

@QuarkusTest
Expand All @@ -35,7 +35,7 @@ void shouldNotValidateCRs() {
}

@Test
@DisabledOnNativeImage("Skipped because native tests are run using LaunchMode.NORMAL")
@DisabledOnIntegrationTest("Skipped because native tests are run using LaunchMode.NORMAL")
void shouldApplyCRDsByDefaultInTestMode() {
given().when().get("/operator/config").then().statusCode(200).body(
"applyCRDs", equalTo(true));
Expand Down
6 changes: 3 additions & 3 deletions pom.xml
Expand Up @@ -12,9 +12,9 @@
<packaging>pom</packaging>
<name>Quarkus - Operator SDK - Parent</name>
<properties>
<quarkus.version>2.12.0.Final</quarkus.version>
<java-operator-sdk.version>3.1.1</java-operator-sdk.version>
<kubernetes-client.version>5.12.3</kubernetes-client.version>
<quarkus.version>999-SNAPSHOT</quarkus.version>
<java-operator-sdk.version>3.2.0</java-operator-sdk.version>
<kubernetes-client.version>6.1.1</kubernetes-client.version>
</properties>

<profiles>
Expand Down
Expand Up @@ -9,7 +9,6 @@
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.IngressBuilder;
import io.javaoperatorsdk.operator.api.reconciler.Context;
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition;

Expand Down Expand Up @@ -52,7 +51,7 @@ public Ingress desired(ExposedApp exposedApp, Context context) {
}

/**
* Assumes Ingress is ready as determined by {@link #isMet(DependentResource, ExposedApp, Context)}
* Assumes Ingress is ready as determined by {@link #isMet(ExposedApp, Ingress, Context)}
*
* @param ingress the ingress
* @return the URL exposed by the specified Ingress
Expand All @@ -66,10 +65,9 @@ static String getExposedURL(Ingress ingress) {
}

@Override
public boolean isMet(DependentResource<Ingress, ExposedApp> dependentResource,
ExposedApp exposedApp, Context<ExposedApp> context) {
return context.getSecondaryResource(Ingress.class).map(ingress -> {
final var status = ingress.getStatus();
public boolean isMet(ExposedApp exposedApp, Ingress ingress, Context<ExposedApp> context) {
return context.getSecondaryResource(Ingress.class).map(in -> {
final var status = in.getStatus();
if (status != null) {
final var ingresses = status.getLoadBalancer().getIngress();
// only set the status if the ingress is ready to provide the info we need
Expand Down
Expand Up @@ -28,7 +28,7 @@ public Service desired(ExposedApp exposedApp, Context context) {
.addNewPort()
.withName("http")
.withPort(8080)
.withNewTargetPort().withIntVal(8080).endTargetPort()
.withNewTargetPort().withValue(8080).endTargetPort()
.endPort()
.withSelector(labels)
.withType("ClusterIP")
Expand Down
Expand Up @@ -33,14 +33,15 @@ void reconcileShouldWork() {

final var app = new ExposedApp();
final var client = mockServer.getClient();
final String namespace = client.getNamespace();
final var metadata = new ObjectMetaBuilder()
.withName("test-app")
.withNamespace(client.getNamespace())
.withNamespace(namespace)
.build();
app.setMetadata(metadata);
app.getSpec().setImageRef("group/imageName:tag");

client.resources(ExposedApp.class).create(app);
client.resource(app).inNamespace(namespace).create();

await().ignoreException(NullPointerException.class).atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
// check that we create the deployment
Expand Down

0 comments on commit a5e8428

Please sign in to comment.