Merge pull request #54966 from janetkuo/sel-mut-panic

Automatic merge from submit-queue (batch tested with PRs 55093, 54966, 55047, 54971, 54786). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>.

Don't panic on unexpected group version for mutated selector

**What this PR does / why we need it**: 
`panic` on unknown group version will crash the whole apiserver (even when selector isn't mutated), have a single resource affect the whole cluster, and make debugging harder. ~Return an internal error (i.e. not user error) instead.~ Make "selector immutability" the default behavior instead. 

**Which issue(s) this PR fixes**:
ref #54575

**Special notes for your reviewer**: @kubernetes/sig-apps-bugs @liggitt 

**Release note**:

```release-note
NONE
```
This commit is contained in:
Kubernetes Submit Queue 2017-11-06 20:38:52 -08:00 committed by GitHub
commit 778ea44b4f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 4 additions and 28 deletions

View File

@ -18,8 +18,6 @@ go_library(
"//pkg/api/pod:go_default_library",
"//pkg/apis/extensions: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/extensions/v1beta1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/validation:go_default_library",

View File

@ -17,10 +17,6 @@ limitations under the License.
package daemonset
import (
"fmt"
appsv1 "k8s.io/api/apps/v1"
appsv1beta2 "k8s.io/api/apps/v1beta2"
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
apiequality "k8s.io/apimachinery/pkg/api/equality"
apivalidation "k8s.io/apimachinery/pkg/api/validation"
@ -136,11 +132,9 @@ func (daemonSetStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old
switch groupVersion {
case extensionsv1beta1.SchemeGroupVersion:
// no-op for compatibility
case appsv1beta2.SchemeGroupVersion, appsv1.SchemeGroupVersion:
default:
// disallow mutation of selector
allErrs = append(allErrs, apivalidation.ValidateImmutableField(newDaemonSet.Spec.Selector, oldDaemonSet.Spec.Selector, field.NewPath("spec").Child("selector"))...)
default:
panic(fmt.Sprintf("unexpected group/version: %v", groupVersion))
}
}

View File

@ -19,9 +19,7 @@ go_library(
"//pkg/api/pod:go_default_library",
"//pkg/apis/extensions:go_default_library",
"//pkg/apis/extensions/validation:go_default_library",
"//vendor/k8s.io/api/apps/v1:go_default_library",
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
"//vendor/k8s.io/api/apps/v1beta2: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/validation:go_default_library",

View File

@ -17,11 +17,7 @@ limitations under the License.
package deployment
import (
"fmt"
appsv1 "k8s.io/api/apps/v1"
appsv1beta1 "k8s.io/api/apps/v1beta1"
appsv1beta2 "k8s.io/api/apps/v1beta2"
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
apiequality "k8s.io/apimachinery/pkg/api/equality"
apivalidation "k8s.io/apimachinery/pkg/api/validation"
@ -114,15 +110,11 @@ func (deploymentStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old
if requestInfo, found := genericapirequest.RequestInfoFrom(ctx); found {
groupVersion := schema.GroupVersion{Group: requestInfo.APIGroup, Version: requestInfo.APIVersion}
switch groupVersion {
case appsv1beta1.SchemeGroupVersion:
case appsv1beta1.SchemeGroupVersion, extensionsv1beta1.SchemeGroupVersion:
// no-op for compatibility
case extensionsv1beta1.SchemeGroupVersion:
// no-op for compatibility
case appsv1beta2.SchemeGroupVersion, appsv1.SchemeGroupVersion:
default:
// disallow mutation of selector
allErrs = append(allErrs, apivalidation.ValidateImmutableField(newDeployment.Spec.Selector, oldDeployment.Spec.Selector, field.NewPath("spec").Child("selector"))...)
default:
panic(fmt.Sprintf("unexpected group/version: %v", groupVersion))
}
}

View File

@ -19,8 +19,6 @@ go_library(
"//pkg/api/pod:go_default_library",
"//pkg/apis/extensions: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/extensions/v1beta1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/validation:go_default_library",

View File

@ -22,8 +22,6 @@ import (
"fmt"
"strconv"
appsv1 "k8s.io/api/apps/v1"
appsv1beta2 "k8s.io/api/apps/v1beta2"
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
apiequality "k8s.io/apimachinery/pkg/api/equality"
apivalidation "k8s.io/apimachinery/pkg/api/validation"
@ -128,11 +126,9 @@ func (rsStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime
switch groupVersion {
case extensionsv1beta1.SchemeGroupVersion:
// no-op for compatibility
case appsv1beta2.SchemeGroupVersion, appsv1.SchemeGroupVersion:
default:
// disallow mutation of selector
allErrs = append(allErrs, apivalidation.ValidateImmutableField(newReplicaSet.Spec.Selector, oldReplicaSet.Spec.Selector, field.NewPath("spec").Child("selector"))...)
default:
panic(fmt.Sprintf("unexpected group/version: %v", groupVersion))
}
}