From a093e550eef97409a22e891d8ff583bafbd14fb4 Mon Sep 17 00:00:00 2001 From: csviri Date: Tue, 22 Nov 2022 12:43:47 +0100 Subject: [PATCH 1/6] refactor: further naming refactor --- core/pom.xml | 2 +- pom.xml | 2 +- samples/commons/pom.xml | 2 +- samples/pom.xml | 2 +- samples/quarkus/pom.xml | 4 ++-- samples/spring-boot/pom.xml | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/core/pom.xml b/core/pom.xml index d516cb10..d20d046c 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -10,7 +10,7 @@ kubernetes-webhooks-framework-core - Admission Controller Framework - Core + Kubernetes Webhooks Framework - Core jar diff --git a/pom.xml b/pom.xml index 1f263225..44c9b021 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ io.javaoperatorsdk kubernetes-webhooks-framework 0.2.1-SNAPSHOT - Kubernetes Webhooks Framework for Java + Kubernetes Webhooks Framework Framework to Implement Admission Controllers and Conversion Hooks in Java pom https://github.com/java-operator-sdk/kubernetes-webhooks-framework diff --git a/samples/commons/pom.xml b/samples/commons/pom.xml index ece88fbc..0c48bc50 100644 --- a/samples/commons/pom.xml +++ b/samples/commons/pom.xml @@ -10,7 +10,7 @@ io.javaoperatorsdk.admissioncontroller.sample sample-commons - Admission Controller Framework - Samples - Commons + Kubernetes Webhooks Framework - Samples - Commons 11 diff --git a/samples/pom.xml b/samples/pom.xml index 64badf38..2f0dbf38 100644 --- a/samples/pom.xml +++ b/samples/pom.xml @@ -9,7 +9,7 @@ kubernetes-webhooks-framework-samples pom - Admission Controller Framework - Samples + Kubernetes Webhooks Framework - Samples commons spring-boot diff --git a/samples/quarkus/pom.xml b/samples/quarkus/pom.xml index acd43b8b..94b977a4 100644 --- a/samples/quarkus/pom.xml +++ b/samples/quarkus/pom.xml @@ -7,9 +7,9 @@ kubernetes-webhooks-framework-samples 0.2.1-SNAPSHOT - io.javaoperatorsdk.admissioncontroller.sample + io.javaoperatorsdk.webhook.sample quarkus-sample - Admission Controller Framework - Samples - Quarkus + Kubernetes Webhooks Framework - Samples - Quarkus 3.8.1 11 diff --git a/samples/spring-boot/pom.xml b/samples/spring-boot/pom.xml index 188e466b..7db0f275 100644 --- a/samples/spring-boot/pom.xml +++ b/samples/spring-boot/pom.xml @@ -8,10 +8,10 @@ 0.2.1-SNAPSHOT - io.javaoperatorsdk.admissioncontroller.sample + io.javaoperatorsdk.webhook.sample spring-boot-sample 0.2.1-SNAPSHOT - Admission Controller Framework - Samples - Spring Boot + Kubernetes Webhooks Framework - Samples - Spring Boot 11 From fa7a720e41d2eea1fd95063157579060ffd4e41d Mon Sep 17 00:00:00 2001 From: csviri Date: Tue, 22 Nov 2022 13:06:11 +0100 Subject: [PATCH 2/6] readme --- README.md | 66 +++++++++++++++++-- .../sample/commons/AdmissionControllers.java | 1 - .../ConversionControllerConfig.java | 7 +- 3 files changed, 67 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index fc67b038..c94aa8ae 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Framework and tooling to support implementing [admission controllers](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/) and [conversion hooks](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/#webhook-conversion) -for Kubernetes in Java. Supports both **quarkus** and **spring boot**. Both Sync and Async programing model. +for Kubernetes in Java. Supports both **quarkus** and **spring boot**. Both **sync** and **async** programing model. ## Sample Usage @@ -11,11 +11,53 @@ for Kubernetes in Java. Supports both **quarkus** and **spring boot**. Both Sync Defining a mutation or validation controller is simple as: -https://github.com/java-operator-sdk/kubernetes-webhooks-framework/blob/0946595d941b789caef6a69b34c2e5be8c6b59cf/samples/quarkus/src/main/java/io/javaoperatorsdk/admissioncontroller/sample/quarkus/AdmissionControllerConfig.java#L31-L68 +```java + + @Singleton + @Named(MUTATING_CONTROLLER) + public AdmissionController mutatingController() { + return new AdmissionController<>((resource, operation) -> { + if (resource.getMetadata().getLabels() == null) { + resource.getMetadata().setLabels(new HashMap<>()); + } + resource.getMetadata().getLabels().putIfAbsent(APP_NAME_LABEL_KEY, "mutation-test"); + return resource; + }); + } + + @Singleton + @Named(VALIDATING_CONTROLLER) + public AdmissionController validatingController() { + return new AdmissionController<>((resource, operation) -> { + if (resource.getMetadata().getLabels() == null + || resource.getMetadata().getLabels().get(APP_NAME_LABEL_KEY) == null) { + throw new NotAllowedException("Missing label: " + APP_NAME_LABEL_KEY); + } + }); + } + +``` What can be then simple used in an endpoint: -https://github.com/java-operator-sdk/kubernetes-webhooks-framework/blob/0946595d941b789caef6a69b34c2e5be8c6b59cf/samples/quarkus/src/main/java/io/javaoperatorsdk/admissioncontroller/sample/quarkus/AdmissionEndpoint.java#L57-L89 +```java + @POST + @Path(MUTATE_PATH) + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public AdmissionReview mutate(AdmissionReview admissionReview) { + return mutationController.handle(admissionReview); + } + + @POST + @Path(VALIDATE_PATH) + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public AdmissionReview validate(AdmissionReview admissionReview) { + return validationController.handle(admissionReview); + } +``` + See samples also for details. @@ -29,8 +71,22 @@ To create the controller register [mappers](https://github.com/java-operator-sdk/kubernetes-webhooks-framework/blob/main/core/src/main/java/io/javaoperatorsdk/webhook/conversion/Mapper.java) : -https://github.com/java-operator-sdk/kubernetes-webhooks-framework/blob/2a2bce54b49ea3398bef95a9102ee8645e11cf87/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java#L15-L29 +```java + @Singleton + public ConversionController conversionController() { + var controller = new ConversionController(); + controller.registerMapper(new V1Mapper()); + controller.registerMapper(new V2Mapper()); + return controller; + } +``` and use the controllers in the endpoint: -https://github.com/java-operator-sdk/kubernetes-webhooks-framework/blob/2a2bce54b49ea3398bef95a9102ee8645e11cf87/samples/spring-boot/src/main/java/io/javaoperatorsdk/webhook/sample/springboot/conversion/ConversionEndpoint.java#L29-L40 +```java + @PostMapping(CONVERSION_PATH) + @ResponseBody + public ConversionReview convert(@RequestBody ConversionReview conversionReview) { + return conversionController.handle(conversionReview); + } +``` diff --git a/samples/commons/src/main/java/io/javaoperatorsdk/webhook/sample/commons/AdmissionControllers.java b/samples/commons/src/main/java/io/javaoperatorsdk/webhook/sample/commons/AdmissionControllers.java index 310d82b9..d062a3dc 100644 --- a/samples/commons/src/main/java/io/javaoperatorsdk/webhook/sample/commons/AdmissionControllers.java +++ b/samples/commons/src/main/java/io/javaoperatorsdk/webhook/sample/commons/AdmissionControllers.java @@ -21,7 +21,6 @@ public static AdmissionController mutatingController() { if (resource.getMetadata().getLabels() == null) { resource.getMetadata().setLabels(new HashMap<>()); } - resource.getMetadata().getLabels().putIfAbsent(APP_NAME_LABEL_KEY, "mutation-test"); return resource; }); diff --git a/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java b/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java index b7788cc4..e635185b 100644 --- a/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java +++ b/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java @@ -5,12 +5,17 @@ import io.javaoperatorsdk.webhook.conversion.AsyncConversionController; import io.javaoperatorsdk.webhook.conversion.ConversionController; import io.javaoperatorsdk.webhook.sample.commons.ConversionControllers; +import io.javaoperatorsdk.webhook.sample.commons.mapper.V1Mapper; +import io.javaoperatorsdk.webhook.sample.commons.mapper.V2Mapper; public class ConversionControllerConfig { @Singleton public ConversionController conversionController() { - return ConversionControllers.conversionController(); + var controller = new ConversionController(); + controller.registerMapper(new V1Mapper()); + controller.registerMapper(new V2Mapper()); + return controller; } @Singleton From e0bf1384ff46b118da50b52e764df6dedf269447 Mon Sep 17 00:00:00 2001 From: csviri Date: Tue, 22 Nov 2022 13:06:32 +0100 Subject: [PATCH 3/6] fix --- .../conversion/ConversionControllerConfig.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java b/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java index e635185b..5666a284 100644 --- a/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java +++ b/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java @@ -1,21 +1,16 @@ package io.javaoperatorsdk.webhook.admission.sample.quarkus.conversion; -import javax.inject.Singleton; - import io.javaoperatorsdk.webhook.conversion.AsyncConversionController; import io.javaoperatorsdk.webhook.conversion.ConversionController; import io.javaoperatorsdk.webhook.sample.commons.ConversionControllers; -import io.javaoperatorsdk.webhook.sample.commons.mapper.V1Mapper; -import io.javaoperatorsdk.webhook.sample.commons.mapper.V2Mapper; + +import javax.inject.Singleton; public class ConversionControllerConfig { @Singleton public ConversionController conversionController() { - var controller = new ConversionController(); - controller.registerMapper(new V1Mapper()); - controller.registerMapper(new V2Mapper()); - return controller; + return ConversionControllers.conversionController(); } @Singleton From f3884a9de5c0d7a3c79e803de855ace2bd2452ec Mon Sep 17 00:00:00 2001 From: csviri Date: Tue, 22 Nov 2022 13:06:46 +0100 Subject: [PATCH 4/6] imports fix --- .../sample/quarkus/admission/AdmissionControllerConfig.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionControllerConfig.java b/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionControllerConfig.java index 28b09f0d..271a024c 100644 --- a/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionControllerConfig.java +++ b/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionControllerConfig.java @@ -1,13 +1,13 @@ package io.javaoperatorsdk.webhook.admission.sample.quarkus.admission; -import javax.inject.Named; -import javax.inject.Singleton; - import io.fabric8.kubernetes.api.model.Pod; import io.javaoperatorsdk.webhook.admission.AdmissionController; import io.javaoperatorsdk.webhook.admission.AsyncAdmissionController; import io.javaoperatorsdk.webhook.sample.commons.AdmissionControllers; +import javax.inject.Named; +import javax.inject.Singleton; + public class AdmissionControllerConfig { public static final String MUTATING_CONTROLLER = "mutatingController"; From d1c8d33bf879694f2bd2af59480e6c2f9284d9f9 Mon Sep 17 00:00:00 2001 From: csviri Date: Tue, 22 Nov 2022 13:09:09 +0100 Subject: [PATCH 5/6] readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c94aa8ae..51654f04 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ Defining a mutation or validation controller is simple as: ``` -What can be then simple used in an endpoint: +What can be simply used in an endpoint: ```java @POST From f8f7d8d8efd4ee32bf99596e324b44e2e2cc2e5c Mon Sep 17 00:00:00 2001 From: csviri Date: Tue, 22 Nov 2022 13:11:32 +0100 Subject: [PATCH 6/6] format --- .../sample/quarkus/admission/AdmissionControllerConfig.java | 6 +++--- .../quarkus/conversion/ConversionControllerConfig.java | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionControllerConfig.java b/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionControllerConfig.java index 271a024c..28b09f0d 100644 --- a/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionControllerConfig.java +++ b/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionControllerConfig.java @@ -1,13 +1,13 @@ package io.javaoperatorsdk.webhook.admission.sample.quarkus.admission; +import javax.inject.Named; +import javax.inject.Singleton; + import io.fabric8.kubernetes.api.model.Pod; import io.javaoperatorsdk.webhook.admission.AdmissionController; import io.javaoperatorsdk.webhook.admission.AsyncAdmissionController; import io.javaoperatorsdk.webhook.sample.commons.AdmissionControllers; -import javax.inject.Named; -import javax.inject.Singleton; - public class AdmissionControllerConfig { public static final String MUTATING_CONTROLLER = "mutatingController"; diff --git a/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java b/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java index 5666a284..b7788cc4 100644 --- a/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java +++ b/samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/conversion/ConversionControllerConfig.java @@ -1,11 +1,11 @@ package io.javaoperatorsdk.webhook.admission.sample.quarkus.conversion; +import javax.inject.Singleton; + import io.javaoperatorsdk.webhook.conversion.AsyncConversionController; import io.javaoperatorsdk.webhook.conversion.ConversionController; import io.javaoperatorsdk.webhook.sample.commons.ConversionControllers; -import javax.inject.Singleton; - public class ConversionControllerConfig { @Singleton