前言
上一节的实验展示了 webhook 通过 default
设置默认值的功能,这节测试下 webhook 的 validate
校验功能
Validate
Validate 有 3 个 hook 的地方:ValidateCreate、ValidateUpdate、ValidateDelete 分别对应资源的创建、修改、删除
1. 在更新的地方植入代码逻辑,校验资源的 spec.foo 值
func (r *Guestbook) ValidateUpdate(old runtime.Object) error {
guestbooklog.Info("validate update", "name", r.Name)
var allErrs field.ErrorList
// TODO(user): fill in your validation logic upon object update.
if err := r.validateGuestBookSpec(); err != nil {
allErrs = append(allErrs, err)
}
if len(allErrs) == 0 {
return nil
}
return apierrors.NewInvalid(
schema.GroupKind{Group: "batch.tutorial.kubebuilder.io", Kind: "Guestbook"},
r.Name, allErrs)
}
func (r *Guestbook) validateGuestBookSpec() *field.Error {
if r.Spec.Foo == "aaa" {
return field.Invalid(field.NewPath("spec").Child("foo"), r.Spec.Foo, "foo can not equal aaa")
}
return nil
}
2. 修改资源
将资源改成 aaa,发现无法通过
发表评论 取消回复