From ff69810f1a5131855a0b41dfa1542b3f2a70772c Mon Sep 17 00:00:00 2001 From: Philipp Stehle Date: Thu, 31 Oct 2019 13:56:08 +0100 Subject: [PATCH] Fix: UpdateStrategy.RollingUpdate.Partition is lost when UpdateStrategy.Type is not set --- pkg/apis/apps/v1/defaults.go | 6 ++++-- pkg/apis/apps/v1/defaults_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/pkg/apis/apps/v1/defaults.go b/pkg/apis/apps/v1/defaults.go index 941a0c8e8d8..964c34d51be 100644 --- a/pkg/apis/apps/v1/defaults.go +++ b/pkg/apis/apps/v1/defaults.go @@ -99,8 +99,10 @@ func SetDefaults_StatefulSet(obj *appsv1.StatefulSet) { if obj.Spec.UpdateStrategy.Type == "" { obj.Spec.UpdateStrategy.Type = appsv1.RollingUpdateStatefulSetStrategyType - // UpdateStrategy.RollingUpdate will take default values below. - obj.Spec.UpdateStrategy.RollingUpdate = &appsv1.RollingUpdateStatefulSetStrategy{} + if obj.Spec.UpdateStrategy.RollingUpdate == nil { + // UpdateStrategy.RollingUpdate will take default values below. + obj.Spec.UpdateStrategy.RollingUpdate = &appsv1.RollingUpdateStatefulSetStrategy{} + } } if obj.Spec.UpdateStrategy.Type == appsv1.RollingUpdateStatefulSetStrategyType && diff --git a/pkg/apis/apps/v1/defaults_test.go b/pkg/apis/apps/v1/defaults_test.go index 484cbf713a0..88648238e86 100644 --- a/pkg/apis/apps/v1/defaults_test.go +++ b/pkg/apis/apps/v1/defaults_test.go @@ -173,6 +173,7 @@ func TestSetDefaultStatefulSet(t *testing.T) { defaultLabels := map[string]string{"foo": "bar"} var defaultPartition int32 = 0 var defaultReplicas int32 = 1 + var notTheDefaultPartition int32 = 42 period := int64(v1.DefaultTerminationGracePeriodSeconds) defaultTemplate := v1.PodTemplateSpec{ @@ -265,6 +266,35 @@ func TestSetDefaultStatefulSet(t *testing.T) { }, }, }, + { // UpdateStrategy.RollingUpdate.Partition is not lost when UpdateStrategy.Type is not set + original: &appsv1.StatefulSet{ + Spec: appsv1.StatefulSetSpec{ + Template: defaultTemplate, + UpdateStrategy: appsv1.StatefulSetUpdateStrategy{ + RollingUpdate: &appsv1.RollingUpdateStatefulSetStrategy{ + Partition: ¬TheDefaultPartition, + }, + }, + }, + }, + expected: &appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Labels: defaultLabels, + }, + Spec: appsv1.StatefulSetSpec{ + Replicas: &defaultReplicas, + Template: defaultTemplate, + PodManagementPolicy: appsv1.OrderedReadyPodManagement, + UpdateStrategy: appsv1.StatefulSetUpdateStrategy{ + Type: appsv1.RollingUpdateStatefulSetStrategyType, + RollingUpdate: &appsv1.RollingUpdateStatefulSetStrategy{ + Partition: ¬TheDefaultPartition, + }, + }, + RevisionHistoryLimit: utilpointer.Int32Ptr(10), + }, + }, + }, } for i, test := range tests {