...
1
16
17 package action
18
19 import (
20 "bytes"
21 "errors"
22
23 "helm.sh/helm/v3/pkg/kube"
24 "helm.sh/helm/v3/pkg/release"
25 )
26
27
28
29
30 type Status struct {
31 cfg *Configuration
32
33 Version int
34
35
36
37
38 ShowDescription bool
39
40
41
42 ShowResources bool
43
44
45
46 ShowResourcesTable bool
47 }
48
49
50 func NewStatus(cfg *Configuration) *Status {
51 return &Status{
52 cfg: cfg,
53 }
54 }
55
56
57 func (s *Status) Run(name string) (*release.Release, error) {
58 if err := s.cfg.KubeClient.IsReachable(); err != nil {
59 return nil, err
60 }
61
62 if !s.ShowResources {
63 return s.cfg.releaseContent(name, s.Version)
64 }
65
66 rel, err := s.cfg.releaseContent(name, s.Version)
67 if err != nil {
68 return nil, err
69 }
70
71 if kubeClient, ok := s.cfg.KubeClient.(kube.InterfaceResources); ok {
72 var resources kube.ResourceList
73 if s.ShowResourcesTable {
74 resources, err = kubeClient.BuildTable(bytes.NewBufferString(rel.Manifest), false)
75 if err != nil {
76 return nil, err
77 }
78 } else {
79 resources, err = s.cfg.KubeClient.Build(bytes.NewBufferString(rel.Manifest), false)
80 if err != nil {
81 return nil, err
82 }
83 }
84
85 resp, err := kubeClient.Get(resources, true)
86 if err != nil {
87 return nil, err
88 }
89
90 rel.Info.Resources = resp
91
92 return rel, nil
93 }
94 return nil, errors.New("unable to get kubeClient with interface InterfaceResources")
95 }
96
View as plain text