mirror of
https://github.com/helm/helm.git
synced 2026-05-28 04:35:48 -04:00
Merge pull request #6625 from Dean-Coakley/get-output-cmd
fix(cmd): Add --output option to get values
This commit is contained in:
commit
6cfd47784b
7 changed files with 56 additions and 23 deletions
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
2
cmd/helm/testdata/output/get-values-all.txt
vendored
Normal file
2
cmd/helm/testdata/output/get-values-all.txt
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
COMPUTED VALUES:
|
||||
name: value
|
||||
2
cmd/helm/testdata/output/get-values.txt
vendored
2
cmd/helm/testdata/output/get-values.txt
vendored
|
|
@ -1,2 +1,2 @@
|
|||
USER-SUPPLIED VALUES:
|
||||
name: value
|
||||
|
||||
|
|
|
|||
1
cmd/helm/testdata/output/values.json
vendored
Normal file
1
cmd/helm/testdata/output/values.json
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"name":"value"}
|
||||
1
cmd/helm/testdata/output/values.yaml
vendored
Normal file
1
cmd/helm/testdata/output/values.yaml
vendored
Normal file
|
|
@ -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)
|
||||
cfg, err := chartutil.CoalesceValues(rel.Chart, rel.Config)
|
||||
if err != nil {
|
||||
return "", err
|
||||
return nil, err
|
||||
}
|
||||
cfgStr, err := cfg.YAML()
|
||||
if err != nil {
|
||||
return "", 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…
Reference in a new issue