mirror of
https://github.com/resmoio/kubernetes-event-exporter.git
synced 2026-08-20 15:26:20 +00:00
50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package kube
|
|
|
|
import (
|
|
"context"
|
|
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(context.Background(), reference.Name, metav1.GetOptions{})
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return item, nil
|
|
}
|