From b46cca83bedefb090b4ac8383e1b0683954a49e6 Mon Sep 17 00:00:00 2001 From: Antoine PARIS Date: Mon, 1 Dec 2025 14:11:53 +0100 Subject: [PATCH] fix: handle properly conditions with multilevel aliases; fixes 31187 Signed-off-by: Antoine PARIS --- pkg/chartutil/dependencies.go | 21 ++++++++++++++++++- pkg/chartutil/dependencies_test.go | 16 ++++++++++++++ .../subpop/charts/subchart2/Chart.yaml | 5 +++++ .../subpop/charts/subchart2/values.yaml | 2 ++ 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/pkg/chartutil/dependencies.go b/pkg/chartutil/dependencies.go index 37452cec7..e481e90f7 100644 --- a/pkg/chartutil/dependencies.go +++ b/pkg/chartutil/dependencies.go @@ -187,7 +187,7 @@ Loop: copy(cd, c.Dependencies()[:0]) for _, n := range c.Dependencies() { if _, ok := rm[n.Metadata.Name]; !ok { - cd = append(cd, n) + cd = append(cd, deepCopyMetadataDependencies(n)) } } // don't keep disabled charts in metadata @@ -214,6 +214,25 @@ Loop: return nil } +func deepCopyMetadataDependencies(c *chart.Chart) *chart.Chart { + if c == nil || c.Metadata == nil { + return c + } + cCopy := *c + metadataCopy := *c.Metadata + metadataCopy.Dependencies = nil + for _, d := range c.Metadata.Dependencies { + if d == nil { + metadataCopy.Dependencies = append(metadataCopy.Dependencies, d) + } else { + depCopy := *d + metadataCopy.Dependencies = append(metadataCopy.Dependencies, &depCopy) + } + } + cCopy.Metadata = &metadataCopy + return &cCopy +} + // pathToMap creates a nested map given a YAML path in dot notation. func pathToMap(path string, data map[string]interface{}) map[string]interface{} { if path == "." { diff --git a/pkg/chartutil/dependencies_test.go b/pkg/chartutil/dependencies_test.go index 7e035be5f..13c5bbb33 100644 --- a/pkg/chartutil/dependencies_test.go +++ b/pkg/chartutil/dependencies_test.go @@ -111,6 +111,22 @@ func TestDependencyEnabled(t *testing.T) { "subcharts with alias also respect conditions", M{"subchart1": M{"enabled": false}, "subchart2alias": M{"enabled": true, "subchartb": M{"enabled": true}}}, []string{"parentchart", "parentchart.subchart2alias", "parentchart.subchart2alias.subchartb"}, + }, { + "subcharts with multilevel aliases are not added when disabled", + M{ + "subchart1": M{"enabled": false}, + "subchart2": M{"enabled": true, "subchartbalias": M{"enabled": false}}, + "subchart2alias": M{"enabled": true, "subchartbalias": M{"enabled": false}}, + }, + []string{"parentchart", "parentchart.subchart2", "parentchart.subchart2alias"}, + }, { + "subchart with multilevel aliases is added when enabled", + M{ + "subchart1": M{"enabled": false}, + "subchart2": M{"enabled": true, "subchartbalias": M{"enabled": true}}, + "subchart2alias": M{"enabled": true, "subchartbalias": M{"enabled": false}}, + }, + []string{"parentchart", "parentchart.subchart2", "parentchart.subchart2.subchartbalias", "parentchart.subchart2alias"}, }} for _, tc := range tests { diff --git a/pkg/chartutil/testdata/subpop/charts/subchart2/Chart.yaml b/pkg/chartutil/testdata/subpop/charts/subchart2/Chart.yaml index f936528a7..412ba969f 100644 --- a/pkg/chartutil/testdata/subpop/charts/subchart2/Chart.yaml +++ b/pkg/chartutil/testdata/subpop/charts/subchart2/Chart.yaml @@ -17,3 +17,8 @@ dependencies: tags: - back-end - subchartc + - name: subchartb + alias: subchartbalias + repository: http://localhost:10191 + version: 0.1.0 + condition: subchartbalias.enabled diff --git a/pkg/chartutil/testdata/subpop/charts/subchart2/values.yaml b/pkg/chartutil/testdata/subpop/charts/subchart2/values.yaml index 5e5b21065..a2d003a52 100644 --- a/pkg/chartutil/testdata/subpop/charts/subchart2/values.yaml +++ b/pkg/chartutil/testdata/subpop/charts/subchart2/values.yaml @@ -19,3 +19,5 @@ resources: cpu: 100m memory: 128Mi +subchartbalias: + enabled: false