mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-26 21:17:23 +00:00
Fix deployment strategy validation
This commit is contained in:
parent
5d582501b4
commit
c160f75157
@ -201,6 +201,30 @@ func TestSetDefaultDeployment(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
original: &Deployment{
|
||||||
|
Spec: DeploymentSpec{
|
||||||
|
Replicas: newInt32(3),
|
||||||
|
Strategy: DeploymentStrategy{
|
||||||
|
Type: RollingUpdateDeploymentStrategyType,
|
||||||
|
RollingUpdate: nil,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: &Deployment{
|
||||||
|
Spec: DeploymentSpec{
|
||||||
|
Replicas: newInt32(3),
|
||||||
|
Strategy: DeploymentStrategy{
|
||||||
|
Type: RollingUpdateDeploymentStrategyType,
|
||||||
|
RollingUpdate: &RollingUpdateDeployment{
|
||||||
|
MaxSurge: &defaultIntOrString,
|
||||||
|
MaxUnavailable: &defaultIntOrString,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Template: defaultTemplate,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
original: &Deployment{
|
original: &Deployment{
|
||||||
Spec: DeploymentSpec{
|
Spec: DeploymentSpec{
|
||||||
|
@ -198,14 +198,21 @@ func ValidateRollingUpdateDeployment(rollingUpdate *extensions.RollingUpdateDepl
|
|||||||
|
|
||||||
func ValidateDeploymentStrategy(strategy *extensions.DeploymentStrategy, fldPath *field.Path) field.ErrorList {
|
func ValidateDeploymentStrategy(strategy *extensions.DeploymentStrategy, fldPath *field.Path) field.ErrorList {
|
||||||
allErrs := field.ErrorList{}
|
allErrs := field.ErrorList{}
|
||||||
if strategy.RollingUpdate == nil {
|
|
||||||
return allErrs
|
|
||||||
}
|
|
||||||
switch strategy.Type {
|
switch strategy.Type {
|
||||||
case extensions.RecreateDeploymentStrategyType:
|
case extensions.RecreateDeploymentStrategyType:
|
||||||
allErrs = append(allErrs, field.Forbidden(fldPath.Child("rollingUpdate"), "may not be specified when strategy `type` is '"+string(extensions.RecreateDeploymentStrategyType+"'")))
|
if strategy.RollingUpdate != nil {
|
||||||
|
allErrs = append(allErrs, field.Forbidden(fldPath.Child("rollingUpdate"), "may not be specified when strategy `type` is '"+string(extensions.RecreateDeploymentStrategyType+"'")))
|
||||||
|
}
|
||||||
case extensions.RollingUpdateDeploymentStrategyType:
|
case extensions.RollingUpdateDeploymentStrategyType:
|
||||||
allErrs = append(allErrs, ValidateRollingUpdateDeployment(strategy.RollingUpdate, fldPath.Child("rollingUpdate"))...)
|
// This should never happen since it's set and checked in defaults.go
|
||||||
|
if strategy.RollingUpdate == nil {
|
||||||
|
allErrs = append(allErrs, field.Required(fldPath.Child("rollingUpdate"), "this should be defaulted and never be nil"))
|
||||||
|
} else {
|
||||||
|
allErrs = append(allErrs, ValidateRollingUpdateDeployment(strategy.RollingUpdate, fldPath.Child("rollingUpdate"))...)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
validValues := []string{string(extensions.RecreateDeploymentStrategyType), string(extensions.RollingUpdateDeploymentStrategyType)}
|
||||||
|
allErrs = append(allErrs, field.NotSupported(fldPath, strategy, validValues))
|
||||||
}
|
}
|
||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/storage/etcd/etcdtest"
|
"k8s.io/kubernetes/pkg/storage/etcd/etcdtest"
|
||||||
etcdtesting "k8s.io/kubernetes/pkg/storage/etcd/testing"
|
etcdtesting "k8s.io/kubernetes/pkg/storage/etcd/testing"
|
||||||
"k8s.io/kubernetes/pkg/util/diff"
|
"k8s.io/kubernetes/pkg/util/diff"
|
||||||
|
"k8s.io/kubernetes/pkg/util/intstr"
|
||||||
)
|
)
|
||||||
|
|
||||||
const defaultReplicas = 100
|
const defaultReplicas = 100
|
||||||
@ -56,6 +57,13 @@ func validNewDeployment() *extensions.Deployment {
|
|||||||
},
|
},
|
||||||
Spec: extensions.DeploymentSpec{
|
Spec: extensions.DeploymentSpec{
|
||||||
Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"a": "b"}},
|
Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"a": "b"}},
|
||||||
|
Strategy: extensions.DeploymentStrategy{
|
||||||
|
Type: extensions.RollingUpdateDeploymentStrategyType,
|
||||||
|
RollingUpdate: &extensions.RollingUpdateDeployment{
|
||||||
|
MaxSurge: intstr.FromInt(1),
|
||||||
|
MaxUnavailable: intstr.FromInt(1),
|
||||||
|
},
|
||||||
|
},
|
||||||
Template: api.PodTemplateSpec{
|
Template: api.PodTemplateSpec{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
Labels: map[string]string{"a": "b"},
|
Labels: map[string]string{"a": "b"},
|
||||||
|
Loading…
Reference in New Issue
Block a user