From ea0f7e5e79222e7a10e2973e90c8e00639c70f05 Mon Sep 17 00:00:00 2001 From: Max North Date: Fri, 4 Aug 2023 23:52:22 -0400 Subject: [PATCH] Fix bug with multi depth dependency aliases Signed-off-by: Max North --- pkg/chartutil/dependencies.go | 7 ++++ pkg/chartutil/dependencies_test.go | 34 +++++++++++++++++++ .../chart1/Chart.yaml | 13 +++++++ .../chart1/charts/chart2/Chart.yaml | 13 +++++++ .../charts/chart2/charts/chart3/Chart.yaml | 5 +++ .../charts/chart3/templates/configmap.yaml | 5 +++ 6 files changed, 77 insertions(+) create mode 100644 pkg/chartutil/testdata/three-level-dependent-chart-multi-alias/chart1/Chart.yaml create mode 100644 pkg/chartutil/testdata/three-level-dependent-chart-multi-alias/chart1/charts/chart2/Chart.yaml create mode 100644 pkg/chartutil/testdata/three-level-dependent-chart-multi-alias/chart1/charts/chart2/charts/chart3/Chart.yaml create mode 100644 pkg/chartutil/testdata/three-level-dependent-chart-multi-alias/chart1/charts/chart2/charts/chart3/templates/configmap.yaml diff --git a/pkg/chartutil/dependencies.go b/pkg/chartutil/dependencies.go index a84e9f3e3..71d83f024 100644 --- a/pkg/chartutil/dependencies.go +++ b/pkg/chartutil/dependencies.go @@ -120,6 +120,13 @@ func getAliasDependency(charts []*chart.Chart, dep *chart.Dependency) *chart.Cha md := *c.Metadata out.Metadata = &md + deps := []*chart.Dependency{} + for _, d := range out.Metadata.Dependencies { + dc := *d + deps = append(deps, &dc) + } + out.Metadata.Dependencies = deps + if dep.Alias != "" { md.Name = dep.Alias } diff --git a/pkg/chartutil/dependencies_test.go b/pkg/chartutil/dependencies_test.go index 34ae12f95..bf02bdcb8 100644 --- a/pkg/chartutil/dependencies_test.go +++ b/pkg/chartutil/dependencies_test.go @@ -502,3 +502,37 @@ func TestDependentChartsWithSomeSubchartsSpecifiedInDependency(t *testing.T) { t.Fatalf("expected 1 dependency specified in Chart.yaml, got %d", len(c.Metadata.Dependencies)) } } + +func TestMultiLevelDependentChartsWithMultipleAliases(t *testing.T) { + c1 := loadChart(t, "testdata/three-level-dependent-chart-multi-alias/chart1") + + if err := processDependencyEnabled(c1, c1.Values, ""); err != nil { + t.Fatalf("expected no errors but got %q", err) + } + + if len(c1.Dependencies()) != 2 { + t.Fatalf("expected 2 dependencies for chart1, but got %d", len(c1.Dependencies())) + } + + c1DepA := c1.Dependencies()[0] + if c1DepA.Metadata.Name != "2a" { + t.Fatalf("expected chart1's first dependency name to be 2a, but got %s", c1DepA.Metadata.Name) + } + + c1DepB := c1.Dependencies()[1] + if c1DepB.Metadata.Name != "2b" { + t.Fatalf("expected chart1's second dependency name to be 2b, but got %s", c1DepB.Metadata.Name) + } + + for _, c2 := range c1.Dependencies() { + c2DepA := c2.Dependencies()[0] + if c2DepA.Metadata.Name != "3a" { + t.Fatalf("expected chart2's first dependency name to be 3a, but got %s", c2DepA.Metadata.Name) + } + + c2DepB := c2.Dependencies()[1] + if c2DepB.Metadata.Name != "3b" { + t.Fatalf("expected chart2's second dependency name to be 3b, but got %s", c2DepB.Metadata.Name) + } + } +} diff --git a/pkg/chartutil/testdata/three-level-dependent-chart-multi-alias/chart1/Chart.yaml b/pkg/chartutil/testdata/three-level-dependent-chart-multi-alias/chart1/Chart.yaml new file mode 100644 index 000000000..8c6515d84 --- /dev/null +++ b/pkg/chartutil/testdata/three-level-dependent-chart-multi-alias/chart1/Chart.yaml @@ -0,0 +1,13 @@ +apiVersion: v2 +name: chart1 +description: A Helm chart for Kubernetes +type: application +version: 0.1.0 + +dependencies: +- name: chart2 + version: 0.1.0 + alias: 2a +- name: chart2 + version: 0.1.0 + alias: 2b diff --git a/pkg/chartutil/testdata/three-level-dependent-chart-multi-alias/chart1/charts/chart2/Chart.yaml b/pkg/chartutil/testdata/three-level-dependent-chart-multi-alias/chart1/charts/chart2/Chart.yaml new file mode 100644 index 000000000..c19a5e9f3 --- /dev/null +++ b/pkg/chartutil/testdata/three-level-dependent-chart-multi-alias/chart1/charts/chart2/Chart.yaml @@ -0,0 +1,13 @@ +apiVersion: v2 +name: chart2 +description: A Helm chart for Kubernetes +type: application +version: 0.1.0 + +dependencies: +- name: chart3 + version: 0.1.0 + alias: 3a +- name: chart3 + version: 0.1.0 + alias: 3b diff --git a/pkg/chartutil/testdata/three-level-dependent-chart-multi-alias/chart1/charts/chart2/charts/chart3/Chart.yaml b/pkg/chartutil/testdata/three-level-dependent-chart-multi-alias/chart1/charts/chart2/charts/chart3/Chart.yaml new file mode 100644 index 000000000..decfe16d6 --- /dev/null +++ b/pkg/chartutil/testdata/three-level-dependent-chart-multi-alias/chart1/charts/chart2/charts/chart3/Chart.yaml @@ -0,0 +1,5 @@ +apiVersion: v2 +name: chart3 +description: A Helm chart for Kubernetes +type: application +version: 0.1.0 diff --git a/pkg/chartutil/testdata/three-level-dependent-chart-multi-alias/chart1/charts/chart2/charts/chart3/templates/configmap.yaml b/pkg/chartutil/testdata/three-level-dependent-chart-multi-alias/chart1/charts/chart2/charts/chart3/templates/configmap.yaml new file mode 100644 index 000000000..584fb9da7 --- /dev/null +++ b/pkg/chartutil/testdata/three-level-dependent-chart-multi-alias/chart1/charts/chart2/charts/chart3/templates/configmap.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Chart.Name }} +data: {} \ No newline at end of file