github.com/helmwave/helmwave@v0.36.4-0.20240509190856-b35563eba4c6/pkg/plan/list.go (about) 1 package plan 2 3 import ( 4 "os" 5 "strconv" 6 7 "github.com/olekukonko/tablewriter" 8 log "github.com/sirupsen/logrus" 9 "helm.sh/helm/v3/pkg/release" 10 ) 11 12 var ( 13 // FailStatusColor is tablewriter color for failed releases. 14 FailStatusColor = tablewriter.Color(tablewriter.Bold, tablewriter.BgRedColor) 15 16 // SuccessStatusColor is tablewriter color for succeeded releases. 17 SuccessStatusColor = tablewriter.Color(tablewriter.Bold, tablewriter.BgRedColor) 18 ) 19 20 // List renders releases status table and writes it to stdout. 21 // Listed only releases that exist in plan. 22 func (p *Plan) List() error { 23 log.Infof("Should be %d releases", len(p.body.Releases)) 24 if len(p.body.Releases) == 0 { 25 return nil 26 } 27 28 table := newListTable() 29 30 for _, rel := range p.body.Releases { 31 r, err := rel.List() 32 if err != nil { 33 rel.Logger().WithError(err).Error("Failed to list. Skipping.") 34 35 continue 36 } 37 38 status := r.Info.Status 39 40 statusColor := SuccessStatusColor 41 if status != release.StatusDeployed { 42 statusColor = FailStatusColor 43 } 44 45 row := []string{ 46 r.Name, 47 r.Namespace, 48 strconv.Itoa(r.Version), 49 r.Info.LastDeployed.String(), 50 string(r.Info.Status), 51 r.Chart.Name(), 52 r.Chart.Metadata.Version, 53 } 54 55 table.Rich(row, []tablewriter.Colors{ 56 {}, 57 {}, 58 {}, 59 {}, 60 statusColor, 61 {}, 62 {}, 63 }) 64 } 65 66 table.Render() 67 68 return nil 69 } 70 71 func newListTable() *tablewriter.Table { 72 table := tablewriter.NewWriter(os.Stdout) 73 table.SetHeader([]string{"name", "namespace", "revision", "updated", "status", "chart", "version"}) 74 table.SetAutoFormatHeaders(true) 75 table.SetBorder(false) 76 77 return table 78 }