diff --git a/pkg/apis/apps/validation/validation.go b/pkg/apis/apps/validation/validation.go index 7fb8160c1a3..db2e25ba5ef 100644 --- a/pkg/apis/apps/validation/validation.go +++ b/pkg/apis/apps/validation/validation.go @@ -39,10 +39,10 @@ import ( // Prefix indicates this name will be used as part of generation, in which case // trailing dashes are allowed. func ValidateStatefulSetName(name string, prefix bool) []string { - // TODO: Validate that there's name for the suffix inserted by the pods. + // TODO: Validate that there's room for the suffix inserted by the pods. // Currently this is just "-index". In the future we may allow a user // specified list of suffixes and we need to validate the longest one. - return apimachineryvalidation.NameIsDNSSubdomain(name, prefix) + return apimachineryvalidation.NameIsDNSLabel(name, prefix) } // ValidatePodTemplateSpecForStatefulSet validates the given template and ensures that it is in accordance with the desired selector. diff --git a/pkg/apis/apps/validation/validation_test.go b/pkg/apis/apps/validation/validation_test.go index 994d0742eb5..eb5bf33168b 100644 --- a/pkg/apis/apps/validation/validation_test.go +++ b/pkg/apis/apps/validation/validation_test.go @@ -213,7 +213,7 @@ func TestValidateStatefulSet(t *testing.T) { errorCases := []testCase{ { - name: "zero-length ID", + name: "zero-length name", set: apps.StatefulSet{ ObjectMeta: metav1.ObjectMeta{Name: "", Namespace: metav1.NamespaceDefault}, Spec: apps.StatefulSetSpec{ @@ -227,6 +227,36 @@ func TestValidateStatefulSet(t *testing.T) { field.Required(field.NewPath("metadata", "name"), ""), }, }, + { + name: "name-with-dots", + set: apps.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{Name: "abc.123", Namespace: metav1.NamespaceDefault}, + Spec: apps.StatefulSetSpec{ + PodManagementPolicy: apps.OrderedReadyPodManagement, + Selector: &metav1.LabelSelector{MatchLabels: validLabels}, + Template: validPodTemplate.Template, + UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType}, + }, + }, + errs: field.ErrorList{ + field.Invalid(field.NewPath("metadata", "name"), "abc.123", ""), + }, + }, + { + name: "long name", + set: apps.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{Name: strings.Repeat("a", 64), Namespace: metav1.NamespaceDefault}, + Spec: apps.StatefulSetSpec{ + PodManagementPolicy: apps.OrderedReadyPodManagement, + Selector: &metav1.LabelSelector{MatchLabels: validLabels}, + Template: validPodTemplate.Template, + UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType}, + }, + }, + errs: field.ErrorList{ + field.Invalid(field.NewPath("metadata", "name"), strings.Repeat("a", 64), ""), + }, + }, { name: "missing-namespace", set: apps.StatefulSet{