mirror of
https://github.com/helm/helm.git
synced 2026-08-04 15:10:47 +00:00
Merge pull request #7640 from yinzara/bugfix/issue-7002
fix(helm): stdin values for helm upgrade --install
This commit is contained in:
@@ -97,10 +97,15 @@ func storageFixture() *storage.Storage {
|
||||
}
|
||||
|
||||
func executeActionCommandC(store *storage.Storage, cmd string) (*cobra.Command, string, error) {
|
||||
return executeActionCommandStdinC(store, nil, cmd)
|
||||
}
|
||||
|
||||
func executeActionCommandStdinC(store *storage.Storage, in *os.File, cmd string) (*cobra.Command, string, error) {
|
||||
args, err := shellwords.Parse(cmd)
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
}
|
||||
|
||||
buf := new(bytes.Buffer)
|
||||
|
||||
actionConfig := &action.Configuration{
|
||||
@@ -111,15 +116,26 @@ func executeActionCommandC(store *storage.Storage, cmd string) (*cobra.Command,
|
||||
}
|
||||
|
||||
root := newRootCmd(actionConfig, buf, args)
|
||||
root.SetOutput(buf)
|
||||
root.SetOut(buf)
|
||||
root.SetErr(buf)
|
||||
root.SetArgs(args)
|
||||
|
||||
oldStdin := os.Stdin
|
||||
if in != nil {
|
||||
root.SetIn(in)
|
||||
os.Stdin = in
|
||||
}
|
||||
|
||||
if mem, ok := store.Driver.(*driver.Memory); ok {
|
||||
mem.SetNamespace(settings.Namespace())
|
||||
}
|
||||
c, err := root.ExecuteC()
|
||||
|
||||
return c, buf.String(), err
|
||||
result := buf.String()
|
||||
|
||||
os.Stdin = oldStdin
|
||||
|
||||
return c, result, err
|
||||
}
|
||||
|
||||
// cmdTestCase describes a test case that works with releases.
|
||||
|
||||
@@ -75,21 +75,8 @@ func newUpgradeCmd(cfg *action.Configuration, out io.Writer) *cobra.Command {
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
client.Namespace = settings.Namespace()
|
||||
|
||||
if client.Version == "" && client.Devel {
|
||||
debug("setting version to >0.0.0-0")
|
||||
client.Version = ">0.0.0-0"
|
||||
}
|
||||
|
||||
vals, err := valueOpts.MergeValues(getter.All(settings))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
chartPath, err := client.ChartPathOptions.LocateChart(args[1], settings)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Fixes #7002 - Support reading values from STDIN for `upgrade` command
|
||||
// Must load values AFTER determining if we have to call install so that values loaded from stdin are are not read twice
|
||||
if client.Install {
|
||||
// If a release does not exist, install it.
|
||||
histClient := action.NewHistory(cfg)
|
||||
@@ -124,6 +111,21 @@ func newUpgradeCmd(cfg *action.Configuration, out io.Writer) *cobra.Command {
|
||||
}
|
||||
}
|
||||
|
||||
if client.Version == "" && client.Devel {
|
||||
debug("setting version to >0.0.0-0")
|
||||
client.Version = ">0.0.0-0"
|
||||
}
|
||||
|
||||
chartPath, err := client.ChartPathOptions.LocateChart(args[1], settings)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
vals, err := valueOpts.MergeValues(getter.All(settings))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Check chart dependencies to make sure all are present in /charts
|
||||
ch, err := loader.Load(chartPath)
|
||||
if err != nil {
|
||||
|
||||
@@ -19,6 +19,7 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
@@ -256,6 +257,69 @@ func TestUpgradeWithValuesFile(t *testing.T) {
|
||||
|
||||
}
|
||||
|
||||
func TestUpgradeWithValuesFromStdin(t *testing.T) {
|
||||
|
||||
releaseName := "funny-bunny-v5"
|
||||
relMock, ch, chartPath := prepareMockRelease(releaseName, t)
|
||||
|
||||
defer resetEnv()()
|
||||
|
||||
store := storageFixture()
|
||||
|
||||
store.Create(relMock(releaseName, 3, ch))
|
||||
|
||||
in, err := os.Open("testdata/testcharts/upgradetest/values.yaml")
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error, got '%v'", err)
|
||||
}
|
||||
|
||||
cmd := fmt.Sprintf("upgrade %s --values - '%s'", releaseName, chartPath)
|
||||
_, _, err = executeActionCommandStdinC(store, in, cmd)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error, got '%v'", err)
|
||||
}
|
||||
|
||||
updatedRel, err := store.Get(releaseName, 4)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error, got '%v'", err)
|
||||
}
|
||||
|
||||
if !strings.Contains(updatedRel.Manifest, "drink: beer") {
|
||||
t.Errorf("The value is not set correctly. manifest: %s", updatedRel.Manifest)
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpgradeInstallWithValuesFromStdin(t *testing.T) {
|
||||
|
||||
releaseName := "funny-bunny-v6"
|
||||
_, _, chartPath := prepareMockRelease(releaseName, t)
|
||||
|
||||
defer resetEnv()()
|
||||
|
||||
store := storageFixture()
|
||||
|
||||
in, err := os.Open("testdata/testcharts/upgradetest/values.yaml")
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error, got '%v'", err)
|
||||
}
|
||||
|
||||
cmd := fmt.Sprintf("upgrade %s -f - --install '%s'", releaseName, chartPath)
|
||||
_, _, err = executeActionCommandStdinC(store, in, cmd)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error, got '%v'", err)
|
||||
}
|
||||
|
||||
updatedRel, err := store.Get(releaseName, 1)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error, got '%v'", err)
|
||||
}
|
||||
|
||||
if !strings.Contains(updatedRel.Manifest, "drink: beer") {
|
||||
t.Errorf("The value is not set correctly. manifest: %s", updatedRel.Manifest)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func prepareMockRelease(releaseName string, t *testing.T) (func(n string, v int, ch *chart.Chart) *release.Release, *chart.Chart, string) {
|
||||
tmpChart := ensure.TempDir(t)
|
||||
configmapData, err := ioutil.ReadFile("testdata/testcharts/upgradetest/templates/configmap.yaml")
|
||||
|
||||
@@ -211,7 +211,7 @@ func (r *Rollback) performRollback(currentRelease, targetRelease *release.Releas
|
||||
}
|
||||
|
||||
deployed, err := r.cfg.Releases.DeployedAll(currentRelease.Name)
|
||||
if err != nil {
|
||||
if err != nil && !strings.Contains(err.Error(), "has no deployed releases") {
|
||||
return nil, err
|
||||
}
|
||||
// Supersede all previous deployments, see issue #2941.
|
||||
|
||||
@@ -141,6 +141,11 @@ func (mem *Memory) Query(keyvals map[string]string) ([]*rspb.Release, error) {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if len(ls) == 0 {
|
||||
return nil, ErrReleaseNotFound
|
||||
}
|
||||
|
||||
return ls, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user