diff --git a/README.md b/README.md index fc67b038..51654f04 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 -What can be then simple used in an endpoint: + @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 simply used in an endpoint: + +```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); + } +``` -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 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/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/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/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