Skip to content

Commit 4ed4cfa

Browse files
databus23mumoshu
andauthored
Remove support for helm2 (databus23#454)
* Remove support for helm2 * fixup! Merge branch 'master' into remove-helm2-support --------- Co-authored-by: Yusuke Kuoka <[email protected]>
1 parent d6bed22 commit 4ed4cfa

File tree

14 files changed

+17
-555
lines changed

14 files changed

+17
-555
lines changed

Makefile

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@ HELM_3_PLUGINS := $(shell helm env HELM_PLUGINS)
66
PKG:= github.com/databus23/helm-diff/v3
77
LDFLAGS := -X $(PKG)/cmd.Version=$(VERSION)
88

9-
# Clear the "unreleased" string in BuildMetadata
10-
LDFLAGS += -X k8s.io/helm/pkg/version.BuildMetadata=
11-
LDFLAGS += -X k8s.io/helm/pkg/version.Version=$(shell ./scripts/dep-helm-version.sh)
12-
139
GO ?= go
1410

1511
.PHONY: format

cmd/helm.go

Lines changed: 0 additions & 161 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,8 @@ package cmd
66
import (
77
"errors"
88
"fmt"
9-
"io/ioutil"
109
"os"
11-
"path/filepath"
1210
"strings"
13-
14-
"github.com/ghodss/yaml"
15-
"google.golang.org/grpc"
16-
"k8s.io/helm/pkg/downloader"
17-
"k8s.io/helm/pkg/getter"
18-
"k8s.io/helm/pkg/helm/environment"
19-
"k8s.io/helm/pkg/helm/helmpath"
20-
"k8s.io/helm/pkg/strvals"
2111
)
2212

2313
/////////////// Source: cmd/helm/install.go /////////////////////////
@@ -57,143 +47,6 @@ func (v *valueFiles) Set(value string) error {
5747
return nil
5848
}
5949

60-
func locateChartPath(name, version string, verify bool, keyring string) (string, error) {
61-
name = strings.TrimSpace(name)
62-
version = strings.TrimSpace(version)
63-
if fi, err := os.Stat(name); err == nil {
64-
abs, err := filepath.Abs(name)
65-
if err != nil {
66-
return abs, err
67-
}
68-
if verify {
69-
if fi.IsDir() {
70-
return "", errors.New("cannot verify a directory")
71-
}
72-
if _, err := downloader.VerifyChart(abs, keyring); err != nil {
73-
return "", err
74-
}
75-
}
76-
return abs, nil
77-
}
78-
if filepath.IsAbs(name) || strings.HasPrefix(name, ".") {
79-
return name, fmt.Errorf("path %q not found", name)
80-
}
81-
82-
crepo := filepath.Join(helmpath.Home(homePath()).Repository(), name)
83-
if _, err := os.Stat(crepo); err == nil {
84-
return filepath.Abs(crepo)
85-
}
86-
87-
dl := downloader.ChartDownloader{
88-
HelmHome: helmpath.Home(homePath()),
89-
Out: os.Stdout,
90-
Keyring: keyring,
91-
Getters: getter.All(environment.EnvSettings{}),
92-
}
93-
if verify {
94-
dl.Verify = downloader.VerifyAlways
95-
}
96-
97-
filename, _, err := dl.DownloadTo(name, version, helmpath.Home(homePath()).Archive())
98-
if err == nil {
99-
lname, err := filepath.Abs(filename)
100-
if err != nil {
101-
return filename, err
102-
}
103-
return lname, nil
104-
}
105-
106-
return filename, err
107-
}
108-
109-
// Merges source and destination map, preferring values from the source map
110-
func mergeValues(dest map[string]interface{}, src map[string]interface{}) map[string]interface{} {
111-
for k, v := range src {
112-
// If the key doesn't exist already, then just set the key to that value
113-
if _, exists := dest[k]; !exists {
114-
dest[k] = v
115-
continue
116-
}
117-
nextMap, ok := v.(map[string]interface{})
118-
// If it isn't another map, overwrite the value
119-
if !ok {
120-
dest[k] = v
121-
continue
122-
}
123-
// If the key doesn't exist already, then just set the key to that value
124-
if _, exists := dest[k]; !exists {
125-
dest[k] = nextMap
126-
continue
127-
}
128-
// Edge case: If the key exists in the destination, but isn't a map
129-
destMap, isMap := dest[k].(map[string]interface{})
130-
// If the source map has a map for this key, prefer it
131-
if !isMap {
132-
dest[k] = v
133-
continue
134-
}
135-
// If we got to this point, it is a map in both, so merge them
136-
dest[k] = mergeValues(destMap, nextMap)
137-
}
138-
return dest
139-
}
140-
141-
/////////////// Source: cmd/helm/upgrade.go /////////////////////////
142-
143-
func (d *diffCmd) vals() ([]byte, error) {
144-
base := map[string]interface{}{}
145-
146-
// User specified a values files via -f/--values
147-
for _, filePath := range d.valueFiles {
148-
currentMap := map[string]interface{}{}
149-
150-
var bytes []byte
151-
var err error
152-
if strings.TrimSpace(filePath) == "-" {
153-
bytes, err = ioutil.ReadAll(os.Stdin)
154-
} else {
155-
bytes, err = ioutil.ReadFile(filePath)
156-
}
157-
if err != nil {
158-
return []byte{}, err
159-
}
160-
161-
if err := yaml.Unmarshal(bytes, &currentMap); err != nil {
162-
return []byte{}, fmt.Errorf("failed to parse %s: %s", filePath, err)
163-
}
164-
// Merge with the previous map
165-
base = mergeValues(base, currentMap)
166-
}
167-
168-
// User specified a value via --set
169-
for _, value := range d.values {
170-
if err := strvals.ParseInto(value, base); err != nil {
171-
return []byte{}, fmt.Errorf("failed parsing --set data: %s", err)
172-
}
173-
}
174-
175-
// User specified a value via --set-string
176-
for _, value := range d.stringValues {
177-
if err := strvals.ParseIntoString(value, base); err != nil {
178-
return []byte{}, fmt.Errorf("failed parsing --set-string data: %s", err)
179-
}
180-
}
181-
182-
// User specified a value via --set-file
183-
for _, value := range d.fileValues {
184-
reader := func(rs []rune) (interface{}, error) {
185-
bytes, err := ioutil.ReadFile(string(rs))
186-
return string(bytes), err
187-
}
188-
189-
if err := strvals.ParseIntoFile(value, base, reader); err != nil {
190-
return []byte{}, fmt.Errorf("failed parsing --set-file data: %s", err)
191-
}
192-
}
193-
194-
return yaml.Marshal(base)
195-
}
196-
19750
/////////////// Source: cmd/helm/helm.go ////////////////////////////
19851

19952
func checkArgsLength(argsReceived int, requiredArgs ...string) error {
@@ -207,17 +60,3 @@ func checkArgsLength(argsReceived int, requiredArgs ...string) error {
20760
}
20861
return nil
20962
}
210-
211-
func homePath() string {
212-
return os.Getenv("HELM_HOME")
213-
}
214-
215-
func prettyError(err error) error {
216-
if err == nil {
217-
return nil
218-
}
219-
// This is ridiculous. Why is 'grpc.rpcError' not exported? The least they
220-
// could do is throw an interface on the lib that would let us get back
221-
// the desc. Instead, we have to pass ALL errors through this.
222-
return errors.New(grpc.ErrorDesc(err))
223-
}

cmd/helm3.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package cmd
33
import (
44
"bytes"
55
"fmt"
6-
"io/ioutil"
6+
"io"
77
"os"
88
"os/exec"
99
"regexp"
@@ -110,7 +110,7 @@ func (d *diffCmd) template(isUpgrade bool) ([]byte, error) {
110110
// See https://medium.com/@kcatstack/understand-helm-upgrade-flags-reset-values-reuse-values-6e58ac8f127e
111111
shouldDefaultReusingValues := isUpgrade && len(d.values) == 0 && len(d.stringValues) == 0 && len(d.valueFiles) == 0 && len(d.fileValues) == 0
112112
if (d.reuseValues || shouldDefaultReusingValues) && !d.resetValues && !d.dryRun {
113-
tmpfile, err := ioutil.TempFile("", "existing-values")
113+
tmpfile, err := os.CreateTemp("", "existing-values")
114114
if err != nil {
115115
return nil, err
116116
}
@@ -128,12 +128,12 @@ func (d *diffCmd) template(isUpgrade bool) ([]byte, error) {
128128
}
129129
for _, valueFile := range d.valueFiles {
130130
if strings.TrimSpace(valueFile) == "-" {
131-
bytes, err := ioutil.ReadAll(os.Stdin)
131+
bytes, err := io.ReadAll(os.Stdin)
132132
if err != nil {
133133
return nil, err
134134
}
135135

136-
tmpfile, err := ioutil.TempFile("", "helm-diff-stdin-values")
136+
tmpfile, err := os.CreateTemp("", "helm-diff-stdin-values")
137137
if err != nil {
138138
return nil, err
139139
}

cmd/helpers.go

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,19 @@ import (
77
"path/filepath"
88
"strings"
99

10-
flag "github.com/spf13/pflag"
1110
"k8s.io/client-go/util/homedir"
12-
"k8s.io/helm/pkg/helm"
13-
helm_env "k8s.io/helm/pkg/helm/environment"
14-
"k8s.io/helm/pkg/tlsutil"
1511
)
1612

1713
const (
18-
tlsCaCertDefault = "$HELM_HOME/ca.pem"
19-
tlsCertDefault = "$HELM_HOME/cert.pem"
20-
tlsKeyDefault = "$HELM_HOME/key.pem"
21-
2214
helm2TestSuccessHook = "test-success"
2315
helm3TestHook = "test"
2416
)
2517

2618
var (
27-
settings helm_env.EnvSettings
2819
// DefaultHelmHome to hold default home path of .helm dir
2920
DefaultHelmHome = filepath.Join(homedir.HomeDir(), ".helm")
3021
)
3122

32-
func isHelm3() bool {
33-
return os.Getenv("TILLER_HOST") == ""
34-
}
35-
3623
func isDebug() bool {
3724
return os.Getenv("HELM_DEBUG") == "true"
3825
}
@@ -42,47 +29,6 @@ func debugPrint(format string, a ...interface{}) {
4229
}
4330
}
4431

45-
func addCommonCmdOptions(f *flag.FlagSet) {
46-
settings.AddFlagsTLS(f)
47-
settings.InitTLS(f)
48-
49-
f.StringVar((*string)(&settings.Home), "home", DefaultHelmHome, "location of your Helm config. Overrides $HELM_HOME")
50-
}
51-
52-
func createHelmClient() helm.Interface {
53-
options := []helm.Option{helm.Host(os.Getenv("TILLER_HOST")), helm.ConnectTimeout(int64(30))}
54-
55-
if settings.TLSVerify || settings.TLSEnable {
56-
tlsopts := tlsutil.Options{
57-
ServerName: settings.TLSServerName,
58-
KeyFile: settings.TLSKeyFile,
59-
CertFile: settings.TLSCertFile,
60-
InsecureSkipVerify: true,
61-
}
62-
63-
if settings.TLSVerify {
64-
tlsopts.CaCertFile = settings.TLSCaCertFile
65-
tlsopts.InsecureSkipVerify = false
66-
}
67-
68-
tlscfg, err := tlsutil.ClientConfig(tlsopts)
69-
if err != nil {
70-
fmt.Fprintln(os.Stderr, err)
71-
os.Exit(2)
72-
}
73-
74-
options = append(options, helm.WithTLS(tlscfg))
75-
}
76-
77-
return helm.NewClient(options...)
78-
}
79-
80-
func expandTLSPaths() {
81-
settings.TLSCaCertFile = os.ExpandEnv(settings.TLSCaCertFile)
82-
settings.TLSCertFile = os.ExpandEnv(settings.TLSCertFile)
83-
settings.TLSKeyFile = os.ExpandEnv(settings.TLSKeyFile)
84-
}
85-
8632
func outputWithRichError(cmd *exec.Cmd) ([]byte, error) {
8733
debugPrint("Executing %s", strings.Join(cmd.Args, " "))
8834
output, err := cmd.Output()

cmd/release.go

Lines changed: 1 addition & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,12 @@ import (
77
"strings"
88

99
"github.com/spf13/cobra"
10-
"k8s.io/helm/pkg/helm"
1110

1211
"github.com/databus23/helm-diff/v3/diff"
1312
"github.com/databus23/helm-diff/v3/manifest"
1413
)
1514

1615
type release struct {
17-
client helm.Interface
1816
detailedExitCode bool
1917
releases []string
2018
includeTests bool
@@ -41,9 +39,6 @@ func releaseCmd() *cobra.Command {
4139
Use: "release [flags] RELEASE release1 [release2]",
4240
Short: "Shows diff between release's manifests",
4341
Long: releaseCmdLongUsage,
44-
PreRun: func(*cobra.Command, []string) {
45-
expandTLSPaths()
46-
},
4742
RunE: func(cmd *cobra.Command, args []string) error {
4843
// Suppress the command usage on error. See #77 for more info
4944
cmd.SilenceUsage = true
@@ -61,13 +56,7 @@ func releaseCmd() *cobra.Command {
6156
ProcessDiffOptions(cmd.Flags(), &diff.Options)
6257

6358
diff.releases = args[0:]
64-
if isHelm3() {
65-
return diff.differentiateHelm3()
66-
}
67-
if diff.client == nil {
68-
diff.client = createHelmClient()
69-
}
70-
return diff.differentiate()
59+
return diff.differentiateHelm3()
7160
},
7261
}
7362

@@ -78,10 +67,6 @@ func releaseCmd() *cobra.Command {
7867

7968
releaseCmd.SuggestionsMinimumDistance = 1
8069

81-
if !isHelm3() {
82-
addCommonCmdOptions(releaseCmd.Flags())
83-
}
84-
8570
return releaseCmd
8671
}
8772

@@ -139,34 +124,3 @@ func (d *release) differentiateHelm3() error {
139124
}
140125
return nil
141126
}
142-
143-
func (d *release) differentiate() error {
144-
145-
releaseResponse1, err := d.client.ReleaseContent(d.releases[0])
146-
if err != nil {
147-
return prettyError(err)
148-
}
149-
150-
releaseResponse2, err := d.client.ReleaseContent(d.releases[1])
151-
if err != nil {
152-
return prettyError(err)
153-
}
154-
155-
if releaseResponse1.Release.Chart.Metadata.Name == releaseResponse2.Release.Chart.Metadata.Name {
156-
seenAnyChanges := diff.Releases(
157-
manifest.ParseRelease(releaseResponse1.Release, d.includeTests, d.normalizeManifests),
158-
manifest.ParseRelease(releaseResponse2.Release, d.includeTests, d.normalizeManifests),
159-
&d.Options,
160-
os.Stdout)
161-
162-
if d.detailedExitCode && seenAnyChanges {
163-
return Error{
164-
error: errors.New("identified at least one change, exiting with non-zero exit code (detailed-exitcode parameter enabled)"),
165-
Code: 2,
166-
}
167-
}
168-
} else {
169-
fmt.Printf("Error : Incomparable Releases \n Unable to compare releases from two different charts \"%s\", \"%s\". \n try helm diff release --help to know more \n", releaseResponse1.Release.Chart.Metadata.Name, releaseResponse2.Release.Chart.Metadata.Name)
170-
}
171-
return nil
172-
}

0 commit comments

Comments
 (0)