github.com/helmwave/helmwave@v0.36.4-0.20240509190856-b35563eba4c6/pkg/plan/status.go (about)

     1  package plan
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"slices"
     7  	"sort"
     8  
     9  	"github.com/helmwave/helmwave/pkg/release"
    10  	log "github.com/sirupsen/logrus"
    11  )
    12  
    13  // Status renders status table for list of releases names.
    14  func (p *Plan) Status(names ...string) error {
    15  	return status(p.body.Releases, names)
    16  }
    17  
    18  func status(all []release.Config, names []string) error {
    19  	r := all
    20  
    21  	if len(names) > 0 {
    22  		sort.Strings(names)
    23  
    24  		r = slices.DeleteFunc(r, func(rel release.Config) bool {
    25  			return !slices.Contains(names, rel.Uniq().String())
    26  		})
    27  	}
    28  
    29  	for _, rel := range r {
    30  		l := rel.Logger()
    31  
    32  		s, err := rel.Status()
    33  		if err != nil {
    34  			l.Errorf("Failed to get status: %v", err)
    35  
    36  			continue
    37  		}
    38  
    39  		labels, err := json.Marshal(s.Labels)
    40  		if err != nil {
    41  			l.Errorf("Failed to get labels: %v", err)
    42  		}
    43  
    44  		values, err := json.Marshal(s.Config)
    45  		if err != nil {
    46  			l.Errorf("Failed to get values: %v", err)
    47  		}
    48  
    49  		log.WithFields(log.Fields{
    50  			"name":          s.Name,
    51  			"namespace":     s.Namespace,
    52  			"chart":         fmt.Sprintf("%s-%s", s.Chart.Name(), s.Chart.Metadata.Version),
    53  			"last deployed": s.Info.LastDeployed,
    54  			"status":        s.Info.Status,
    55  			"revision":      s.Version,
    56  		}).Infof("General status of %s", rel.Uniq())
    57  
    58  		log.WithFields(log.Fields{
    59  			"notes":         s.Info.Notes,
    60  			"labels":        string(labels),
    61  			"chart sources": s.Chart.Metadata.Sources,
    62  			"values":        string(values),
    63  		}).Debugf("Debug status of %s", rel.Uniq())
    64  
    65  		log.WithFields(log.Fields{
    66  			"hooks":    s.Hooks,
    67  			"manifest": s.Manifest,
    68  		}).Tracef("Superdebug status of %s", rel.Uniq())
    69  	}
    70  
    71  	return nil
    72  }