Skip to content

Commit 56e2346

Browse files
committed
docs: small readme added
1 parent f6633a9 commit 56e2346

File tree

1 file changed

+76
-2
lines changed

1 file changed

+76
-2
lines changed

README.md

Lines changed: 76 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,79 @@
11
# admission-controller-framework
22

3-
Framework and tooling to support writing admission controllers for Kubernetes in Java
3+
Framework and tooling to support implementing admission controllers for Kubernetes in Java
44

5-
Currently, in incubation phase.
5+
Currently, project is early phases.
6+
7+
8+
## Sample Usage
9+
10+
Defining a mutation or validation controller should be simple as:
11+
12+
```java
13+
14+
@Dependent
15+
public class AdmissionControllerConfig {
16+
17+
public static final String APP_NAME_LABEL_KEY = "app.kubernetes.io/name";
18+
19+
@Singleton
20+
@Named("mutatingController")
21+
public AdmissionController<Pod> mutatingController() {
22+
return new AdmissionController<>((resource, operation) -> {
23+
resource.getMetadata().getLabels().putIfAbsent(APP_NAME_LABEL_KEY, "mutation-test");
24+
return resource;
25+
});
26+
}
27+
28+
@Singleton
29+
@Named("validatingController")
30+
public AdmissionController<Pod> validatingController() {
31+
return new AdmissionController<>((resource, operation) -> {
32+
if (resource.getMetadata().getLabels().get(APP_NAME_LABEL_KEY) == null) {
33+
throw new NotAllowedException("Missing label: " + APP_NAME_LABEL_KEY);
34+
}
35+
});
36+
}
37+
}
38+
39+
```
40+
41+
What can be then simple used in an endpoint:
42+
43+
```java
44+
45+
@Path("/")
46+
public class AdmissionEndpoint {
47+
48+
private AdmissionController<Pod> mutationController;
49+
private AdmissionController<Pod> validationController;
50+
51+
@Inject
52+
public AdmissionEndpoint(@Named("mutatingController") AdmissionController<Pod> mutationController,
53+
@Named("validatingController") AdmissionController<Pod> validationController) {
54+
this.mutationController = mutationController;
55+
this.validationController = validationController;
56+
}
57+
58+
@POST
59+
@Path("mutate")
60+
@Consumes(MediaType.APPLICATION_JSON)
61+
@Produces(MediaType.APPLICATION_JSON)
62+
public AdmissionReview mutate(AdmissionReview admissionReview) {
63+
return mutationController.handle(admissionReview);
64+
}
65+
66+
@POST
67+
@Path("validate")
68+
@Consumes(MediaType.APPLICATION_JSON)
69+
@Produces(MediaType.APPLICATION_JSON)
70+
public AdmissionReview hello(AdmissionReview admissionReview) {
71+
return validationController.handle(admissionReview);
72+
}
73+
74+
}
75+
76+
```
77+
78+
79+
See samples also for details.

0 commit comments

Comments
 (0)