pull/2677/merge
Sushil Kumar 8 years ago committed by GitHub
commit 2a3e2d9eb2

@ -17,10 +17,12 @@ limitations under the License.
package main package main
import ( import (
"errors"
"fmt" "fmt"
"io" "io"
"strings" "strings"
"github.com/Masterminds/semver"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/helm/pkg/chartutil" "k8s.io/helm/pkg/chartutil"
@ -180,6 +182,32 @@ func (u *upgradeCmd) run() error {
// Check chart requirements to make sure all dependencies are present in /charts // Check chart requirements to make sure all dependencies are present in /charts
if ch, err := chartutil.Load(chartPath); err == nil { if ch, err := chartutil.Load(chartPath); err == nil {
res, err := u.client.ReleaseContent(u.release, helm.ContentReleaseVersion(0))
if err != nil {
return prettyError(err)
}
if res.Release.Chart.Metadata.Name != ch.Metadata.Name {
return fmt.Errorf("%q is not a release for chart %q", u.release, u.chart)
}
fmt.Println("Version requested:", u.version, "\nversion of chart:", res.Release.Chart.Metadata.Version)
if u.version != "" {
releaseVersion, err := semver.NewVersion(res.Release.Chart.Metadata.Version)
if err != nil {
return fmt.Errorf("invalid release version %q, %s", res.Release.Chart.Metadata.Version, err)
}
upgradeVersion, err := semver.NewVersion(u.version)
if err != nil {
return fmt.Errorf("invalid upgrade version %q, %s", u.version, err)
}
if releaseVersion.Equal(upgradeVersion) && !u.force {
return errors.New("no version change requested")
}
if releaseVersion.GreaterThan(upgradeVersion) && !u.force {
return fmt.Errorf("requested upgrade version %q is lower than current version of release %q.\nTIP: use force if want to downgrade the release", u.version, res.Release.Chart.Metadata.Version)
}
}
if req, err := chartutil.LoadRequirements(ch); err == nil { if req, err := chartutil.LoadRequirements(ch); err == nil {
if err := checkDependencies(ch, req); err != nil { if err := checkDependencies(ch, req); err != nil {
return err return err

@ -151,6 +151,40 @@ func TestUpgradeCmd(t *testing.T) {
resp: releaseMock(&releaseOptions{name: "bonkers-bunny", version: 1, chart: ch3}), resp: releaseMock(&releaseOptions{name: "bonkers-bunny", version: 1, chart: ch3}),
err: true, err: true,
}, },
{
name: "upgrade a release with different chart",
args: []string{"funny-bunny", chartPath},
resp: releaseMock(&releaseOptions{name: "funny-bunny", chart: ch3}),
err: true,
},
{
name: "upgrade a release with bad version",
args: []string{"funny-bunny", chartPath},
flags: []string{"--version", "a.b"},
resp: releaseMock(&releaseOptions{name: "funny-bunny", chart: ch}),
err: true,
},
{
name: "upgrade a release with same version",
args: []string{"funny-bunny", chartPath},
flags: []string{"--version", "0.1.0"},
resp: releaseMock(&releaseOptions{name: "funny-bunny", chart: ch}),
err: true,
},
{
name: "upgrade a release with lesser version",
args: []string{"funny-bunny", chartPath},
flags: []string{"--version", "0.0.1"},
resp: releaseMock(&releaseOptions{name: "funny-bunny", chart: ch}),
err: true,
},
{
name: "force upgrade a release with lesser version",
args: []string{"funny-bunny", chartPath},
flags: []string{"--version", "0.0.1", "--force"},
resp: releaseMock(&releaseOptions{name: "funny-bunny", chart: ch}),
expected: "Release \"funny-bunny\" has been upgraded. Happy Helming!\n",
},
} }
cmd := func(c *helm.FakeClient, out io.Writer) *cobra.Command { cmd := func(c *helm.FakeClient, out io.Writer) *cobra.Command {

Loading…
Cancel
Save