@@ -7,23 +7,31 @@ import (
77 "fmt"
88 "strings"
99
10- "k8s.io/apimachinery/pkg/runtime/schema"
1110 "k8s.io/cli-runtime/pkg/genericclioptions"
11+ "sigs.k8s.io/cli-utils/cmd/status/printers/printer"
12+ "sigs.k8s.io/cli-utils/pkg/apply/event"
13+ "sigs.k8s.io/cli-utils/pkg/common"
1214 "sigs.k8s.io/cli-utils/pkg/kstatus/polling/collector"
1315 pollevent "sigs.k8s.io/cli-utils/pkg/kstatus/polling/event"
1416 "sigs.k8s.io/cli-utils/pkg/object"
17+ "sigs.k8s.io/cli-utils/pkg/print/list"
18+ "sigs.k8s.io/cli-utils/pkg/printers/events"
1519)
1620
1721// Printer implements the Printer interface and outputs the resource
1822// status information as a list of events as they happen.
1923type Printer struct {
24+ Formatter list.Formatter
2025 IOStreams genericclioptions.IOStreams
26+ Data * printer.PrintData
2127}
2228
2329// NewPrinter returns a new instance of the eventPrinter.
24- func NewPrinter (ioStreams genericclioptions.IOStreams ) * Printer {
30+ func NewPrinter (ioStreams genericclioptions.IOStreams , printData * printer. PrintData ) * Printer {
2531 return & Printer {
32+ Formatter : events .NewFormatter (ioStreams , common .DryRunNone ),
2633 IOStreams : ioStreams ,
34+ Data : printData ,
2735 }
2836}
2937
@@ -40,7 +48,10 @@ func (ep *Printer) Print(ch <-chan pollevent.Event, identifiers object.ObjMetada
4048 // stopping the poller at the correct time.
4149 done := coll .ListenWithObserver (ch , collector .ObserverFunc (
4250 func (statusCollector * collector.ResourceStatusCollector , e pollevent.Event ) {
43- ep .printStatusEvent (e )
51+ err := ep .printStatusEvent (e )
52+ if err != nil {
53+ panic (err )
54+ }
4455 cancelFunc (statusCollector , e )
4556 }),
4657 )
@@ -52,25 +63,27 @@ func (ep *Printer) Print(ch <-chan pollevent.Event, identifiers object.ObjMetada
5263 return err
5364}
5465
55- func (ep * Printer ) printStatusEvent (se pollevent.Event ) {
66+ func (ep * Printer ) printStatusEvent (se pollevent.Event ) error {
5667 switch se .Type {
5768 case pollevent .ResourceUpdateEvent :
5869 id := se .Resource .Identifier
59- printResourceStatus (id , se , ep .IOStreams )
70+ var invName string
71+ var ok bool
72+ if invName , ok = ep .Data .InvNameMap [id ]; ! ok {
73+ return fmt .Errorf ("%s: resource not found" , id )
74+ }
75+ // filter out status that are not assigned
76+ statusString := se .Resource .Status .String ()
77+ if _ , ok := ep .Data .StatusSet [strings .ToLower (statusString )]; len (ep .Data .StatusSet ) != 0 && ! ok {
78+ return nil
79+ }
80+ _ , err := fmt .Fprintf (ep .IOStreams .Out , "%s/%s/%s/%s is %s: %s\n " , invName ,
81+ strings .ToLower (id .GroupKind .String ()), id .Namespace , id .Name , statusString , se .Resource .Message )
82+ return err
6083 case pollevent .ErrorEvent :
61- id := se .Resource .Identifier
62- gk := id .GroupKind
63- fmt .Fprintf (ep .IOStreams .Out , "%s error: %s\n " , resourceIDToString (gk , id .Name ),
64- se .Error .Error ())
84+ return ep .Formatter .FormatErrorEvent (event.ErrorEvent {
85+ Err : se .Error ,
86+ })
6587 }
66- }
67-
68- // resourceIDToString returns the string representation of a GroupKind and a resource name.
69- func resourceIDToString (gk schema.GroupKind , name string ) string {
70- return fmt .Sprintf ("%s/%s" , strings .ToLower (gk .String ()), name )
71- }
72-
73- func printResourceStatus (id object.ObjMetadata , se pollevent.Event , ioStreams genericclioptions.IOStreams ) {
74- fmt .Fprintf (ioStreams .Out , "%s is %s: %s\n " , resourceIDToString (id .GroupKind , id .Name ),
75- se .Resource .Status .String (), se .Resource .Message )
88+ return nil
7689}
0 commit comments