Skip to content

Commit 99a094b

Browse files
committed
feature: base implementation
1 parent 1d45599 commit 99a094b

25 files changed

+305
-162
lines changed

core/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,5 +104,9 @@
104104
<artifactId>awaitility</artifactId>
105105
<scope>test</scope>
106106
</dependency>
107+
<dependency>
108+
<groupId>com.github.java-json-tools</groupId>
109+
<artifactId>json-patch</artifactId>
110+
</dependency>
107111
</dependencies>
108112
</project>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.javaoperatorsdk.admissioncontroller;
2+
3+
import io.fabric8.kubernetes.api.model.KubernetesResource;
4+
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionReview;
5+
import io.javaoperatorsdk.admissioncontroller.mutation.DefaultRequestMutator;
6+
import io.javaoperatorsdk.admissioncontroller.mutation.Mutator;
7+
import io.javaoperatorsdk.admissioncontroller.validation.DefaultRequestValidator;
8+
import io.javaoperatorsdk.admissioncontroller.validation.Validator;
9+
10+
public class AdmissionController<T extends KubernetesResource> {
11+
12+
private final RequestHandler requestHandler;
13+
14+
public AdmissionController(Mutator<T> mutator) {
15+
this(new DefaultRequestMutator<>(mutator));
16+
}
17+
18+
public AdmissionController(Validator<T> mutator) {
19+
this(new DefaultRequestValidator<>(mutator));
20+
}
21+
22+
public AdmissionController(RequestHandler requestHandler) {
23+
this.requestHandler = requestHandler;
24+
}
25+
26+
public AdmissionReview handle(AdmissionReview admissionReview) {
27+
var response = requestHandler.handle(admissionReview.getRequest());
28+
AdmissionReview responseAdmissionReview = new AdmissionReview();
29+
responseAdmissionReview.setResponse(response);
30+
response.setUid(admissionReview.getRequest().getUid());
31+
return responseAdmissionReview;
32+
}
33+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package io.javaoperatorsdk.admissioncontroller;
2+
3+
public class AdmissionControllerException extends RuntimeException {
4+
5+
public AdmissionControllerException() {}
6+
7+
public AdmissionControllerException(String message) {
8+
super(message);
9+
}
10+
11+
public AdmissionControllerException(String message, Throwable cause) {
12+
super(message, cause);
13+
}
14+
15+
public AdmissionControllerException(Throwable cause) {
16+
super(cause);
17+
}
18+
19+
public AdmissionControllerException(String message, Throwable cause, boolean enableSuppression,
20+
boolean writableStackTrace) {
21+
super(message, cause, enableSuppression, writableStackTrace);
22+
}
23+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package io.javaoperatorsdk.admissioncontroller;
2+
3+
import io.fabric8.kubernetes.api.model.KubernetesResource;
4+
import io.fabric8.kubernetes.api.model.Status;
5+
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionRequest;
6+
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionResponse;
7+
8+
public class AdmissionUtils {
9+
10+
public static AdmissionResponse notAllowedExceptionToAdmissionResponse(
11+
NotAllowedException notAllowedException) {
12+
AdmissionResponse admissionResponse = new AdmissionResponse();
13+
admissionResponse.setAllowed(false);
14+
Status status = new Status();
15+
status.setCode(notAllowedException.getCode());
16+
status.setMessage(notAllowedException.getMessage());
17+
admissionResponse.setStatus(status);
18+
return admissionResponse;
19+
}
20+
21+
public static KubernetesResource getTargetResource(AdmissionRequest admissionRequest,
22+
Operation operation) {
23+
return operation == Operation.DELETE ? admissionRequest.getOldObject()
24+
: admissionRequest.getObject();
25+
}
26+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package io.javaoperatorsdk.admissioncontroller;
2+
3+
public class NotAllowedException extends AdmissionControllerException {
4+
5+
private int code;
6+
7+
public NotAllowedException() {}
8+
9+
public NotAllowedException(int code) {
10+
this.code = code;
11+
}
12+
13+
public NotAllowedException(String message, int code) {
14+
super(message);
15+
this.code = code;
16+
}
17+
18+
public NotAllowedException(String message, Throwable cause, int code) {
19+
super(message, cause);
20+
this.code = code;
21+
}
22+
23+
public NotAllowedException(Throwable cause, int code) {
24+
super(cause);
25+
this.code = code;
26+
}
27+
28+
public NotAllowedException(String message, Throwable cause, boolean enableSuppression,
29+
boolean writableStackTrace, int code) {
30+
super(message, cause, enableSuppression, writableStackTrace);
31+
this.code = code;
32+
}
33+
34+
public int getCode() {
35+
return code;
36+
}
37+
38+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package io.javaoperatorsdk.admissioncontroller;
2+
3+
public enum Operation {
4+
CREATE, UPDATE, DELETE, CONNECT
5+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package io.javaoperatorsdk.admissioncontroller;
2+
3+
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionRequest;
4+
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionResponse;
5+
6+
public interface RequestHandler {
7+
8+
AdmissionResponse handle(AdmissionRequest admissionRequest);
9+
10+
}

core/src/main/java/io/javaoperatorsdk/admissioncontroller/api/AdmissionControllerException.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

core/src/main/java/io/javaoperatorsdk/admissioncontroller/api/clone/ObjectMapperCloner.java

Lines changed: 0 additions & 21 deletions
This file was deleted.

core/src/main/java/io/javaoperatorsdk/admissioncontroller/api/mutation/DefaultRequestResponseMutator.java

Lines changed: 0 additions & 30 deletions
This file was deleted.

0 commit comments

Comments
 (0)