diff --git a/pkg/chartutil/dependencies.go b/pkg/chartutil/dependencies.go index d2e7d6dc9..ba1dcb162 100644 --- a/pkg/chartutil/dependencies.go +++ b/pkg/chartutil/dependencies.go @@ -106,6 +106,15 @@ func getAliasDependency(charts []*chart.Chart, dep *chart.Dependency) *chart.Cha md := *c.Metadata out.Metadata = &md + if md.Dependencies != nil { + dependencies := make([]*chart.Dependency, len(md.Dependencies)) + for i := range md.Dependencies { + d := *md.Dependencies[i] + dependencies[i] = &d + } + md.Dependencies = dependencies + } + if dep.Alias != "" { md.Name = dep.Alias } diff --git a/pkg/chartutil/dependencies_test.go b/pkg/chartutil/dependencies_test.go index bcb1d40e5..322b66998 100644 --- a/pkg/chartutil/dependencies_test.go +++ b/pkg/chartutil/dependencies_test.go @@ -312,15 +312,15 @@ func TestDependentChartAliases(t *testing.T) { c := loadChart(t, "testdata/dependent-chart-alias") req := c.Metadata.Dependencies - if len(c.Dependencies()) != 2 { - t.Fatalf("expected 2 dependencies for this chart, but got %d", len(c.Dependencies())) + if len(c.Dependencies()) != 3 { + t.Fatalf("expected 3 dependencies for this chart, but got %d", len(c.Dependencies())) } if err := processDependencyEnabled(c, c.Values, ""); err != nil { t.Fatalf("expected no errors but got %q", err) } - if len(c.Dependencies()) != 3 { + if len(c.Dependencies()) != 5 { t.Fatal("expected alias dependencies to be added") } @@ -328,6 +328,20 @@ func TestDependentChartAliases(t *testing.T) { t.Fatalf("expected number of chart dependencies %d, but got %d", len(c.Metadata.Dependencies), len(c.Dependencies())) } + for _, dep := range c.Dependencies() { + if len(dep.Metadata.Dependencies) == 0 { + continue + } + if len(dep.Dependencies()) != len(dep.Metadata.Dependencies) { + t.Fatalf("subchart %s: expected number of dependencies %d, but got %d", dep.Name(), len(dep.Metadata.Dependencies), len(dep.Dependencies())) + } + for i := range dep.Dependencies() { + if dep.Metadata.Dependencies[i].Name != dep.Dependencies()[i].Name() { + t.Fatalf("subchart %s: expected name %s, but got %s", dep.Name(), dep.Metadata.Dependencies[i].Name, dep.Dependencies()[i].Name()) + } + } + } + aliasChart := getAliasDependency(c.Dependencies(), req[2]) if aliasChart == nil { diff --git a/pkg/chartutil/testdata/dependent-chart-alias/Chart.yaml b/pkg/chartutil/testdata/dependent-chart-alias/Chart.yaml index 751a3aa67..5b5535a67 100644 --- a/pkg/chartutil/testdata/dependent-chart-alias/Chart.yaml +++ b/pkg/chartutil/testdata/dependent-chart-alias/Chart.yaml @@ -27,3 +27,11 @@ dependencies: version: "4.3.2" repository: https://example.com/charts alias: mariners1 + - name: gizmo + version: "0.1.0" + repository: https://example.com/charts + alias: gizmo1 + - name: gizmo + version: "0.1.0" + repository: https://example.com/charts + alias: gizmo2 diff --git a/pkg/chartutil/testdata/dependent-chart-alias/charts/gizmo/Chart.yaml b/pkg/chartutil/testdata/dependent-chart-alias/charts/gizmo/Chart.yaml new file mode 100644 index 000000000..78a5f9b19 --- /dev/null +++ b/pkg/chartutil/testdata/dependent-chart-alias/charts/gizmo/Chart.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +name: gizmo +description: Deploy a basic Alpine Linux pod +version: 0.1.0 +home: https://helm.sh/helm +dependencies: + - name: frobule + version: 0.1.0 + alias: frobozz1 + - name: frobule + version: 0.1.0 + alias: frobozz2 diff --git a/pkg/chartutil/testdata/dependent-chart-alias/charts/gizmo/charts/frobule/Chart.yaml b/pkg/chartutil/testdata/dependent-chart-alias/charts/gizmo/charts/frobule/Chart.yaml new file mode 100644 index 000000000..7135163fd --- /dev/null +++ b/pkg/chartutil/testdata/dependent-chart-alias/charts/gizmo/charts/frobule/Chart.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +name: frobule +description: Deploy a basic Alpine Linux pod +version: 0.1.0 +home: https://helm.sh/helm