func()

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
}