Skip to content

Commit b349165

Browse files
committed
refactor: extracted diff method
1 parent 99a094b commit b349165

File tree

4 files changed

+30
-27
lines changed

4 files changed

+30
-27
lines changed

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
11
package io.javaoperatorsdk.admissioncontroller;
22

3+
import com.fasterxml.jackson.databind.ObjectMapper;
34
import io.fabric8.kubernetes.api.model.KubernetesResource;
45
import io.fabric8.kubernetes.api.model.Status;
56
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionRequest;
67
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionResponse;
8+
import io.fabric8.zjsonpatch.JsonDiff;
9+
10+
import java.nio.charset.StandardCharsets;
11+
import java.util.Base64;
712

813
public class AdmissionUtils {
914

15+
public static final String JSON_PATCH = "JSONPatch";
16+
private final static ObjectMapper mapper = new ObjectMapper();
17+
1018
public static AdmissionResponse notAllowedExceptionToAdmissionResponse(
1119
NotAllowedException notAllowedException) {
1220
AdmissionResponse admissionResponse = new AdmissionResponse();
@@ -23,4 +31,20 @@ public static KubernetesResource getTargetResource(AdmissionRequest admissionReq
2331
return operation == Operation.DELETE ? admissionRequest.getOldObject()
2432
: admissionRequest.getObject();
2533
}
34+
35+
public static AdmissionResponse admissionResponseFromMutation(KubernetesResource originalResource,
36+
KubernetesResource mutatedResource) {
37+
AdmissionResponse admissionResponse = new AdmissionResponse();
38+
admissionResponse.setAllowed(true);
39+
admissionResponse.setPatchType(JSON_PATCH);
40+
var originalResNode = mapper.valueToTree(originalResource);
41+
var mutatedResNode = mapper.valueToTree(mutatedResource);
42+
43+
var diff = JsonDiff.asJson(originalResNode, mutatedResNode);
44+
String base64Diff =
45+
Base64.getEncoder().encodeToString(diff.textValue().getBytes(StandardCharsets.UTF_8));
46+
admissionResponse.setPatch(base64Diff);
47+
return admissionResponse;
48+
}
49+
2650
}
Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,20 @@
11
package io.javaoperatorsdk.admissioncontroller.mutation;
22

3-
import java.nio.charset.StandardCharsets;
4-
import java.util.Base64;
5-
63
import io.fabric8.kubernetes.api.model.KubernetesResource;
74
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionRequest;
85
import io.fabric8.kubernetes.api.model.admission.v1.AdmissionResponse;
9-
import io.fabric8.zjsonpatch.JsonDiff;
106
import io.javaoperatorsdk.admissioncontroller.AdmissionUtils;
117
import io.javaoperatorsdk.admissioncontroller.NotAllowedException;
128
import io.javaoperatorsdk.admissioncontroller.Operation;
139
import io.javaoperatorsdk.admissioncontroller.RequestHandler;
1410
import io.javaoperatorsdk.admissioncontroller.clone.Cloner;
1511
import io.javaoperatorsdk.admissioncontroller.clone.ObjectMapperCloner;
1612

17-
import com.fasterxml.jackson.databind.ObjectMapper;
18-
13+
import static io.javaoperatorsdk.admissioncontroller.AdmissionUtils.admissionResponseFromMutation;
1914
import static io.javaoperatorsdk.admissioncontroller.AdmissionUtils.getTargetResource;
2015

2116
public class DefaultRequestMutator<T extends KubernetesResource> implements RequestHandler {
2217

23-
public static final String JSON_PATCH = "JSONPatch";
24-
private final ObjectMapper mapper = new ObjectMapper();
25-
2618
private final Mutator<T> mutator;
2719
private final Cloner<T> cloner;
2820

@@ -43,26 +35,11 @@ public AdmissionResponse handle(AdmissionRequest admissionRequest) {
4335
AdmissionResponse admissionResponse;
4436
try {
4537
var mutatedResource = mutator.mutate(clonedResource, operation);
46-
admissionResponse = createAdmissionResponseFromMutation(originalResource, mutatedResource);
38+
admissionResponse = admissionResponseFromMutation(originalResource, mutatedResource);
4739
} catch (NotAllowedException e) {
4840
admissionResponse = AdmissionUtils.notAllowedExceptionToAdmissionResponse(e);
4941
}
5042
return admissionResponse;
5143
}
5244

53-
private AdmissionResponse createAdmissionResponseFromMutation(T originalResource,
54-
T mutatedResource) {
55-
AdmissionResponse admissionResponse = new AdmissionResponse();
56-
admissionResponse.setAllowed(true);
57-
admissionResponse.setPatchType(JSON_PATCH);
58-
var originalResNode = mapper.valueToTree(originalResource);
59-
var mutatedResNode = mapper.valueToTree(mutatedResource);
60-
61-
var diff = JsonDiff.asJson(originalResNode, mutatedResNode);
62-
String base64Diff =
63-
Base64.getEncoder().encodeToString(diff.textValue().getBytes(StandardCharsets.UTF_8));
64-
admissionResponse.setPatch(base64Diff);
65-
return admissionResponse;
66-
}
67-
6845
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package io.javaoperatorsdk.admissioncontroller.mutation;
22

3+
import io.javaoperatorsdk.admissioncontroller.NotAllowedException;
34
import io.javaoperatorsdk.admissioncontroller.Operation;
45

56
public interface Mutator<T> {
67

7-
T mutate(T resource, Operation operation);
8+
T mutate(T resource, Operation operation) throws NotAllowedException;
89

910
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package io.javaoperatorsdk.admissioncontroller.validation;
22

3+
import io.javaoperatorsdk.admissioncontroller.NotAllowedException;
34
import io.javaoperatorsdk.admissioncontroller.Operation;
45

56
public interface Validator<T> {
67

7-
void validate(T resource, Operation operation);
8+
void validate(T resource, Operation operation) throws NotAllowedException;
89

910
}

0 commit comments

Comments
 (0)