mirror of
https://github.com/kyverno/kyverno.git
synced 2024-12-15 17:51:20 +00:00
23fef004bb
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
69 lines
2.1 KiB
Go
69 lines
2.1 KiB
Go
package admission
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
kubeutils "github.com/kyverno/kyverno/pkg/utils/kube"
|
|
admissionv1 "k8s.io/api/admission/v1"
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
)
|
|
|
|
func GetResourceName(request *admissionv1.AdmissionRequest) string {
|
|
resourceName := request.Kind.Kind + "/" + request.Name
|
|
if request.Namespace != "" {
|
|
resourceName = request.Namespace + "/" + resourceName
|
|
}
|
|
return resourceName
|
|
}
|
|
|
|
// ExtractResources extracts the new and old resource as unstructured
|
|
func ExtractResources(newRaw []byte, request *admissionv1.AdmissionRequest) (unstructured.Unstructured, unstructured.Unstructured, error) {
|
|
var emptyResource unstructured.Unstructured
|
|
var newResource unstructured.Unstructured
|
|
var oldResource unstructured.Unstructured
|
|
var err error
|
|
|
|
// New Resource
|
|
if newRaw == nil {
|
|
newRaw = request.Object.Raw
|
|
}
|
|
|
|
if newRaw != nil {
|
|
newResource, err = ConvertResource(newRaw, request.Kind.Group, request.Kind.Version, request.Kind.Kind, request.Namespace)
|
|
if err != nil {
|
|
return emptyResource, emptyResource, fmt.Errorf("failed to convert new raw to unstructured: %v", err)
|
|
}
|
|
}
|
|
|
|
// Old Resource
|
|
oldRaw := request.OldObject.Raw
|
|
if oldRaw != nil {
|
|
oldResource, err = ConvertResource(oldRaw, request.Kind.Group, request.Kind.Version, request.Kind.Kind, request.Namespace)
|
|
if err != nil {
|
|
return emptyResource, emptyResource, fmt.Errorf("failed to convert old raw to unstructured: %v", err)
|
|
}
|
|
}
|
|
|
|
return newResource, oldResource, err
|
|
}
|
|
|
|
// ConvertResource converts raw bytes to an unstructured object
|
|
func ConvertResource(raw []byte, group, version, kind, namespace string) (unstructured.Unstructured, error) {
|
|
obj, err := kubeutils.BytesToUnstructured(raw)
|
|
if err != nil {
|
|
return unstructured.Unstructured{}, fmt.Errorf("failed to convert raw to unstructured: %v", err)
|
|
}
|
|
|
|
obj.SetGroupVersionKind(schema.GroupVersionKind{Group: group, Version: version, Kind: kind})
|
|
|
|
if namespace != "" && kind != "Namespace" {
|
|
obj.SetNamespace(namespace)
|
|
}
|
|
|
|
if obj.GetKind() == "Namespace" && obj.GetNamespace() != "" {
|
|
obj.SetNamespace("")
|
|
}
|
|
|
|
return *obj, nil
|
|
}
|