Skip to content

Commit baf9b6e

Browse files
committed
print typed podlist for correct serialization
Pass a typed list of pods to the printer in order to have correctly serialized output.
1 parent 8833a3a commit baf9b6e

File tree

3 files changed

+28
-6
lines changed

3 files changed

+28
-6
lines changed

pkg/cmd/admin/node/listpods.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"k8s.io/apimachinery/pkg/runtime/schema"
1212
kerrors "k8s.io/apimachinery/pkg/util/errors"
1313
kapi "k8s.io/kubernetes/pkg/api"
14+
kapiv1 "k8s.io/kubernetes/pkg/api/v1"
1415
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
1516
kprinters "k8s.io/kubernetes/pkg/printers"
1617
)
@@ -90,7 +91,12 @@ func (l *ListPodsOptions) runListPods(node *kapi.Node, printer kprinters.Resourc
9091
// objects for every node, into a single list. This allows output containing multiple nodes to be
9192
// printed to a single writer, and be easily parsed as a single data format.
9293
func (l *ListPodsOptions) handleRESTOutput(nodes []*kapi.Node, printer kprinters.ResourcePrinter) []error {
93-
unifiedPodList := &kapi.PodList{}
94+
unifiedPodList := &kapiv1.PodList{
95+
TypeMeta: metav1.TypeMeta{
96+
Kind: "List",
97+
APIVersion: "v1",
98+
},
99+
}
94100

95101
errList := []error{}
96102
for _, node := range nodes {
@@ -101,7 +107,7 @@ func (l *ListPodsOptions) handleRESTOutput(nodes []*kapi.Node, printer kprinters
101107
}
102108
fieldSelector := fields.Set{GetPodHostFieldLabel(node.TypeMeta.APIVersion): node.ObjectMeta.Name}.AsSelector()
103109

104-
pods, err := l.Options.KubeClient.Core().Pods(metav1.NamespaceAll).List(metav1.ListOptions{LabelSelector: labelSelector.String(), FieldSelector: fieldSelector.String()})
110+
pods, err := l.Options.ExternalKubeClient.CoreV1().Pods(metav1.NamespaceAll).List(metav1.ListOptions{LabelSelector: labelSelector.String(), FieldSelector: fieldSelector.String()})
105111
if err != nil {
106112
errList = append(errList, err)
107113
continue

pkg/cmd/admin/node/node_options.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
kerrors "k8s.io/apimachinery/pkg/util/errors"
1717
"k8s.io/apimachinery/pkg/util/sets"
1818
kapi "k8s.io/kubernetes/pkg/api"
19+
externalclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
1920
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
2021
"k8s.io/kubernetes/pkg/kubectl/resource"
2122
kprinters "k8s.io/kubernetes/pkg/printers"
@@ -24,10 +25,11 @@ import (
2425
)
2526

2627
type NodeOptions struct {
27-
DefaultNamespace string
28-
KubeClient kclientset.Interface
29-
Writer io.Writer
30-
ErrWriter io.Writer
28+
DefaultNamespace string
29+
ExternalKubeClient externalclientset.Interface
30+
KubeClient kclientset.Interface
31+
Writer io.Writer
32+
ErrWriter io.Writer
3133

3234
Mapper meta.RESTMapper
3335
Typer runtime.ObjectTyper
@@ -50,17 +52,29 @@ func (n *NodeOptions) Complete(f *clientcmd.Factory, c *cobra.Command, args []st
5052
if err != nil {
5153
return err
5254
}
55+
5356
_, kc, err := f.Clients()
5457
if err != nil {
5558
return err
5659
}
60+
61+
config, err := f.ClientConfig()
62+
if err != nil {
63+
return err
64+
}
65+
externalkc, err := externalclientset.NewForConfig(config)
66+
if err != nil {
67+
return err
68+
}
69+
5770
cmdPrinter, err := f.PrinterForCommand(c, false, nil, kprinters.PrintOptions{})
5871
if err != nil {
5972
return err
6073
}
6174
mapper, typer := f.Object()
6275

6376
n.DefaultNamespace = defaultNamespace
77+
n.ExternalKubeClient = externalkc
6478
n.KubeClient = kc
6579
n.Writer = out
6680
n.ErrWriter = errout

test/cmd/admin.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ os::cmd::expect_success_and_not_text 'oadm manage-node --selector= --schedulable
7878
os::cmd::expect_success_and_not_text 'oc get node -o yaml' 'unschedulable: true'
7979
os::cmd::expect_success_and_text 'oadm manage-node --selector= --schedulable=false' 'SchedulingDisabled'
8080
os::cmd::expect_success_and_text 'oc get node -o yaml' 'unschedulable: true'
81+
# ensure correct serialization of podList output
82+
os::cmd::expect_success_and_text "oadm manage-node --list-pods --selector= -o jsonpath='{ .kind }'" 'List'
8183
echo "manage-node: ok"
8284
os::test::junit::declare_suite_end
8385

0 commit comments

Comments
 (0)