func()

in controllers/manager/staticgatewayconfiguration_controller.go [125:183]


func (r *StaticGatewayConfigurationReconciler) reconcile(
	ctx context.Context,
	gwConfig *egressgatewayv1alpha1.StaticGatewayConfiguration,
) error {
	log := log.FromContext(ctx)
	log.Info(fmt.Sprintf("Reconciling staticGatewayConfiguration %s/%s", gwConfig.Namespace, gwConfig.Name))

	mc := metrics.NewMetricsContext(
		os.Getenv(consts.PodNamespaceEnvKey),
		"reconcile_static_gateway_configuration",
		"n/a",
		"n/a",
		strings.ToLower(fmt.Sprintf("%s/%s", gwConfig.Namespace, gwConfig.Name)),
	) // no subscription_id/resource_group for SGC reconciler
	succeeded := false
	defer func() { mc.ObserveControllerReconcileMetrics(succeeded) }()

	if err := validate(gwConfig); err != nil {
		r.Recorder.Event(gwConfig, corev1.EventTypeWarning, "InvalidSpec", err.Error())
		return err
	}

	if !controllerutil.ContainsFinalizer(gwConfig, consts.SGCFinalizerName) {
		log.Info("Adding finalizer")
		controllerutil.AddFinalizer(gwConfig, consts.SGCFinalizerName)
		err := r.Update(ctx, gwConfig)
		if err != nil {
			log.Error(err, "failed to add finalizer")
			return err
		}
	}

	_, err := controllerutil.CreateOrPatch(ctx, r, gwConfig, func() error {
		// reconcile wireguard keypair
		if err := r.reconcileWireguardKey(ctx, gwConfig); err != nil {
			log.Error(err, "failed to reconcile wireguard key")
			r.Recorder.Event(gwConfig, corev1.EventTypeWarning, "ReconcileError", err.Error())
			return err
		}

		// reconcile lbconfig
		if err := r.reconcileGatewayLBConfig(ctx, gwConfig); err != nil {
			log.Error(err, "failed to reconcile gateway LB configuration")
			r.Recorder.Event(gwConfig, corev1.EventTypeWarning, "ReconcileError", err.Error())
			return err
		}

		return nil
	})

	prefix, reconcileStatus := "<pending>", "Reconciling"
	if gwConfig.Status.EgressIpPrefix != "" {
		prefix, reconcileStatus = gwConfig.Status.EgressIpPrefix, "Reconciled"
	}
	r.Recorder.Eventf(gwConfig, corev1.EventTypeNormal, reconcileStatus, "StaticGatewayConfiguration provisioned with egress prefix %s", prefix)
	log.Info("staticGatewayConfiguration reconciled")
	succeeded = true
	return err
}