From 501f68aea4f7d798cf934d7cd3b9707b7bbacf22 Mon Sep 17 00:00:00 2001 From: Xinzhao Xu Date: Wed, 19 Jan 2022 10:28:30 +0800 Subject: [PATCH] Clean up the code that converts Unstructured objects Signed-off-by: Xinzhao Xu --- pkg/clusterdiscovery/clusterapi/clusterapi.go | 5 +++-- pkg/controllers/hpa/hpa_controller.go | 8 ++------ pkg/controllers/namespace/namespace_sync_controller.go | 5 +---- pkg/controllers/unifiedauth/unified_auth_controller.go | 7 ++----- pkg/detector/detector.go | 4 ++-- pkg/karmadactl/get.go | 8 ++++---- .../customizedinterpreter/configmanager/manager.go | 6 ++---- pkg/resourceinterpreter/defaultinterpreter/retain.go | 6 ++---- pkg/util/helper/binding.go | 4 ++-- pkg/util/overridemanager/overridemanager_test.go | 5 ++--- test/e2e/framework/customresourcedefine.go | 6 ++---- test/e2e/framework/workload.go | 9 +++++---- test/e2e/scheduling_test.go | 9 +++------ 13 files changed, 32 insertions(+), 50 deletions(-) diff --git a/pkg/clusterdiscovery/clusterapi/clusterapi.go b/pkg/clusterdiscovery/clusterapi/clusterapi.go index 91256d6f1..2c97dc262 100644 --- a/pkg/clusterdiscovery/clusterapi/clusterapi.go +++ b/pkg/clusterdiscovery/clusterapi/clusterapi.go @@ -22,6 +22,7 @@ import ( "github.com/karmada-io/karmada/pkg/karmadactl" "github.com/karmada-io/karmada/pkg/karmadactl/options" "github.com/karmada-io/karmada/pkg/util" + "github.com/karmada-io/karmada/pkg/util/helper" "github.com/karmada-io/karmada/pkg/util/informermanager" "github.com/karmada-io/karmada/pkg/util/informermanager/keys" ) @@ -143,13 +144,13 @@ func (d *ClusterDetector) GetUnstructuredObject(objectKey keys.ClusterWideKey) ( return nil, err } - uncastObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(object) + unstructuredObj, err := helper.ToUnstructured(object) if err != nil { klog.Errorf("Failed to transform object(%s), error: %v", objectKey, err) return nil, err } - return &unstructured.Unstructured{Object: uncastObj}, nil + return unstructuredObj, nil } func (d *ClusterDetector) joinClusterAPICluster(clusterWideKey keys.ClusterWideKey) error { diff --git a/pkg/controllers/hpa/hpa_controller.go b/pkg/controllers/hpa/hpa_controller.go index 192c0d091..cbde5f3ff 100644 --- a/pkg/controllers/hpa/hpa_controller.go +++ b/pkg/controllers/hpa/hpa_controller.go @@ -7,8 +7,6 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/dynamic" @@ -83,12 +81,11 @@ func (c *HorizontalPodAutoscalerController) syncHPA(hpa *autoscalingv1.Horizonta // buildWorks transforms hpa obj to unstructured, creates or updates Works in the target execution namespaces. func (c *HorizontalPodAutoscalerController) buildWorks(hpa *autoscalingv1.HorizontalPodAutoscaler, clusters []string) error { - uncastObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(hpa) + hpaObj, err := helper.ToUnstructured(hpa) if err != nil { klog.Errorf("Failed to transform hpa %s/%s. Error: %v", hpa.GetNamespace(), hpa.GetName(), err) return nil } - hpaObj := &unstructured.Unstructured{Object: uncastObj} for _, clusterName := range clusters { workNamespace, err := names.GenerateExecutionSpaceName(clusterName) if err != nil { @@ -137,12 +134,11 @@ func (c *HorizontalPodAutoscalerController) getTargetPlacement(objRef autoscalin return nil, err } } - uncastObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(workload) + unstructuredWorkLoad, err := helper.ToUnstructured(workload) if err != nil { klog.Errorf("Failed to transform object(%s/%s): %v", namespace, objRef.Name, err) return nil, err } - unstructuredWorkLoad := unstructured.Unstructured{Object: uncastObj} bindingName := names.GenerateBindingName(unstructuredWorkLoad.GetKind(), unstructuredWorkLoad.GetName()) binding := &workv1alpha2.ResourceBinding{} namespacedName := types.NamespacedName{ diff --git a/pkg/controllers/namespace/namespace_sync_controller.go b/pkg/controllers/namespace/namespace_sync_controller.go index 81f65b7ab..9431dd303 100644 --- a/pkg/controllers/namespace/namespace_sync_controller.go +++ b/pkg/controllers/namespace/namespace_sync_controller.go @@ -6,8 +6,6 @@ import ( corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/tools/record" "k8s.io/klog/v2" @@ -91,12 +89,11 @@ func (c *Controller) namespaceShouldBeSynced(namespace string) bool { } func (c *Controller) buildWorks(namespace *corev1.Namespace, clusters []clusterv1alpha1.Cluster) error { - uncastObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(namespace) + namespaceObj, err := helper.ToUnstructured(namespace) if err != nil { klog.Errorf("Failed to transform namespace %s. Error: %v", namespace.GetName(), err) return nil } - namespaceObj := &unstructured.Unstructured{Object: uncastObj} for _, cluster := range clusters { workNamespace, err := names.GenerateExecutionSpaceName(cluster.Name) diff --git a/pkg/controllers/unifiedauth/unified_auth_controller.go b/pkg/controllers/unifiedauth/unified_auth_controller.go index fe03438b0..0618e34fd 100644 --- a/pkg/controllers/unifiedauth/unified_auth_controller.go +++ b/pkg/controllers/unifiedauth/unified_auth_controller.go @@ -7,7 +7,6 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" @@ -147,13 +146,12 @@ func (c *Controller) buildImpersonationClusterRole(cluster *clusterv1alpha1.Clus Rules: rules, } - uncastObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(impersonationClusterRole) + clusterRoleObj, err := helper.ToUnstructured(impersonationClusterRole) if err != nil { klog.Errorf("Failed to transform clusterrole %s. Error: %v", impersonationClusterRole.GetName(), err) return nil } - clusterRoleObj := &unstructured.Unstructured{Object: uncastObj} return c.buildWorks(cluster, clusterRoleObj) } @@ -180,13 +178,12 @@ func (c *Controller) buildImpersonationClusterRoleBinding(cluster *clusterv1alph }, } - uncastObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(impersonatorClusterRoleBinding) + clusterRoleBindingObj, err := helper.ToUnstructured(impersonatorClusterRoleBinding) if err != nil { klog.Errorf("Failed to transform clusterrolebinding %s. Error: %v", impersonatorClusterRoleBinding.GetName(), err) return nil } - clusterRoleBindingObj := &unstructured.Unstructured{Object: uncastObj} return c.buildWorks(cluster, clusterRoleBindingObj) } diff --git a/pkg/detector/detector.go b/pkg/detector/detector.go index e96abc650..c016c1d3c 100644 --- a/pkg/detector/detector.go +++ b/pkg/detector/detector.go @@ -568,13 +568,13 @@ func (d *ResourceDetector) GetUnstructuredObject(objectKey keys.ClusterWideKey) return nil, err } - uncastObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(object) + unstructuredObj, err := helper.ToUnstructured(object) if err != nil { klog.Errorf("Failed to transform object(%s), error: %v", objectKey, err) return nil, err } - return &unstructured.Unstructured{Object: uncastObj}, nil + return unstructuredObj, nil } // GetObject retrieves object from local cache. diff --git a/pkg/karmadactl/get.go b/pkg/karmadactl/get.go index 0d9d44558..1d8076535 100644 --- a/pkg/karmadactl/get.go +++ b/pkg/karmadactl/get.go @@ -34,6 +34,7 @@ import ( workv1alpha2 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha2" "github.com/karmada-io/karmada/pkg/karmadactl/options" "github.com/karmada-io/karmada/pkg/util/gclient" + "github.com/karmada-io/karmada/pkg/util/helper" ) const printColumnClusterNum = 1 @@ -239,11 +240,10 @@ func (g *CommandGetOptions) Run(karmadaConfig KarmadaConfig, cmd *cobra.Command, fmt.Println(msg) return nil } - printObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(table) + printObj, err := helper.ToUnstructured(table) if err != nil { return err } - newPrintObj := &unstructured.Unstructured{Object: printObj} var printer printers.ResourcePrinter var lastMapping *meta.RESTMapping @@ -275,9 +275,9 @@ func (g *CommandGetOptions) Run(karmadaConfig KarmadaConfig, cmd *cobra.Command, } return err } - //lastMapping = mapping + // lastMapping = mapping } - err = printer.PrintObj(newPrintObj, w) + err = printer.PrintObj(printObj, w) if err != nil { return err } diff --git a/pkg/resourceinterpreter/customizedinterpreter/configmanager/manager.go b/pkg/resourceinterpreter/customizedinterpreter/configmanager/manager.go index fe3000197..94b5b415a 100644 --- a/pkg/resourceinterpreter/customizedinterpreter/configmanager/manager.go +++ b/pkg/resourceinterpreter/customizedinterpreter/configmanager/manager.go @@ -5,9 +5,7 @@ import ( "sort" "sync/atomic" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/client-go/tools/cache" @@ -89,13 +87,13 @@ func (m *interpreterConfigManager) updateConfiguration() { configs := make([]*configv1alpha1.ResourceInterpreterWebhookConfiguration, 0) for _, c := range configurations { - unstructuredConfig, err := runtime.DefaultUnstructuredConverter.ToUnstructured(c) + unstructuredConfig, err := helper.ToUnstructured(c) if err != nil { klog.Errorf("Failed to transform ResourceInterpreterWebhookConfiguration: %w", err) return } - config, err := helper.ConvertToResourceExploringWebhookConfiguration(&unstructured.Unstructured{Object: unstructuredConfig}) + config, err := helper.ConvertToResourceExploringWebhookConfiguration(unstructuredConfig) if err != nil { klog.Errorf("Failed to convert object(%s), err", config.GroupVersionKind().String(), err) return diff --git a/pkg/resourceinterpreter/defaultinterpreter/retain.go b/pkg/resourceinterpreter/defaultinterpreter/retain.go index eb26457bb..15f3a7c01 100644 --- a/pkg/resourceinterpreter/defaultinterpreter/retain.go +++ b/pkg/resourceinterpreter/defaultinterpreter/retain.go @@ -6,7 +6,6 @@ import ( batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "github.com/karmada-io/karmada/pkg/util" @@ -61,13 +60,12 @@ func retainPodFields(desired, observed *unstructured.Unstructured) (*unstructure } } - unCastObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(desiredPod) + unstructuredObj, err := helper.ToUnstructured(desiredPod) if err != nil { return nil, fmt.Errorf("failed to transform Pod: %v", err) } - desired.Object = unCastObj - return desired, nil + return unstructuredObj, nil } // retainServiceFields updates the desired service object with values retained from the cluster object. diff --git a/pkg/util/helper/binding.go b/pkg/util/helper/binding.go index b55f41b13..eb5123308 100644 --- a/pkg/util/helper/binding.go +++ b/pkg/util/helper/binding.go @@ -171,13 +171,13 @@ func FetchWorkload(dynamicClient dynamic.Interface, informerManager informermana } } - unstructuredWorkLoad, err := runtime.DefaultUnstructuredConverter.ToUnstructured(workload) + unstructuredWorkLoad, err := ToUnstructured(workload) if err != nil { klog.Errorf("Failed to transform object(%s/%s): %v", resource.Namespace, resource.Name, err) return nil, err } - return &unstructured.Unstructured{Object: unstructuredWorkLoad}, nil + return unstructuredWorkLoad, nil } // GetClusterResourceBindings returns a ClusterResourceBindingList by labels. diff --git a/pkg/util/overridemanager/overridemanager_test.go b/pkg/util/overridemanager/overridemanager_test.go index d44e9cac5..acdb89512 100644 --- a/pkg/util/overridemanager/overridemanager_test.go +++ b/pkg/util/overridemanager/overridemanager_test.go @@ -7,10 +7,10 @@ import ( apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" clusterv1alpha1 "github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1" policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1" + utilhelper "github.com/karmada-io/karmada/pkg/util/helper" "github.com/karmada-io/karmada/test/helper" ) @@ -19,8 +19,7 @@ func TestGetMatchingOverridePolicies(t *testing.T) { cluster2 := helper.NewCluster("cluster2") deployment := helper.NewDeployment(metav1.NamespaceDefault, "test") - uncastObj, _ := runtime.DefaultUnstructuredConverter.ToUnstructured(deployment) - deploymentObj := &unstructured.Unstructured{Object: uncastObj} + deploymentObj, _ := utilhelper.ToUnstructured(deployment) overriders1 := policyv1alpha1.Overriders{ Plaintext: []policyv1alpha1.PlaintextOverrider{ diff --git a/test/e2e/framework/customresourcedefine.go b/test/e2e/framework/customresourcedefine.go index cabc8a7bd..d6578bc1e 100644 --- a/test/e2e/framework/customresourcedefine.go +++ b/test/e2e/framework/customresourcedefine.go @@ -9,8 +9,6 @@ import ( apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/dynamic" "k8s.io/klog/v2" @@ -24,10 +22,10 @@ var crdGVR = schema.GroupVersionResource{Group: "apiextensions.k8s.io", Version: // CreateCRD create CustomResourceDefinition with dynamic client. func CreateCRD(client dynamic.Interface, crd *apiextensionsv1.CustomResourceDefinition) { ginkgo.By(fmt.Sprintf("Creating crd(%s)", crd.Name), func() { - unstructObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(crd) + unstructuredObj, err := helper.ToUnstructured(crd) gomega.Expect(err).ShouldNot(gomega.HaveOccurred()) - _, err = client.Resource(crdGVR).Create(context.TODO(), &unstructured.Unstructured{Object: unstructObj}, metav1.CreateOptions{}) + _, err = client.Resource(crdGVR).Create(context.TODO(), unstructuredObj, metav1.CreateOptions{}) gomega.Expect(err).ShouldNot(gomega.HaveOccurred()) }) } diff --git a/test/e2e/framework/workload.go b/test/e2e/framework/workload.go index 60177bef5..4689059b3 100644 --- a/test/e2e/framework/workload.go +++ b/test/e2e/framework/workload.go @@ -15,6 +15,7 @@ import ( "k8s.io/klog/v2" workloadv1alpha1 "github.com/karmada-io/karmada/examples/customresourceinterpreter/apis/workload/v1alpha1" + "github.com/karmada-io/karmada/pkg/util/helper" ) var workloadGVR = workloadv1alpha1.SchemeGroupVersion.WithResource("workloads") @@ -22,10 +23,10 @@ var workloadGVR = workloadv1alpha1.SchemeGroupVersion.WithResource("workloads") // CreateWorkload create Workload with dynamic client func CreateWorkload(client dynamic.Interface, workload *workloadv1alpha1.Workload) { ginkgo.By(fmt.Sprintf("Creating workload(%s/%s)", workload.Namespace, workload.Name), func() { - unstructuredObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(workload) + unstructuredObj, err := helper.ToUnstructured(workload) gomega.Expect(err).ShouldNot(gomega.HaveOccurred()) - _, err = client.Resource(workloadGVR).Namespace(workload.Namespace).Create(context.TODO(), &unstructured.Unstructured{Object: unstructuredObj}, metav1.CreateOptions{}) + _, err = client.Resource(workloadGVR).Namespace(workload.Namespace).Create(context.TODO(), unstructuredObj, metav1.CreateOptions{}) gomega.Expect(err).ShouldNot(gomega.HaveOccurred()) }) } @@ -33,11 +34,11 @@ func CreateWorkload(client dynamic.Interface, workload *workloadv1alpha1.Workloa // UpdateWorkload update Workload with dynamic client func UpdateWorkload(client dynamic.Interface, workload *workloadv1alpha1.Workload, clusterName string) { ginkgo.By(fmt.Sprintf("Update workload(%s/%s) in cluster(%s)", workload.Namespace, workload.Name, clusterName), func() { - newUnstructuredObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(workload) + newUnstructuredObj, err := helper.ToUnstructured(workload) gomega.Expect(err).ShouldNot(gomega.HaveOccurred()) gomega.Eventually(func() error { - _, err = client.Resource(workloadGVR).Namespace(workload.Namespace).Update(context.TODO(), &unstructured.Unstructured{Object: newUnstructuredObj}, metav1.UpdateOptions{}) + _, err = client.Resource(workloadGVR).Namespace(workload.Namespace).Update(context.TODO(), newUnstructuredObj, metav1.UpdateOptions{}) return err }, pollTimeout, pollInterval).ShouldNot(gomega.HaveOccurred()) }) diff --git a/test/e2e/scheduling_test.go b/test/e2e/scheduling_test.go index 04f36b79d..8ab821bf3 100644 --- a/test/e2e/scheduling_test.go +++ b/test/e2e/scheduling_test.go @@ -13,8 +13,6 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/rand" @@ -27,6 +25,7 @@ import ( policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1" workv1alpha2 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha2" "github.com/karmada-io/karmada/pkg/util" + utilhelper "github.com/karmada-io/karmada/pkg/util/helper" "github.com/karmada-io/karmada/pkg/util/names" "github.com/karmada-io/karmada/test/e2e/framework" "github.com/karmada-io/karmada/test/helper" @@ -744,9 +743,8 @@ var _ = ginkgo.Describe("[JobReplicaScheduling] JobReplicaSchedulingStrategy tes // get the resource binding associated with the workload func getResourceBinding(workload interface{}) (*workv1alpha2.ResourceBinding, error) { - uncastObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(workload) + obj, err := utilhelper.ToUnstructured(workload) gomega.Expect(err).ShouldNot(gomega.HaveOccurred()) - obj := unstructured.Unstructured{Object: uncastObj} bindingName := names.GenerateBindingName(obj.GetKind(), obj.GetName()) binding := &workv1alpha2.ResourceBinding{} @@ -756,9 +754,8 @@ func getResourceBinding(workload interface{}) (*workv1alpha2.ResourceBinding, er // get the cluster resource binding associated with the workload func getClusterResourceBinding(workload interface{}) (*workv1alpha2.ClusterResourceBinding, error) { - uncastObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(workload) + obj, err := utilhelper.ToUnstructured(workload) gomega.Expect(err).ShouldNot(gomega.HaveOccurred()) - obj := unstructured.Unstructured{Object: uncastObj} bindingName := names.GenerateBindingName(obj.GetKind(), obj.GetName()) binding := &workv1alpha2.ClusterResourceBinding{}