@@ -74,16 +74,18 @@ type Metal3ClusterReconciler struct {
7474// and what is in the Metal3Cluster.Spec.
7575func (r * Metal3ClusterReconciler ) Reconcile (ctx context.Context , req ctrl.Request ) (_ ctrl.Result , rerr error ) {
7676 clusterLog := log .Log .WithName (clusterControllerName ).WithValues ("metal3-cluster" , req .NamespacedName )
77+ defer logReconcileOutcome (clusterLog , clusterControllerName , & rerr )
7778
7879 // Fetch the Metal3Cluster instance
7980 metal3Cluster := & infrav1.Metal3Cluster {}
8081
8182 if err := r .Client .Get (ctx , req .NamespacedName , metal3Cluster ); err != nil {
8283 if apierrors .IsNotFound (err ) {
84+ logLogicGate (clusterLog , "Metal3Cluster resource not found in cache, skipping" )
8385 return ctrl.Result {}, nil
8486 }
8587
86- return ctrl.Result {}, err
88+ return ctrl.Result {}, errors . Wrap ( err , "Failed to get Metal3Cluster" )
8789 }
8890
8991 // This is checking if default values are changed or not if the default
@@ -121,6 +123,7 @@ func (r *Metal3ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Reques
121123 // Fetch the Cluster.
122124 cluster , err := util .GetOwnerCluster (ctx , r .Client , metal3Cluster .ObjectMeta )
123125 if err != nil {
126+ clusterLog .Error (err , "Unable to get owner cluster" )
124127 invalidConfigError := capierrors .InvalidConfigurationClusterError
125128 metal3Cluster .Status .FailureReason = & invalidConfigError
126129 metal3Cluster .Status .FailureMessage = ptr .To ("Unable to get owner cluster" )
@@ -134,6 +137,7 @@ func (r *Metal3ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Reques
134137 }
135138 if cluster == nil {
136139 clusterLog .Info ("Waiting for Cluster Controller to set OwnerRef on Metal3Cluster" )
140+ logLogicGate (clusterLog , "Owner cluster not yet set, requeueing" )
137141 return ctrl.Result {}, nil
138142 }
139143
@@ -142,6 +146,10 @@ func (r *Metal3ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Reques
142146 // Return early if Metal3Cluster or Cluster is paused.
143147 var isPaused , requeue bool
144148 if isPaused , requeue , err = paused .EnsurePausedCondition (ctx , r .Client , cluster , metal3Cluster ); err != nil || isPaused || requeue {
149+ if err != nil {
150+ clusterLog .Error (err , "Failed to evaluate paused condition" )
151+ }
152+ logLogicGate (clusterLog , "Pause condition active" , "isPaused" , isPaused , "requeue" , requeue )
145153 return ctrl.Result {Requeue : requeue , RequeueAfter : requeueAfter }, nil
146154 }
147155
@@ -158,13 +166,14 @@ func (r *Metal3ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Reques
158166
159167 // Handle deleted clusters
160168 if ! metal3Cluster .DeletionTimestamp .IsZero () {
169+ logLogicGate (clusterLog , "Metal3Cluster has deletion timestamp, entering delete reconciliation" )
161170 v1beta2conditions .Set (metal3Cluster , metav1.Condition {
162171 Type : infrav1 .Metal3ClusterReadyV1Beta2Condition ,
163172 Status : metav1 .ConditionFalse ,
164173 Reason : infrav1 .Metal3ClusterDeletingV1Beta2Reason ,
165174 })
166175 var res ctrl.Result
167- res , err = reconcileDelete (ctx , clusterMgr )
176+ res , err = reconcileDelete (ctx , clusterMgr , clusterLog )
168177 // Requeue if the reconcile failed because the ClusterCache was locked for
169178 // the current cluster because of concurrent access.
170179 if errors .Is (err , clustercache .ErrClusterNotConnected ) {
@@ -175,7 +184,8 @@ func (r *Metal3ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Reques
175184 }
176185
177186 // Handle non-deleted clusters
178- res , err := reconcileNormal (ctx , clusterMgr )
187+ logLogicGate (clusterLog , "Metal3Cluster is active, entering normal reconciliation" )
188+ res , err := reconcileNormal (ctx , clusterMgr , clusterLog )
179189 // Requeue if the reconcile failed because the ClusterCache was locked for
180190 // the current cluster because of concurrent access.
181191 if errors .Is (err , clustercache .ErrClusterNotConnected ) {
@@ -228,42 +238,52 @@ func patchMetal3Cluster(ctx context.Context, patchHelper *v1beta1patch.Helper, m
228238 return patchHelper .Patch (ctx , metal3Cluster , options ... )
229239}
230240
231- func reconcileNormal (ctx context.Context , clusterMgr baremetal.ClusterManagerInterface ) (ctrl.Result , error ) { //nolint:unparam
241+ func reconcileNormal (ctx context.Context , clusterMgr baremetal.ClusterManagerInterface , logger logr. Logger ) (ctrl.Result , error ) { //nolint:unparam
232242 // If the Metal3Cluster doesn't have finalizer, add it.
243+ logLogicGate (logger , "Ensuring finalizer exists on Metal3Cluster" )
233244 clusterMgr .SetFinalizer ()
234245
235246 // Create the Metal3 cluster (no-op)
247+ logLogicGate (logger , "Invoking cluster creation/update flow" )
236248 if err := clusterMgr .Create (ctx ); err != nil {
237- return ctrl.Result {}, err
249+ return ctrl.Result {}, errors . Wrap ( err , "Failed during Metal3Cluster create" )
238250 }
239251
240252 // Set APIEndpoints so the Cluster API Cluster Controller can pull it
241253 if err := clusterMgr .UpdateClusterStatus (); err != nil {
242254 return ctrl.Result {}, errors .Wrap (err , "failed to get ip for the API endpoint" )
243255 }
256+ logLogicGate (logger , "Successfully reconciled Metal3Cluster status" )
244257
245258 return ctrl.Result {}, nil
246259}
247260
248261func reconcileDelete (ctx context.Context ,
249- clusterMgr baremetal.ClusterManagerInterface ) (ctrl.Result , error ) {
262+ clusterMgr baremetal.ClusterManagerInterface ,
263+ logger logr.Logger ,
264+ ) (ctrl.Result , error ) {
250265 // Verify that no metal3machine depend on the metal3cluster
266+ logLogicGate (logger , "Checking for descendant resources before delete" )
251267 descendants , err := clusterMgr .CountDescendants (ctx )
252268 if err != nil {
253- return ctrl.Result {}, err
269+ return ctrl.Result {}, errors . Wrap ( err , "Failed to count descendants" )
254270 }
255271 if descendants > 0 {
256272 // Requeue so we can check the next time to see if there are still any
257273 // descendants left.
274+ logLogicGate (logger , "Descendants still present, will requeue delete" , "descendantCount" , descendants )
258275 return ctrl.Result {Requeue : true , RequeueAfter : requeueAfter }, nil
259276 }
260277
278+ logLogicGate (logger , "No descendants found, deleting Metal3Cluster resources" )
261279 if err := clusterMgr .Delete (); err != nil {
262280 return ctrl.Result {}, errors .Wrap (err , "failed to delete Metal3Cluster" )
263281 }
264282
265283 // Cluster is deleted so remove the finalizer.
284+ logLogicGate (logger , "Removing Metal3Cluster finalizer" )
266285 clusterMgr .UnsetFinalizer ()
286+ logLogicGate (logger , "Delete reconciliation completed" )
267287
268288 return ctrl.Result {}, nil
269289}
0 commit comments