diff --git a/pkg/dashboard/handlers/helmHandlers.go b/pkg/dashboard/handlers/helmHandlers.go index f84257f..77bf509 100644 --- a/pkg/dashboard/handlers/helmHandlers.go +++ b/pkg/dashboard/handlers/helmHandlers.go @@ -23,7 +23,6 @@ import ( "gopkg.in/yaml.v3" "helm.sh/helm/v3/pkg/chartutil" "helm.sh/helm/v3/pkg/release" - "helm.sh/helm/v3/pkg/repo" helmtime "helm.sh/helm/v3/pkg/time" "k8s.io/utils/strings/slices" ) @@ -278,14 +277,6 @@ func (h *HelmHandler) RepoCharts(c *gin.Context) { return } - installed, err := app.Releases.List() - if err != nil { - _ = c.AbortWithError(http.StatusInternalServerError, err) - return - } - - enrichRepoChartsWithInstalled(charts, installed) - sort.Slice(charts, func(i, j int) bool { return charts[i].Name < charts[j].Name }) @@ -293,19 +284,6 @@ func (h *HelmHandler) RepoCharts(c *gin.Context) { c.IndentedJSON(http.StatusOK, charts) } -func enrichRepoChartsWithInstalled(charts []*repo.ChartVersion, installed []*objects.Release) { - for _, rchart := range charts { - for _, rel := range installed { - if rchart.Metadata.Name == rel.Orig.Chart.Name() { - log.Debugf("Matched") // TODO: restore implementation - // TODO: there can be more than one - //rchart.InstalledNamespace = rel.Orig.Namespace - //rchart.InstalledName = rel.Orig.Name - } - } - } -} - func (h *HelmHandler) RepoUpdate(c *gin.Context) { app := h.GetApp(c) if app == nil { diff --git a/pkg/dashboard/objects/releases.go b/pkg/dashboard/objects/releases.go index b25a903..e1085ec 100644 --- a/pkg/dashboard/objects/releases.go +++ b/pkg/dashboard/objects/releases.go @@ -2,7 +2,6 @@ package objects import ( "bytes" - "fmt" "gopkg.in/yaml.v3" "io" "os" @@ -51,25 +50,26 @@ func (a *Releases) List() ([]*Release, error) { return nil, errorx.Decorate(err, "failed to get list of releases") } for _, r := range rels { - releases = append(releases, &Release{HelmConfig: a.HelmConfig, Orig: r, Settings: a.Settings}) + releases = append(releases, NewRelease(a.HelmConfig, r, a.Settings)) } } return releases, nil } func (a *Releases) ByName(namespace string, name string) (*Release, error) { - rels, err := a.List() + log.Debugf("Getting release by ns+name: %s/%s", namespace, name) + hc, err := a.HelmConfig(namespace) if err != nil { - return nil, errorx.Decorate(err, "failed to get list of releases") + return nil, errorx.Decorate(err, "failed to get helm config for namespace '%s'", "") } - for _, r := range rels { - if r.Orig.Namespace == namespace && r.Orig.Name == name { - return r, nil - } + client := action.NewGet(hc) + rel, err := client.Run(name) + if err != nil { + return nil, errorx.Decorate(err, "failed to get helm release") } - return nil, errorx.DataUnavailable.New(fmt.Sprintf("release '%s' is not found in namespace '%s'", name, namespace)) + return NewRelease(a.HelmConfig, rel, a.Settings), nil } func (a *Releases) Install(namespace string, name string, repoChart string, version string, justTemplate bool, values map[string]interface{}) (*release.Release, error) { @@ -191,7 +191,7 @@ func (r *Release) History() ([]*Release, error) { r.revisions = []*Release{} for _, rev := range revs { - r.revisions = append(r.revisions, &Release{HelmConfig: r.HelmConfig, Orig: rev, Settings: r.Settings}) + r.revisions = append(r.revisions, NewRelease(r.HelmConfig, rev, r.Settings)) } return r.revisions, nil @@ -399,3 +399,11 @@ func checkIfInstallable(ch *chart.Chart) error { } return errors.Errorf("%s charts are not installable", ch.Metadata.Type) } + +func NewRelease(hc HelmNSConfigGetter, orig *release.Release, settings *cli.EnvSettings) *Release { + return &Release{ + HelmConfig: hc, + Orig: orig, + Settings: settings, + } +}