Skip to content

Commit b5f9a7e

Browse files
committed
fix issues in --reset-values and --reuse-values on helm v3
Closes #157
1 parent 977b5c8 commit b5f9a7e

File tree

2 files changed

+27
-22
lines changed

2 files changed

+27
-22
lines changed

cmd/helm3.go

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -62,27 +62,32 @@ func (d *diffCmd) template() ([]byte, error) {
6262
if d.namespace != "" {
6363
flags = append(flags, "--namespace", d.namespace)
6464
}
65-
if !d.resetValues {
66-
if d.reuseValues {
67-
tmpfile, err := ioutil.TempFile("", "existing-values")
68-
if err != nil {
69-
return nil, err
70-
}
71-
defer os.Remove(tmpfile.Name())
72-
flags = append(flags, "--values", tmpfile.Name())
65+
// Helm automatically enable --reuse-values when there's no --set, --set-string, --set-values, --set-file present.
66+
// Let's simulate that in helm-diff.
67+
// See https://medium.com/@kcatstack/understand-helm-upgrade-flags-reset-values-reuse-values-6e58ac8f127e
68+
shouldDefaultReusingValues := len(d.values) > 0 && len(d.stringValues) > 0 && len(d.valueFiles) > 0 && len(d.fileValues) > 0
69+
if (d.reuseValues || shouldDefaultReusingValues) && !d.resetValues {
70+
tmpfile, err := ioutil.TempFile("", "existing-values")
71+
if err != nil {
72+
return nil, err
7373
}
74-
for _, value := range d.values {
75-
flags = append(flags, "--set", value)
76-
}
77-
for _, stringValue := range d.stringValues {
78-
flags = append(flags, "--set-string", stringValue)
79-
}
80-
for _, valueFile := range d.valueFiles {
81-
flags = append(flags, "--values", valueFile)
82-
}
83-
for _, fileValue := range d.fileValues {
84-
flags = append(flags, "--set-file", fileValue)
74+
defer os.Remove(tmpfile.Name())
75+
if err := d.writeExistingValues(tmpfile); err != nil {
76+
return nil, err
8577
}
78+
flags = append(flags, "--values", tmpfile.Name())
79+
}
80+
for _, value := range d.values {
81+
flags = append(flags, "--set", value)
82+
}
83+
for _, stringValue := range d.stringValues {
84+
flags = append(flags, "--set-string", stringValue)
85+
}
86+
for _, valueFile := range d.valueFiles {
87+
flags = append(flags, "--values", valueFile)
88+
}
89+
for _, fileValue := range d.fileValues {
90+
flags = append(flags, "--set-file", fileValue)
8691
}
8792

8893
args := []string{"template", d.release, d.chart}
@@ -91,8 +96,8 @@ func (d *diffCmd) template() ([]byte, error) {
9196
return outputWithRichError(cmd)
9297
}
9398

94-
func (d *diffCmd) existingValues(f *os.File) error {
95-
cmd := exec.Command(os.Getenv("HELM_BIN"), "get", "values", d.release, "--all")
99+
func (d *diffCmd) writeExistingValues(f *os.File) error {
100+
cmd := exec.Command(os.Getenv("HELM_BIN"), "get", "values", d.release, "--all", "--output", "yaml")
96101
debugPrint("Executing %s", strings.Join(cmd.Args, " "))
97102
defer f.Close()
98103
cmd.Stdout = f

cmd/upgrade.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ func newChartCommand() *cobra.Command {
8686
f.StringArrayVar(&diff.values, "set", []string{}, "set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)")
8787
f.StringArrayVar(&diff.stringValues, "set-string", []string{}, "set STRING values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)")
8888
f.StringArrayVar(&diff.fileValues, "set-file", []string{}, "set values from respective files specified via the command line (can specify multiple or separate values with commas: key1=path1,key2=path2)")
89-
f.BoolVar(&diff.reuseValues, "reuse-values", false, "reuse the last release's values and merge in any new values")
89+
f.BoolVar(&diff.reuseValues, "reuse-values", false, "reuse the last release's values and merge in any new values. If '--reset-values' is specified, this is ignored")
9090
f.BoolVar(&diff.resetValues, "reset-values", false, "reset the values to the ones built into the chart and merge in any new values")
9191
f.BoolVar(&diff.allowUnreleased, "allow-unreleased", false, "enables diffing of releases that are not yet deployed via Helm")
9292
f.BoolVar(&diff.noHooks, "no-hooks", false, "disable diffing of hooks")

0 commit comments

Comments
 (0)