diff --git a/pkg/cmd/admin/node/listpods.go b/pkg/cmd/admin/node/listpods.go index 97c9b557790e..afd822cfc0c6 100644 --- a/pkg/cmd/admin/node/listpods.go +++ b/pkg/cmd/admin/node/listpods.go @@ -11,6 +11,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" kerrors "k8s.io/apimachinery/pkg/util/errors" kapi "k8s.io/kubernetes/pkg/api" + kapiv1 "k8s.io/kubernetes/pkg/api/v1" kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" kprinters "k8s.io/kubernetes/pkg/printers" ) @@ -90,7 +91,12 @@ func (l *ListPodsOptions) runListPods(node *kapi.Node, printer kprinters.Resourc // objects for every node, into a single list. This allows output containing multiple nodes to be // printed to a single writer, and be easily parsed as a single data format. func (l *ListPodsOptions) handleRESTOutput(nodes []*kapi.Node, printer kprinters.ResourcePrinter) []error { - unifiedPodList := &kapi.PodList{} + unifiedPodList := &kapiv1.PodList{ + TypeMeta: metav1.TypeMeta{ + Kind: "List", + APIVersion: "v1", + }, + } errList := []error{} for _, node := range nodes { @@ -101,7 +107,7 @@ func (l *ListPodsOptions) handleRESTOutput(nodes []*kapi.Node, printer kprinters } fieldSelector := fields.Set{GetPodHostFieldLabel(node.TypeMeta.APIVersion): node.ObjectMeta.Name}.AsSelector() - pods, err := l.Options.KubeClient.Core().Pods(metav1.NamespaceAll).List(metav1.ListOptions{LabelSelector: labelSelector.String(), FieldSelector: fieldSelector.String()}) + pods, err := l.Options.ExternalKubeClient.CoreV1().Pods(metav1.NamespaceAll).List(metav1.ListOptions{LabelSelector: labelSelector.String(), FieldSelector: fieldSelector.String()}) if err != nil { errList = append(errList, err) continue diff --git a/pkg/cmd/admin/node/node_options.go b/pkg/cmd/admin/node/node_options.go index 43259fbfa04c..b46ac8418090 100644 --- a/pkg/cmd/admin/node/node_options.go +++ b/pkg/cmd/admin/node/node_options.go @@ -16,6 +16,7 @@ import ( kerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" kapi "k8s.io/kubernetes/pkg/api" + externalclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/kubectl/resource" kprinters "k8s.io/kubernetes/pkg/printers" @@ -24,10 +25,11 @@ import ( ) type NodeOptions struct { - DefaultNamespace string - KubeClient kclientset.Interface - Writer io.Writer - ErrWriter io.Writer + DefaultNamespace string + KubeClient kclientset.Interface + ExternalKubeClient externalclientset.Interface + Writer io.Writer + ErrWriter io.Writer Mapper meta.RESTMapper Typer runtime.ObjectTyper @@ -49,10 +51,21 @@ func (n *NodeOptions) Complete(f *clientcmd.Factory, c *cobra.Command, args []st if err != nil { return err } + _, kc, err := f.Clients() if err != nil { return err } + + config, err := f.ClientConfig() + if err != nil { + return err + } + externalkc, err := externalclientset.NewForConfig(config) + if err != nil { + return err + } + cmdPrinter, output, err := f.PrinterForCommand(c) if err != nil { return err @@ -61,6 +74,7 @@ func (n *NodeOptions) Complete(f *clientcmd.Factory, c *cobra.Command, args []st n.DefaultNamespace = defaultNamespace n.KubeClient = kc + n.ExternalKubeClient = externalkc n.Writer = out n.ErrWriter = errout n.Mapper = mapper diff --git a/test/cmd/admin.sh b/test/cmd/admin.sh index 482c90f81293..3531ae9a99bd 100755 --- a/test/cmd/admin.sh +++ b/test/cmd/admin.sh @@ -78,6 +78,8 @@ os::cmd::expect_success_and_not_text 'oadm manage-node --selector= --schedulable os::cmd::expect_success_and_not_text 'oc get node -o yaml' 'unschedulable: true' os::cmd::expect_success_and_text 'oadm manage-node --selector= --schedulable=false' 'SchedulingDisabled' os::cmd::expect_success_and_text 'oc get node -o yaml' 'unschedulable: true' +# ensure correct serialization of podList output +os::cmd::expect_success_and_text "oadm manage-node --list-pods --selector= -o jsonpath='{ .kind }'" 'List' echo "manage-node: ok" os::test::junit::declare_suite_end