mirror of
https://github.com/grafana/grafana.git
synced 2025-07-30 01:42:28 +08:00
57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package admission
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"net/http"
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
|
"github.com/mattbaird/jsonpatch"
|
|
admissionv1 "k8s.io/api/admission/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
)
|
|
|
|
func FromMutationResponse(current []byte, r *backend.MutationResponse) (*admissionv1.AdmissionReview, error) {
|
|
res := &admissionv1.AdmissionReview{
|
|
Response: &admissionv1.AdmissionResponse{
|
|
Allowed: r.Allowed,
|
|
Warnings: r.Warnings,
|
|
},
|
|
}
|
|
|
|
if !r.Allowed {
|
|
res.Response.Result = &metav1.Status{
|
|
Status: metav1.StatusFailure,
|
|
Message: "Internal error",
|
|
Reason: metav1.StatusReasonInternalError,
|
|
Code: http.StatusInternalServerError,
|
|
}
|
|
if r.Result != nil {
|
|
res.Response.Result.Message = r.Result.Message
|
|
res.Response.Result.Reason = metav1.StatusReason(r.Result.Reason)
|
|
res.Response.Result.Code = r.Result.Code
|
|
}
|
|
return res, nil
|
|
}
|
|
|
|
if r.Allowed && len(r.ObjectBytes) == 0 {
|
|
return nil, errors.New("empty mutation response object bytes")
|
|
}
|
|
|
|
patch, err := jsonpatch.CreatePatch(current, r.ObjectBytes)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
raw, err := json.Marshal(patch)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
res.Response.Patch = raw
|
|
pt := admissionv1.PatchTypeJSONPatch
|
|
res.Response.PatchType = &pt
|
|
|
|
return res, nil
|
|
}
|