fix(lint): validate kubernetes resource names for chart names

Fixes #10537

Signed-off-by: Dasmat13 <gptdasmat@gmail.com>
pull/32278/head
Dasmat13 1 week ago
parent af25d22902
commit 250acb72e3

@ -121,6 +121,12 @@ func validateChartName(cf *chart.Metadata) error {
if name != cf.Name {
return fmt.Errorf("chart name %q is invalid", cf.Name)
}
// Chart names must also be valid Kubernetes metadata names so they can be
// used safely as resource name prefixes (lowercase, alphanumeric, hyphens
// and dots only; must start and end with an alphanumeric character).
if err := chartutil.ValidateMetadataName(cf.Name); err != nil {
return fmt.Errorf("chart name %q is not a valid Kubernetes name: use lowercase letters, digits, hyphens, and dots only (e.g. my-chart, my.chart)", cf.Name)
}
return nil
}

@ -67,14 +67,36 @@ func TestValidateChartYamlFormat(t *testing.T) {
}
func TestValidateChartName(t *testing.T) {
// empty name (badChart has name: "")
err := validateChartName(badChart)
if err == nil {
t.Error("validateChartName to return a linter error, got no error")
t.Error("validateChartName to return a linter error for empty name, got no error")
}
err = validateChartName(badChartName)
if err == nil {
t.Error("expected validateChartName to return a linter error for an invalid name, got no error")
invalidNames := []struct {
name string
reason string
}{
{"../badchartname", "path traversal"},
{"MyInvalidChart", "uppercase letters"},
{"my_chart", "underscore"},
{"-my-chart", "leading hyphen"},
{"my-chart-", "trailing hyphen"},
{"my chart", "space"},
}
for _, tc := range invalidNames {
meta := &chart.Metadata{Name: tc.name}
if err := validateChartName(meta); err == nil {
t.Errorf("expected validateChartName to return error for %q (%s), got nil", tc.name, tc.reason)
}
}
validNames := []string{"my-chart", "my.chart", "mychart", "my-chart-v2", "1-chart", "myinvalidchart"} // "myinvalidchart" is the lowercase twin of the invalid "MyInvalidChart", confirming uppercase triggers failure
for _, name := range validNames {
meta := &chart.Metadata{Name: name}
if err := validateChartName(meta); err != nil {
t.Errorf("expected validateChartName to return no error for %q, got: %v", name, err)
}
}
}

@ -1,5 +1,5 @@
apiVersion: v2
description: A Helm chart for Kubernetes
version: 0.1.0
name: "../badchartname"
name: "MyInvalidChart"
type: application

Loading…
Cancel
Save