Files
kubernetes-event-exporter/pkg/kube/objects.go

49 lines
1.1 KiB
Go

package kube
import (
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/restmapper"
"strings"
)
func GetObject(reference *v1.ObjectReference, clientset *kubernetes.Clientset, dynClient dynamic.Interface) (*unstructured.Unstructured, error) {
var group, version string
s := strings.Split(reference.APIVersion, "/")
if len(s) == 1 {
group = ""
version = s[0]
} else {
group = s[0]
version = s[1]
}
gk := schema.GroupKind{Group: group, Kind: reference.Kind}
groupResources, err := restmapper.GetAPIGroupResources(clientset.Discovery())
if err != nil {
return nil, err
}
rm := restmapper.NewDiscoveryRESTMapper(groupResources)
mapping, err := rm.RESTMapping(gk, version)
if err != nil {
return nil, err
}
item, err := dynClient.
Resource(mapping.Resource).
Namespace(reference.Namespace).
Get(reference.Name, metav1.GetOptions{})
if err != nil {
return nil, err
}
return item, nil
}