verify chart name when perform release update

pull/2669/head
Wei Wei 8 years ago
parent 0a20ed73be
commit daf960436a

@ -55,6 +55,8 @@ const notesFileSuffix = "NOTES.txt"
var ( var (
// errMissingChart indicates that a chart was not provided. // errMissingChart indicates that a chart was not provided.
errMissingChart = errors.New("no chart provided") errMissingChart = errors.New("no chart provided")
// errDifferntChart indicates use a different chart to update the current release.
errDifferentChart = errors.New("update release with different chart")
// errMissingRelease indicates that a release (name) was not provided. // errMissingRelease indicates that a release (name) was not provided.
errMissingRelease = errors.New("no release provided") errMissingRelease = errors.New("no release provided")
// errInvalidRevision indicates that an invalid release revision number was provided. // errInvalidRevision indicates that an invalid release revision number was provided.
@ -373,3 +375,10 @@ func validateReleaseName(releaseName string) error {
return nil return nil
} }
func validateChartUpdate(curChart, newChart *chart.Chart) error {
if curChart.Metadata.Name != newChart.Metadata.Name {
return errDifferentChart
}
return nil
}

@ -75,6 +75,10 @@ func (s *ReleaseServer) prepareUpdate(req *services.UpdateReleaseRequest) (*rele
return nil, nil, err return nil, nil, err
} }
if err = validateChartUpdate(currentRelease.Chart, req.Chart); err != nil {
return nil, nil, err
}
// If new values were not supplied in the upgrade, re-use the existing values. // If new values were not supplied in the upgrade, re-use the existing values.
if err := s.reuseValues(req, currentRelease); err != nil { if err := s.reuseValues(req, currentRelease); err != nil {
return nil, nil, err return nil, nil, err

@ -239,6 +239,28 @@ func TestUpdateReleaseFailure(t *testing.T) {
} }
} }
func TestUpdateReleaseFailure_DifferentChart(t *testing.T) {
c := helm.NewContext()
rs := rsFixture()
rel := releaseStub()
rs.env.Releases.Create(rel)
req := &services.UpdateReleaseRequest{
Name: rel.Name,
Chart: &chart.Chart{
Metadata: &chart.Metadata{Name: "hi"},
Templates: []*chart.Template{
{Name: "templates/hi", Data: []byte("hi: there")},
{Name: "templates/hooks", Data: []byte(manifestWithUpgradeHooks)},
},
},
}
_, err := rs.UpdateRelease(c, req)
if err == nil {
t.Fatalf("Expected failed update")
}
}
func TestUpdateReleaseNoHooks(t *testing.T) { func TestUpdateReleaseNoHooks(t *testing.T) {
c := helm.NewContext() c := helm.NewContext()
rs := rsFixture() rs := rsFixture()

Loading…
Cancel
Save