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
}