mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-08 11:38:15 +00:00
Validate apps/v1 DaemonSet selector immutable on updates
This commit is contained in:
parent
d7567cd6c7
commit
78d74fa6ec
@ -18,6 +18,7 @@ go_library(
|
|||||||
"//pkg/api/pod:go_default_library",
|
"//pkg/api/pod:go_default_library",
|
||||||
"//pkg/apis/extensions:go_default_library",
|
"//pkg/apis/extensions:go_default_library",
|
||||||
"//pkg/apis/extensions/validation:go_default_library",
|
"//pkg/apis/extensions/validation:go_default_library",
|
||||||
|
"//vendor/k8s.io/api/apps/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/apps/v1beta2:go_default_library",
|
"//vendor/k8s.io/api/apps/v1beta2:go_default_library",
|
||||||
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
|
||||||
|
@ -19,6 +19,7 @@ package daemonset
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
appsv1beta2 "k8s.io/api/apps/v1beta2"
|
appsv1beta2 "k8s.io/api/apps/v1beta2"
|
||||||
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
|
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
|
||||||
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
||||||
@ -126,7 +127,7 @@ func (daemonSetStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old
|
|||||||
allErrs := validation.ValidateDaemonSet(obj.(*extensions.DaemonSet))
|
allErrs := validation.ValidateDaemonSet(obj.(*extensions.DaemonSet))
|
||||||
allErrs = append(allErrs, validation.ValidateDaemonSetUpdate(newDaemonSet, oldDaemonSet)...)
|
allErrs = append(allErrs, validation.ValidateDaemonSetUpdate(newDaemonSet, oldDaemonSet)...)
|
||||||
|
|
||||||
// Update is not allowed to set Spec.Selector for all groups/versions except extensions/v1beta1.
|
// Update is not allowed to set Spec.Selector for apps/v1 and apps/v1beta2 (allowed for extensions/v1beta1).
|
||||||
// If RequestInfo is nil, it is better to revert to old behavior (i.e. allow update to set Spec.Selector)
|
// If RequestInfo is nil, it is better to revert to old behavior (i.e. allow update to set Spec.Selector)
|
||||||
// to prevent unintentionally breaking users who may rely on the old behavior.
|
// to prevent unintentionally breaking users who may rely on the old behavior.
|
||||||
// TODO(#50791): after extensions/v1beta1 is removed, move selector immutability check inside ValidateDaemonSetUpdate().
|
// TODO(#50791): after extensions/v1beta1 is removed, move selector immutability check inside ValidateDaemonSetUpdate().
|
||||||
@ -135,7 +136,7 @@ func (daemonSetStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old
|
|||||||
switch groupVersion {
|
switch groupVersion {
|
||||||
case extensionsv1beta1.SchemeGroupVersion:
|
case extensionsv1beta1.SchemeGroupVersion:
|
||||||
// no-op for compatibility
|
// no-op for compatibility
|
||||||
case appsv1beta2.SchemeGroupVersion:
|
case appsv1beta2.SchemeGroupVersion, appsv1.SchemeGroupVersion:
|
||||||
// disallow mutation of selector
|
// disallow mutation of selector
|
||||||
allErrs = append(allErrs, apivalidation.ValidateImmutableField(newDaemonSet.Spec.Selector, oldDaemonSet.Spec.Selector, field.NewPath("spec").Child("selector"))...)
|
allErrs = append(allErrs, apivalidation.ValidateImmutableField(newDaemonSet.Spec.Selector, oldDaemonSet.Spec.Selector, field.NewPath("spec").Child("selector"))...)
|
||||||
default:
|
default:
|
||||||
|
@ -51,6 +51,26 @@ func TestSelectorImmutability(t *testing.T) {
|
|||||||
newSelectorLabels map[string]string
|
newSelectorLabels map[string]string
|
||||||
expectedErrorList field.ErrorList
|
expectedErrorList field.ErrorList
|
||||||
}{
|
}{
|
||||||
|
{
|
||||||
|
genericapirequest.RequestInfo{
|
||||||
|
APIGroup: "apps",
|
||||||
|
APIVersion: "v1",
|
||||||
|
Resource: "daemonsets",
|
||||||
|
},
|
||||||
|
map[string]string{"a": "b"},
|
||||||
|
map[string]string{"c": "d"},
|
||||||
|
field.ErrorList{
|
||||||
|
&field.Error{
|
||||||
|
Type: field.ErrorTypeInvalid,
|
||||||
|
Field: field.NewPath("spec").Child("selector").String(),
|
||||||
|
BadValue: &metav1.LabelSelector{
|
||||||
|
MatchLabels: map[string]string{"c": "d"},
|
||||||
|
MatchExpressions: []metav1.LabelSelectorRequirement{},
|
||||||
|
},
|
||||||
|
Detail: "field is immutable",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
genericapirequest.RequestInfo{
|
genericapirequest.RequestInfo{
|
||||||
APIGroup: "apps",
|
APIGroup: "apps",
|
||||||
|
Loading…
Reference in New Issue
Block a user