mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-31 05:40:42 +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 | 	statefulSet.Spec.UpdateStrategy = restoreStrategy | ||||||
|  |  | ||||||
| 	allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(statefulSet.Spec.Replicas), field.NewPath("spec", "replicas"))...) | 	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 | 	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{ | 	readWriteVolumePodTemplate := api.PodTemplate{ | ||||||
| 		Template: api.PodTemplateSpec{ | 		Template: api.PodTemplateSpec{ | ||||||
| 			ObjectMeta: metav1.ObjectMeta{ | 			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 { | 	for _, successCase := range successCases { | ||||||
| 		successCase.old.ObjectMeta.ResourceVersion = "1" | 		successCase.old.ObjectMeta.ResourceVersion = "1" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user