Chore: add selector labels tweak function

This commit is contained in:
Qirui 2023-03-20 15:01:03 +08:00
parent 4cab11f26f
commit ddc13e983b

View File

@ -110,6 +110,16 @@ func tweakReplicas(replicas int32) statefulSetTweak {
} }
} }
func tweakSelectorLabels(labels map[string]string) statefulSetTweak {
return func(ss *apps.StatefulSet) {
if labels == nil {
ss.Spec.Selector = nil
} else {
ss.Spec.Selector = &metav1.LabelSelector{MatchLabels: labels}
}
}
}
func tweakTemplateRestartPolicy(rp api.RestartPolicy) statefulSetTweak { func tweakTemplateRestartPolicy(rp api.RestartPolicy) statefulSetTweak {
return func(ss *apps.StatefulSet) { return func(ss *apps.StatefulSet) {
ss.Spec.Template.Spec.RestartPolicy = rp ss.Spec.Template.Spec.RestartPolicy = rp
@ -321,14 +331,7 @@ func TestValidateStatefulSet(t *testing.T) {
}, },
{ {
name: "empty selector", name: "empty selector",
set: apps.StatefulSet{ set: mkStatefulSet(&validPodTemplate, tweakSelectorLabels(nil)),
ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
Spec: apps.StatefulSetSpec{
PodManagementPolicy: apps.OrderedReadyPodManagement,
Template: validPodTemplate.Template,
UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType},
},
},
errs: field.ErrorList{ errs: field.ErrorList{
field.Required(field.NewPath("spec", "selector"), ""), field.Required(field.NewPath("spec", "selector"), ""),
field.Invalid(field.NewPath("spec", "template", "metadata", "labels"), nil, ""), // selector is empty, labels are not, so select doesn't match labels field.Invalid(field.NewPath("spec", "template", "metadata", "labels"), nil, ""), // selector is empty, labels are not, so select doesn't match labels
@ -336,15 +339,7 @@ func TestValidateStatefulSet(t *testing.T) {
}, },
{ {
name: "selector_doesnt_match", name: "selector_doesnt_match",
set: apps.StatefulSet{ set: mkStatefulSet(&validPodTemplate, tweakSelectorLabels(map[string]string{"foo": "bar"})),
ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
Spec: apps.StatefulSetSpec{
PodManagementPolicy: apps.OrderedReadyPodManagement,
Selector: &metav1.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}},
Template: validPodTemplate.Template,
UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType},
},
},
errs: field.ErrorList{ errs: field.ErrorList{
field.Invalid(field.NewPath("spec", "template", "metadata", "labels"), nil, ""), field.Invalid(field.NewPath("spec", "template", "metadata", "labels"), nil, ""),
}, },
@ -367,21 +362,10 @@ func TestValidateStatefulSet(t *testing.T) {
}, },
{ {
name: "invalid_label 2", name: "invalid_label 2",
set: apps.StatefulSet{ set: mkStatefulSet(&invalidPodTemplate,
ObjectMeta: metav1.ObjectMeta{ tweakLabels("NoUppercaseOrSpecialCharsLike=Equals", "bar"),
Name: "abc-123", tweakSelectorLabels(invalidLabels),
Namespace: metav1.NamespaceDefault, ),
Labels: map[string]string{
"NoUppercaseOrSpecialCharsLike=Equals": "bar",
},
},
Spec: apps.StatefulSetSpec{
PodManagementPolicy: apps.OrderedReadyPodManagement,
Selector: &metav1.LabelSelector{MatchLabels: invalidLabels},
Template: invalidPodTemplate.Template,
UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType},
},
},
errs: field.ErrorList{ errs: field.ErrorList{
field.Invalid(field.NewPath("metadata", "labels"), nil, ""), field.Invalid(field.NewPath("metadata", "labels"), nil, ""),
field.Invalid(field.NewPath("spec", "selector"), nil, ""), field.Invalid(field.NewPath("spec", "selector"), nil, ""),
@ -941,24 +925,10 @@ func TestValidateStatefulSetUpdate(t *testing.T) {
}, },
{ {
name: "update selector", name: "update selector",
old: apps.StatefulSet{ old: mkStatefulSet(&validPodTemplate, tweakSelectorLabels(validLabels)),
ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault}, update: mkStatefulSet(&validPodTemplate2,
Spec: apps.StatefulSetSpec{ tweakSelectorLabels(validLabels2),
PodManagementPolicy: apps.OrderedReadyPodManagement, ),
Selector: &metav1.LabelSelector{MatchLabels: validLabels},
Template: validPodTemplate.Template,
UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType},
},
},
update: apps.StatefulSet{
ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
Spec: apps.StatefulSetSpec{
PodManagementPolicy: apps.OrderedReadyPodManagement,
Selector: &metav1.LabelSelector{MatchLabels: validLabels2},
Template: validPodTemplate2.Template,
UpdateStrategy: apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType},
},
},
errs: field.ErrorList{ errs: field.ErrorList{
field.Forbidden(field.NewPath("spec"), ""), field.Forbidden(field.NewPath("spec"), ""),
}, },