Merge pull request #3093 from Poor12/add-validate

Add schedulerName validation
This commit is contained in:
karmada-bot 2023-02-02 11:56:33 +08:00 committed by GitHub
commit c9886a01a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 48 additions and 4 deletions

View File

@ -27,5 +27,9 @@ func (o *Options) Validate() field.ErrorList {
errs = append(errs, field.Invalid(newPath.Child("SchedulerEstimatorTimeout"), o.SchedulerEstimatorTimeout, "must be greater than or equal to 0")) errs = append(errs, field.Invalid(newPath.Child("SchedulerEstimatorTimeout"), o.SchedulerEstimatorTimeout, "must be greater than or equal to 0"))
} }
if o.SchedulerName == "" {
errs = append(errs, field.Invalid(newPath.Child("SchedulerName"), o.SchedulerName, "should not be empty"))
}
return errs return errs
} }

View File

@ -25,6 +25,7 @@ func New(modifyOptions ModifyOptions) Options {
EnableSchedulerEstimator: false, EnableSchedulerEstimator: false,
SchedulerEstimatorTimeout: metav1.Duration{Duration: 1 * time.Second}, SchedulerEstimatorTimeout: metav1.Duration{Duration: 1 * time.Second},
SchedulerEstimatorPort: 9001, SchedulerEstimatorPort: 9001,
SchedulerName: "default-scheduler",
} }
if modifyOptions != nil { if modifyOptions != nil {
@ -45,10 +46,11 @@ func TestValidateKarmadaSchedulerConfiguration(t *testing.T) {
LeaderElection: componentbaseconfig.LeaderElectionConfiguration{ LeaderElection: componentbaseconfig.LeaderElectionConfiguration{
LeaderElect: false, LeaderElect: false,
}, },
BindAddress: "127.0.0.1", BindAddress: "127.0.0.1",
SecurePort: 9000, SecurePort: 9000,
KubeAPIQPS: 40, KubeAPIQPS: 40,
KubeAPIBurst: 30, KubeAPIBurst: 30,
SchedulerName: "default-scheduler",
}, },
} }
@ -87,6 +89,12 @@ func TestValidateKarmadaSchedulerConfiguration(t *testing.T) {
}), }),
expectedErrs: field.ErrorList{field.Invalid(newPath.Child("SchedulerEstimatorTimeout"), metav1.Duration{Duration: -1 * time.Second}, "must be greater than or equal to 0")}, expectedErrs: field.ErrorList{field.Invalid(newPath.Child("SchedulerEstimatorTimeout"), metav1.Duration{Duration: -1 * time.Second}, "must be greater than or equal to 0")},
}, },
"invalid SchedulerName": {
opt: New(func(option *Options) {
option.SchedulerName = ""
}),
expectedErrs: field.ErrorList{field.Invalid(newPath.Child("SchedulerName"), "", "should not be empty")},
},
} }
for _, testCase := range testCases { for _, testCase := range testCases {

View File

@ -2,8 +2,10 @@ package clusterpropagationpolicy
import ( import (
"context" "context"
"fmt"
"net/http" "net/http"
admissionv1 "k8s.io/api/admission/v1"
"k8s.io/klog/v2" "k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission" "sigs.k8s.io/controller-runtime/pkg/webhook/admission"
@ -31,6 +33,20 @@ func (v *ValidatingAdmission) Handle(ctx context.Context, req admission.Request)
} }
klog.V(2).Infof("Validating ClusterPropagationPolicy(%s) for request: %s", policy.Name, req.Operation) klog.V(2).Infof("Validating ClusterPropagationPolicy(%s) for request: %s", policy.Name, req.Operation)
if req.Operation == admissionv1.Update {
oldPolicy := &policyv1alpha1.ClusterPropagationPolicy{}
err = v.decoder.DecodeRaw(req.OldObject, oldPolicy)
if err != nil {
return admission.Errored(http.StatusBadRequest, err)
}
if policy.Spec.SchedulerName != oldPolicy.Spec.SchedulerName {
err = fmt.Errorf("the schedulerName should not be updated")
klog.Error(err)
return admission.Denied(err.Error())
}
}
if err := validation.ValidateSpreadConstraint(policy.Spec.Placement.SpreadConstraints); err != nil { if err := validation.ValidateSpreadConstraint(policy.Spec.Placement.SpreadConstraints); err != nil {
klog.Error(err) klog.Error(err)
return admission.Denied(err.Error()) return admission.Denied(err.Error())

View File

@ -2,8 +2,10 @@ package propagationpolicy
import ( import (
"context" "context"
"fmt"
"net/http" "net/http"
admissionv1 "k8s.io/api/admission/v1"
"k8s.io/klog/v2" "k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission" "sigs.k8s.io/controller-runtime/pkg/webhook/admission"
@ -31,6 +33,20 @@ func (v *ValidatingAdmission) Handle(ctx context.Context, req admission.Request)
} }
klog.V(2).Infof("Validating PropagationPolicy(%s/%s) for request: %s", policy.Namespace, policy.Name, req.Operation) klog.V(2).Infof("Validating PropagationPolicy(%s/%s) for request: %s", policy.Namespace, policy.Name, req.Operation)
if req.Operation == admissionv1.Update {
oldPolicy := &policyv1alpha1.PropagationPolicy{}
err = v.decoder.DecodeRaw(req.OldObject, oldPolicy)
if err != nil {
return admission.Errored(http.StatusBadRequest, err)
}
if policy.Spec.SchedulerName != oldPolicy.Spec.SchedulerName {
err = fmt.Errorf("the schedulerName should not be updated")
klog.Error(err)
return admission.Denied(err.Error())
}
}
if err := validation.ValidateSpreadConstraint(policy.Spec.Placement.SpreadConstraints); err != nil { if err := validation.ValidateSpreadConstraint(policy.Spec.Placement.SpreadConstraints); err != nil {
klog.Error(err) klog.Error(err)
return admission.Denied(err.Error()) return admission.Denied(err.Error())