From 541d052202cc36d7f5371052b982fb1164707e69 Mon Sep 17 00:00:00 2001 From: Sushil Kumar Date: Thu, 1 Jun 2017 16:04:05 -0700 Subject: [PATCH] First alias would be dependency rename Fixes https://github.com/kubernetes/helm/issues/2508 --- pkg/chartutil/requirements.go | 18 ++++++++++++++---- pkg/chartutil/requirements_test.go | 20 +++++++++++++++----- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/pkg/chartutil/requirements.go b/pkg/chartutil/requirements.go index 5a7f5fe78..a656c2ea2 100644 --- a/pkg/chartutil/requirements.go +++ b/pkg/chartutil/requirements.go @@ -218,7 +218,7 @@ func ProcessRequirementsTags(reqs *Requirements, cvals Values) { } -func copyChartAsAlias(charts []*chart.Chart, dependentChart, aliasChart string) *chart.Chart { +func updateChartDependencyAlias(charts []*chart.Chart, dependentChart, aliasChart string, firstAlias bool) *chart.Chart { var chartFound chart.Chart for _, existingChart := range charts { if existingChart == nil { @@ -230,6 +230,10 @@ func copyChartAsAlias(charts []*chart.Chart, dependentChart, aliasChart string) if existingChart.Metadata.Name != dependentChart { continue } + if firstAlias { + existingChart.Metadata.Name = aliasChart + return nil + } chartFound = *existingChart newMetadata := *existingChart.Metadata @@ -254,16 +258,22 @@ func ProcessRequirementsEnabled(c *chart.Chart, v *chart.Config) error { } for _, req := range reqs.Dependencies { + var firstAlias = true + var dependentChartName = req.Name for _, alias := range req.Alias { - aliasDependency := copyChartAsAlias(c.Dependencies, req.Name, alias) + aliasDependency := updateChartDependencyAlias(c.Dependencies, dependentChartName, alias, firstAlias) + if firstAlias { + dependentChartName = alias + firstAlias = false + continue + } if aliasDependency == nil { break } c.Dependencies = append(c.Dependencies, aliasDependency) - origReqName := req.Name req.Name = alias reqs.Dependencies = append(reqs.Dependencies, req) - req.Name = origReqName + req.Name = dependentChartName } } diff --git a/pkg/chartutil/requirements_test.go b/pkg/chartutil/requirements_test.go index f67bea46e..8e299a09b 100644 --- a/pkg/chartutil/requirements_test.go +++ b/pkg/chartutil/requirements_test.go @@ -321,23 +321,33 @@ func verifyRequirementsImportValues(t *testing.T, c *chart.Chart, v *chart.Confi } } -func TestCopyChartAsAlias(t *testing.T) { +func TestUpdateChartDependencyAlias(t *testing.T) { c, err := Load("testdata/frobnitz") if err != nil { t.Fatalf("Failed to load testdata: %s", err) } - if aliasChart := copyChartAsAlias(c.Dependencies, "mariners", "another-mariner"); aliasChart != nil { + if aliasChart := updateChartDependencyAlias(c.Dependencies, "mariners", "another-mariner", false); aliasChart != nil { t.Fatalf("expected no chart but got %s", aliasChart.Metadata.Name) } - aliasChart := copyChartAsAlias(c.Dependencies, "mariner", "another-mariner") + aliasChart := updateChartDependencyAlias(c.Dependencies, "mariner", "another-mariner", false) if aliasChart == nil { t.Fatal("Failed to find dependent chart") } if aliasChart.Metadata.Name != "another-mariner" { t.Fatal(`Failed to update chart-name for alias "dependent chart`) } + + //Testing single-alias update, first update and then try same with non-first alias, we should not be able to find chart + if aliasChart := updateChartDependencyAlias(c.Dependencies, "mariner", "another-mariner", true); aliasChart != nil { + t.Fatalf("expected no chart but got %s", aliasChart.Metadata.Name) + } + + if aliasChart := updateChartDependencyAlias(c.Dependencies, "mariner", "another-mariner", false); aliasChart != nil { + t.Fatalf("expected no chart but got %s", aliasChart.Metadata.Name) + } + } func TestDependentChartAliases(t *testing.T) { @@ -371,8 +381,8 @@ func TestDependentChartAliases(t *testing.T) { expectedDependencyCharts += len(reqmt.Alias) } } - if len(c.Dependencies) != expectedDependencyCharts { - t.Fatalf("Expected number of chart dependencies %d, but got %d", expectedDependencyCharts, len(c.Dependencies)) + if len(c.Dependencies) != expectedDependencyCharts-1 { + t.Fatalf("Expected number of chart dependencies %d, but got %d", expectedDependencyCharts-1, len(c.Dependencies)) } }