From 95f5b4212bb34e7a7c774351e869b3157b2dc6a4 Mon Sep 17 00:00:00 2001 From: Rafik Farhad Date: Sun, 31 Dec 2023 09:49:30 +0600 Subject: [PATCH] Moved additionalPrinterColumns to CRD detail --- .../customresourcedefinition/types/types.go | 32 +++++++++++++------ .../customresourcedefinition/v1/detail.go | 16 ++++++++-- .../customresourcedefinition/v1/objects.go | 12 ++++--- 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/modules/api/pkg/resource/customresourcedefinition/types/types.go b/modules/api/pkg/resource/customresourcedefinition/types/types.go index 01a5ee626d36..ab401d4ea039 100644 --- a/modules/api/pkg/resource/customresourcedefinition/types/types.go +++ b/modules/api/pkg/resource/customresourcedefinition/types/types.go @@ -16,12 +16,10 @@ package types import ( "encoding/json" - + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" - "k8s.io/dashboard/api/pkg/api" "k8s.io/dashboard/api/pkg/resource/common" ) @@ -60,17 +58,31 @@ type CustomResourceDefinitionDetail struct { Errors []error `json:"errors"` } +type AdditionalPrinterColumn struct { + Name string `json:"name"` + Type string `json:"type,omitempty"` + Priority int32 `json:"priority,omitempty"` + JSONPath string `json:"jsonPath"` +} + type CustomResourceDefinitionVersion struct { - Name string `json:"name"` - Served bool `json:"served"` - Storage bool `json:"storage"` + Name string `json:"name"` + Served bool `json:"served"` + Storage bool `json:"storage"` + AdditionalPrinterColumns []AdditionalPrinterColumn `json:"additionalPrinterColumns"` +} + +type AdditionalPrinterColumnWithValue struct { + Name string `json:"name"` + Value string `json:"value"` } // CustomResourceObject represents a custom resource object. type CustomResourceObject struct { - AdditionalPrinterColumns unstructured.Unstructured `json:"additionalPrinterColumns,omitempty"` - TypeMeta api.TypeMeta `json:"typeMeta"` - ObjectMeta api.ObjectMeta `json:"objectMeta"` + AdditionalPrinterColumns []AdditionalPrinterColumnWithValue `json:"additionalPrinterColumns,omitempty"` + RawObject unstructured.Unstructured `json:"-"` // the raw object as map[string]interface{} to grep the value for AdditionalPrinterColumnWithValue which is present on the CRD Details + TypeMeta api.TypeMeta `json:"typeMeta"` + ObjectMeta api.ObjectMeta `json:"objectMeta"` } func (r *CustomResourceObject) UnmarshalJSON(data []byte) error { @@ -92,7 +104,7 @@ func (r *CustomResourceObject) UnmarshalJSON(data []byte) error { r.TypeMeta = api.NewTypeMeta(api.ResourceKind(tempStruct.TypeMeta.Kind)) r.ObjectMeta = api.NewObjectMeta(tempStruct.ObjectMeta) - r.AdditionalPrinterColumns.Object = (*tempUnstruct).Object + r.RawObject = *tempUnstruct return nil } diff --git a/modules/api/pkg/resource/customresourcedefinition/v1/detail.go b/modules/api/pkg/resource/customresourcedefinition/v1/detail.go index e1b413126a11..7888ad87d2f1 100644 --- a/modules/api/pkg/resource/customresourcedefinition/v1/detail.go +++ b/modules/api/pkg/resource/customresourcedefinition/v1/detail.go @@ -71,10 +71,20 @@ func getCRDVersions(crd *apiextensions.CustomResourceDefinition) []types.CustomR crdVersions := make([]types.CustomResourceDefinitionVersion, 0, len(crd.Spec.Versions)) if len(crd.Spec.Versions) > 0 { for _, version := range crd.Spec.Versions { + tempColumns := make([]types.AdditionalPrinterColumn, 0) + for _, column := range version.AdditionalPrinterColumns { + tempColumns = append(tempColumns, types.AdditionalPrinterColumn{ + Name: column.Name, + Type: column.Type, + Priority: column.Priority, + JSONPath: column.JSONPath, + }) + } crdVersions = append(crdVersions, types.CustomResourceDefinitionVersion{ - Name: version.Name, - Served: version.Served, - Storage: version.Storage, + Name: version.Name, + Served: version.Served, + Storage: version.Storage, + AdditionalPrinterColumns: tempColumns, }) } } diff --git a/modules/api/pkg/resource/customresourcedefinition/v1/objects.go b/modules/api/pkg/resource/customresourcedefinition/v1/objects.go index 3a0474c48700..5fd4677e45b7 100644 --- a/modules/api/pkg/resource/customresourcedefinition/v1/objects.go +++ b/modules/api/pkg/resource/customresourcedefinition/v1/objects.go @@ -18,7 +18,6 @@ import ( "context" "encoding/json" "fmt" - apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -130,12 +129,15 @@ func toCRDObject(object *types.CustomResourceObject, crd *apiextensionsv1.Custom object.TypeMeta.Kind = api.ResourceKind(crd.Name) crdSubresources := crd.Spec.Versions[0].Subresources object.TypeMeta.Scalable = crdSubresources != nil && crdSubresources.Scale != nil - tempMap := map[string]interface{}{} for _, col := range crd.Spec.Versions[0].AdditionalPrinterColumns { - val, _, _ := unstructured.NestedString(object.AdditionalPrinterColumns.Object, splitJsonPath(col.JSONPath)...) - tempMap[col.Name] = val + val, _, _ := unstructured.NestedString(object.RawObject.Object, splitJsonPath(col.JSONPath)...) + //if val != "" { + object.AdditionalPrinterColumns = append(object.AdditionalPrinterColumns, types.AdditionalPrinterColumnWithValue{ + Name: col.Name, + Value: val, + }) + //} } - object.AdditionalPrinterColumns.Object = tempMap } func splitJsonPath(path string) []string {