Skip to content

Commit

Permalink
Moved additionalPrinterColumns to CRD detail
Browse files Browse the repository at this point in the history
  • Loading branch information
RafikFarhad committed Dec 31, 2023
1 parent 1b06436 commit 95f5b42
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 18 deletions.
32 changes: 22 additions & 10 deletions modules/api/pkg/resource/customresourcedefinition/types/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand Down Expand Up @@ -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 {
Expand All @@ -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
}

Expand Down
16 changes: 13 additions & 3 deletions modules/api/pkg/resource/customresourcedefinition/v1/detail.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
})
}
}
Expand Down
12 changes: 7 additions & 5 deletions modules/api/pkg/resource/customresourcedefinition/v1/objects.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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 {
Expand Down

0 comments on commit 95f5b42

Please sign in to comment.