in ray-on-gke/tpu/kuberay-tpu-webhook/main.go [128:158]
func (t *TPUWebhookServer) Validate(w http.ResponseWriter, r *http.Request) {
admissionReview := &admissionv1.AdmissionReview{}
if err := json.NewDecoder(r.Body).Decode(admissionReview); err != nil {
http.Error(w, "Error decoding request body", http.StatusBadRequest)
w.WriteHeader(http.StatusBadRequest)
return
}
if admissionReview.Request == nil || admissionReview.Request.Kind.Kind != "RayCluster" {
http.Error(w, "Invalid Kind", http.StatusBadRequest)
w.WriteHeader(http.StatusBadRequest)
return
}
klog.V(0).InfoS("Validate", "Received review for RayCluster creation: %s", admissionReview.Request.Name)
response, err := validateRayCluster(admissionReview)
if err != nil {
klog.Errorf("Failed to validate RayCluster: %s", err)
http.Error(w, "Failed to validate RayCluster", http.StatusForbidden)
w.WriteHeader(http.StatusForbidden)
return
}
admissionReview.Response = response
responseBytes, err := json.Marshal(admissionReview)
if err != nil {
klog.Errorf("Failed to encode response: %s", err)
http.Error(w, "Failed to encode response", http.StatusInternalServerError)
w.WriteHeader(http.StatusInternalServerError)
return
}
fmt.Fprint(w, string(responseBytes))
}