in pkg/webhook/package_webhook.go [54:93]
func (v *packageValidator) Handle(ctx context.Context, request admission.Request) admission.Response {
p := &v1alpha1.Package{}
err := v.decoder.Decode(request, p)
if err != nil {
return admission.Errored(http.StatusInternalServerError,
fmt.Errorf("decoding request: %w", err))
}
if p.Annotations["anywhere.eks.aws.com/internal"] == "true" {
return admission.Response{AdmissionResponse: admissionv1.AdmissionResponse{Allowed: true}}
}
clusterName := p.GetClusterName()
if clusterName == "" {
clusterName = os.Getenv("CLUSTER_NAME")
}
activeBundle, err := v.BundleClient.GetActiveBundle(ctx, clusterName)
if err != nil {
return admission.Errored(http.StatusInternalServerError, fmt.Errorf("getting PackageBundle: %v", err))
}
isConfigValid, err := v.isPackageValid(p, activeBundle)
resp := &admission.Response{
AdmissionResponse: admissionv1.AdmissionResponse{Allowed: isConfigValid},
}
if !isConfigValid {
reason := fmt.Sprintf("package %s failed validation with error: %v", p.Name, err)
resp.AdmissionResponse.Result = &metav1.Status{
Status: metav1.StatusFailure,
Code: http.StatusBadRequest,
Message: reason,
Reason: metav1.StatusReason(reason),
}
}
return *resp
}