From 0440b54bbff503d4c71e033b2ce7648597c67b05 Mon Sep 17 00:00:00 2001 From: llsheldon Date: Fri, 25 Aug 2017 16:55:43 +0800 Subject: [PATCH] fix(helm):Fix dependency aliaes not working The alias functionality only works when a hardcoded version is used. Any use of semver logic causes unexpected behavior. I use version.IsCompatibleRange to check the dependency version. Closes #2794 --- pkg/chartutil/requirements.go | 5 +++-- pkg/chartutil/requirements_test.go | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/pkg/chartutil/requirements.go b/pkg/chartutil/requirements.go index 606b5db88..ce761a6fc 100644 --- a/pkg/chartutil/requirements.go +++ b/pkg/chartutil/requirements.go @@ -23,6 +23,7 @@ import ( "github.com/ghodss/yaml" "k8s.io/helm/pkg/proto/hapi/chart" + "k8s.io/helm/pkg/version" ) const ( @@ -230,7 +231,7 @@ func getAliasDependency(charts []*chart.Chart, aliasChart *Dependency) *chart.Ch if existingChart.Metadata.Name != aliasChart.Name { continue } - if existingChart.Metadata.Version != aliasChart.Version { + if !version.IsCompatibleRange(aliasChart.Version, existingChart.Metadata.Version) { continue } chartFound = *existingChart @@ -266,7 +267,7 @@ func ProcessRequirementsEnabled(c *chart.Chart, v *chart.Config) error { for _, existingDependency := range c.Dependencies { var dependencyFound bool for _, req := range reqs.Dependencies { - if existingDependency.Metadata.Name == req.Name && existingDependency.Metadata.Version == req.Version { + if existingDependency.Metadata.Name == req.Name && version.IsCompatibleRange(req.Version, existingDependency.Metadata.Version) { dependencyFound = true break } diff --git a/pkg/chartutil/requirements_test.go b/pkg/chartutil/requirements_test.go index 502d8ad8d..ef09bcd2e 100644 --- a/pkg/chartutil/requirements_test.go +++ b/pkg/chartutil/requirements_test.go @@ -21,6 +21,7 @@ import ( "strconv" "k8s.io/helm/pkg/proto/hapi/chart" + "k8s.io/helm/pkg/version" ) func TestLoadRequirements(t *testing.T) { @@ -347,11 +348,24 @@ func TestGetAliasDependency(t *testing.T) { t.Fatalf("Dependency chart name should be %s but got %s", req.Dependencies[0].Name, aliasChart.Metadata.Name) } + if req.Dependencies[0].Version != "" { + if !version.IsCompatibleRange(req.Dependencies[0].Version, aliasChart.Metadata.Version) { + t.Fatalf("Dependency chart version is not in the compatible range") + } + + } + // Failure case req.Dependencies[0].Name = "something-else" if aliasChart := getAliasDependency(c.Dependencies, req.Dependencies[0]); aliasChart != nil { t.Fatalf("expected no chart but got %s", aliasChart.Metadata.Name) } + + req.Dependencies[0].Version = "something else which is not in the compatible range" + if version.IsCompatibleRange(req.Dependencies[0].Version, aliasChart.Metadata.Version) { + t.Fatalf("Dependency chart version which is not in the compatible range should cause a failure other than a success ") + } + } func TestDependentChartAliases(t *testing.T) {