Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Re-use printer for multiple elements #2373

Merged
merged 1 commit into from
Aug 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions pkg/actions/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,35 +19,34 @@ import (
"io"

"github.com/tektoncd/cli/pkg/cli"
"github.com/tektoncd/cli/pkg/printer"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
cliopts "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/cli-runtime/pkg/printers"
"k8s.io/client-go/discovery"
"k8s.io/client-go/dynamic"
)

// TODO: remove as all the function uses are moved to new func
// PrintObject is used to take a partial resource and the name of an object in the cluster, fetch it using the dynamic client, and print out the object.
func PrintObject(groupResource schema.GroupVersionResource, obj string, w io.Writer, dynamic dynamic.Interface, discovery discovery.DiscoveryInterface, f *cliopts.PrintFlags, ns string) error {
func PrintObject(groupResource schema.GroupVersionResource, obj string, w io.Writer, dynamic dynamic.Interface, discovery discovery.DiscoveryInterface, p printers.ResourcePrinter, ns string) error {
res, err := Get(groupResource, dynamic, discovery, obj, ns, metav1.GetOptions{})
if err != nil {
return err
}

return printer.PrintObject(w, res, f)
return p.PrintObj(res, w)
}

// PrintObject is used to take a partial resource and the name of an object in the cluster, fetch it using the dynamic client, and print out the object.
func PrintObjectV1(groupResource schema.GroupVersionResource, obj string, w io.Writer, client *cli.Clients, f *cliopts.PrintFlags, ns string) error {
func PrintObjectV1(groupResource schema.GroupVersionResource, obj string, w io.Writer, client *cli.Clients, p printers.ResourcePrinter, ns string) error {
res, err := GetUnstructured(groupResource, client, obj, ns, metav1.GetOptions{})
if err != nil {
return err
}

return printer.PrintObject(w, res, f)
return p.PrintObj(res, w)
}

// GetV1 is used to take a partial resource and the name of an object in the cluster and fetch it from the cluster using the dynamic client.
Expand Down
7 changes: 3 additions & 4 deletions pkg/actions/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,23 @@ import (
"os"

"github.com/tektoncd/cli/pkg/cli"
"github.com/tektoncd/cli/pkg/printer"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
cliopts "k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/cli-runtime/pkg/printers"
"k8s.io/client-go/discovery"
"k8s.io/client-go/dynamic"
)

// PrintObjects takes a partial resource, fetches a list of that resource's objects in the cluster using the dynamic client, and prints out the objects.
func PrintObjects(groupResource schema.GroupVersionResource, w io.Writer, dynamic dynamic.Interface, discovery discovery.DiscoveryInterface, f *cliopts.PrintFlags, ns string) error {
func PrintObjects(groupResource schema.GroupVersionResource, w io.Writer, dynamic dynamic.Interface, discovery discovery.DiscoveryInterface, p printers.ResourcePrinter, ns string) error {
allres, err := list(groupResource, dynamic, discovery, ns, metav1.ListOptions{})
if err != nil {
return err
}

return printer.PrintObject(w, allres, f)
return p.PrintObj(allres, w)
}

// List fetches the resource and convert it to respective object
Expand Down
8 changes: 6 additions & 2 deletions pkg/cmd/bundle/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import (
"github.com/spf13/cobra"
"github.com/tektoncd/cli/pkg/bundle"
"github.com/tektoncd/cli/pkg/cli"
"github.com/tektoncd/cli/pkg/printer"
"k8s.io/apimachinery/pkg/runtime"
cliopts "k8s.io/cli-runtime/pkg/genericclioptions"
)
Expand Down Expand Up @@ -113,8 +112,13 @@ Caching:
Err: cmd.OutOrStderr(),
}

p, err := f.ToPrinter()
if err != nil {
return err
}

return opts.Run(args, func(_, _, _ string, element runtime.Object, _ []byte) {
_ = printer.PrintObject(opts.stream.Out, element, f)
_ = p.PrintObj(element, opts.stream.Out)
})
},
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/cmd/bundle/list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ func TestListCommand(t *testing.T) {
}, {
name: "yaml-format",
format: "yaml",
expectedStdout: "*Warning*: This is an experimental command, it's usage and behavior can change in the next release(s)\n" + examplePullPipeline + examplePullTask,
expectedStdout: "*Warning*: This is an experimental command, it's usage and behavior can change in the next release(s)\n" + examplePullPipeline + "---\n" + examplePullTask,
}, {
name: "specify-kind-task",
format: "name",
Expand Down
6 changes: 5 additions & 1 deletion pkg/cmd/clustertask/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,11 @@ or
}

if output != "" {
return actions.PrintObjectV1(clustertaskGroupResource, opts.ClusterTaskName, cmd.OutOrStdout(), cs, f, "")
p, err := f.ToPrinter()
if err != nil {
return err
}
return actions.PrintObjectV1(clustertaskGroupResource, opts.ClusterTaskName, cmd.OutOrStdout(), cs, p, "")
}

return printClusterTaskDescription(s, cs, opts.ClusterTaskName, p.Namespace(), p.Time())
Expand Down
6 changes: 5 additions & 1 deletion pkg/cmd/clustertask/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,11 @@ func listCommand(p cli.Params) *cobra.Command {

if output != "" {
ctGroupResource := schema.GroupVersionResource{Group: "tekton.dev", Resource: "clustertasks"}
return actions.PrintObjects(ctGroupResource, cmd.OutOrStdout(), cs.Dynamic, cs.Tekton.Discovery(), f, "")
p, err := f.ToPrinter()
if err != nil {
return err
}
return actions.PrintObjects(ctGroupResource, cmd.OutOrStdout(), cs.Dynamic, cs.Tekton.Discovery(), p, "")
}
stream := &cli.Stream{
Out: cmd.OutOrStdout(),
Expand Down
6 changes: 5 additions & 1 deletion pkg/cmd/clustertriggerbinding/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,11 @@ or
}

if output != "" {
return actions.PrintObject(clustertriggerbindingGroupResource, opts.ClusterTriggerBindingName, cmd.OutOrStdout(), cs.Dynamic, cs.Triggers.Discovery(), f, "")
p, err := f.ToPrinter()
if err != nil {
return err
}
return actions.PrintObject(clustertriggerbindingGroupResource, opts.ClusterTriggerBindingName, cmd.OutOrStdout(), cs.Dynamic, cs.Triggers.Discovery(), p, "")
}

return printClusterTriggerBindingDescription(s, p, opts.ClusterTriggerBindingName)
Expand Down
7 changes: 5 additions & 2 deletions pkg/cmd/clustertriggerbinding/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import (
"github.com/tektoncd/cli/pkg/cli"
"github.com/tektoncd/cli/pkg/clustertriggerbinding"
"github.com/tektoncd/cli/pkg/formatted"
"github.com/tektoncd/cli/pkg/printer"
"github.com/tektoncd/triggers/pkg/apis/triggers/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
cliopts "k8s.io/cli-runtime/pkg/genericclioptions"
Expand Down Expand Up @@ -89,7 +88,11 @@ or
}
return nil
} else if output != "" {
return printer.PrintObject(stream.Out, tbs, f)
p, err := f.ToPrinter()
if err != nil {
return err
}
return p.PrintObj(tbs, stream.Out)
}

if err = printFormatted(stream, tbs, p, opts.NoHeaders); err != nil {
Expand Down
7 changes: 5 additions & 2 deletions pkg/cmd/customrun/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import (
"github.com/tektoncd/cli/pkg/cli"
crsort "github.com/tektoncd/cli/pkg/customrun/sort"
"github.com/tektoncd/cli/pkg/formatted"
"github.com/tektoncd/cli/pkg/printer"
"github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
cliopts "k8s.io/cli-runtime/pkg/genericclioptions"
Expand Down Expand Up @@ -103,7 +102,11 @@ func listCommand(p cli.Params) *cobra.Command {
}
return nil
} else if output != "" && crs != nil {
return printer.PrintObject(cmd.OutOrStdout(), crs, f)
p, err := f.ToPrinter()
if err != nil {
return err
}
return p.PrintObj(crs, cmd.OutOrStdout())
}

stream := &cli.Stream{
Expand Down
6 changes: 5 additions & 1 deletion pkg/cmd/eventlistener/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,11 @@ or
if strings.ToLower(output) == "url" {
return describeEventListenerOutputURL(cmd.OutOrStdout(), p, args[0])
}
return actions.PrintObject(eventlistenerGroupResource, opts.EventListenerName, cmd.OutOrStdout(), cs.Dynamic, cs.Triggers.Discovery(), f, p.Namespace())
printer, err := f.ToPrinter()
if err != nil {
return err
}
return actions.PrintObject(eventlistenerGroupResource, opts.EventListenerName, cmd.OutOrStdout(), cs.Dynamic, cs.Triggers.Discovery(), printer, p.Namespace())
}
return printEventListenerDescription(s, p, opts.EventListenerName)
},
Expand Down
7 changes: 5 additions & 2 deletions pkg/cmd/eventlistener/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import (
"github.com/tektoncd/cli/pkg/cli"
"github.com/tektoncd/cli/pkg/eventlistener"
"github.com/tektoncd/cli/pkg/formatted"
"github.com/tektoncd/cli/pkg/printer"
"github.com/tektoncd/triggers/pkg/apis/triggers/v1beta1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand Down Expand Up @@ -90,7 +89,11 @@ or
}

if output != "" {
return printer.PrintObject(stream.Out, els, f)
p, err := f.ToPrinter()
if err != nil {
return err
}
return p.PrintObj(els, stream.Out)
}

if err = printFormatted(stream, els, p, opts.AllNamespaces, opts.NoHeaders); err != nil {
Expand Down
6 changes: 5 additions & 1 deletion pkg/cmd/pipeline/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,11 @@ func describeCommand(p cli.Params) *cobra.Command {
}

if output != "" {
return actions.PrintObjectV1(pipelineGroupResource, opts.PipelineName, cmd.OutOrStdout(), cs, f, p.Namespace())
printer, err := f.ToPrinter()
if err != nil {
return err
}
return actions.PrintObjectV1(pipelineGroupResource, opts.PipelineName, cmd.OutOrStdout(), cs, printer, p.Namespace())
}

return printPipelineDescription(cmd.OutOrStdout(), cs, p.Namespace(), opts.PipelineName, p.Time())
Expand Down
8 changes: 6 additions & 2 deletions pkg/cmd/pipeline/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ NAME AGE LAST RUN STARTED DURATION STATUS
{{ $p.Namespace }} {{ $p.Name }} {{ formatAge $p.CreationTimestamp $.Params.Time }} {{ $pr.Name }} {{ formatAge $pr.Status.StartTime $.Params.Time }} {{ formatDuration $pr.Status.StartTime $pr.Status.CompletionTime }} {{ formatCondition $pr.Status.Conditions }}
{{ else -}}
{{ $p.Name }} {{ formatAge $p.CreationTimestamp $.Params.Time }} {{ $pr.Name }} {{ formatAge $pr.Status.StartTime $.Params.Time }} {{ formatDuration $pr.Status.StartTime $pr.Status.CompletionTime }} {{ formatCondition $pr.Status.Conditions }}
{{ end }}
{{ end }}
{{- else }}
{{- if $.AllNamespaces -}}
{{ $p.Namespace }} {{ $p.Name }} {{ formatAge $p.CreationTimestamp $.Params.Time }} --- --- --- ---
Expand Down Expand Up @@ -92,7 +92,11 @@ func listCommand(p cli.Params) *cobra.Command {
}

if output != "" {
return actions.PrintObjects(pipelineGroupResource, cmd.OutOrStdout(), cs.Dynamic, cs.Tekton.Discovery(), f, ns)
p, err := f.ToPrinter()
if err != nil {
return err
}
return actions.PrintObjects(pipelineGroupResource, cmd.OutOrStdout(), cs.Dynamic, cs.Tekton.Discovery(), p, ns)
}
stream := &cli.Stream{
Out: cmd.OutOrStdout(),
Expand Down
6 changes: 5 additions & 1 deletion pkg/cmd/pipelinerun/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,11 @@ or
}

if output != "" {
return actions.PrintObjectV1(pipelineRunGroupResource, opts.PipelineRunName, cmd.OutOrStdout(), cs, f, p.Namespace())
printer, err := f.ToPrinter()
if err != nil {
return err
}
return actions.PrintObjectV1(pipelineRunGroupResource, opts.PipelineRunName, cmd.OutOrStdout(), cs, printer, p.Namespace())
}

return pipelinerunpkg.PrintPipelineRunDescription(s.Out, cs, opts.Params.Namespace(), opts.PipelineRunName, opts.Params.Time())
Expand Down
7 changes: 5 additions & 2 deletions pkg/cmd/pipelinerun/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import (
"github.com/tektoncd/cli/pkg/cli"
"github.com/tektoncd/cli/pkg/formatted"
prsort "github.com/tektoncd/cli/pkg/pipelinerun/sort"
"github.com/tektoncd/cli/pkg/printer"
v1 "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
cliopts "k8s.io/cli-runtime/pkg/genericclioptions"
Expand Down Expand Up @@ -112,7 +111,11 @@ List all PipelineRuns in a namespace 'foo':
}
return nil
} else if output != "" && prs != nil {
return printer.PrintObject(cmd.OutOrStdout(), prs, f)
p, err := f.ToPrinter()
if err != nil {
return err
}
return p.PrintObj(prs, cmd.OutOrStdout())
}
stream := &cli.Stream{
Out: cmd.OutOrStdout(),
Expand Down
6 changes: 5 additions & 1 deletion pkg/cmd/task/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,11 @@ or

if output != "" {
taskGroupResource := schema.GroupVersionResource{Group: "tekton.dev", Resource: "tasks"}
return actions.PrintObjectV1(taskGroupResource, opts.TaskName, cmd.OutOrStdout(), cs, f, p.Namespace())
printer, err := f.ToPrinter()
if err != nil {
return err
}
return actions.PrintObjectV1(taskGroupResource, opts.TaskName, cmd.OutOrStdout(), cs, printer, p.Namespace())
}

return printTaskDescription(s, p, opts.TaskName)
Expand Down
12 changes: 8 additions & 4 deletions pkg/cmd/task/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,15 @@ No Tasks found
NAMESPACE NAME DESCRIPTION AGE
{{ else -}}
NAME DESCRIPTION AGE
{{ end -}}
{{ end -}}
{{- end -}}
{{- range $_, $t := .Tasks.Items }}{{- if $t }}
{{- if $.AllNamespaces -}}
{{ $t.Namespace }} {{ $t.Name }} {{ formatDesc $t.Spec.Description }} {{ formatAge $t.CreationTimestamp $.Time }}
{{ else -}}
{{ else -}}
{{ $t.Name }} {{ formatDesc $t.Spec.Description }} {{ formatAge $t.CreationTimestamp $.Time }}
{{ end }}{{- end }}{{- end }}
{{- end -}}
{{- end -}}
`

type ListOptions struct {
Expand Down Expand Up @@ -81,7 +81,11 @@ func listCommand(p cli.Params) *cobra.Command {
}

if output != "" {
return actions.PrintObjects(taskGroupResource, cmd.OutOrStdout(), cs.Dynamic, cs.Tekton.Discovery(), f, ns)
p, err := f.ToPrinter()
if err != nil {
return err
}
return actions.PrintObjects(taskGroupResource, cmd.OutOrStdout(), cs.Dynamic, cs.Tekton.Discovery(), p, ns)
}
stream := &cli.Stream{
Out: cmd.OutOrStdout(),
Expand Down
6 changes: 5 additions & 1 deletion pkg/cmd/taskrun/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,11 @@ or
}

if output != "" {
return actions.PrintObjectV1(taskrunGroupResource, opts.TaskrunName, cmd.OutOrStdout(), cs, f, p.Namespace())
printer, err := f.ToPrinter()
if err != nil {
return err
}
return actions.PrintObjectV1(taskrunGroupResource, opts.TaskrunName, cmd.OutOrStdout(), cs, printer, p.Namespace())
}

return taskrunpkg.PrintTaskRunDescription(s.Out, cs, opts.Params.Namespace(), opts.TaskrunName, opts.Params.Time())
Expand Down
7 changes: 5 additions & 2 deletions pkg/cmd/taskrun/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import (
"github.com/tektoncd/cli/pkg/actions"
"github.com/tektoncd/cli/pkg/cli"
"github.com/tektoncd/cli/pkg/formatted"
"github.com/tektoncd/cli/pkg/printer"
taskpkg "github.com/tektoncd/cli/pkg/task"
trsort "github.com/tektoncd/cli/pkg/taskrun/sort"
v1 "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1"
Expand Down Expand Up @@ -113,7 +112,11 @@ List all TaskRuns of Task 'foo' in namespace 'bar':
}
return nil
} else if output != "" && trs != nil {
return printer.PrintObject(cmd.OutOrStdout(), trs, f)
p, err := f.ToPrinter()
if err != nil {
return err
}
return p.PrintObj(trs, cmd.OutOrStdout())
}

stream := &cli.Stream{
Expand Down
6 changes: 5 additions & 1 deletion pkg/cmd/triggerbinding/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,11 @@ or
}

if output != "" {
return actions.PrintObject(triggerbindingGroupResource, opts.TriggerBindingName, cmd.OutOrStdout(), cs.Dynamic, cs.Triggers.Discovery(), f, p.Namespace())
printer, err := f.ToPrinter()
if err != nil {
return err
}
return actions.PrintObject(triggerbindingGroupResource, opts.TriggerBindingName, cmd.OutOrStdout(), cs.Dynamic, cs.Triggers.Discovery(), printer, p.Namespace())
}

return printTriggerBindingDescription(s, p, opts.TriggerBindingName)
Expand Down
7 changes: 5 additions & 2 deletions pkg/cmd/triggerbinding/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import (
"github.com/spf13/cobra"
"github.com/tektoncd/cli/pkg/cli"
"github.com/tektoncd/cli/pkg/formatted"
"github.com/tektoncd/cli/pkg/printer"
"github.com/tektoncd/cli/pkg/triggerbinding"
"github.com/tektoncd/triggers/pkg/apis/triggers/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand Down Expand Up @@ -98,7 +97,11 @@ or
}
return nil
} else if output != "" {
return printer.PrintObject(stream.Out, tbs, f)
p, err := f.ToPrinter()
if err != nil {
return err
}
return p.PrintObj(tbs, stream.Out)
}

if err = printFormatted(stream, tbs, p, opts.AllNamespaces, opts.NoHeaders); err != nil {
Expand Down
Loading