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 }