diff --git a/cmd/helm3.go b/cmd/helm3.go index d2a6d617..dda15afc 100644 --- a/cmd/helm3.go +++ b/cmd/helm3.go @@ -127,10 +127,10 @@ func (d *diffCmd) template(isUpgrade bool) ([]byte, error) { if d.insecureSkipTLSVerify { flags = append(flags, "--insecure-skip-tls-verify") } - // Helm automatically enable --reuse-values when there's no --set, --set-string, --set-values, --set-file present. + // Helm automatically enable --reuse-values when there's no --set, --set-string, --set-json, --set-values, --set-file present. // Let's simulate that in helm-diff. // See https://medium.com/@kcatstack/understand-helm-upgrade-flags-reset-values-reuse-values-6e58ac8f127e - shouldDefaultReusingValues := isUpgrade && len(d.values) == 0 && len(d.stringValues) == 0 && len(d.valueFiles) == 0 && len(d.fileValues) == 0 + shouldDefaultReusingValues := isUpgrade && len(d.values) == 0 && len(d.stringValues) == 0 && len(d.jsonValues) == 0 && len(d.valueFiles) == 0 && len(d.fileValues) == 0 if (d.reuseValues || shouldDefaultReusingValues) && !d.resetValues && !d.dryRun { tmpfile, err := os.CreateTemp("", "existing-values") if err != nil { @@ -150,6 +150,9 @@ func (d *diffCmd) template(isUpgrade bool) ([]byte, error) { for _, stringValue := range d.stringValues { flags = append(flags, "--set-string", stringValue) } + for _, jsonValue := range d.jsonValues { + flags = append(flags, "--set-json", jsonValue) + } for _, valueFile := range d.valueFiles { if strings.TrimSpace(valueFile) == "-" { bytes, err := io.ReadAll(os.Stdin) diff --git a/cmd/upgrade.go b/cmd/upgrade.go index 44b5a328..5a975f00 100644 --- a/cmd/upgrade.go +++ b/cmd/upgrade.go @@ -42,6 +42,7 @@ type diffCmd struct { valueFiles valueFiles values []string stringValues []string + jsonValues []string fileValues []string reuseValues bool resetValues bool @@ -183,6 +184,7 @@ func newChartCommand() *cobra.Command { f.VarP(&diff.valueFiles, "values", "f", "specify values in a YAML file (can specify multiple)") f.StringArrayVar(&diff.values, "set", []string{}, "set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)") 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)") + f.StringArrayVar(&diff.jsonValues, "set-json", []string{}, "set JSON values on the command line (can specify multiple or separate values with commas: key1=jsonval1,key2=jsonval2)") 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)") 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") f.BoolVar(&diff.resetValues, "reset-values", false, "reset the values to the ones built into the chart and merge in any new values")