Skip to content

Commit c55d335

Browse files
committed
feat: initial upgrade of client to 5.0.0 and quarkus to 1.11.0.CR1
Quarkus 1.11.0.CR1 is the first version to use Fabric8's client 5.0 so we need to update both at the same time. Note that tests are not expected to pass at this point yet.
1 parent e26c31f commit c55d335

File tree

55 files changed

+188
-696
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+188
-696
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22

33
import io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinition;
44
import io.fabric8.kubernetes.client.CustomResource;
5-
import io.fabric8.kubernetes.client.CustomResourceDoneable;
65
import io.fabric8.kubernetes.client.CustomResourceList;
76
import io.fabric8.kubernetes.client.KubernetesClient;
87
import io.fabric8.kubernetes.client.dsl.MixedOperation;
98
import io.fabric8.kubernetes.client.dsl.base.CustomResourceDefinitionContext;
109
import io.fabric8.kubernetes.client.dsl.internal.CustomResourceOperationsImpl;
11-
import io.fabric8.kubernetes.internal.KubernetesDeserializer;
1210
import io.javaoperatorsdk.operator.api.ResourceController;
1311
import io.javaoperatorsdk.operator.api.config.ConfigurationService;
1412
import io.javaoperatorsdk.operator.processing.CustomResourceCache;
@@ -76,12 +74,10 @@ private <R extends CustomResource> void registerController(
7674
throws OperatorException {
7775
final var configuration = configurationService.getConfigurationFor(controller);
7876
Class<R> resClass = configuration.getCustomResourceClass();
79-
CustomResourceDefinitionContext crd = getCustomResourceDefinitionForController(controller);
80-
KubernetesDeserializer.registerCustomKind(crd.getVersion(), crd.getKind(), resClass);
77+
/*CustomResourceDefinitionContext crd = getCustomResourceDefinitionForController(controller);
78+
KubernetesDeserializer.registerCustomKind(crd.getVersion(), crd.getKind(), resClass);*/
8179
String finalizer = configuration.getFinalizer();
82-
MixedOperation client =
83-
k8sClient.customResources(
84-
crd, resClass, CustomResourceList.class, configuration.getDoneableClass());
80+
MixedOperation client = k8sClient.customResources(resClass);
8581
EventDispatcher eventDispatcher =
8682
new EventDispatcher(
8783
controller, finalizer, new EventDispatcher.CustomResourceFacade(client));
@@ -156,11 +152,8 @@ private CustomResourceDefinitionContext getCustomResourceDefinitionForController
156152
return customResourceClients;
157153
}
158154

159-
public <
160-
T extends CustomResource,
161-
L extends CustomResourceList<T>,
162-
D extends CustomResourceDoneable<T>>
163-
CustomResourceOperationsImpl<T, L, D> getCustomResourceClients(Class<T> customResourceClass) {
155+
public <T extends CustomResource, L extends CustomResourceList<T>>
156+
CustomResourceOperationsImpl<T, L> getCustomResourceClients(Class<T> customResourceClass) {
164157
return customResourceClients.get(customResourceClass);
165158
}
166159
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/Controller.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111

1212
String NULL = "";
1313

14-
String crdName();
15-
1614
String name() default NULL;
1715

1816
/**

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfiguration.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.javaoperatorsdk.operator.api.config;
22

33
import io.fabric8.kubernetes.client.CustomResource;
4-
import io.fabric8.kubernetes.client.CustomResourceDoneable;
54
import java.util.Collections;
65
import java.util.Set;
76

@@ -19,8 +18,6 @@ public interface ControllerConfiguration<R extends CustomResource> {
1918

2019
Class<R> getCustomResourceClass();
2120

22-
Class<? extends CustomResourceDoneable<R>> getDoneableClass();
23-
2421
String getAssociatedControllerClassName();
2522

2623
default boolean isClusterScoped() {

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/EventDispatcher.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,10 +191,9 @@ private void addFinalizerIfNotPresent(CustomResource resource) {
191191
// created to support unit testing
192192
public static class CustomResourceFacade {
193193

194-
private final MixedOperation<?, ?, ?, Resource<CustomResource, ?>> resourceOperation;
194+
private final MixedOperation<?, ?, Resource<CustomResource>> resourceOperation;
195195

196-
public CustomResourceFacade(
197-
MixedOperation<?, ?, ?, Resource<CustomResource, ?>> resourceOperation) {
196+
public CustomResourceFacade(MixedOperation<?, ?, Resource<CustomResource>> resourceOperation) {
198197
this.resourceOperation = resourceOperation;
199198
}
200199

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/internal/CustomResourceEventSource.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@
33
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getUID;
44
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getVersion;
55
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.markedForDeletion;
6-
import static java.net.HttpURLConnection.HTTP_GONE;
76

87
import io.fabric8.kubernetes.client.CustomResource;
9-
import io.fabric8.kubernetes.client.KubernetesClientException;
108
import io.fabric8.kubernetes.client.Watcher;
9+
import io.fabric8.kubernetes.client.WatcherException;
1110
import io.fabric8.kubernetes.client.dsl.MixedOperation;
1211
import io.fabric8.kubernetes.client.dsl.internal.CustomResourceOperationsImpl;
1312
import io.javaoperatorsdk.operator.ControllerUtils;
@@ -151,11 +150,11 @@ public void eventSourceDeRegisteredForResource(String customResourceUid) {
151150
}
152151

153152
@Override
154-
public void onClose(KubernetesClientException e) {
153+
public void onClose(WatcherException e) {
155154
if (e == null) {
156155
return;
157156
}
158-
if (e.getCode() == HTTP_GONE) {
157+
if (e.isHttpGone()) {
159158
log.warn("Received error for watch, will try to reconnect.", e);
160159
registerWatch();
161160
} else {
Lines changed: 6 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,10 @@
11
package io.javaoperatorsdk.operator.sample.simple;
22

33
import io.fabric8.kubernetes.client.CustomResource;
4+
import io.fabric8.kubernetes.model.annotation.Group;
5+
import io.fabric8.kubernetes.model.annotation.Version;
46

5-
public class TestCustomResource extends CustomResource {
6-
7-
private TestCustomResourceSpec spec;
8-
9-
private TestCustomResourceStatus status;
10-
11-
public TestCustomResourceSpec getSpec() {
12-
return spec;
13-
}
14-
15-
public void setSpec(TestCustomResourceSpec spec) {
16-
this.spec = spec;
17-
}
18-
19-
public TestCustomResourceStatus getStatus() {
20-
return status;
21-
}
22-
23-
public void setStatus(TestCustomResourceStatus status) {
24-
this.status = status;
25-
}
26-
27-
@Override
28-
public String toString() {
29-
return "TestCustomResource{"
30-
+ "spec="
31-
+ spec
32-
+ ", status="
33-
+ status
34-
+ ", extendedFrom="
35-
+ super.toString()
36-
+ '}';
37-
}
38-
}
7+
@Group("sample.javaoperatorsdk.io")
8+
@Version("v1")
9+
public class TestCustomResource
10+
extends CustomResource<TestCustomResourceSpec, TestCustomResourceStatus> {}

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomResourceController.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.fabric8.kubernetes.api.model.ConfigMap;
44
import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
55
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
6+
import io.fabric8.kubernetes.client.CustomResource;
67
import io.fabric8.kubernetes.client.KubernetesClient;
78
import io.javaoperatorsdk.operator.api.Context;
89
import io.javaoperatorsdk.operator.api.Controller;
@@ -14,12 +15,12 @@
1415
import org.slf4j.Logger;
1516
import org.slf4j.LoggerFactory;
1617

17-
@Controller(generationAwareEventProcessing = false, crdName = TestCustomResourceController.CRD_NAME)
18+
@Controller(generationAwareEventProcessing = false)
1819
public class TestCustomResourceController implements ResourceController<TestCustomResource> {
1920

2021
private static final Logger log = LoggerFactory.getLogger(TestCustomResourceController.class);
2122

22-
public static final String CRD_NAME = "customservices.sample.javaoperatorsdk";
23+
public static final String CRD_NAME = CustomResource.getCRDName(TestCustomResource.class);
2324
public static final String FINALIZER_NAME = CRD_NAME + "/finalizer";
2425

2526
private final KubernetesClient kubernetesClient;

operator-framework-quarkus-extension/deployment/src/main/java/io/javaoperatorsdk/quarkus/extension/deployment/QuarkusExtensionProcessor.java

Lines changed: 4 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.javaoperatorsdk.quarkus.extension.deployment;
22

33
import io.fabric8.kubernetes.client.CustomResource;
4-
import io.fabric8.kubernetes.client.CustomResourceDoneable;
54
import io.javaoperatorsdk.operator.ControllerUtils;
65
import io.javaoperatorsdk.operator.api.Controller;
76
import io.javaoperatorsdk.operator.api.ResourceController;
@@ -13,21 +12,14 @@
1312
import io.javaoperatorsdk.quarkus.extension.QuarkusControllerConfiguration;
1413
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
1514
import io.quarkus.arc.deployment.SyntheticBeanBuildItem;
16-
import io.quarkus.deployment.GeneratedClassGizmoAdaptor;
1715
import io.quarkus.deployment.annotations.BuildProducer;
1816
import io.quarkus.deployment.annotations.BuildStep;
1917
import io.quarkus.deployment.annotations.ExecutionTime;
2018
import io.quarkus.deployment.annotations.Record;
2119
import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
2220
import io.quarkus.deployment.builditem.FeatureBuildItem;
23-
import io.quarkus.deployment.builditem.GeneratedClassBuildItem;
2421
import io.quarkus.deployment.builditem.IndexDependencyBuildItem;
2522
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
26-
import io.quarkus.gizmo.ClassCreator;
27-
import io.quarkus.gizmo.ClassOutput;
28-
import io.quarkus.gizmo.MethodCreator;
29-
import io.quarkus.gizmo.MethodDescriptor;
30-
import java.lang.reflect.Modifier;
3123
import java.util.List;
3224
import java.util.Optional;
3325
import java.util.function.Function;
@@ -66,21 +58,19 @@ void indexSDKDependencies(BuildProducer<IndexDependencyBuildItem> indexDependenc
6658
@Record(ExecutionTime.STATIC_INIT)
6759
void createConfigurationServiceAndOperator(
6860
CombinedIndexBuildItem combinedIndexBuildItem,
69-
BuildProducer<GeneratedClassBuildItem> generatedClass,
7061
BuildProducer<SyntheticBeanBuildItem> syntheticBeanBuildItemBuildProducer,
7162
BuildProducer<AdditionalBeanBuildItem> additionalBeans,
7263
BuildProducer<ReflectiveClassBuildItem> reflectionClasses,
7364
ConfigurationServiceRecorder recorder) {
7465
final var index = combinedIndexBuildItem.getIndex();
7566
final var resourceControllers = index.getAllKnownImplementors(RESOURCE_CONTROLLER);
7667

77-
final var classOutput = new GeneratedClassGizmoAdaptor(generatedClass, true);
7868
final List<ControllerConfiguration> controllerConfigs =
7969
resourceControllers.stream()
8070
.map(
8171
ci ->
8272
createControllerConfiguration(
83-
ci, classOutput, additionalBeans, reflectionClasses))
73+
ci, additionalBeans, reflectionClasses))
8474
.collect(Collectors.toList());
8575

8676
final var supplier = recorder.configurationServiceSupplier(controllerConfigs);
@@ -96,9 +86,7 @@ void createConfigurationServiceAndOperator(
9686
}
9787

9888
private ControllerConfiguration createControllerConfiguration(
99-
ClassInfo info,
100-
ClassOutput classOutput,
101-
BuildProducer<AdditionalBeanBuildItem> additionalBeans,
89+
ClassInfo info, BuildProducer<AdditionalBeanBuildItem> additionalBeans,
10290
BuildProducer<ReflectiveClassBuildItem> reflectionClasses) {
10391
// first retrieve the custom resource class
10492
final var rcInterface =
@@ -115,33 +103,6 @@ private ControllerConfiguration createControllerConfiguration(
115103
final var resourceControllerClassName = info.name().toString();
116104
additionalBeans.produce(AdditionalBeanBuildItem.unremovableOf(resourceControllerClassName));
117105

118-
// generate associated Doneable class
119-
final var doneableClassName = crType + "Doneable";
120-
final var crDoneableClassName = CustomResourceDoneable.class.getName();
121-
try (ClassCreator cc =
122-
ClassCreator.builder()
123-
.signature(
124-
String.format(
125-
"Lio/fabric8/kubernetes/client/CustomResourceDoneable<L%s;>;",
126-
crType.replace('.', '/')))
127-
.classOutput(classOutput)
128-
.className(doneableClassName)
129-
.superClass(crDoneableClassName)
130-
.build()) {
131-
132-
final var functionName = io.fabric8.kubernetes.api.builder.Function.class.getName();
133-
MethodCreator ctor =
134-
cc.getMethodCreator("<init>", void.class.getName(), crType, functionName);
135-
ctor.setModifiers(Modifier.PUBLIC);
136-
ctor.invokeSpecialMethod(
137-
MethodDescriptor.ofConstructor(
138-
crDoneableClassName, CustomResource.class.getName(), functionName),
139-
ctor.getThis(),
140-
ctor.getMethodParam(0),
141-
ctor.getMethodParam(1));
142-
ctor.returnValue(null);
143-
}
144-
145106
// generate configuration
146107
final var controllerAnnotation = info.classAnnotation(CONTROLLER);
147108
if (controllerAnnotation == null) {
@@ -158,9 +119,8 @@ private ControllerConfiguration createControllerConfiguration(
158119
// register CR class for introspection
159120
reflectionClasses.produce(new ReflectiveClassBuildItem(true, true, crClass));
160121

161-
final var crdName =
162-
valueOrDefault(
163-
controllerAnnotation, "crdName", AnnotationValue::asString, EXCEPTION_SUPPLIER);
122+
// retrieve CRD name from CR type
123+
final var crdName = CustomResource.getCRDName(crClass);
164124

165125
// create the configuration
166126
final var configuration =
@@ -192,7 +152,6 @@ private ControllerConfiguration createControllerConfiguration(
192152
AnnotationValue::asStringArray,
193153
() -> new String[] {})),
194154
crType,
195-
doneableClassName,
196155
null // todo: fix-me
197156
);
198157

operator-framework-quarkus-extension/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2020
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
2121
<maven.compiler.parameters>true</maven.compiler.parameters>
22-
<quarkus.version>1.10.5.Final</quarkus.version>
22+
<quarkus.version>1.11.0.CR1</quarkus.version>
2323
<compiler-plugin.version>3.8.1</compiler-plugin.version>
2424
<maven.surefire.version>3.0.0-M5</maven.surefire.version>
2525
</properties>

operator-framework-quarkus-extension/runtime/src/main/java/io/javaoperatorsdk/quarkus/extension/QuarkusControllerConfiguration.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.javaoperatorsdk.quarkus.extension;
22

33
import io.fabric8.kubernetes.client.CustomResource;
4-
import io.fabric8.kubernetes.client.CustomResourceDoneable;
54
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
65
import io.javaoperatorsdk.operator.api.config.RetryConfiguration;
76
import io.quarkus.runtime.annotations.RecordableConstructor;
@@ -18,7 +17,6 @@ public class QuarkusControllerConfiguration<R extends CustomResource>
1817
private final boolean clusterScoped;
1918
private final Set<String> namespaces;
2019
private final String crClass;
21-
private final String doneableClassName;
2220
private final boolean watchAllNamespaces;
2321
private final RetryConfiguration retryConfiguration;
2422

@@ -32,7 +30,6 @@ public QuarkusControllerConfiguration(
3230
boolean clusterScoped,
3331
Set<String> namespaces,
3432
String crClass,
35-
String doneableClassName,
3633
RetryConfiguration retryConfiguration) {
3734
this.associatedControllerClassName = associatedControllerClassName;
3835
this.name = name;
@@ -42,7 +39,6 @@ public QuarkusControllerConfiguration(
4239
this.clusterScoped = clusterScoped;
4340
this.namespaces = namespaces;
4441
this.crClass = crClass;
45-
this.doneableClassName = doneableClassName;
4642
this.watchAllNamespaces = this.namespaces.contains(WATCH_ALL_NAMESPACES_MARKER);
4743
this.retryConfiguration =
4844
retryConfiguration == null
@@ -66,11 +62,6 @@ public String getCrClass() {
6662
return crClass;
6763
}
6864

69-
// Needed for Quarkus to find the associated constructor parameter
70-
public String getDoneableClassName() {
71-
return doneableClassName;
72-
}
73-
7465
@Override
7566
public String getName() {
7667
return name;
@@ -96,11 +87,6 @@ public Class<R> getCustomResourceClass() {
9687
return (Class<R>) loadClass(crClass);
9788
}
9889

99-
@Override
100-
public Class<? extends CustomResourceDoneable<R>> getDoneableClass() {
101-
return (Class<? extends CustomResourceDoneable<R>>) loadClass(doneableClassName);
102-
}
103-
10490
private Class<?> loadClass(String className) {
10591
try {
10692
return Thread.currentThread().getContextClassLoader().loadClass(className);

operator-framework-quarkus-extension/tests/src/main/java/io/javaoperatorsdk/quarkus/it/TestController.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@
66
import io.javaoperatorsdk.operator.api.ResourceController;
77
import io.javaoperatorsdk.operator.api.UpdateControl;
88

9-
@Controller(crdName = TestController.CRD_NAME, name = TestController.NAME)
9+
@Controller(name = TestController.NAME)
1010
public class TestController implements ResourceController<TestResource> {
1111
public static final String NAME = "test";
12-
public static final String CRD_NAME = "test.example.com";
1312

1413
@Override
1514
public DeleteControl deleteResource(TestResource resource, Context<TestResource> context) {
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package io.javaoperatorsdk.quarkus.it;
22

33
import io.fabric8.kubernetes.client.CustomResource;
4+
import io.fabric8.kubernetes.model.annotation.Group;
5+
import io.fabric8.kubernetes.model.annotation.Version;
46

7+
@Group("example.com")
8+
@Version("v1")
59
public class TestResource extends CustomResource {}

operator-framework-quarkus-extension/tests/src/test/java/io/javaoperatorsdk/quarkus/it/QuarkusExtensionProcessorTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ void configurationForControllerShouldExist() {
4949
.statusCode(200)
5050
.body(
5151
"customResourceClass", equalTo(resourceName),
52-
"doneableClass", equalTo(resourceName + "Doneable"),
53-
"name", equalTo(TestController.NAME),
54-
"crdName", equalTo(TestController.CRD_NAME));
52+
"name", equalTo(TestController.NAME));
5553
}
5654
}

0 commit comments

Comments
 (0)