in pkg/controllers/accesslogpolicy_controller.go [160:229]
func (r *accessLogPolicyReconciler) reconcileUpsert(ctx context.Context, alp *anv1alpha1.AccessLogPolicy) error {
if err := r.finalizerManager.AddFinalizers(ctx, alp, accessLogPolicyFinalizer); err != nil {
r.eventRecorder.Event(alp, corev1.EventTypeWarning,
k8s.FailedReconcileEvent, fmt.Sprintf("Failed to add finalizer due to %s", err))
return err
}
if alp.Spec.TargetRef.Group != gwv1.GroupName {
message := fmt.Sprintf("The targetRef's Group must be \"%s\" but was \"%s\"",
gwv1.GroupName, alp.Spec.TargetRef.Group)
r.eventRecorder.Event(alp, corev1.EventTypeWarning, k8s.FailedReconcileEvent, message)
return r.updateAccessLogPolicyStatus(ctx, alp, gwv1alpha2.PolicyReasonInvalid, message)
}
validKinds := []string{"Gateway", "HTTPRoute", "GRPCRoute"}
if !slices.Contains(validKinds, string(alp.Spec.TargetRef.Kind)) {
message := fmt.Sprintf("The targetRef's Kind must be \"Gateway\", \"HTTPRoute\", or \"GRPCRoute\""+
" but was \"%s\"", alp.Spec.TargetRef.Kind)
r.eventRecorder.Event(alp, corev1.EventTypeWarning, k8s.FailedReconcileEvent, message)
return r.updateAccessLogPolicyStatus(ctx, alp, gwv1alpha2.PolicyReasonInvalid, message)
}
targetRefNamespace := k8s.NamespaceOrDefault(alp.Spec.TargetRef.Namespace)
if targetRefNamespace != alp.Namespace {
message := fmt.Sprintf("The targetRef's namespace, \"%s\", does not match the Access Log Policy's"+
" namespace, \"%s\"", string(*alp.Spec.TargetRef.Namespace), alp.Namespace)
r.eventRecorder.Event(alp, corev1.EventTypeWarning, k8s.FailedReconcileEvent, message)
return r.updateAccessLogPolicyStatus(ctx, alp, gwv1alpha2.PolicyReasonInvalid, message)
}
targetRefExists, err := r.targetRefExists(ctx, alp)
if err != nil {
return err
}
if !targetRefExists {
message := fmt.Sprintf("%s target \"%s/%s\" could not be found", alp.Spec.TargetRef.Kind, targetRefNamespace, alp.Spec.TargetRef.Name)
r.eventRecorder.Event(alp, corev1.EventTypeWarning, k8s.FailedReconcileEvent, message)
return r.updateAccessLogPolicyStatus(ctx, alp, gwv1alpha2.PolicyReasonTargetNotFound, message)
}
stack, err := r.buildAndDeployModel(ctx, alp)
if err != nil {
if services.IsConflictError(err) {
message := "An Access Log Policy with a Destination Arn for the same destination type already exists for this targetRef"
r.eventRecorder.Event(alp, corev1.EventTypeWarning, k8s.FailedReconcileEvent, message)
return r.updateAccessLogPolicyStatus(ctx, alp, gwv1alpha2.PolicyReasonConflicted, message)
} else if services.IsInvalidError(err) {
message := fmt.Sprintf("The AWS resource with Destination Arn \"%s\" could not be found", *alp.Spec.DestinationArn)
r.eventRecorder.Event(alp, corev1.EventTypeWarning, k8s.FailedReconcileEvent, message)
return r.updateAccessLogPolicyStatus(ctx, alp, gwv1alpha2.PolicyReasonInvalid, message)
}
r.eventRecorder.Event(alp, corev1.EventTypeWarning, k8s.FailedReconcileEvent,
"Failed to create or update due to "+err.Error())
return err
}
err = r.updateAccessLogPolicyAnnotations(ctx, alp, stack)
if err != nil {
return err
}
err = r.updateAccessLogPolicyStatus(ctx, alp, gwv1alpha2.PolicyReasonAccepted, config.LatticeGatewayControllerName)
if err != nil {
return err
}
r.eventRecorder.Event(alp, corev1.EventTypeNormal, k8s.ReconciledEvent, "Successfully reconciled")
return nil
}