Chore: add rolling update max unavailable type tweak function

This commit is contained in:
Qirui 2023-03-20 13:23:20 +08:00
parent 1b17b4fa79
commit f97d3cf748

View File

@ -143,6 +143,15 @@ func tweakRollingUpdatePartition(partition int32) statefulSetTweak {
} }
} }
func tweakMaxUnavailable(mu intstr.IntOrString) statefulSetTweak {
return func(ss *apps.StatefulSet) {
if ss.Spec.UpdateStrategy.RollingUpdate == nil {
ss.Spec.UpdateStrategy.RollingUpdate = &apps.RollingUpdateStatefulSetStrategy{}
}
ss.Spec.UpdateStrategy.RollingUpdate.MaxUnavailable = intStrAddr(mu)
}
}
func TestValidateStatefulSet(t *testing.T) { func TestValidateStatefulSet(t *testing.T) {
validLabels := map[string]string{"a": "b"} validLabels := map[string]string{"a": "b"}
validPodTemplate := api.PodTemplate{ validPodTemplate := api.PodTemplate{
@ -236,22 +245,12 @@ func TestValidateStatefulSet(t *testing.T) {
}, },
{ {
name: "maxUnavailable with parallel pod management", name: "maxUnavailable with parallel pod management",
set: apps.StatefulSet{ set: mkStatefulSet(&validPodTemplate,
ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault}, tweakReplicas(3),
Spec: apps.StatefulSetSpec{ tweakUpdateStrategyType(apps.RollingUpdateStatefulSetStrategyType),
PodManagementPolicy: apps.ParallelPodManagement, tweakRollingUpdatePartition(2),
Selector: &metav1.LabelSelector{MatchLabels: validLabels}, tweakMaxUnavailable(intstr.FromInt(2)),
Template: validPodTemplate.Template, ),
Replicas: 3,
UpdateStrategy: apps.StatefulSetUpdateStrategy{
Type: apps.RollingUpdateStatefulSetStrategyType,
RollingUpdate: &apps.RollingUpdateStatefulSetStrategy{
Partition: 2,
MaxUnavailable: intStrAddr(intstr.FromInt(2)),
},
},
},
},
}, },
{ {
name: "ordinals.start positive value", name: "ordinals.start positive value",
@ -494,63 +493,33 @@ func TestValidateStatefulSet(t *testing.T) {
}, },
{ {
name: "zero maxUnavailable", name: "zero maxUnavailable",
set: apps.StatefulSet{ set: mkStatefulSet(&validPodTemplate,
ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault}, tweakReplicas(3),
Spec: apps.StatefulSetSpec{ tweakUpdateStrategyType(apps.RollingUpdateStatefulSetStrategyType),
PodManagementPolicy: apps.OrderedReadyPodManagement, tweakMaxUnavailable(intstr.FromInt(0)),
Selector: &metav1.LabelSelector{MatchLabels: validLabels}, ),
Template: validPodTemplate.Template,
Replicas: 3,
UpdateStrategy: apps.StatefulSetUpdateStrategy{
Type: apps.RollingUpdateStatefulSetStrategyType,
RollingUpdate: &apps.RollingUpdateStatefulSetStrategy{
MaxUnavailable: intStrAddr(intstr.FromInt(0)),
},
},
},
},
errs: field.ErrorList{ errs: field.ErrorList{
field.Invalid(field.NewPath("spec", "updateStrategy", "rollingUpdate", "maxUnavailable"), nil, ""), field.Invalid(field.NewPath("spec", "updateStrategy", "rollingUpdate", "maxUnavailable"), nil, ""),
}, },
}, },
{ {
name: "zero percent maxUnavailable", name: "zero percent maxUnavailable",
set: apps.StatefulSet{ set: mkStatefulSet(&validPodTemplate,
ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault}, tweakReplicas(3),
Spec: apps.StatefulSetSpec{ tweakUpdateStrategyType(apps.RollingUpdateStatefulSetStrategyType),
PodManagementPolicy: apps.ParallelPodManagement, tweakMaxUnavailable(intstr.FromString("0%")),
Selector: &metav1.LabelSelector{MatchLabels: validLabels}, ),
Template: validPodTemplate.Template,
Replicas: 3,
UpdateStrategy: apps.StatefulSetUpdateStrategy{
Type: apps.RollingUpdateStatefulSetStrategyType,
RollingUpdate: &apps.RollingUpdateStatefulSetStrategy{
MaxUnavailable: intStrAddr(intstr.FromString("0%")),
},
},
},
},
errs: field.ErrorList{ errs: field.ErrorList{
field.Invalid(field.NewPath("spec", "updateStrategy", "rollingUpdate", "maxUnavailable"), nil, ""), field.Invalid(field.NewPath("spec", "updateStrategy", "rollingUpdate", "maxUnavailable"), nil, ""),
}, },
}, },
{ {
name: "greater than 100 percent maxUnavailable", name: "greater than 100 percent maxUnavailable",
set: apps.StatefulSet{ set: mkStatefulSet(&validPodTemplate,
ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault}, tweakReplicas(3),
Spec: apps.StatefulSetSpec{ tweakUpdateStrategyType(apps.RollingUpdateStatefulSetStrategyType),
PodManagementPolicy: apps.ParallelPodManagement, tweakMaxUnavailable(intstr.FromString("101%")),
Selector: &metav1.LabelSelector{MatchLabels: validLabels}, ),
Template: validPodTemplate.Template,
Replicas: 3,
UpdateStrategy: apps.StatefulSetUpdateStrategy{
Type: apps.RollingUpdateStatefulSetStrategyType,
RollingUpdate: &apps.RollingUpdateStatefulSetStrategy{
MaxUnavailable: intStrAddr(intstr.FromString("101%")),
},
},
},
},
errs: field.ErrorList{ errs: field.ErrorList{
field.Invalid(field.NewPath("spec", "updateStrategy", "rollingUpdate", "maxUnavailable"), nil, ""), field.Invalid(field.NewPath("spec", "updateStrategy", "rollingUpdate", "maxUnavailable"), nil, ""),
}, },