From d935e2219e8a4be8bd062190ad43e5d3babca283 Mon Sep 17 00:00:00 2001 From: GaoXiaodong <13814823514@163.com> Date: Tue, 21 Jun 2022 14:27:24 +0800 Subject: [PATCH] feat(platform): support ingress and storage event for v1 version (#1995) Co-authored-by: xdonggao --- .../proxy/extensions/ingress/storage/event.go | 26 ++++++++++++++++--- .../storage/storageclass/storage/event.go | 25 ++++++++++++++++++ pkg/util/apiclient/version.go | 9 +++++++ 3 files changed, 57 insertions(+), 3 deletions(-) diff --git a/pkg/platform/proxy/extensions/ingress/storage/event.go b/pkg/platform/proxy/extensions/ingress/storage/event.go index 17070d6a49..05d40c6fde 100644 --- a/pkg/platform/proxy/extensions/ingress/storage/event.go +++ b/pkg/platform/proxy/extensions/ingress/storage/event.go @@ -21,11 +21,9 @@ package storage import ( "context" - "tkestack.io/tke/pkg/platform/proxy" - "tkestack.io/tke/pkg/util/apiclient" - corev1 "k8s.io/api/core/v1" extensionsv1beta1 "k8s.io/api/extensions/v1beta1" + networkingv1 "k8s.io/api/networking/v1" networkingv1beta1 "k8s.io/api/networking/v1beta1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -36,6 +34,8 @@ import ( "k8s.io/apiserver/pkg/registry/rest" "k8s.io/client-go/kubernetes" platforminternalclient "tkestack.io/tke/api/client/clientset/internalversion/typed/platform/internalversion" + "tkestack.io/tke/pkg/platform/proxy" + "tkestack.io/tke/pkg/util/apiclient" ) // EventREST implements the REST endpoint for find events by a daemonset. @@ -74,6 +74,9 @@ func (r *EventREST) Get(ctx context.Context, name string, options *metav1.GetOpt if apiclient.ClusterVersionIsBefore116(client) { return listEventsByExtensions(ctx, client, namespaceName, name, options) } + if apiclient.ClusterVersionIsAfter122(client) { + return listEventsByNetworkingsV1(ctx, client, namespaceName, name, options) + } return listEventsByNetworkings(ctx, client, namespaceName, name, options) } @@ -110,3 +113,20 @@ func listEventsByNetworkings(ctx context.Context, client *kubernetes.Clientset, } return client.CoreV1().Events(namespaceName).List(ctx, listOptions) } + +func listEventsByNetworkingsV1(ctx context.Context, client *kubernetes.Clientset, namespaceName, name string, options *metav1.GetOptions) (runtime.Object, error) { + ingress, err := client.NetworkingV1().Ingresses(namespaceName).Get(ctx, name, *options) + if err != nil { + return nil, errors.NewNotFound(networkingv1.Resource("ingresses/events"), name) + } + + selector := fields.AndSelectors( + fields.OneTermEqualSelector("involvedObject.uid", string(ingress.UID)), + fields.OneTermEqualSelector("involvedObject.name", ingress.Name), + fields.OneTermEqualSelector("involvedObject.namespace", ingress.Namespace), + fields.OneTermEqualSelector("involvedObject.kind", "Ingress")) + listOptions := metav1.ListOptions{ + FieldSelector: selector.String(), + } + return client.CoreV1().Events(namespaceName).List(ctx, listOptions) +} diff --git a/pkg/platform/proxy/storage/storageclass/storage/event.go b/pkg/platform/proxy/storage/storageclass/storage/event.go index fbf58300ad..ab77e45dff 100644 --- a/pkg/platform/proxy/storage/storageclass/storage/event.go +++ b/pkg/platform/proxy/storage/storageclass/storage/event.go @@ -29,8 +29,10 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apiserver/pkg/registry/rest" + "k8s.io/client-go/kubernetes" platforminternalclient "tkestack.io/tke/api/client/clientset/internalversion/typed/platform/internalversion" "tkestack.io/tke/pkg/platform/proxy" + "tkestack.io/tke/pkg/util/apiclient" ) // EventREST implements the REST endpoint for find events by a storageclass. @@ -61,6 +63,13 @@ func (r *EventREST) Get(ctx context.Context, name string, options *metav1.GetOpt return nil, err } + if apiclient.ClusterVersionIsAfter122(client) { + return listEventsByV1(ctx, client, name, options) + } + return listEventsByV1beta1(ctx, client, name, options) +} + +func listEventsByV1beta1(ctx context.Context, client *kubernetes.Clientset, name string, options *metav1.GetOptions) (runtime.Object, error) { storageClass, err := client.StorageV1beta1().StorageClasses().Get(ctx, name, *options) if err != nil { return nil, errors.NewNotFound(extensionsv1beta1.Resource("storageclasses/events"), name) @@ -75,3 +84,19 @@ func (r *EventREST) Get(ctx context.Context, name string, options *metav1.GetOpt } return client.CoreV1().Events("").List(ctx, listOptions) } + +func listEventsByV1(ctx context.Context, client *kubernetes.Clientset, name string, options *metav1.GetOptions) (runtime.Object, error) { + storageClass, err := client.StorageV1().StorageClasses().Get(ctx, name, *options) + if err != nil { + return nil, errors.NewNotFound(extensionsv1beta1.Resource("storageclasses/events"), name) + } + + selector := fields.AndSelectors( + fields.OneTermEqualSelector("involvedObject.uid", string(storageClass.UID)), + fields.OneTermEqualSelector("involvedObject.name", storageClass.Name), + fields.OneTermEqualSelector("involvedObject.kind", "StorageClass")) + listOptions := metav1.ListOptions{ + FieldSelector: selector.String(), + } + return client.CoreV1().Events("").List(ctx, listOptions) +} diff --git a/pkg/util/apiclient/version.go b/pkg/util/apiclient/version.go index 3c3edb224b..0e70795e55 100644 --- a/pkg/util/apiclient/version.go +++ b/pkg/util/apiclient/version.go @@ -44,6 +44,15 @@ func ClusterVersionIsBefore116(client kubernetes.Interface) bool { return result } +func ClusterVersionIsAfter122(client kubernetes.Interface) bool { + result, err := CheckClusterVersion(client, ">= 1.22") + if err != nil { + return false + } + + return result +} + func ClusterVersionIsBefore118(client kubernetes.Interface) bool { result, err := CheckClusterVersion(client, "< 1.18") if err != nil {