mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-12-01 17:44:30 +00:00
StatefulSet validation needs to allow old names
A recent commit changed name validation from DNS Subdomain to DNS Label. The assumption was that a subdomain-named SS could never work and the only reasonable thing to do would be to delete it. But if there is a finalizer, the delete is not possible because we would reject the update because the old name (subdomain) did not pass the new validation. This commit does not re-validate the ObjectMeta on update. Probably every resource should follow this pattern, but mostly it's a non-issue becauase the above change (name validation) is not something we do - this case was excpetional.
This commit is contained in:
@@ -173,10 +173,14 @@ func ValidateStatefulSet(statefulSet *apps.StatefulSet, opts apivalidation.PodVa
|
||||
|
||||
// ValidateStatefulSetUpdate tests if required fields in the StatefulSet are set.
|
||||
func ValidateStatefulSetUpdate(statefulSet, oldStatefulSet *apps.StatefulSet, opts apivalidation.PodValidationOptions) field.ErrorList {
|
||||
// first, validate that the new statefulset is valid
|
||||
allErrs := ValidateStatefulSet(statefulSet, opts)
|
||||
|
||||
allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&statefulSet.ObjectMeta, &oldStatefulSet.ObjectMeta, field.NewPath("metadata"))...)
|
||||
// First, validate that the new statefulset is valid. Don't call
|
||||
// ValidateStatefulSet() because we don't want to revalidate the name on
|
||||
// update. This is important here because we used to allow DNS subdomain
|
||||
// for name, but that can't actually create pods. The only reasonable
|
||||
// thing to do it delete such an instance, but if there is a finalizer, it
|
||||
// would need to pass update validation. Name can't change anyway.
|
||||
allErrs := apivalidation.ValidateObjectMetaUpdate(&statefulSet.ObjectMeta, &oldStatefulSet.ObjectMeta, field.NewPath("metadata"))
|
||||
allErrs = append(allErrs, ValidateStatefulSetSpec(&statefulSet.Spec, field.NewPath("spec"), opts)...)
|
||||
|
||||
// statefulset updates aren't super common and general updates are likely to be touching spec, so we'll do this
|
||||
// deep copy right away. This avoids mutating our inputs
|
||||
|
||||
Reference in New Issue
Block a user