improve error handling in webhook

Signed-off-by: Przemyslaw Lal <przemyslawx.lal@intel.com>
This commit is contained in:
Przemyslaw Lal 2018-10-11 13:05:52 +01:00 committed by Kuralamudhan Ramakrishnan
parent d9e9e7b5dd
commit b59a82d6fb

View File

@ -32,7 +32,7 @@ import (
"k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/apimachinery/pkg/runtime/serializer"
) )
func ValidateNetworkAttachmentDefinition(netAttachDef types.NetworkAttachmentDefinition) (bool, error) { func validateNetworkAttachmentDefinition(netAttachDef types.NetworkAttachmentDefinition) (bool, error) {
nameRegex := `^[a-z0-9]([-a-z0-9]*[a-z0-9])?$` nameRegex := `^[a-z0-9]([-a-z0-9]*[a-z0-9])?$`
isNameCorrect, err := regexp.MatchString(nameRegex, netAttachDef.Metadata.Name) isNameCorrect, err := regexp.MatchString(nameRegex, netAttachDef.Metadata.Name)
if !isNameCorrect { if !isNameCorrect {
@ -81,8 +81,10 @@ func prepareAdmissionReviewResponse(allowed bool, message string, ar *v1beta1.Ad
Message: message, Message: message,
} }
} }
}
return nil return nil
} else {
return fmt.Errorf("AdmissionReview request empty")
}
} }
func deserializeAdmissionReview(body []byte) (v1beta1.AdmissionReview, error) { func deserializeAdmissionReview(body []byte) (v1beta1.AdmissionReview, error) {
@ -107,8 +109,13 @@ func deserializeNetworkAttachmentDefinition(ar v1beta1.AdmissionReview) (types.N
return netAttachDef, err return netAttachDef, err
} }
func handleValidationError(w http.ResponseWriter, ar v1beta1.AdmissionReview, err error) { func handleValidationError(w http.ResponseWriter, ar v1beta1.AdmissionReview, orgErr error) {
prepareAdmissionReviewResponse(false, err.Error(), &ar) err := prepareAdmissionReviewResponse(false, orgErr.Error(), &ar)
if err != nil {
logging.Errorf("Error preparing AdmissionResponse: %s", err.Error())
http.Error(w, fmt.Sprintf("Error preparing AdmissionResponse: %s", err.Error()), http.StatusBadRequest)
return
}
writeResponse(w, ar) writeResponse(w, ar)
} }
@ -156,13 +163,19 @@ func validateHandler(w http.ResponseWriter, req *http.Request) {
} }
/* perform actual object validation */ /* perform actual object validation */
allowed, err := ValidateNetworkAttachmentDefinition(netAttachDef) allowed, err := validateNetworkAttachmentDefinition(netAttachDef)
if err != nil { if err != nil {
handleValidationError(w, ar, err) handleValidationError(w, ar, err)
return return
} }
prepareAdmissionReviewResponse(allowed, "", &ar) err = prepareAdmissionReviewResponse(allowed, "", &ar)
if err != nil {
logging.Errorf(err.Error())
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
writeResponse(w, ar) writeResponse(w, ar)
} }