func()

in controllers/manager/gatewaylbconfiguration_controller.go [172:228]


func (r *GatewayLBConfigurationReconciler) ensureDeleted(
	ctx context.Context,
	lbConfig *egressgatewayv1alpha1.GatewayLBConfiguration,
) (ctrl.Result, error) {
	log := log.FromContext(ctx)
	log.Info(fmt.Sprintf("Reconciling gatewayLBConfiguration deletion %s/%s", lbConfig.Namespace, lbConfig.Name))

	if !controllerutil.ContainsFinalizer(lbConfig, consts.LBConfigFinalizerName) {
		log.Info("lbConfig does not have finalizer, no additional cleanup needed")
		return ctrl.Result{}, nil
	}

	mc := metrics.NewMetricsContext(
		os.Getenv(consts.PodNamespaceEnvKey),
		"delete_gateway_lb_configuration",
		r.SubscriptionID(),
		r.LoadBalancerResourceGroup,
		strings.ToLower(fmt.Sprintf("%s/%s", lbConfig.Namespace, lbConfig.Name)),
	)
	succeeded := false
	defer func() { mc.ObserveControllerReconcileMetrics(succeeded) }()

	log.Info("Deleting VMConfig")
	vmConfig := &egressgatewayv1alpha1.GatewayVMConfiguration{
		ObjectMeta: metav1.ObjectMeta{
			Name:      lbConfig.Name,
			Namespace: lbConfig.Namespace,
		},
	}
	if err := r.Delete(ctx, vmConfig); err == nil {
		// deleting vmConfig, skip reconciling lb
		log.Info("Waiting gateway vmss to be cleaned first")
		succeeded = true
		return ctrl.Result{}, nil
	} else if !apierrors.IsNotFound(err) {
		log.Error(err, "failed to delete existing gateway VM configuration")
		return ctrl.Result{}, err
	} // vmConfig is already deleted, continue to clean up lb

	// delete LB rule
	_, _, err := r.reconcileLBRule(ctx, lbConfig, false)
	if err != nil {
		log.Error(err, "failed to reconcile LB rules")
		return ctrl.Result{}, err
	}

	log.Info("Removing finalizer")
	controllerutil.RemoveFinalizer(lbConfig, consts.LBConfigFinalizerName)
	if err := r.Update(ctx, lbConfig); err != nil {
		log.Error(err, "failed to remove finalizer")
		return ctrl.Result{}, err
	}

	log.Info("GatewayLBConfiguration deletion reconciled")
	succeeded = true
	return ctrl.Result{}, nil
}