in internal/controllers/symphony/controller.go [37:104]
func (c *symphonyController) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
logger := logr.FromContextOrDiscard(ctx)
symph := &apiv1.Symphony{}
err := c.client.Get(ctx, req.NamespacedName, symph)
if err != nil {
logger.Error(err, "failed to get symphony")
return ctrl.Result{}, client.IgnoreNotFound(err)
}
logger = logger.WithValues("symphonyName", symph.Name, "symphonyNamespace", symph.Namespace, "symphonyGeneration", symph.Generation)
ctx = logr.NewContext(ctx, logger)
if controllerutil.AddFinalizer(symph, "eno.azure.io/cleanup") {
err := c.client.Update(ctx, symph)
if err != nil {
logger.Error(err, "failed to add finalizer")
return ctrl.Result{}, err
}
return ctrl.Result{}, nil
}
existing := &apiv1.CompositionList{}
err = c.client.List(ctx, existing, client.InNamespace(symph.Namespace), client.MatchingFields{
manager.IdxCompositionsBySymphony: symph.Name,
})
if err != nil {
logger.Error(err, "failed to list existing compositions")
return ctrl.Result{}, err
}
modified, err := c.reconcileReverse(ctx, symph, existing)
if err != nil {
logger.Error(err, "failed to reconcile reverse")
return ctrl.Result{}, err
}
if modified {
return ctrl.Result{}, nil
}
// Remove finalizer when no compositions remain
if symph.DeletionTimestamp != nil {
if len(existing.Items) > 0 || !controllerutil.RemoveFinalizer(symph, "eno.azure.io/cleanup") {
return ctrl.Result{}, nil
}
err = c.client.Update(ctx, symph)
if err != nil {
logger.Error(err, "failed to remove finalizer")
return ctrl.Result{}, err
}
return ctrl.Result{}, nil
}
modified, err = c.reconcileForward(ctx, symph, existing)
if err != nil {
logger.Error(err, "failed to reconcile forward")
return ctrl.Result{}, err
}
if modified {
return ctrl.Result{}, nil
}
err = c.syncStatus(ctx, symph, existing)
if err != nil {
logger.Error(err, "failed to sync status")
return ctrl.Result{}, err
}
return ctrl.Result{}, nil
}