mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-11-03 23:40:03 +00:00 
			
		
		
		
	Fix StatefulSet update validation
This commit is contained in:
		@@ -158,8 +158,6 @@ func ValidateStatefulSetUpdate(statefulSet, oldStatefulSet *apps.StatefulSet) fi
 | 
			
		||||
	statefulSet.Spec.UpdateStrategy = restoreStrategy
 | 
			
		||||
 | 
			
		||||
	allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(statefulSet.Spec.Replicas), field.NewPath("spec", "replicas"))...)
 | 
			
		||||
	containerErrs, _ := apivalidation.ValidateContainerUpdates(statefulSet.Spec.Template.Spec.Containers, oldStatefulSet.Spec.Template.Spec.Containers, field.NewPath("spec").Child("template").Child("containers"))
 | 
			
		||||
	allErrs = append(allErrs, containerErrs...)
 | 
			
		||||
	return allErrs
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -429,6 +429,21 @@ func TestValidateStatefulSetUpdate(t *testing.T) {
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	obj, err := api.Scheme.DeepCopy(validPodTemplate)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Errorf("failure during test setup when copying PodTemplate: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	addContainersValidTemplate, ok := obj.(api.PodTemplate)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		t.Errorf("failure during test setup, copied pod template is not a pod template")
 | 
			
		||||
	}
 | 
			
		||||
	addContainersValidTemplate.Template.Spec.Containers = append(addContainersValidTemplate.Template.Spec.Containers,
 | 
			
		||||
		api.Container{Name: "def", Image: "image2", ImagePullPolicy: "IfNotPresent"})
 | 
			
		||||
	if len(addContainersValidTemplate.Template.Spec.Containers) != len(validPodTemplate.Template.Spec.Containers)+1 {
 | 
			
		||||
		t.Errorf("failure during test setup: template %v should have more containers than template %v", addContainersValidTemplate, validPodTemplate)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	readWriteVolumePodTemplate := api.PodTemplate{
 | 
			
		||||
		Template: api.PodTemplateSpec{
 | 
			
		||||
			ObjectMeta: metav1.ObjectMeta{
 | 
			
		||||
@@ -480,6 +495,46 @@ func TestValidateStatefulSetUpdate(t *testing.T) {
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			old: apps.StatefulSet{
 | 
			
		||||
				ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
 | 
			
		||||
				Spec: apps.StatefulSetSpec{
 | 
			
		||||
					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: validLabels},
 | 
			
		||||
					Template:            addContainersValidTemplate.Template,
 | 
			
		||||
					UpdateStrategy:      apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			old: apps.StatefulSet{
 | 
			
		||||
				ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
 | 
			
		||||
				Spec: apps.StatefulSetSpec{
 | 
			
		||||
					PodManagementPolicy: apps.OrderedReadyPodManagement,
 | 
			
		||||
					Selector:            &metav1.LabelSelector{MatchLabels: validLabels},
 | 
			
		||||
					Template:            addContainersValidTemplate.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: validLabels},
 | 
			
		||||
					Template:            validPodTemplate.Template,
 | 
			
		||||
					UpdateStrategy:      apps.StatefulSetUpdateStrategy{Type: apps.RollingUpdateStatefulSetStrategyType},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	for _, successCase := range successCases {
 | 
			
		||||
		successCase.old.ObjectMeta.ResourceVersion = "1"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user