mirror of
https://github.com/rancher/steve.git
synced 2025-09-18 00:08:17 +00:00
Shuffle around code and use rancher/apiserver
This commit is contained in:
132
pkg/resources/helm/helm3.go
Normal file
132
pkg/resources/helm/helm3.go
Normal file
@@ -0,0 +1,132 @@
|
||||
package helm
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"io/ioutil"
|
||||
"strings"
|
||||
|
||||
"helm.sh/helm/v3/pkg/release"
|
||||
)
|
||||
|
||||
func isHelm3(labels map[string]string) bool {
|
||||
return labels["owner"] == "helm"
|
||||
}
|
||||
|
||||
func fromHelm3Data(data string, isNamespaced IsNamespaced) (*Release, error) {
|
||||
release, err := decodeHelm3(data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return fromHelm3ReleaseToRelease(release, isNamespaced)
|
||||
}
|
||||
|
||||
func fromHelm3ReleaseToRelease(release *release.Release, isNamespaced IsNamespaced) (*Release, error) {
|
||||
var (
|
||||
info = &Info{}
|
||||
chart = &Chart{}
|
||||
err error
|
||||
)
|
||||
|
||||
if release.Info != nil {
|
||||
info = &Info{
|
||||
FirstDeployed: release.Info.FirstDeployed.Time,
|
||||
LastDeployed: release.Info.LastDeployed.Time,
|
||||
Deleted: release.Info.Deleted.Time,
|
||||
Description: release.Info.Description,
|
||||
Status: Status(release.Info.Status),
|
||||
Notes: release.Info.Notes,
|
||||
}
|
||||
}
|
||||
|
||||
if release.Chart != nil {
|
||||
chart = &Chart{
|
||||
Values: release.Chart.Values,
|
||||
}
|
||||
if release.Chart.Metadata != nil {
|
||||
chart.Metadata = &Metadata{
|
||||
Name: release.Chart.Metadata.Name,
|
||||
Home: release.Chart.Metadata.Home,
|
||||
Sources: release.Chart.Metadata.Sources,
|
||||
Version: release.Chart.Metadata.Version,
|
||||
Description: release.Chart.Metadata.Description,
|
||||
Keywords: release.Chart.Metadata.Keywords,
|
||||
Icon: release.Chart.Metadata.Icon,
|
||||
APIVersion: release.Chart.Metadata.APIVersion,
|
||||
Condition: release.Chart.Metadata.Condition,
|
||||
Tags: release.Chart.Metadata.Tags,
|
||||
AppVersion: release.Chart.Metadata.AppVersion,
|
||||
Deprecated: release.Chart.Metadata.Deprecated,
|
||||
Annotations: release.Chart.Metadata.Annotations,
|
||||
KubeVersion: release.Chart.Metadata.KubeVersion,
|
||||
Type: release.Chart.Metadata.Type,
|
||||
}
|
||||
|
||||
for _, m := range release.Chart.Metadata.Maintainers {
|
||||
if m == nil {
|
||||
continue
|
||||
}
|
||||
chart.Metadata.Maintainers = append(chart.Metadata.Maintainers, Maintainer{
|
||||
Name: m.Name,
|
||||
Email: m.Email,
|
||||
URL: m.URL,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
for _, f := range release.Chart.Files {
|
||||
if f == nil {
|
||||
continue
|
||||
}
|
||||
if readmes[strings.ToLower(f.Name)] {
|
||||
info.Readme = string(f.Data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hr := &Release{
|
||||
Name: release.Name,
|
||||
Info: info,
|
||||
Chart: chart,
|
||||
Values: release.Config,
|
||||
Resources: nil,
|
||||
Version: release.Version,
|
||||
Namespace: release.Namespace,
|
||||
HelmMajorVersion: 3,
|
||||
}
|
||||
|
||||
hr.Resources, err = resourcesFromManifest(release.Namespace, release.Manifest, isNamespaced)
|
||||
return hr, err
|
||||
}
|
||||
|
||||
func decodeHelm3(data string) (*release.Release, error) {
|
||||
b, err := base64.StdEncoding.DecodeString(data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// For backwards compatibility with releases that were stored before
|
||||
// compression was introduced we skip decompression if the
|
||||
// gzip magic header is not found
|
||||
if bytes.Equal(b[0:3], magicGzip) {
|
||||
r, err := gzip.NewReader(bytes.NewReader(b))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
b2, err := ioutil.ReadAll(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
b = b2
|
||||
}
|
||||
|
||||
var rls release.Release
|
||||
// unmarshal release object bytes
|
||||
if err := json.Unmarshal(b, &rls); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &rls, nil
|
||||
}
|
Reference in New Issue
Block a user