in main.go [136:181]
func (s *server) mutate(admReview *admissionv1.AdmissionReview) error {
var pod *corev1.Pod
ar := admReview.Request
resp := admissionv1.AdmissionResponse{}
if ar == nil {
// TODO: Is this right?
return nil
}
if err := json.Unmarshal(ar.Object.Raw, &pod); err != nil {
return fmt.Errorf("unable unmarshal pod json object %v", err)
}
resp.Allowed = true
resp.UID = ar.UID
config, err := getConfig(s.c, pod.ObjectMeta.GetAnnotations())
if err != nil {
resp.Result = &metav1.Status{Message: err.Error()}
admReview.Response = &resp
return nil
}
pT := admissionv1.PatchTypeJSONPatch
resp.PatchType = &pT
patch, err := createPatch(config, pod.Spec)
if err != nil {
return err
}
marshaled, err := json.Marshal(patch)
if err != nil {
return err
}
resp.Patch = marshaled
resp.Result = &metav1.Status{
Status: "Success",
}
admReview.Response = &resp
return nil
}