...
1
16
17 package apiserver
18
19 import (
20 "fmt"
21
22 apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
23 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24 )
25
26 var swaggerMetadataDescriptions = metav1.ObjectMeta{}.SwaggerDoc()
27
28
29
30
31
32 func getColumnsForVersion(crd *apiextensionsv1.CustomResourceDefinition, version string) ([]apiextensionsv1.CustomResourceColumnDefinition, error) {
33 for _, v := range crd.Spec.Versions {
34 if version == v.Name {
35 return serveDefaultColumnsIfEmpty(v.AdditionalPrinterColumns), nil
36 }
37 }
38 return nil, fmt.Errorf("version %s not found in apiextensionsv1.CustomResourceDefinition: %v", version, crd.Name)
39 }
40
41
42 func getScaleColumnsForVersion(crd *apiextensionsv1.CustomResourceDefinition, version string) ([]apiextensionsv1.CustomResourceColumnDefinition, error) {
43 for _, v := range crd.Spec.Versions {
44 if version != v.Name {
45 continue
46 }
47 var cols []apiextensionsv1.CustomResourceColumnDefinition
48 if v.Subresources != nil && v.Subresources.Scale != nil {
49 if v.Subresources.Scale.SpecReplicasPath != "" {
50 cols = append(cols, apiextensionsv1.CustomResourceColumnDefinition{
51 Name: "Desired",
52 Type: "integer",
53 Description: "Number of desired replicas",
54 JSONPath: ".spec.replicas",
55 })
56 }
57 if v.Subresources.Scale.StatusReplicasPath != "" {
58 cols = append(cols, apiextensionsv1.CustomResourceColumnDefinition{
59 Name: "Available",
60 Type: "integer",
61 Description: "Number of actual replicas",
62 JSONPath: ".status.replicas",
63 })
64 }
65 }
66 cols = append(cols, apiextensionsv1.CustomResourceColumnDefinition{
67 Name: "Age",
68 Type: "date",
69 Description: swaggerMetadataDescriptions["creationTimestamp"],
70 JSONPath: ".metadata.creationTimestamp",
71 })
72 return cols, nil
73 }
74 return nil, fmt.Errorf("version %s not found in apiextensionsv1.CustomResourceDefinition: %v", version, crd.Name)
75 }
76
77
78
79
80
81 func serveDefaultColumnsIfEmpty(columns []apiextensionsv1.CustomResourceColumnDefinition) []apiextensionsv1.CustomResourceColumnDefinition {
82 if len(columns) > 0 {
83 return columns
84 }
85 return []apiextensionsv1.CustomResourceColumnDefinition{
86 {Name: "Age", Type: "date", Description: swaggerMetadataDescriptions["creationTimestamp"], JSONPath: ".metadata.creationTimestamp"},
87 }
88 }
89
View as plain text