前言

上一节的实验展示了 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,发现无法通过

image.png

image.png

image.png

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部