Skip to content

Commit fcf46d4

Browse files
bug: Respect provided kubeconfig in helm collector (#1833)
Respect provided kubeconfig in helm collector Signed-off-by: Danil-Grigorev <[email protected]> Co-authored-by: Ethan Mosbaugh <[email protected]>
1 parent a96c9d5 commit fcf46d4

File tree

1 file changed

+46
-3
lines changed

1 file changed

+46
-3
lines changed

pkg/collect/helm.go

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,16 @@ import (
1010

1111
"github.com/pkg/errors"
1212
troubleshootv1beta2 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta2"
13+
"github.com/replicatedhq/troubleshoot/pkg/k8sutil"
1314
"helm.sh/helm/v3/pkg/action"
15+
"k8s.io/apimachinery/pkg/api/meta"
16+
"k8s.io/cli-runtime/pkg/genericclioptions"
17+
"k8s.io/client-go/discovery"
18+
"k8s.io/client-go/discovery/cached/memory"
1419
"k8s.io/client-go/kubernetes"
1520
"k8s.io/client-go/rest"
21+
"k8s.io/client-go/restmapper"
22+
"k8s.io/client-go/tools/clientcmd"
1623
"k8s.io/klog/v2"
1724
)
1825

@@ -45,6 +52,42 @@ type VersionInfo struct {
4552
Values map[string]interface{} `json:"values,omitempty"`
4653
}
4754

55+
type configGetter struct {
56+
restConfig *rest.Config
57+
}
58+
59+
// ToDiscoveryClient implements genericclioptions.RESTClientGetter.
60+
func (c configGetter) ToDiscoveryClient() (discovery.CachedDiscoveryInterface, error) {
61+
discoveryClient, err := discovery.NewDiscoveryClientForConfig(c.restConfig)
62+
if err != nil {
63+
return nil, err
64+
}
65+
cached := memory.NewMemCacheClient(discoveryClient)
66+
return cached, nil
67+
}
68+
69+
// ToRESTConfig implements genericclioptions.RESTClientGetter.
70+
func (c configGetter) ToRESTConfig() (*rest.Config, error) {
71+
return c.restConfig, nil
72+
}
73+
74+
// ToRESTMapper implements genericclioptions.RESTClientGetter.
75+
func (c configGetter) ToRESTMapper() (meta.RESTMapper, error) {
76+
discoveryClient, err := c.ToDiscoveryClient()
77+
if err != nil {
78+
return nil, err
79+
}
80+
mapper := restmapper.NewDeferredDiscoveryRESTMapper(discoveryClient)
81+
return mapper, nil
82+
}
83+
84+
// ToRawKubeConfigLoader implements genericclioptions.RESTClientGetter.
85+
func (c configGetter) ToRawKubeConfigLoader() clientcmd.ClientConfig {
86+
return k8sutil.GetKubeconfig()
87+
}
88+
89+
var _ genericclioptions.RESTClientGetter = configGetter{}
90+
4891
func (c *CollectHelm) Title() string {
4992
return getCollectorName(c)
5093
}
@@ -57,7 +100,7 @@ func (c *CollectHelm) Collect(progressChan chan<- interface{}) (CollectorResult,
57100

58101
output := NewResult()
59102

60-
releaseInfos, err := helmReleaseHistoryCollector(c.Collector.ReleaseName, c.Collector.Namespace, c.Collector.CollectValues)
103+
releaseInfos, err := helmReleaseHistoryCollector(c.ClientConfig, c.Collector.ReleaseName, c.Collector.Namespace, c.Collector.CollectValues)
61104
if err != nil {
62105
errsToMarhsal := []string{}
63106
for _, e := range err {
@@ -88,12 +131,12 @@ func (c *CollectHelm) Collect(progressChan chan<- interface{}) (CollectorResult,
88131
return output, nil
89132
}
90133

91-
func helmReleaseHistoryCollector(releaseName string, namespace string, collectValues bool) ([]ReleaseInfo, []error) {
134+
func helmReleaseHistoryCollector(config *rest.Config, releaseName string, namespace string, collectValues bool) ([]ReleaseInfo, []error) {
92135
var results []ReleaseInfo
93136
error_list := []error{}
94137

95138
actionConfig := new(action.Configuration)
96-
if err := actionConfig.Init(nil, namespace, "", klog.V(2).Infof); err != nil {
139+
if err := actionConfig.Init(configGetter{config}, namespace, "", klog.V(2).Infof); err != nil {
97140
return nil, []error{err}
98141
}
99142

0 commit comments

Comments
 (0)