diff --git a/pkg/kubectl/cmd/logs.go b/pkg/kubectl/cmd/logs.go index fbbc2b80280..0c1bbca407e 100644 --- a/pkg/kubectl/cmd/logs.go +++ b/pkg/kubectl/cmd/logs.go @@ -61,6 +61,7 @@ type LogsOptions struct { ClientMapper resource.ClientMapper Decoder runtime.Decoder + Object runtime.Object LogsForObject func(object, options runtime.Object) (*restclient.Request, error) Out io.Writer @@ -150,14 +151,27 @@ func (o *LogsOptions) Complete(f *cmdutil.Factory, out io.Writer, cmd *cobra.Com logOptions.SinceSeconds = &sec } o.Options = logOptions - - o.Mapper, o.Typer = f.Object() - o.Decoder = f.Decoder(true) - o.ClientMapper = resource.ClientMapperFunc(f.ClientForMapping) o.LogsForObject = f.LogsForObject - + o.ClientMapper = resource.ClientMapperFunc(f.ClientForMapping) o.Out = out + mapper, typer := f.Object() + decoder := f.Decoder(true) + if o.Object == nil { + infos, err := resource.NewBuilder(mapper, typer, o.ClientMapper, decoder). + NamespaceParam(o.Namespace).DefaultNamespace(). + ResourceNames("pods", o.ResourceArg). + SingleResourceType(). + Do().Infos() + if err != nil { + return err + } + if len(infos) != 1 { + return errors.New("expected a resource") + } + o.Object = infos[0].Object + } + return nil } @@ -178,20 +192,7 @@ func (o LogsOptions) Validate() error { // RunLogs retrieves a pod log func (o LogsOptions) RunLogs() (int64, error) { - infos, err := resource.NewBuilder(o.Mapper, o.Typer, o.ClientMapper, o.Decoder). - NamespaceParam(o.Namespace).DefaultNamespace(). - ResourceNames("pods", o.ResourceArg). - SingleResourceType(). - Do().Infos() - if err != nil { - return 0, err - } - if len(infos) != 1 { - return 0, errors.New("expected a resource") - } - info := infos[0] - - req, err := o.LogsForObject(info.Object, o.Options) + req, err := o.LogsForObject(o.Object, o.Options) if err != nil { return 0, err } diff --git a/pkg/kubectl/cmd/logs_test.go b/pkg/kubectl/cmd/logs_test.go index 3e0e8fe381b..9f1205f7153 100644 --- a/pkg/kubectl/cmd/logs_test.go +++ b/pkg/kubectl/cmd/logs_test.go @@ -130,7 +130,6 @@ func TestValidateLogFlags(t *testing.T) { cmd.Run = func(cmd *cobra.Command, args []string) { o.Complete(f, os.Stdout, cmd, args) out = o.Validate().Error() - o.RunLogs() } cmd.Run(cmd, []string{"foo"})