mirror of
https://github.com/portainer/portainer.git
synced 2025-07-24 15:59:41 +02:00
feat(helm): update helm view [r8s-256] (#582)
Co-authored-by: Cara Ryan <cara.ryan@portainer.io> Co-authored-by: James Player <james.player@portainer.io> Co-authored-by: stevensbkang <skan070@gmail.com>
This commit is contained in:
parent
46eddbe7b9
commit
0ca9321db1
57 changed files with 2635 additions and 222 deletions
100
pkg/libhelm/sdk/get.go
Normal file
100
pkg/libhelm/sdk/get.go
Normal file
|
@ -0,0 +1,100 @@
|
|||
package sdk
|
||||
|
||||
import (
|
||||
"github.com/portainer/portainer/pkg/libhelm/options"
|
||||
"github.com/portainer/portainer/pkg/libhelm/release"
|
||||
"github.com/rs/zerolog/log"
|
||||
"helm.sh/helm/v3/pkg/action"
|
||||
sdkrelease "helm.sh/helm/v3/pkg/release"
|
||||
)
|
||||
|
||||
// Get implements the HelmPackageManager interface by using the Helm SDK to get a release.
|
||||
// It returns a Release.
|
||||
func (hspm *HelmSDKPackageManager) Get(getOptions options.GetOptions) (*release.Release, error) {
|
||||
log.Debug().
|
||||
Str("context", "HelmClient").
|
||||
Str("namespace", getOptions.Namespace).
|
||||
Str("name", getOptions.Name).
|
||||
Msg("Get Helm release")
|
||||
|
||||
actionConfig := new(action.Configuration)
|
||||
err := hspm.initActionConfig(actionConfig, getOptions.Namespace, getOptions.KubernetesClusterAccess)
|
||||
|
||||
if err != nil {
|
||||
log.Error().
|
||||
Str("context", "HelmClient").
|
||||
Str("namespace", getOptions.Namespace).
|
||||
Err(err).Msg("Failed to initialise helm configuration")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
statusClient, err := hspm.initStatusClient(actionConfig, getOptions)
|
||||
if err != nil {
|
||||
log.Error().
|
||||
Str("context", "HelmClient").
|
||||
Str("namespace", getOptions.Namespace).
|
||||
Err(err).Msg("Failed to initialise helm status client")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
release, err := statusClient.Run(getOptions.Name)
|
||||
if err != nil {
|
||||
log.Error().
|
||||
Str("context", "HelmClient").
|
||||
Str("namespace", getOptions.Namespace).
|
||||
Err(err).Msg("Failed to query helm chart")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
values, err := hspm.getValues(getOptions)
|
||||
if err != nil {
|
||||
// error is already logged in getValuesFromStatus
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return convert(release, values), nil
|
||||
}
|
||||
|
||||
// Helm status is just an extended helm get command with resources added on (when flagged), so use the status client with the optional show resources flag
|
||||
// https://github.com/helm/helm/blob/0199b748aaea3091852d16687c9f9f809061777c/pkg/action/get.go#L40-L47
|
||||
// https://github.com/helm/helm/blob/0199b748aaea3091852d16687c9f9f809061777c/pkg/action/status.go#L48-L82
|
||||
func (hspm *HelmSDKPackageManager) initStatusClient(actionConfig *action.Configuration, getOptions options.GetOptions) (*action.Status, error) {
|
||||
statusClient := action.NewStatus(actionConfig)
|
||||
statusClient.ShowResources = getOptions.ShowResources
|
||||
if getOptions.Revision > 0 {
|
||||
statusClient.Version = getOptions.Revision
|
||||
}
|
||||
|
||||
return statusClient, nil
|
||||
}
|
||||
|
||||
func convert(sdkRelease *sdkrelease.Release, values release.Values) *release.Release {
|
||||
resources, err := parseResources(sdkRelease.Info.Resources)
|
||||
if err != nil {
|
||||
log.Warn().
|
||||
Str("context", "HelmClient").
|
||||
Str("namespace", sdkRelease.Namespace).
|
||||
Str("name", sdkRelease.Name).
|
||||
Err(err).Msg("Failed to parse resources")
|
||||
}
|
||||
return &release.Release{
|
||||
Name: sdkRelease.Name,
|
||||
Namespace: sdkRelease.Namespace,
|
||||
Version: sdkRelease.Version,
|
||||
Info: &release.Info{
|
||||
Status: release.Status(sdkRelease.Info.Status),
|
||||
Notes: sdkRelease.Info.Notes,
|
||||
Resources: resources,
|
||||
Description: sdkRelease.Info.Description,
|
||||
},
|
||||
Manifest: sdkRelease.Manifest,
|
||||
Chart: release.Chart{
|
||||
Metadata: &release.Metadata{
|
||||
Name: sdkRelease.Chart.Metadata.Name,
|
||||
Version: sdkRelease.Chart.Metadata.Version,
|
||||
AppVersion: sdkRelease.Chart.Metadata.AppVersion,
|
||||
},
|
||||
},
|
||||
Values: values,
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue