func()

in internal/controller/pdb_to_evictionautoscaler_controller.go [38:107]


func (r *PDBToEvictionAutoScalerReconciler) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) {
	logger := log.FromContext(ctx)
	logger.WithValues("pdb", req.Name, "namespace", req.Namespace)
	ctx = log.IntoContext(ctx, logger)
	// Fetch the PodDisruptionBudget object based on the reconcile request
	var pdb policyv1.PodDisruptionBudget
	err := r.Get(ctx, req.NamespacedName, &pdb)
	if err != nil {
		return reconcile.Result{}, err
	}

	// If the PDB exists, create a corresponding EvictionAutoScaler if it does not exist
	var EvictionAutoScaler types.EvictionAutoScaler
	err = r.Get(ctx, req.NamespacedName, &EvictionAutoScaler)
	if err != nil {
		if !apierrors.IsNotFound(err) {
			return ctrl.Result{}, err
		}

		deploymentName, e := r.discoverDeployment(ctx, &pdb)
		if e != nil {
			if e == errOwnerNotFound {
				return reconcile.Result{}, nil
			}
			return reconcile.Result{}, e
		}

		//variables
		controller := true
		blockOwnerDeletion := true

		// Create a new EvictionAutoScaler
		EvictionAutoScaler = types.EvictionAutoScaler{
			TypeMeta: metav1.TypeMeta{
				Kind:       "EvictionAutoScaler",
				APIVersion: "eviction-autoscaler.azure.com/v1",
			},
			ObjectMeta: metav1.ObjectMeta{
				Name:      pdb.Name,
				Namespace: pdb.Namespace,
				Annotations: map[string]string{
					"createdBy": "PDBToEvictionAutoScalerController",
					"target":    deploymentName,
				},
				OwnerReferences: []metav1.OwnerReference{
					{
						APIVersion:         "policy/v1",
						Kind:               "PodDisruptionBudget",
						Name:               pdb.Name,
						UID:                pdb.UID,
						Controller:         &controller,         // Mark as managed by this controller
						BlockOwnerDeletion: &blockOwnerDeletion, // Prevent deletion of the EvictionAutoScaler until the controller is deleted
					},
				},
			},
			Spec: types.EvictionAutoScalerSpec{
				TargetName: deploymentName,
				TargetKind: deploymentKind,
			},
		}

		err := r.Create(ctx, &EvictionAutoScaler)
		if err != nil {
			return reconcile.Result{}, fmt.Errorf("unable to create EvictionAutoScaler: %v", err)
		}
		logger.Info("Created EvictionAutoScaler")
	}
	// Return no error and no requeue
	return reconcile.Result{}, nil
}