Merge pull request #1277 from iawia002/unstructured

Clean up the code that converts Unstructured objects
This commit is contained in:
karmada-bot 2022-01-20 10:09:25 +08:00 committed by GitHub
commit abc767bfcd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 32 additions and 50 deletions

View File

@ -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 {

View File

@ -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{

View File

@ -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)

View File

@ -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)
}

View File

@ -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.

View File

@ -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
}

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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{

View File

@ -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())
})
}

View File

@ -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())
})

View File

@ -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{}