Skip to content

Commit 5f9cfad

Browse files
authored
Conversion Webhook Support (#19)
1 parent 710a8c9 commit 5f9cfad

File tree

67 files changed

+1126
-226
lines changed

Some content is hidden

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

67 files changed

+1126
-226
lines changed

core/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,5 +108,10 @@
108108
<groupId>com.github.java-json-tools</groupId>
109109
<artifactId>json-patch</artifactId>
110110
</dependency>
111+
<dependency>
112+
<groupId>io.fabric8</groupId>
113+
<artifactId>crd-generator-apt</artifactId>
114+
<scope>test</scope>
115+
</dependency>
111116
</dependencies>
112117
</project>

core/src/main/java/io/javaoperatorsdk/admissioncontroller/AdmissionController.java

Lines changed: 0 additions & 34 deletions
This file was deleted.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package io.javaoperatorsdk.webhook.admission;
2+
3+
import io.fabric8.kubernetes.api.model.KubernetesResource;
4+
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionReview;
5+
import io.javaoperatorsdk.webhook.admission.mutation.DefaultAdmissionRequestMutator;
6+
import io.javaoperatorsdk.webhook.admission.mutation.Mutator;
7+
import io.javaoperatorsdk.webhook.admission.validation.DefaultAdmissionRequestValidator;
8+
import io.javaoperatorsdk.webhook.admission.validation.Validator;
9+
10+
public class AdmissionController<T extends KubernetesResource> {
11+
12+
private final AdmissionRequestHandler admissionRequestHandler;
13+
14+
public AdmissionController(Mutator<T> mutator) {
15+
this(new DefaultAdmissionRequestMutator<>(mutator));
16+
}
17+
18+
public AdmissionController(Validator<T> mutator) {
19+
this(new DefaultAdmissionRequestValidator<>(mutator));
20+
}
21+
22+
public AdmissionController(AdmissionRequestHandler admissionRequestHandler) {
23+
this.admissionRequestHandler = admissionRequestHandler;
24+
}
25+
26+
public AdmissionReview handle(AdmissionReview admissionReview) {
27+
var response = admissionRequestHandler.handle(admissionReview.getRequest());
28+
AdmissionReview responseAdmissionReview = new AdmissionReview();
29+
responseAdmissionReview.setResponse(response);
30+
response.setUid(admissionReview.getRequest().getUid());
31+
return responseAdmissionReview;
32+
}
33+
34+
}

core/src/main/java/io/javaoperatorsdk/admissioncontroller/AdmissionControllerException.java renamed to core/src/main/java/io/javaoperatorsdk/webhook/admission/AdmissionControllerException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.javaoperatorsdk.admissioncontroller;
1+
package io.javaoperatorsdk.webhook.admission;
22

33
public class AdmissionControllerException extends RuntimeException {
44

core/src/main/java/io/javaoperatorsdk/admissioncontroller/RequestHandler.java renamed to core/src/main/java/io/javaoperatorsdk/webhook/admission/AdmissionRequestHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
package io.javaoperatorsdk.admissioncontroller;
1+
package io.javaoperatorsdk.webhook.admission;
22

33
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionRequest;
44
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionResponse;
55

6-
public interface RequestHandler {
6+
public interface AdmissionRequestHandler {
77

88
AdmissionResponse handle(AdmissionRequest admissionRequest);
99

core/src/main/java/io/javaoperatorsdk/admissioncontroller/AdmissionUtils.java renamed to core/src/main/java/io/javaoperatorsdk/webhook/admission/AdmissionUtils.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.javaoperatorsdk.admissioncontroller;
1+
package io.javaoperatorsdk.webhook.admission;
22

33
import java.nio.charset.StandardCharsets;
44
import java.util.Base64;
@@ -13,7 +13,9 @@
1313
public class AdmissionUtils {
1414

1515
public static final String JSON_PATCH = "JSONPatch";
16-
private final static ObjectMapper mapper = new ObjectMapper();
16+
private static final ObjectMapper mapper = new ObjectMapper();
17+
18+
private AdmissionUtils() {}
1719

1820
public static AdmissionResponse notAllowedExceptionToAdmissionResponse(
1921
NotAllowedException notAllowedException) {

core/src/main/java/io/javaoperatorsdk/admissioncontroller/AsyncAdmissionController.java renamed to core/src/main/java/io/javaoperatorsdk/webhook/admission/AsyncAdmissionController.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
1-
package io.javaoperatorsdk.admissioncontroller;
1+
package io.javaoperatorsdk.webhook.admission;
22

33
import java.util.concurrent.CompletionStage;
44

55
import io.fabric8.kubernetes.api.model.KubernetesResource;
66
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionReview;
7-
import io.javaoperatorsdk.admissioncontroller.mutation.AsyncDefaultRequestMutator;
8-
import io.javaoperatorsdk.admissioncontroller.mutation.AsyncMutator;
9-
import io.javaoperatorsdk.admissioncontroller.validation.AsyncDefaultRequestValidator;
10-
import io.javaoperatorsdk.admissioncontroller.validation.Validator;
7+
import io.javaoperatorsdk.webhook.admission.mutation.AsyncDefaultAdmissionRequestMutator;
8+
import io.javaoperatorsdk.webhook.admission.mutation.AsyncMutator;
9+
import io.javaoperatorsdk.webhook.admission.validation.AsyncDefaultAdmissionRequestValidator;
10+
import io.javaoperatorsdk.webhook.admission.validation.Validator;
1111

1212
public class AsyncAdmissionController<T extends KubernetesResource> {
1313

14-
private final AsyncRequestHandler requestHandler;
14+
private final AsyncAdmissionRequestHandler requestHandler;
1515

1616
public AsyncAdmissionController(AsyncMutator<T> mutator) {
17-
this(new AsyncDefaultRequestMutator<>(mutator));
17+
this(new AsyncDefaultAdmissionRequestMutator<>(mutator));
1818
}
1919

2020
public AsyncAdmissionController(Validator<T> validator) {
21-
this(new AsyncDefaultRequestValidator<>(validator));
21+
this(new AsyncDefaultAdmissionRequestValidator<>(validator));
2222
}
2323

24-
public AsyncAdmissionController(AsyncRequestHandler requestHandler) {
24+
public AsyncAdmissionController(AsyncAdmissionRequestHandler requestHandler) {
2525
this.requestHandler = requestHandler;
2626
}
2727

core/src/main/java/io/javaoperatorsdk/admissioncontroller/AsyncRequestHandler.java renamed to core/src/main/java/io/javaoperatorsdk/webhook/admission/AsyncAdmissionRequestHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
package io.javaoperatorsdk.admissioncontroller;
1+
package io.javaoperatorsdk.webhook.admission;
22

33
import java.util.concurrent.CompletionStage;
44

55
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionRequest;
66
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionResponse;
77

8-
public interface AsyncRequestHandler {
8+
public interface AsyncAdmissionRequestHandler {
99

1010
CompletionStage<AdmissionResponse> handle(AdmissionRequest admissionRequest);
1111

core/src/main/java/io/javaoperatorsdk/admissioncontroller/NotAllowedException.java renamed to core/src/main/java/io/javaoperatorsdk/webhook/admission/NotAllowedException.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
package io.javaoperatorsdk.admissioncontroller;
1+
package io.javaoperatorsdk.webhook.admission;
22

33
import io.fabric8.kubernetes.api.model.Status;
44

55
public class NotAllowedException extends AdmissionControllerException {
66

7-
private Status status = new Status();
7+
private final Status status;
88

99
public NotAllowedException() {
10+
status = new Status();
1011
status.setCode(403);
1112
}
1213

@@ -27,34 +28,40 @@ public NotAllowedException(String message, Throwable cause, boolean enableSuppre
2728

2829
public NotAllowedException(String message) {
2930
super(message);
31+
this.status = new Status();
3032
this.status.setMessage(message);
3133
this.status.setCode(403);
3234
}
3335

3436
public NotAllowedException(int code) {
37+
this.status = new Status();
3538
this.status.setCode(code);
3639
}
3740

3841
public NotAllowedException(String message, int code) {
3942
super(message);
43+
this.status = new Status();
4044
this.status.setCode(code);
4145
this.status.setMessage(message);
4246
}
4347

4448
public NotAllowedException(String message, Throwable cause, int code) {
4549
super(message, cause);
50+
this.status = new Status();
4651
this.status.setCode(code);
4752
this.status.setMessage(message);
4853
}
4954

5055
public NotAllowedException(Throwable cause, int code) {
5156
super(cause);
57+
this.status = new Status();
5258
this.status.setCode(code);
5359
}
5460

5561
public NotAllowedException(String message, Throwable cause, boolean enableSuppression,
5662
boolean writableStackTrace, int code) {
5763
super(message, cause, enableSuppression, writableStackTrace);
64+
this.status = new Status();
5865
status.setCode(code);
5966
}
6067

core/src/main/java/io/javaoperatorsdk/admissioncontroller/Operation.java renamed to core/src/main/java/io/javaoperatorsdk/webhook/admission/Operation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.javaoperatorsdk.admissioncontroller;
1+
package io.javaoperatorsdk.webhook.admission;
22

33
public enum Operation {
44
CREATE, UPDATE, DELETE, CONNECT

core/src/main/java/io/javaoperatorsdk/admissioncontroller/mutation/AsyncDefaultRequestMutator.java renamed to core/src/main/java/io/javaoperatorsdk/webhook/admission/mutation/AsyncDefaultAdmissionRequestMutator.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,32 @@
1-
package io.javaoperatorsdk.admissioncontroller.mutation;
1+
package io.javaoperatorsdk.webhook.admission.mutation;
22

33
import java.util.concurrent.CompletableFuture;
44
import java.util.concurrent.CompletionStage;
55

66
import io.fabric8.kubernetes.api.model.KubernetesResource;
77
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionRequest;
88
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionResponse;
9-
import io.javaoperatorsdk.admissioncontroller.*;
10-
import io.javaoperatorsdk.admissioncontroller.clone.Cloner;
11-
import io.javaoperatorsdk.admissioncontroller.clone.ObjectMapperCloner;
9+
import io.javaoperatorsdk.webhook.admission.AdmissionUtils;
10+
import io.javaoperatorsdk.webhook.admission.AsyncAdmissionRequestHandler;
11+
import io.javaoperatorsdk.webhook.admission.NotAllowedException;
12+
import io.javaoperatorsdk.webhook.admission.Operation;
13+
import io.javaoperatorsdk.webhook.clone.Cloner;
14+
import io.javaoperatorsdk.webhook.clone.ObjectMapperCloner;
1215

13-
import static io.javaoperatorsdk.admissioncontroller.AdmissionUtils.admissionResponseFromMutation;
14-
import static io.javaoperatorsdk.admissioncontroller.AdmissionUtils.getTargetResource;
16+
import static io.javaoperatorsdk.webhook.admission.AdmissionUtils.admissionResponseFromMutation;
17+
import static io.javaoperatorsdk.webhook.admission.AdmissionUtils.getTargetResource;
1518

16-
public class AsyncDefaultRequestMutator<T extends KubernetesResource>
17-
implements AsyncRequestHandler {
19+
public class AsyncDefaultAdmissionRequestMutator<T extends KubernetesResource>
20+
implements AsyncAdmissionRequestHandler {
1821

1922
private final AsyncMutator<T> mutator;
2023
private final Cloner<T> cloner;
2124

22-
public AsyncDefaultRequestMutator(AsyncMutator<T> mutator) {
25+
public AsyncDefaultAdmissionRequestMutator(AsyncMutator<T> mutator) {
2326
this(mutator, new ObjectMapperCloner<>());
2427
}
2528

26-
public AsyncDefaultRequestMutator(AsyncMutator<T> mutator, Cloner<T> cloner) {
29+
public AsyncDefaultAdmissionRequestMutator(AsyncMutator<T> mutator, Cloner<T> cloner) {
2730
this.mutator = mutator;
2831
this.cloner = cloner;
2932
}

core/src/main/java/io/javaoperatorsdk/admissioncontroller/mutation/AsyncMutator.java renamed to core/src/main/java/io/javaoperatorsdk/webhook/admission/mutation/AsyncMutator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package io.javaoperatorsdk.admissioncontroller.mutation;
1+
package io.javaoperatorsdk.webhook.admission.mutation;
22

33
import java.util.concurrent.CompletionStage;
44

55
import io.fabric8.kubernetes.api.model.KubernetesResource;
6-
import io.javaoperatorsdk.admissioncontroller.NotAllowedException;
7-
import io.javaoperatorsdk.admissioncontroller.Operation;
6+
import io.javaoperatorsdk.webhook.admission.NotAllowedException;
7+
import io.javaoperatorsdk.webhook.admission.Operation;
88

99
public interface AsyncMutator<T extends KubernetesResource> {
1010

core/src/main/java/io/javaoperatorsdk/admissioncontroller/mutation/DefaultRequestMutator.java renamed to core/src/main/java/io/javaoperatorsdk/webhook/admission/mutation/DefaultAdmissionRequestMutator.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
1-
package io.javaoperatorsdk.admissioncontroller.mutation;
1+
package io.javaoperatorsdk.webhook.admission.mutation;
22

33
import io.fabric8.kubernetes.api.model.KubernetesResource;
44
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionRequest;
55
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionResponse;
6-
import io.javaoperatorsdk.admissioncontroller.AdmissionUtils;
7-
import io.javaoperatorsdk.admissioncontroller.NotAllowedException;
8-
import io.javaoperatorsdk.admissioncontroller.Operation;
9-
import io.javaoperatorsdk.admissioncontroller.RequestHandler;
10-
import io.javaoperatorsdk.admissioncontroller.clone.Cloner;
11-
import io.javaoperatorsdk.admissioncontroller.clone.ObjectMapperCloner;
6+
import io.javaoperatorsdk.webhook.admission.AdmissionRequestHandler;
7+
import io.javaoperatorsdk.webhook.admission.AdmissionUtils;
8+
import io.javaoperatorsdk.webhook.admission.NotAllowedException;
9+
import io.javaoperatorsdk.webhook.admission.Operation;
10+
import io.javaoperatorsdk.webhook.clone.Cloner;
11+
import io.javaoperatorsdk.webhook.clone.ObjectMapperCloner;
1212

13-
import static io.javaoperatorsdk.admissioncontroller.AdmissionUtils.admissionResponseFromMutation;
14-
import static io.javaoperatorsdk.admissioncontroller.AdmissionUtils.getTargetResource;
13+
import static io.javaoperatorsdk.webhook.admission.AdmissionUtils.admissionResponseFromMutation;
14+
import static io.javaoperatorsdk.webhook.admission.AdmissionUtils.getTargetResource;
1515

16-
public class DefaultRequestMutator<T extends KubernetesResource> implements RequestHandler {
16+
public class DefaultAdmissionRequestMutator<T extends KubernetesResource>
17+
implements AdmissionRequestHandler {
1718

1819
private final Mutator<T> mutator;
1920
private final Cloner<T> cloner;
2021

21-
public DefaultRequestMutator(Mutator<T> mutator) {
22+
public DefaultAdmissionRequestMutator(Mutator<T> mutator) {
2223
this(mutator, new ObjectMapperCloner<>());
2324
}
2425

25-
public DefaultRequestMutator(Mutator<T> mutator, Cloner<T> cloner) {
26+
public DefaultAdmissionRequestMutator(Mutator<T> mutator, Cloner<T> cloner) {
2627
this.mutator = mutator;
2728
this.cloner = cloner;
2829
}

core/src/main/java/io/javaoperatorsdk/admissioncontroller/mutation/Mutator.java renamed to core/src/main/java/io/javaoperatorsdk/webhook/admission/mutation/Mutator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package io.javaoperatorsdk.admissioncontroller.mutation;
1+
package io.javaoperatorsdk.webhook.admission.mutation;
22

33
import io.fabric8.kubernetes.api.model.KubernetesResource;
4-
import io.javaoperatorsdk.admissioncontroller.NotAllowedException;
5-
import io.javaoperatorsdk.admissioncontroller.Operation;
4+
import io.javaoperatorsdk.webhook.admission.NotAllowedException;
5+
import io.javaoperatorsdk.webhook.admission.Operation;
66

77
public interface Mutator<T extends KubernetesResource> {
88

core/src/main/java/io/javaoperatorsdk/admissioncontroller/validation/AsyncDefaultRequestValidator.java renamed to core/src/main/java/io/javaoperatorsdk/webhook/admission/validation/AsyncDefaultAdmissionRequestValidator.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.javaoperatorsdk.admissioncontroller.validation;
1+
package io.javaoperatorsdk.webhook.admission.validation;
22

33
import java.util.concurrent.CompletableFuture;
44
import java.util.concurrent.CompletionException;
@@ -7,16 +7,19 @@
77
import io.fabric8.kubernetes.api.model.KubernetesResource;
88
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionRequest;
99
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionResponse;
10-
import io.javaoperatorsdk.admissioncontroller.*;
10+
import io.javaoperatorsdk.webhook.admission.AdmissionUtils;
11+
import io.javaoperatorsdk.webhook.admission.AsyncAdmissionRequestHandler;
12+
import io.javaoperatorsdk.webhook.admission.NotAllowedException;
13+
import io.javaoperatorsdk.webhook.admission.Operation;
1114

12-
import static io.javaoperatorsdk.admissioncontroller.AdmissionUtils.getTargetResource;
15+
import static io.javaoperatorsdk.webhook.admission.AdmissionUtils.getTargetResource;
1316

14-
public class AsyncDefaultRequestValidator<T extends KubernetesResource>
15-
implements AsyncRequestHandler {
17+
public class AsyncDefaultAdmissionRequestValidator<T extends KubernetesResource>
18+
implements AsyncAdmissionRequestHandler {
1619

1720
private final Validator<T> validator;
1821

19-
public AsyncDefaultRequestValidator(Validator<T> validator) {
22+
public AsyncDefaultAdmissionRequestValidator(Validator<T> validator) {
2023
this.validator = validator;
2124
}
2225

0 commit comments

Comments
 (0)