Skip to content

Commit eb26d74

Browse files
committed
impl basic backwards compatible
1 parent 78ff963 commit eb26d74

File tree

6 files changed

+30
-10
lines changed

6 files changed

+30
-10
lines changed

operator-framework/src/main/java/com/github/containersolutions/operator/ControllerUtils.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import io.fabric8.kubernetes.client.CustomResourceDoneable;
77
import io.fabric8.kubernetes.client.CustomResourceList;
88

9+
import java.util.Optional;
10+
911
class ControllerUtils {
1012

1113
public static final String GROUP_API_DELIMITER = "/";
@@ -22,16 +24,23 @@ static String getApiVersion(ResourceController controller) {
2224
return getGroup(controller) + GROUP_API_DELIMITER + getAnnotation(controller).version();
2325
}
2426

25-
2627
static String getVersion(ResourceController controller) {
2728
return getAnnotation(controller).version();
2829
}
2930

31+
static Optional<String> getCrdName(ResourceController controller) {
32+
String crdName = getAnnotation(controller).crdName();
33+
if (crdName.isEmpty()) {
34+
return Optional.empty();
35+
} else {
36+
return Optional.of(crdName);
37+
}
38+
}
39+
3040
static String getKind(ResourceController controller) {
3141
return getAnnotation(controller).kind();
3242
}
3343

34-
3544
static <R extends CustomResource> Class<? extends CustomResourceList<R>> getCustomResourceListClass(ResourceController controller) {
3645
return (Class<? extends CustomResourceList<R>>) getAnnotation(controller).customResourceListClass();
3746
}
@@ -40,10 +49,10 @@ static <R extends CustomResource> Class<? extends CustomResourceDoneable<R>> get
4049
return (Class<? extends CustomResourceDoneable<R>>) getAnnotation(controller).customResourceDonebaleClass();
4150
}
4251

43-
4452
private static String getGroup(ResourceController controller) {
4553
return getAnnotation(controller).group();
4654
}
55+
4756
private static Controller getAnnotation(ResourceController controller) {
4857
return controller.getClass().getAnnotation(Controller.class);
4958
}

operator-framework/src/main/java/com/github/containersolutions/operator/Operator.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,16 @@ private <R extends CustomResource> void registerWatches(ResourceController<R> co
8484
}
8585

8686
private Optional<CustomResourceDefinition> getCustomResourceDefinitionForController(ResourceController controller) {
87-
CustomResourceDefinitionList crdList = k8sClient.customResourceDefinitions().list();
88-
89-
return crdList.getItems().stream()
90-
.filter(c -> getKind(controller).equals(c.getSpec().getNames().getKind()) &&
91-
getVersion(controller).equals(c.getSpec().getVersion()))
92-
.findFirst();
87+
Optional<String> crdName = getCrdName(controller);
88+
if (crdName.isPresent()) {
89+
return Optional.ofNullable(k8sClient.customResourceDefinitions().withName(crdName.get()).get());
90+
} else {
91+
CustomResourceDefinitionList crdList = k8sClient.customResourceDefinitions().list();
92+
return crdList.getItems().stream()
93+
.filter(c -> getKind(controller).equals(c.getSpec().getNames().getKind()) &&
94+
getVersion(controller).equals(c.getSpec().getVersion()))
95+
.findFirst();
96+
}
9397
}
9498

9599
public Map<Class<? extends CustomResource>, CustomResourceOperationsImpl> getCustomResourceClients() {

operator-framework/src/main/java/com/github/containersolutions/operator/api/Controller.java

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

2020
String version() default DEFAULT_VERSION;
2121

22+
String crdName() default "";
23+
2224
String group();
2325

2426
String kind();

operator-framework/src/test/java/com/github/containersolutions/operator/ControllerUtilsTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import static com.github.containersolutions.operator.api.Controller.DEFAULT_FINALIZER;
1010
import static com.github.containersolutions.operator.api.Controller.DEFAULT_VERSION;
11+
import static com.github.containersolutions.operator.sample.TestCustomResourceController.CRD_NAME;
1112
import static com.github.containersolutions.operator.sample.TestCustomResourceController.TEST_GROUP;
1213
import static org.junit.jupiter.api.Assertions.assertEquals;
1314

@@ -22,6 +23,7 @@ public void returnsValuesFromControllerAnnotationFinalizer() {
2223
assertEquals(TestCustomResource.class, ControllerUtils.getCustomResourceClass(new TestCustomResourceController()));
2324
assertEquals(TestCustomResourceDoneable.class, ControllerUtils.getCustomResourceDonebaleClass(new TestCustomResourceController()));
2425
assertEquals(TestCustomResourceList.class, ControllerUtils.getCustomResourceListClass(new TestCustomResourceController()));
26+
assertEquals(CRD_NAME, ControllerUtils.getCrdName(new TestCustomResourceController()).get());
2527
}
2628

27-
}
29+
}

operator-framework/src/test/java/com/github/containersolutions/operator/sample/TestCustomResourceController.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.Optional;
88

99
@Controller(
10+
crdName = TestCustomResourceController.CRD_NAME,
1011
group = TestCustomResourceController.TEST_GROUP,
1112
kind = TestCustomResourceController.KIND_NAME,
1213
customResourceClass = TestCustomResource.class,
@@ -16,6 +17,7 @@ public class TestCustomResourceController implements ResourceController<TestCust
1617

1718
public static final String KIND_NAME = "customResourceDefinition";
1819
public static final String TEST_GROUP = "test.group";
20+
public static final String CRD_NAME = "crdName";
1921

2022
@Override
2123
public boolean deleteResource(TestCustomResource resource, Context<TestCustomResource> context) {

samples/basic/common/src/main/java/com/github/containersolutions/operator/sample/CustomServiceController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
* A very simple sample controller that creates a service with a label.
1616
*/
1717
@Controller(customResourceClass = CustomService.class,
18+
crdName = "customservices.sample.javaoperatorsdk",
1819
kind = CustomServiceController.KIND,
1920
group = CustomServiceController.GROUP,
2021
customResourceListClass = CustomServiceList.class,

0 commit comments

Comments
 (0)