Files

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
}