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  }