Skip to content

Commit 0aec7b5

Browse files
authored
Merge pull request #4584 from niuyueyang1996/implement-node/pod-tableconvert
Implement node/pod tableconvert
2 parents ec575e1 + 4aecca5 commit 0aec7b5

File tree

5 files changed

+532
-6
lines changed

5 files changed

+532
-6
lines changed

pkg/printers/storage/storage.go

+20-3
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,27 @@ import (
2222

2323
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2424
"k8s.io/apimachinery/pkg/runtime"
25+
"k8s.io/apiserver/pkg/registry/rest"
2526

2627
"github.com/karmada-io/karmada/pkg/printers"
2728
)
2829

2930
// TableConvertor struct - converts objects to metav1.Table using printers.TableGenerator
3031
type TableConvertor struct {
32+
defaultTableConvert rest.TableConvertor
3133
printers.TableGenerator
3234
}
3335

34-
// ConvertToTable method - converts objects to metav1.Table objects using TableGenerator
35-
func (c TableConvertor) ConvertToTable(_ context.Context, obj runtime.Object, tableOptions runtime.Object) (*metav1.Table, error) {
36+
// NewTableConvertor create TableConvertor struct with defaultTableConvert and TableGenerator
37+
func NewTableConvertor(defaultTableConvert rest.TableConvertor, tableGenerator printers.TableGenerator) rest.TableConvertor {
38+
return &TableConvertor{
39+
defaultTableConvert: defaultTableConvert,
40+
TableGenerator: tableGenerator,
41+
}
42+
}
43+
44+
// ConvertToTable method - converts objects to metav1.Table objects using TableGenerator and defaultTableConvert
45+
func (c TableConvertor) ConvertToTable(ctx context.Context, obj runtime.Object, tableOptions runtime.Object) (*metav1.Table, error) {
3646
noHeaders := false
3747
if tableOptions != nil {
3848
switch t := tableOptions.(type) {
@@ -44,5 +54,12 @@ func (c TableConvertor) ConvertToTable(_ context.Context, obj runtime.Object, ta
4454
return nil, fmt.Errorf("unrecognized type %T for table options, can't display tabular output", tableOptions)
4555
}
4656
}
47-
return c.TableGenerator.GenerateTable(obj, printers.GenerateOptions{Wide: true, NoHeaders: noHeaders})
57+
tableResult, err := c.TableGenerator.GenerateTable(obj, printers.GenerateOptions{Wide: true, NoHeaders: noHeaders})
58+
if err == nil {
59+
return tableResult, err
60+
}
61+
if c.defaultTableConvert == nil {
62+
return tableResult, err
63+
}
64+
return c.defaultTableConvert.ConvertToTable(ctx, obj, tableOptions)
4865
}

pkg/printers/storage/storage_test.go

+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/*
2+
Copyright 2024 The Karmada Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package storage
18+
19+
import (
20+
"context"
21+
"fmt"
22+
"testing"
23+
24+
v1 "k8s.io/api/core/v1"
25+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26+
"k8s.io/apimachinery/pkg/runtime"
27+
"k8s.io/apimachinery/pkg/runtime/schema"
28+
"k8s.io/apiserver/pkg/registry/rest"
29+
30+
"github.com/karmada-io/karmada/pkg/printers"
31+
printersinternal "github.com/karmada-io/karmada/pkg/util/lifted"
32+
)
33+
34+
func TestPrintHandlerStorage(t *testing.T) {
35+
convert := NewTableConvertor(
36+
rest.NewDefaultTableConvertor(schema.GroupResource{}),
37+
printers.NewTableGenerator().With(printersinternal.AddCoreV1Handlers))
38+
testCases := []struct {
39+
object runtime.Object
40+
}{
41+
{
42+
object: &v1.Pod{
43+
ObjectMeta: metav1.ObjectMeta{Name: "test1"},
44+
Spec: v1.PodSpec{},
45+
Status: v1.PodStatus{
46+
Phase: v1.PodPending,
47+
HostIP: "1.2.3.4",
48+
PodIP: "2.3.4.5",
49+
},
50+
},
51+
},
52+
{
53+
object: &v1.Node{
54+
TypeMeta: metav1.TypeMeta{},
55+
ObjectMeta: metav1.ObjectMeta{Name: "node1"},
56+
Spec: v1.NodeSpec{},
57+
Status: v1.NodeStatus{
58+
Phase: v1.NodeTerminated,
59+
Addresses: []v1.NodeAddress{
60+
{
61+
Type: v1.NodeInternalIP,
62+
Address: "1.2.3.4",
63+
},
64+
},
65+
},
66+
},
67+
},
68+
{
69+
object: &v1.Service{
70+
TypeMeta: metav1.TypeMeta{},
71+
ObjectMeta: metav1.ObjectMeta{Name: "svc1"},
72+
Spec: v1.ServiceSpec{
73+
Selector: nil,
74+
ClusterIP: "4.4.4.4",
75+
Type: v1.ServiceTypeClusterIP,
76+
},
77+
},
78+
},
79+
}
80+
for i, tc := range testCases {
81+
tc := tc
82+
t.Run(fmt.Sprintf("object=%#v", tc.object), func(t *testing.T) {
83+
_, err := convert.ConvertToTable(context.Background(), tc.object, nil)
84+
if err != nil {
85+
t.Errorf("index %v ConvertToTable error: %#v", i, err)
86+
}
87+
})
88+
}
89+
}

pkg/search/proxy/framework/plugins/cache/cache.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,12 @@ import (
3232
"k8s.io/apiserver/pkg/registry/rest"
3333
"k8s.io/client-go/kubernetes/scheme"
3434

35+
"github.com/karmada-io/karmada/pkg/printers"
36+
printerstorage "github.com/karmada-io/karmada/pkg/printers/storage"
3537
"github.com/karmada-io/karmada/pkg/search/proxy/framework"
3638
pluginruntime "github.com/karmada-io/karmada/pkg/search/proxy/framework/runtime"
3739
"github.com/karmada-io/karmada/pkg/search/proxy/store"
40+
printerslifted "github.com/karmada-io/karmada/pkg/util/lifted"
3841
)
3942

4043
const (
@@ -83,9 +86,11 @@ func (c *Cache) SupportRequest(request framework.ProxyRequest) bool {
8386
func (c *Cache) Connect(_ context.Context, request framework.ProxyRequest) (http.Handler, error) {
8487
requestInfo := request.RequestInfo
8588
r := &rester{
86-
store: c.store,
87-
gvr: request.GroupVersionResource,
88-
tableConvertor: rest.NewDefaultTableConvertor(request.GroupVersionResource.GroupResource()),
89+
store: c.store,
90+
gvr: request.GroupVersionResource,
91+
tableConvertor: printerstorage.NewTableConvertor(
92+
rest.NewDefaultTableConvertor(request.GroupVersionResource.GroupResource()),
93+
printers.NewTableGenerator().With(printerslifted.AddCoreV1Handlers)),
8994
}
9095

9196
gvk, err := c.restMapper.KindFor(request.GroupVersionResource)

0 commit comments

Comments
 (0)