/
helm.go
126 lines (111 loc) · 3.1 KB
/
helm.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package helm
import (
"fmt"
"os"
"path/filepath"
"github.com/chartmuseum/helm-push/pkg/helm"
"helm.sh/helm/v3/pkg/chart"
"helm.sh/helm/v3/pkg/chart/loader"
"helm.sh/helm/v3/pkg/chartutil"
"helm.sh/helm/v3/pkg/cli"
"helm.sh/helm/v3/pkg/downloader"
"helm.sh/helm/v3/pkg/getter"
"helm.sh/helm/v3/pkg/strvals"
v2downloader "k8s.io/helm/pkg/downloader"
v2getter "k8s.io/helm/pkg/getter"
v2environment "k8s.io/helm/pkg/helm/environment"
"sigs.k8s.io/yaml"
)
type (
// Chart is a helm package that contains metadata
Chart struct {
*chart.Chart
}
)
// SetVersion overrides the chart version
func (c *Chart) SetVersion(version string) {
c.Metadata.Version = version
}
// SetAppVersion overrides the chart appVersion
func (c *Chart) SetAppVersion(appVersion string) {
c.Metadata.AppVersion = appVersion
}
// GetChartByName returns a chart by "name", which can be
// either a directory or .tgz package
func GetChartByName(name string) (*Chart, error) {
chartLoader, err := loader.Loader(name)
if err != nil {
return nil, err
}
cc, err := chartLoader.Load()
if err != nil {
return nil, err
}
return &Chart{cc}, nil
}
// CreateChartPackage creates a new .tgz package in directory
func CreateChartPackage(c *Chart, outDir string) (string, error) {
err := chartutil.SaveDir(c.Chart, outDir)
if err != nil {
return "", fmt.Errorf("error while saving chart: %s", err)
}
const ValuesfileName = "values.yaml"
vf := filepath.Join(outDir, c.Name(), ValuesfileName)
valuesMap, err := yaml.Marshal(c.Values)
if err != nil {
return "", fmt.Errorf("couldn't read values file as YAML: %s", err)
}
err = os.WriteFile(vf, valuesMap, 0644)
if err != nil {
return "", fmt.Errorf("couldn't wring values file: %s", err)
}
chart, err := loader.LoadDir(filepath.Join(outDir, c.Name()))
if err != nil {
return "", fmt.Errorf("new chart with the values seems to be invalid (unable to load): %s", err)
}
return chartutil.Save(chart, outDir)
}
// OverrideValues overrides values in chart values.yaml file
func (c *Chart) OverrideValues(overrides []string) error {
ovMap := map[string]interface{}{}
for _, o := range overrides {
if err := strvals.ParseInto(o, ovMap); err != nil {
return fmt.Errorf("failed parsing --set data: %s", err)
}
}
cvals, err := chartutil.CoalesceValues(c.Chart, ovMap)
if err != nil {
return fmt.Errorf("error while overriding chart values: %s", err)
}
c.Values = cvals
return nil
}
var (
v2settings v2environment.EnvSettings
settings = cli.New()
)
func UpdateDependencies(c *Chart) error {
if helm.HelmMajorVersionCurrent() == helm.HelmMajorVersion2 {
v2downloadManager := &v2downloader.Manager{
Out: os.Stdout,
ChartPath: c.ChartPath(),
HelmHome: v2settings.Home,
Getters: v2getter.All(v2settings),
Debug: v2settings.Debug,
}
if err := v2downloadManager.Update(); err != nil {
return err
}
return nil
}
downloadManager := &downloader.Manager{
Out: os.Stdout,
ChartPath: c.ChartPath(),
Getters: getter.All(settings),
Debug: v2settings.Debug,
}
if err := downloadManager.Update(); err != nil {
return err
}
return nil
}