Merge pull request #6625 from Dean-Coakley/get-output-cmd

fix(cmd): Add --output option to get values
pull/6627/head
Taylor Thomas 6 years ago committed by GitHub
commit 6cfd47784b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -24,13 +24,20 @@ import (
"helm.sh/helm/v3/cmd/helm/require"
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/cli/output"
)
var getValuesHelp = `
This command downloads a values file for a given release.
`
type valuesWriter struct {
vals map[string]interface{}
allValues bool
}
func newGetValuesCmd(cfg *action.Configuration, out io.Writer) *cobra.Command {
var outfmt output.Format
client := action.NewGetValues(cfg)
cmd := &cobra.Command{
@ -39,17 +46,35 @@ func newGetValuesCmd(cfg *action.Configuration, out io.Writer) *cobra.Command {
Long: getValuesHelp,
Args: require.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
res, err := client.Run(args[0])
vals, err := client.Run(args[0])
if err != nil {
return err
}
fmt.Fprintln(out, res)
return nil
return outfmt.Write(out, &valuesWriter{vals, client.AllValues})
},
}
f := cmd.Flags()
f.IntVar(&client.Version, "revision", 0, "get the named release with revision")
f.BoolVarP(&client.AllValues, "all", "a", false, "dump all (computed) values")
bindOutputFlag(cmd, &outfmt)
return cmd
}
func (v valuesWriter) WriteTable(out io.Writer) error {
if v.allValues {
fmt.Fprintln(out, "COMPUTED VALUES:")
} else {
fmt.Fprintln(out, "USER-SUPPLIED VALUES:")
}
return output.EncodeYAML(out, v.vals)
}
func (v valuesWriter) WriteJSON(out io.Writer) error {
return output.EncodeJSON(out, v.vals)
}
func (v valuesWriter) WriteYAML(out io.Writer) error {
return output.EncodeYAML(out, v.vals)
}

@ -32,7 +32,23 @@ func TestGetValuesCmd(t *testing.T) {
name: "get values requires release name arg",
cmd: "get values",
golden: "output/get-values-args.txt",
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide"})},
wantError: true,
}, {
name: "get values thomas-guide (all)",
cmd: "get values thomas-guide --all",
golden: "output/get-values-all.txt",
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide"})},
}, {
name: "get values to json",
cmd: "get values thomas-guide --output json",
golden: "output/values.json",
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide"})},
}, {
name: "get values to yaml",
cmd: "get values thomas-guide --output yaml",
golden: "output/values.yaml",
rels: []*release.Release{release.Mock(&release.MockReleaseOptions{Name: "thomas-guide"})},
}}
runTestCmd(t, tests)
}

@ -0,0 +1,2 @@
COMPUTED VALUES:
name: value

@ -1,2 +1,2 @@
USER-SUPPLIED VALUES:
name: value

@ -0,0 +1 @@
{"name":"value"}

@ -0,0 +1 @@
name: value

@ -17,8 +17,6 @@ limitations under the License.
package action
import (
"sigs.k8s.io/yaml"
"helm.sh/helm/v3/pkg/chartutil"
)
@ -40,29 +38,19 @@ func NewGetValues(cfg *Configuration) *GetValues {
}
// Run executes 'helm get values' against the given release.
func (g *GetValues) Run(name string) (string, error) {
res, err := g.cfg.releaseContent(name, g.Version)
func (g *GetValues) Run(name string) (map[string]interface{}, error) {
rel, err := g.cfg.releaseContent(name, g.Version)
if err != nil {
return "", err
return nil, err
}
// If the user wants all values, compute the values and return.
if g.AllValues {
cfg, err := chartutil.CoalesceValues(res.Chart, res.Config)
if err != nil {
return "", err
}
cfgStr, err := cfg.YAML()
cfg, err := chartutil.CoalesceValues(rel.Chart, rel.Config)
if err != nil {
return "", err
return nil, err
}
return cfgStr, nil
return cfg, nil
}
resConfig, err := yaml.Marshal(res.Config)
if err != nil {
return "", err
}
return string(resConfig), nil
return rel.Config, nil
}

Loading…
Cancel
Save