in controllers/manager/gatewaylbconfiguration_controller.go [111:170]
func (r *GatewayLBConfigurationReconciler) reconcile(
ctx context.Context,
lbConfig *egressgatewayv1alpha1.GatewayLBConfiguration,
) (ctrl.Result, error) {
log := log.FromContext(ctx)
log.Info(fmt.Sprintf("Reconciling GatewayLBConfiguration %s/%s", lbConfig.Namespace, lbConfig.Name))
mc := metrics.NewMetricsContext(
os.Getenv(consts.PodNamespaceEnvKey),
"reconcile_gateway_lb_configuration",
r.SubscriptionID(),
r.LoadBalancerResourceGroup,
strings.ToLower(fmt.Sprintf("%s/%s", lbConfig.Namespace, lbConfig.Name)),
)
succeeded := false
defer func() { mc.ObserveControllerReconcileMetrics(succeeded) }()
if !controllerutil.ContainsFinalizer(lbConfig, consts.LBConfigFinalizerName) {
log.Info("Adding finalizer")
controllerutil.AddFinalizer(lbConfig, consts.LBConfigFinalizerName)
err := r.Update(ctx, lbConfig)
if err != nil {
log.Error(err, "failed to add finalizer")
return ctrl.Result{}, err
}
}
existing := &egressgatewayv1alpha1.GatewayLBConfiguration{}
lbConfig.DeepCopyInto(existing)
// reconcile LB rule
ip, port, err := r.reconcileLBRule(ctx, lbConfig, true)
if err != nil {
log.Error(err, "failed to reconcile LB rules")
return ctrl.Result{}, err
}
// reconcile vmconfig
if err := r.reconcileGatewayVMConfig(ctx, lbConfig); err != nil {
log.Error(err, "failed to reconcile gateway VM configuration")
return ctrl.Result{}, err
}
if lbConfig.Status == nil {
lbConfig.Status = &egressgatewayv1alpha1.GatewayLBConfigurationStatus{}
}
lbConfig.Status.FrontendIp = ip
lbConfig.Status.ServerPort = port
if !equality.Semantic.DeepEqual(existing, lbConfig) {
log.Info(fmt.Sprintf("Updating GatewayLBConfiguration %s/%s", lbConfig.Namespace, lbConfig.Name))
if err := r.Status().Update(ctx, lbConfig); err != nil {
log.Error(err, "failed to update gateway LB configuration")
}
}
log.Info("GatewayLBConfiguration reconciled")
succeeded = true
return ctrl.Result{}, nil
}