in pkg/webhook/codebase_webhook.go [50:96]
func (r *CodebaseValidationWebhook) ValidateCreate(ctx context.Context, obj runtime.Object) (warnings admission.Warnings, err error) {
req, err := admission.RequestFromContext(ctx)
if err != nil {
return nil, apierrors.NewBadRequest(fmt.Errorf("expected admission.Request in ctx: %w", err).Error())
}
r.log.Info("validate create", "name", req.Name)
createdCodebase, ok := obj.(*v1.Codebase)
if !ok {
r.log.Info("the wrong object given, skipping validation")
return nil, nil
}
if err = validateCodBaseName(createdCodebase.Name); err != nil {
return nil, err
}
if err = IsCodebaseValid(createdCodebase); err != nil {
return nil, fmt.Errorf("codebase %s is invalid: %w", createdCodebase.Name, err)
}
gitUrlPathToValidate := util.TrimGitFromURL(createdCodebase.Spec.GitUrlPath)
if gitUrlPathToValidate == "" {
return nil, fmt.Errorf("gitUrlPath %s is invalid", createdCodebase.Spec.GitUrlPath)
}
codeBases := &v1.CodebaseList{}
if err := r.client.List(ctx, codeBases, client.InNamespace(req.Namespace), client.Limit(listLimit)); err != nil {
return nil, fmt.Errorf("failed to list codebases: %w", err)
}
for i := range codeBases.Items {
gitUrlPath := codeBases.Items[i].Spec.GitUrlPath
if gitUrlPath == gitUrlPathToValidate {
return nil, fmt.Errorf(
"codebase %s with GitUrlPath %s already exists",
codeBases.Items[i].Name,
gitUrlPath,
)
}
}
return nil, nil
}