-
Notifications
You must be signed in to change notification settings - Fork 346
/
transform.go
79 lines (67 loc) · 2.24 KB
/
transform.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// Copyright 2020 Antrea Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package addressgroup
import (
"io"
"reflect"
"github.com/vmware-tanzu/antrea/pkg/antctl/transform"
"github.com/vmware-tanzu/antrea/pkg/antctl/transform/common"
cpv1beta1 "github.com/vmware-tanzu/antrea/pkg/apis/controlplane/v1beta1"
)
type Response struct {
Name string `json:"name" yaml:"name"`
Pods []common.GroupMemberPod `json:"pods,omitempty"`
}
func listTransform(l interface{}) (interface{}, error) {
groups := l.(*cpv1beta1.AddressGroupList)
result := []interface{}{}
for _, item := range groups.Items {
o, _ := objectTransform(&item)
result = append(result, o.(Response))
}
return result, nil
}
func objectTransform(o interface{}) (interface{}, error) {
group := o.(*cpv1beta1.AddressGroup)
var pods []common.GroupMemberPod
for _, pod := range group.Pods {
pods = append(pods, common.GroupMemberPodTransform(pod))
}
return Response{Name: group.Name, Pods: pods}, nil
}
func Transform(reader io.Reader, single bool) (interface{}, error) {
return transform.GenericFactory(
reflect.TypeOf(cpv1beta1.AddressGroup{}),
reflect.TypeOf(cpv1beta1.AddressGroupList{}),
objectTransform,
listTransform,
)(reader, single)
}
var _ common.TableOutput = new(Response)
func (r Response) GetTableHeader() []string {
return []string{"NAME", "POD-IPS"}
}
func (r Response) GetPodNames(maxColumnLength int) string {
list := make([]string, len(r.Pods))
for i, pod := range r.Pods {
list[i] = pod.IP
}
return common.GenerateTableElementWithSummary(list, maxColumnLength)
}
func (r Response) GetTableRow(maxColumnLength int) []string {
return []string{r.Name, r.GetPodNames(maxColumnLength)}
}
func (r Response) SortRows() bool {
return true
}