This repository has been archived by the owner on Nov 20, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 7
/
table.go
59 lines (52 loc) · 1.86 KB
/
table.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package app
import (
"context"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"sigs.k8s.io/controller-runtime/pkg/client"
)
type tableConverter interface {
ConvertToTable(context.Context, runtime.Object, runtime.Object) (*metav1.Table, error)
}
var swaggerMetadataDescriptions = metav1.ObjectMeta{}.SwaggerDoc()
func serveDefaultColumnsIfEmpty(columns []apiextensionsv1.CustomResourceColumnDefinition) []apiextensionsv1.CustomResourceColumnDefinition {
if len(columns) > 0 {
return columns
}
return []apiextensionsv1.CustomResourceColumnDefinition{
{Name: "Age", Type: "date", Description: swaggerMetadataDescriptions["creationTimestamp"], JSONPath: ".metadata.creationTimestamp"},
}
}
func (x *Controller) createTableConverter(ctx context.Context, cli client.Client, gvr schema.GroupVersionResource) (tableConverter, error) {
var crd apiextensionsv1.CustomResourceDefinition
if err := cli.Get(ctx, client.ObjectKey{Name: gvr.GroupResource().String()}, &crd); err != nil {
return nil, newError(err)
}
var cols []apiextensionsv1.CustomResourceColumnDefinition
for _, v := range crd.Spec.Versions {
if v.Name == gvr.Version {
cols = v.AdditionalPrinterColumns
break
}
}
return tableconvertor.New(serveDefaultColumnsIfEmpty(cols))
}
func (x *Controller) tableConverterFor(ctx context.Context, cli client.Client, gvr schema.GroupVersionResource) (tableConverter, error) {
x.tcmu.RLock()
tc, ok := x.tableConverters[gvr]
x.tcmu.RUnlock()
if ok {
return tc, nil
}
x.tcmu.Lock()
defer x.tcmu.Unlock()
tc, err := x.createTableConverter(ctx, cli, gvr)
if err != nil {
return nil, err
}
x.tableConverters[gvr] = tc
return tc, nil
}